diff --git a/.env.example b/.env.example
index 604b401fe..21b1ef0ec 100644
--- a/.env.example
+++ b/.env.example
@@ -23,22 +23,28 @@ REDIS_HOST=127.0.0.1
 REDIS_PASSWORD=null
 REDIS_PORT=6379
 
-MAIL_DRIVER=smtp
-MAIL_HOST=smtp.mailtrap.io
+MAIL_MAILER=log
+MAIL_SCHEME=null
+MAIL_HOST=127.0.0.1
 MAIL_PORT=2525
 MAIL_USERNAME=null
 MAIL_PASSWORD=null
-MAIL_ENCRYPTION=null
+MAIL_FROM_ADDRESS="hello@example.com"
+MAIL_FROM_NAME="${APP_NAME}"
 
 AWS_ACCESS_KEY_ID=
 AWS_SECRET_ACCESS_KEY=
 AWS_DEFAULT_REGION=us-east-1
 AWS_BUCKET=
+AWS_USE_PATH_STYLE_ENDPOINT=false
 
-PUSHER_APP_ID=
-PUSHER_APP_KEY=
-PUSHER_APP_SECRET=
-PUSHER_APP_CLUSTER=mt1
+VITE_APP_NAME="${APP_NAME}"
 
-MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
-MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
+TORCHLIGHT_TOKEN=
+
+GITHUB_CLIENT_ID=
+GITHUB_CLIENT_SECRET=
+
+SEARCH_DRIVER=local
+MEILISEARCH_HOST=
+MEILISEARCH_KEY=
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 8bd408e5d..4a16edd4e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,6 @@
 /node_modules
 /public/hot
 /public/storage
-/public/css
 /public/vendor/statamic
 /public/js
 /storage/*.key
@@ -20,6 +19,5 @@ npm-debug.log
 yarn-error.log
 
 # When in dev...
-/public/img/.meta
-/public/img/fieldtypes/.meta
+/public/**/.meta
 .antlers.json
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 000000000..59ea99ee6
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+16.20
diff --git a/.styleci.yml b/.styleci.yml
deleted file mode 100644
index 1db61d96e..000000000
--- a/.styleci.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-php:
-  preset: laravel
-  disabled:
-    - unused_use
-  finder:
-    not-name:
-      - index.php
-      - server.php
-js:
-  finder:
-    not-name:
-      - webpack.mix.js
-css: true
diff --git a/README.md b/README.md
index 555edcc43..37ea9aea6 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
 <p align="center"><img src="https://statamic.com/assets/branding/Statamic-Logo+Wordmark-Rad.svg" width="400" alt="Statamic Logo" /></p>
 
-## Statamic 3 Documentation
+## Statamic Documentation
 
-This is the source of the official [Statamic 3 docs][docs].
+This is the source of the official [Statamic docs][docs].
 
 
 ## Local Development
@@ -43,10 +43,10 @@ In order to ensure that the Statamic community is welcoming to all and generally
 ## Important Links
 
 - [Statamic Main Site](https://statamic.com)
-- [Statamic 3 Documentation][docs]
-- [Statamic 3 CMS Repo][cms-repo] (that we maintain)
-- [Statamic 3 Application Repo][app-repo] (that you clone)
-- [Statamic 3 Migrator](https://github.com/statamic/migrator)
+- [Statamic Documentation][docs]
+- [Statamic CMS Repo][cms-repo] (that we maintain)
+- [Statamic Application Repo][app-repo] (that you clone)
+- [Statamic Migrator](https://github.com/statamic/migrator)
 - [Statamic Discord][discord]
 
 [docs]: https://statamic.dev/
diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php
index 12fdf8b5e..4f7aed47d 100644
--- a/app/Http/Middleware/TrustProxies.php
+++ b/app/Http/Middleware/TrustProxies.php
@@ -3,7 +3,7 @@
 namespace App\Http\Middleware;
 
 use Illuminate\Http\Request;
-use Fideloper\Proxy\TrustProxies as Middleware;
+use Illuminate\Http\Middleware\TrustProxies as Middleware;
 
 class TrustProxies extends Middleware
 {
@@ -19,5 +19,10 @@ class TrustProxies extends Middleware
      *
      * @var int
      */
-    protected $headers = Request::HEADER_X_FORWARDED_ALL;
+    protected $headers =
+        Request::HEADER_X_FORWARDED_FOR |
+        Request::HEADER_X_FORWARDED_HOST |
+        Request::HEADER_X_FORWARDED_PORT |
+        Request::HEADER_X_FORWARDED_PROTO |
+        Request::HEADER_X_FORWARDED_AWS_ELB;
 }
diff --git a/app/Http/View/Composers/SideNavComposer.php b/app/Http/View/Composers/SideNavComposer.php
deleted file mode 100644
index ee0832db6..000000000
--- a/app/Http/View/Composers/SideNavComposer.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-namespace App\Http\View\Composers;
-
-class SideNavComposer
-{
-    public function compose($view)
-    {
-        $view->with('pages', [
-            [
-                'title' => 'Documentation',
-                'icon' => 'book',
-                'url' => '/',
-                'active' => empty(request()->segments())
-                    || ! in_array(request()->segment(1), ['screencasts', 'knowledge-base', 'cookbook', 'extending']),
-            ],
-            [
-                'title' => 'Screencasts',
-                'icon' => 'tv',
-                'url' => '/screencasts',
-                'active' => request()->segment(1) === 'screencasts',
-            ],
-            [
-                'title' => 'Knowledge Base',
-                'icon' => 'help-desk',
-                'url' => '/knowledge-base',
-                'active' => request()->segment(1) === 'knowledge-base',
-            ],
-            // [
-            //     'title' => 'Cookbook',
-            //     'icon' => 'cookbook',
-            //     'url' => '/cookbook',
-            //     'active' => request()->segment(1) === 'cookbook',
-            // ],
-            [
-                'title' => 'Extending Statamic',
-                'icon' => 'tetris',
-                'url' => '/extending',
-                'active' => request()->segment(1) === 'extending',
-            ],
-        ]);
-    }
-}
diff --git a/app/Markdown/Hint/Hint.php b/app/Markdown/Hint/Hint.php
index 9bddf898b..1c622fe0b 100644
--- a/app/Markdown/Hint/Hint.php
+++ b/app/Markdown/Hint/Hint.php
@@ -2,58 +2,73 @@
 
 namespace App\Markdown\Hint;
 
-use League\CommonMark\Block\Element\AbstractBlock;
-use League\CommonMark\Cursor;
+use League\CommonMark\Node\Block\AbstractBlock;
+use League\CommonMark\Node\StringContainerInterface;
 
-class Hint extends AbstractBlock
+class Hint extends AbstractBlock implements StringContainerInterface
 {
-    protected $type;
-    protected $title;
+    private ?string $header = 'Hot Tip!';
 
-    public function __construct($type, $title)
-    {
-        $this->type = $type;
-        $this->title = $title;
-    }
+    protected string $literal;
 
-    public function canContain(AbstractBlock $block): bool
+    public function getTitle(): ?string
     {
-        return true;
-    }
+        $words = $this->getHeaderWords();
 
-    public function isCode(): bool
-    {
-        return false;
-    }
+        if (count($words) > 1) {
 
-    public function matchesNextLine(Cursor $cursor): bool
-    {
-        if ($cursor->match('/^:::$/')) {
-            return false;
+            array_shift($words);
+
+            return implode(' ', $words);
         }
 
-        return true;
-    }
+        if ($words[0] === 'tip') {
+            return 'Hot Tip!';
+        }
 
-    public function getTitle(): ?string
-    {
-        if ($this->title) {
-            return $this->title;
+        if ($words[0] === 'hint') {
+            return 'Hinty Hint!';
         }
 
-        if ($this->type === 'warning') {
+        if ($words[0] === 'warning') {
             return 'Warning!';
         }
 
-        if ($this->type === 'best-practice') {
+        if ($words[0] === 'best-practice') {
             return 'Best Practice';
         }
 
-        return 'Hot Tip!';
+        return null;
     }
 
     public function getType(): ?string
     {
-        return $this->type;
+        $words = $this->getHeaderWords();
+
+        if (count($words) > 0) {
+            return $words[0];
+        }
+
+        return null;
+    }
+
+    public function getHeaderWords(): array
+    {
+        return \preg_split('/\s+/', $this->header ?? '') ?: [];
+    }
+
+    public function setHeader($header)
+    {
+        $this->header = $header;
+    }
+
+    public function setLiteral(string $literal): void
+    {
+        $this->literal = $literal;
+    }
+
+    public function getLiteral(): string
+    {
+        return $this->literal;
     }
 }
diff --git a/app/Markdown/Hint/HintExtension.php b/app/Markdown/Hint/HintExtension.php
index 3f6699155..6fddaf315 100644
--- a/app/Markdown/Hint/HintExtension.php
+++ b/app/Markdown/Hint/HintExtension.php
@@ -2,14 +2,14 @@
 
 namespace App\Markdown\Hint;
 
-use League\CommonMark\ConfigurableEnvironmentInterface;
+use League\CommonMark\Environment\EnvironmentBuilderInterface;
 use League\CommonMark\Extension\ExtensionInterface;
 
 class HintExtension implements ExtensionInterface
 {
-    public function register(ConfigurableEnvironmentInterface $environment): void
+    public function register(EnvironmentBuilderInterface $environment): void
     {
-        $environment->addBlockParser(new HintParser());
-        $environment->addBlockRenderer(Hint::class, new HintRenderer());
+        $environment->addBlockStartParser(new HintStartParser());
+        $environment->addRenderer(Hint::class, new HintRenderer());
     }
 }
diff --git a/app/Markdown/Hint/HintParser.php b/app/Markdown/Hint/HintParser.php
index 4f99cc2a6..458dc22c1 100644
--- a/app/Markdown/Hint/HintParser.php
+++ b/app/Markdown/Hint/HintParser.php
@@ -2,28 +2,48 @@
 
 namespace App\Markdown\Hint;
 
-use League\CommonMark\Block\Parser\BlockParserInterface;
-use League\CommonMark\ContextInterface;
-use League\CommonMark\Cursor;
+use League\CommonMark\Node\Block\AbstractBlock;
+use League\CommonMark\Parser\Block\AbstractBlockContinueParser;
+use League\CommonMark\Parser\Block\BlockContinue;
+use League\CommonMark\Parser\Block\BlockContinueParserInterface;
+use League\CommonMark\Parser\Cursor;
 
-class HintParser implements BlockParserInterface
+class HintParser extends AbstractBlockContinueParser implements BlockContinueParserInterface
 {
-    public function parse(ContextInterface $context, Cursor $cursor): bool
+    private Hint $block;
+
+    public function __construct(?string $headerText)
     {
-        if ($cursor->isIndented()) {
-            return false;
-        }
+        $this->block = new Hint();
+        $this->block->setHeader($headerText);
+    }
 
-        $fence = $cursor->match('/^(:::)(?:.+)$/');
+    public function getBlock(): Hint
+    {
+        return $this->block;
+    }
 
-        if ($fence === null) {
-            return false;
-        }
+    public function isContainer(): bool
+    {
+        return true;
+    }
 
-        [$type, $heading] = array_pad(explode(' ', substr($fence, 3), 2), 2, '');
+    public function canContain(AbstractBlock $childBlock): bool
+    {
+        return true;
+    }
 
-        $context->addBlock(new Hint($type, $heading));
+    public function canHaveLazyContinuationLines(): bool
+    {
+        return false;
+    }
 
-        return true;
+    public function tryContinue(Cursor $cursor, BlockContinueParserInterface $activeBlockParser): ?BlockContinue
+    {
+        if ($cursor->getLine() === ':::') {
+            return BlockContinue::finished();
+        }
+
+        return BlockContinue::at($cursor);
     }
 }
diff --git a/app/Markdown/Hint/HintRenderer.php b/app/Markdown/Hint/HintRenderer.php
index 67a47d39e..a983b4d11 100644
--- a/app/Markdown/Hint/HintRenderer.php
+++ b/app/Markdown/Hint/HintRenderer.php
@@ -2,35 +2,36 @@
 
 namespace App\Markdown\Hint;
 
-use League\CommonMark\Block\Element\AbstractBlock;
-use League\CommonMark\Block\Renderer\BlockRendererInterface;
-use League\CommonMark\ElementRendererInterface;
-use League\CommonMark\HtmlElement;
+use League\CommonMark\Node\Node;
+use League\CommonMark\Renderer\ChildNodeRendererInterface;
+use League\CommonMark\Renderer\NodeRendererInterface;
+use League\CommonMark\Util\HtmlElement;
 
-final class HintRenderer implements BlockRendererInterface
+final class HintRenderer implements NodeRendererInterface
 {
-    public function render(AbstractBlock $node, ElementRendererInterface $childRenderer, bool $inTightList = false)
+    /**
+     * @param  Hint  $node
+     *
+     * {@inheritDoc}
+     *
+     * @psalm-suppress MoreSpecificImplementedParamType
+     */
+    public function render(Node $node, ChildNodeRendererInterface $childRenderer): \Stringable
     {
-        if (!($node instanceof Hint)) {
-            throw new \InvalidArgumentException('Incompatible block type: ' . \get_class($node));
-        }
+        Hint::assertInstanceOf($node);
 
-        $attrs = $node->getData('attributes');
-        isset($attrs['class']) ? $attrs['class'] .= ' hint' : $attrs['class'] = 'hint';
+        $attrs = $node->data->get('attributes');
+        isset($attrs['class']) ? $attrs['class'] .= ' hint' : $attrs['class'] = 'c-tip';
 
         if ($type = $node->getType()) {
-            $attrs['class'] = isset($attrs['class']) ? $attrs['class'] . ' ' : '';
-            $attrs['class'] .= $type;
+            $attrs['class'] = isset($attrs['class']) ? $attrs['class'].' ' : '';
+            $attrs['class'] .= $type.' c-tip--'.$type;
         }
 
         if ($type === 'watch') {
             return $this->renderWatch($node, $childRenderer, $attrs);
         }
 
-        if ($type === 'callout') {
-            return $this->renderCallout($node, $childRenderer, $attrs);
-        }
-
         $title = $node->getTitle();
         $title = $title
             ? new HtmlElement(
@@ -40,57 +41,37 @@ public function render(AbstractBlock $node, ElementRendererInterface $childRende
             )
             : '';
 
-        $content = new HtmlElement(
-            'div',
-            ['class' => 'hint-content'],
-            $childRenderer->renderBlocks($node->children())
-        );
+        $content = $childRenderer->renderNodes($node->children());
+        
+        // Add mascot image for tips and best practices
+        $mascot = in_array($type, ['tip', 'hint', 'best-practice', 'warning'])
+            ? '<img src="/img/tip-troll.webp" class="c-tip__mascot" alt="A troll pointing a teaching stick" width="242" height="293" />' 
+            : '';
 
         return new HtmlElement(
             'div',
             $attrs,
-            "\n" .
-            $title . "\n" .
-            $content .
+            "\n".
+            $title."\n".
+            $content.
+            $mascot.
             "\n"
         );
     }
 
-    private function renderCallout(Hint $node, ElementRendererInterface $childRenderer, array $attrs)
-    {
-        $content = new HtmlElement(
-            'div',
-            ['class' => 'hint-content'],
-            $childRenderer->renderBlocks($node->children())
-        );
-
-        return new HtmlElement(
-            'div',
-            $attrs,
-            '<a href="'.$node->getTitle().'">' .
-            $childRenderer->renderBlocks($node->children()).
-            '</a>'
-        );
-    }
-
-    private function renderWatch(Hint $node, ElementRendererInterface $childRenderer, array $attrs)
+    private function renderWatch(Hint $node, ChildNodeRendererInterface $childRenderer, array $attrs)
     {
-        // Grab the first paragraph. There should only be one anyway.
-        $content = $node->children()[0];
-
-        $caption = new HtmlElement(
-            'p',
-            ['class' => 'caption'],
-            $childRenderer->renderInlines($content->children())
-        );
+        // Strip all HTML tags except for essential formatting elements (links, code, bold, italic)
+        // This ensures the caption is rendered as plain text without unwanted p tags or other wrappers
+        $caption = strip_tags($childRenderer->renderNodes($node->children()), '<a><code><strong><em>');
 
         return new HtmlElement(
             'div',
             $attrs,
-            '<div class="embed">'.
+            '<figure class="c-video">'.
                 '<iframe src="'.$node->getTitle().'"></iframe>'.
-            '</div>'.
-            $caption
+                '<figcaption>'.$caption.'</figcaption>'.
+            '</figure>'
         );
     }
 }
diff --git a/app/Markdown/Hint/HintStartParser.php b/app/Markdown/Hint/HintStartParser.php
new file mode 100644
index 000000000..5dc7e47e9
--- /dev/null
+++ b/app/Markdown/Hint/HintStartParser.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Markdown\Hint;
+
+use League\CommonMark\Parser\Block\BlockStart;
+use League\CommonMark\Parser\Block\BlockStartParserInterface;
+use League\CommonMark\Parser\Cursor;
+use League\CommonMark\Parser\MarkdownParserStateInterface;
+
+class HintStartParser implements BlockStartParserInterface
+{
+    public function tryStart(Cursor $cursor, MarkdownParserStateInterface $parserState): ?BlockStart
+    {
+        if ($cursor->isIndented()) {
+            return BlockStart::none();
+        }
+
+        $fence = $cursor->match('/^(?:\:{3,}\s?(?!.*`))/');
+
+        if ($fence === null) {
+            return BlockStart::none();
+        }
+
+        $headerText = $cursor->getRemainder();
+
+        $cursor->advanceToEnd();
+
+        return BlockStart::of(new HintParser($headerText))->at($cursor);
+    }
+}
diff --git a/app/Markdown/Tabs/TabbedCodeBlock.php b/app/Markdown/Tabs/TabbedCodeBlock.php
new file mode 100644
index 000000000..bcd44f1c5
--- /dev/null
+++ b/app/Markdown/Tabs/TabbedCodeBlock.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Markdown\Tabs;
+
+use League\CommonMark\Node\Block\AbstractBlock;
+
+class TabbedCodeBlock extends AbstractBlock
+{
+    // You can store code snippets for each tab here
+    protected $codeSamples = [];
+
+    public function addCodeSample($language, $code)
+    {
+        $this->codeSamples[$language] = $code;
+    }
+
+    public function getCodeSamples()
+    {
+        return $this->codeSamples;
+    }
+}
diff --git a/app/Markdown/Tabs/TabbedCodeBlockExtension.php b/app/Markdown/Tabs/TabbedCodeBlockExtension.php
new file mode 100644
index 000000000..f1dbb384c
--- /dev/null
+++ b/app/Markdown/Tabs/TabbedCodeBlockExtension.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Markdown\Tabs;
+
+use League\CommonMark\Environment\EnvironmentBuilderInterface;
+use League\CommonMark\Extension\ExtensionInterface;
+
+class TabbedCodeBlockExtension implements ExtensionInterface
+{
+    public function register(EnvironmentBuilderInterface $environment): void
+    {
+        $environment->addBlockStartParser(new TabbedCodeStartParser());
+        $environment->addRenderer(TabbedCodeBlock::class, new TabsRenderer());
+    }
+}
diff --git a/app/Markdown/Tabs/TabbedCodeStartParser.php b/app/Markdown/Tabs/TabbedCodeStartParser.php
new file mode 100644
index 000000000..7ebd96f85
--- /dev/null
+++ b/app/Markdown/Tabs/TabbedCodeStartParser.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Markdown\Tabs;
+
+use League\CommonMark\Parser\Block\BlockStart;
+use League\CommonMark\Parser\Block\BlockStartParserInterface;
+use League\CommonMark\Parser\Cursor;
+use League\CommonMark\Parser\MarkdownParserStateInterface;
+
+class TabbedCodeStartParser implements BlockStartParserInterface
+{
+    public function tryStart(Cursor $cursor, MarkdownParserStateInterface $parserState): ?BlockStart
+    {
+        if ($cursor->isIndented()) {
+            return BlockStart::none();
+        }
+
+        $fence = $cursor->match('/^(?:\:{2,}tabs)/');
+
+        if ($fence === null) {
+            return BlockStart::none();
+        }
+
+        $headerText = $cursor->getRemainder();
+
+        $cursor->advanceToEnd();
+
+        return BlockStart::of(new TabsParser())->at($cursor);
+    }
+}
diff --git a/app/Markdown/Tabs/TabsParser.php b/app/Markdown/Tabs/TabsParser.php
new file mode 100644
index 000000000..7c5cd5388
--- /dev/null
+++ b/app/Markdown/Tabs/TabsParser.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace App\Markdown\Tabs;
+
+use League\CommonMark\Node\Block\AbstractBlock;
+use League\CommonMark\Parser\Block\AbstractBlockContinueParser;
+use League\CommonMark\Parser\Block\BlockContinue;
+use League\CommonMark\Parser\Block\BlockContinueParserInterface;
+use League\CommonMark\Parser\Cursor;
+
+class TabsParser extends AbstractBlockContinueParser implements BlockContinueParserInterface
+{
+    protected TabbedCodeBlock $tabs;
+
+    public function __construct()
+    {
+        $this->tabs = new TabbedCodeBlock();
+    }
+
+    public function isContainer(): bool
+    {
+        return true;
+    }
+
+    public function canContain(AbstractBlock $childBlock): bool
+    {
+        return true;
+    }
+
+    public function getBlock(): AbstractBlock
+    {
+        return $this->tabs;
+    }
+
+    public function tryContinue(Cursor $cursor, BlockContinueParserInterface $activeBlockParser): ?BlockContinue
+    {
+        if ($cursor->getLine() === '::') {
+            return BlockContinue::finished();
+        }
+
+        return BlockContinue::at($cursor);
+    }
+}
diff --git a/app/Markdown/Tabs/TabsRenderer.php b/app/Markdown/Tabs/TabsRenderer.php
new file mode 100644
index 000000000..b9fc53f40
--- /dev/null
+++ b/app/Markdown/Tabs/TabsRenderer.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace App\Markdown\Tabs;
+
+use Illuminate\Support\Str;
+use League\CommonMark\Extension\CommonMark\Node\Block\FencedCode;
+use League\CommonMark\Node\Block\Paragraph;
+use League\CommonMark\Node\Inline\Text;
+use League\CommonMark\Node\Node;
+use League\CommonMark\Renderer\ChildNodeRendererInterface;
+use League\CommonMark\Renderer\NodeRendererInterface;
+use League\CommonMark\Util\HtmlElement;
+
+class TabsRenderer implements NodeRendererInterface
+{
+    protected array $languageNames = [
+        'blade' => 'Blade',
+        'antlers' => 'Antlers',
+        'php' => 'PHP',
+    ];
+
+    public function render(Node $node, ChildNodeRendererInterface $childRenderer)
+    {
+        TabbedCodeBlock::assertInstanceOf($node);
+
+        $attrs = $node->data->get('attributes');
+
+        $attrs['class'] = 'c-doc-tabs';
+
+        $tabs = [];
+
+        $currentTab = [];
+        $tabNameSetManually = false;
+        $lastTabName = '';
+
+        foreach ($node->children() as $child) {
+
+            if ($child instanceof FencedCode && ! $tabNameSetManually) {
+                $lastTabName = mb_strtoupper($child->getInfo());
+            }
+
+            if ($child instanceof Paragraph && $child->firstChild() instanceof Text) {
+                /** @var Text $text */
+                $text = $child->firstChild();
+
+                if (Str::startsWith($text->getLiteral(), '::tab')) {
+                    $renderedContent = $childRenderer->renderNodes($currentTab);
+                    $currentTab = [];
+
+                    $extra = trim(mb_substr($text->getLiteral(), 5));
+
+                    $currentTabName = $lastTabName;
+
+                    if (mb_strlen($extra) > 0) {
+                        $lastTabName = $extra;
+                        $tabNameSetManually = true;
+                    } else {
+                        $tabNameSetManually = false;
+                    }
+
+                    if (mb_strlen(strip_tags($renderedContent)) == 0) {
+                        continue;
+                    }
+
+                    $tabs[$currentTabName] = $renderedContent;
+
+                    continue;
+                }
+            }
+
+            $currentTab[] = $child;
+        }
+
+        if (count($currentTab)) {
+            $tabs[$lastTabName] = $childRenderer->renderNodes($currentTab);
+            $currentTab = [];
+        }
+
+        $sampleNames = [];
+
+        foreach ($tabs as $language => $sample) {
+            if (array_key_exists($language, $this->languageNames)) {
+                $sampleNames[$language] = $this->languageNames[$language];
+
+                continue;
+            }
+
+            $sampleNames[$language] = mb_strtoupper($language);
+        }
+
+        return new HtmlElement(
+            'div',
+            $attrs,
+            view('tabs', ['tabs' => $sampleNames, 'samples' => $tabs, 'active' => array_keys($tabs)[0]])->render()
+        );
+    }
+}
diff --git a/app/Modifiers/Toc.php b/app/Modifiers/Toc.php
index ee1818c3c..5c1998f88 100644
--- a/app/Modifiers/Toc.php
+++ b/app/Modifiers/Toc.php
@@ -2,7 +2,9 @@
 
 namespace App\Modifiers;
 
+use Illuminate\Support\Arr;
 use Statamic\Modifiers\Modifier;
+use Statamic\Statamic;
 
 class Toc extends Modifier
 {
@@ -11,18 +13,19 @@ class Toc extends Modifier
     /**
      * Modify a value
      *
-     * @param mixed  $value    The value to be modified
-     * @param array  $params   Any parameters used in the modifier
-     * @param array  $context  Contextual values
+     * @param  mixed  $value  The value to be modified
+     * @param  array  $params  Any parameters used in the modifier
+     * @param  array  $context  Contextual values
      * @return mixed
      */
     public function index($value, $params, $context)
     {
         $this->context = $context;
 
-        $creatingIds = array_get($params, 0) == 'ids';
+        $creatingIds = Arr::get($params, 0) == 'ids';
 
-        list($toc, $content) = $this->create($value, $creatingIds ? 5 : 3);
+        // Here maxHeadingLevels is set to either 5 (when creating IDs) or 3 (for TOC)
+        [$toc, $content] = $this->create($value, $creatingIds ? 5 : 3);
 
         return $creatingIds ? $content : $toc;
     }
@@ -30,38 +33,48 @@ public function index($value, $params, $context)
     // Good golly this thing is ugly.
     private function create($content, $maxHeadingLevels)
     {
-        preg_match_all('/<h([1-'.$maxHeadingLevels.'])([^>]*)>(.*)<\/h[1-'.$maxHeadingLevels.']>/i', $content, $matches, PREG_SET_ORDER);
+        // First try with h2-hN headings
+        preg_match_all('/<h([2-'.$maxHeadingLevels.'])([^>]*)>(.*)<\/h[2-'.$maxHeadingLevels.']>/i', $content, $matches, PREG_SET_ORDER);
+
+        // If we don't have enough entries, include h1 headings as well
+        if (count($matches) < 3) {
+            preg_match_all('/<h([1-'.$maxHeadingLevels.'])([^>]*)>(.*)<\/h[1-'.$maxHeadingLevels.']>/i', $content, $matches, PREG_SET_ORDER);
+        }
 
         if (! $matches) {
             return [null, $content];
         }
 
+        // Track unique anchor IDs across the document
         global $anchors;
+        $anchors = [];
 
-        $anchors = array();
-        $toc = '<ol class="toc">'."\n";
+        // Initialize TOC with an unordered list
+        $toc = '<ul class="o-scroll-spy-timeline__toc js__scroll-spy-toc">'."\n";
         $i = 0;
-
-        // Wangjangle params, vars, and options in there.
-        $matches = $this->appendDetails($matches);
+        $tiCounter = 1; // Add counter for --ti values
 
         foreach ($matches as $heading) {
+            // Track the starting heading level for proper list nesting
             if ($i == 0) {
-                $startlvl = $heading[1];
+                $startlvl = ($heading[1] == '1') ? '2' : $heading[1];
             }
 
-            $lvl = $heading[1];
+            // Normalize h1 to same level as h2
+            $lvl = ($heading[1] == '1') ? '2' : $heading[1];
 
+            // Check if heading already has an ID attribute
             $ret = preg_match('/id=[\'|"](.*)?[\'|"]/i', stripslashes($heading[2]), $anchor);
 
             if ($ret && $anchor[1] != '') {
                 $anchor = trim(stripslashes($anchor[1]));
                 $add_id = false;
             } else {
-                $anchor = preg_replace('/\s+/', '-', trim(preg_replace('/[^a-z\s]/', '', strtolower(strip_tags($heading[3])))));
+                // Generate an ID from the heading text
+                $anchor = $this->slugify($heading[3]);
                 $add_id = true;
             }
-
+            // Ensure anchor ID is unique by adding numeric suffixes if needed
             if (! in_array($anchor, $anchors)) {
                 $anchors[] = $anchor;
             } else {
@@ -74,10 +87,12 @@ private function create($content, $maxHeadingLevels)
                 $anchors[] = $anchor;
             }
 
+            // Add ID to the heading in content if it didn't have one
             if ($add_id) {
                 $content = substr_replace($content, '<h'.$lvl.' id="'.$anchor.'"'.$heading[2].'>'.$heading[3].'</h'.$lvl.'>', strpos($content, $heading[0]), strlen($heading[0]));
             }
 
+            // Extract title from title attribute or use heading text
             $ret = preg_match('/title=[\'|"](.*)?[\'|"]/i', stripslashes($heading[2]), $title);
 
             if ($ret && $title[1] != '') {
@@ -88,22 +103,28 @@ private function create($content, $maxHeadingLevels)
 
             $title = trim(strip_tags($title));
 
+            // Handle nested list structure based on heading levels
             if ($i > 0) {
                 if ($prevlvl < $lvl) {
-                    $toc .= "\n"."<ol>"."\n";
+                    // Start a new nested list wrapped in li, don't increment counter for parent li
+                    $toc .= "\n".'<li><ul>'."\n";
                 } elseif ($prevlvl > $lvl) {
+                    // Close current item and any nested lists
                     $toc .= '</li>'."\n";
                     while ($prevlvl > $lvl) {
-                        $toc .= "</ol>"."\n".'</li>'."\n";
+                        $toc .= '</ul></li>'."\n".'</li>'."\n";
                         $prevlvl--;
                     }
                 } else {
+                    // Close current item at same level
                     $toc .= '</li>'."\n";
                 }
             }
 
-            $j = 0;
-            $toc .= '<li><a href="#'.$anchor.'">'.$title.'</a>';
+            // Add TOC entry with --ti style (only for leaf nodes)
+            $toc .= '<li style="--ti: --'.$tiCounter.'"><a href="#'.$anchor.'">'.$title.'</a>';
+            $tiCounter++;
+
             $prevlvl = $lvl;
 
             $i++;
@@ -112,19 +133,19 @@ private function create($content, $maxHeadingLevels)
         unset($anchors);
 
         while ($lvl > $startlvl) {
-            $toc .= "\n</ol>";
+            $toc .= "\n</ul>";
             $lvl--;
         }
 
         $toc .= '</li>'."\n";
-        $toc .= '</ol>'."\n";
-
-        // A tiny TOC is a lame TOC
-        $toc = (count($matches) < 3) ? null : $toc;
+        $toc .= '</ul>'."\n";
 
         return [$toc, $content];
     }
 
+    /**
+     * Safely extracts value from Statamic Value objects
+     */
     private function valueGet($value)
     {
         if ($value instanceof \Statamic\Fields\Value) {
@@ -134,41 +155,14 @@ private function valueGet($value)
         return $value;
     }
 
-    private function appendDetails($matches)
+    private function slugify($text)
     {
-        $parameters = $this->valueGet($this->context['parameters'] ?? null);
-
-        if ($parameters && count($parameters) > 0) {
-            $matches[] = [
-                '<h2 id="parameters">Parameters</h2>',
-                '2',
-                ' id="parameters"',
-                'Parameters'
-            ];
-        }
-
-        $variables = $this->valueGet($this->context['variables'] ?? null);
-
-        if ($variables && count($variables) > 0) {
-            $matches[] = [
-                '<h2 id="variables">Variables</h2>',
-                '2',
-                ' id="variables"',
-                'Variables'
-            ];
-        }
-
-        $options = $this->valueGet($this->context['options'] ?? null);
-
-        if ($options && count($options) > 0) {
-            $matches[] = [
-                '<h2 id="options">Options</h2>',
-                '2',
-                ' id="options"',
-                'Options'
-            ];
-        }
-
-        return $matches;
+        $slugified = Statamic::modify($text)->replace('&amp;', '')->slugify()->stripTags();
+        // Remove 'code-code' from the slugified text e.g. Otherwise "the `@` ignore symbol" gets converted to `the-code-code-ignore-symbol`
+        $slugified = str_replace('code-code-', '', $slugified);
+        // Remove HTML entity remnants that might be left after processing
+        // Only remove these if they appear as standalone words or at word boundaries
+        $slugified = preg_replace('/\b(codelt|rt|gtcode)\b/', '', $slugified);
+        return $slugified;
     }
 }
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 4d9a9f20e..b0d1646b6 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -2,12 +2,15 @@
 
 namespace App\Providers;
 
+use App\Http\View\Composers\SideNavComposer;
 use App\Markdown\Hint\HintExtension;
+use App\Markdown\Tabs\TabbedCodeBlockExtension;
 use Illuminate\Support\Facades\View;
 use Illuminate\Support\ServiceProvider;
-use Statamic\Facades\Markdown;
-use Torchlight\Commonmark\TorchlightExtension;
 use League\CommonMark\Extension\Attributes\AttributesExtension;
+use League\CommonMark\Extension\DescriptionList\DescriptionListExtension;
+use Statamic\Facades\Markdown;
+use Torchlight\Commonmark\V2\TorchlightExtension;
 
 class AppServiceProvider extends ServiceProvider
 {
@@ -21,10 +24,10 @@ public function boot()
         // View::composer('partials.side-nav', SideNavComposer::class);
 
         Markdown::addExtensions(function () {
-            return [new HintExtension, new AttributesExtension];
+            return [new DescriptionListExtension, new HintExtension, new TabbedCodeBlockExtension, new AttributesExtension];
         });
 
-        if (config('torchlight.token')) {
+        if (config('torchlight.token') && ! app()->runningConsoleCommand('search:update')) {
             Markdown::addExtensions(function () {
                 return [new TorchlightExtension];
             });
@@ -32,10 +35,10 @@ public function boot()
     }
 
     /**
-    * Register any application services.
-    *
-    * @return void
-    */
+     * Register any application services.
+     *
+     * @return void
+     */
     public function register()
     {
         //
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index 6c64e52be..52e208bd5 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -2,10 +2,11 @@
 
 namespace App\Providers;
 
-use Illuminate\Support\Facades\Event;
+use App\Search\Listeners\SearchEntriesCreatedListener;
 use Illuminate\Auth\Events\Registered;
 use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
 use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
+use Stillat\DocumentationSearch\Events\SearchEntriesCreated;
 
 class EventServiceProvider extends ServiceProvider
 {
@@ -18,6 +19,9 @@ class EventServiceProvider extends ServiceProvider
         Registered::class => [
             SendEmailVerificationNotification::class,
         ],
+        SearchEntriesCreated::class => [
+            SearchEntriesCreatedListener::class,
+        ],
     ];
 
     /**
diff --git a/app/Search/DocTransformer.php b/app/Search/DocTransformer.php
new file mode 100644
index 000000000..d616add62
--- /dev/null
+++ b/app/Search/DocTransformer.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Search;
+
+use Illuminate\Support\Str;
+use Stillat\DocumentationSearch\Contracts\DocumentTransformer;
+use Stillat\DocumentationSearch\Document\DocumentFragment;
+
+class DocTransformer implements DocumentTransformer
+{
+    private function normalizeConent($value)
+    {
+        return str($value)
+            ->lower()
+            ->explode(' ')
+            ->map(fn ($word) => Str::singular($word))
+            ->join(' ');
+    }
+
+    public function handle(DocumentFragment $fragment, $entry): void
+    {
+        $fragment->additionalContextData[] = $this->normalizeConent($entry->title);
+
+        // Add some extra details to "additional_context"
+        if (Str::containsAll($fragment->content, ['clear', 'cache'])) {
+            $fragment->additionalContextData[] = 'delete cache';
+        }
+
+        if (Str::contains($fragment->content, 'JS Drivers')) {
+            $fragment->additionalContextData[] = 'javascript drivers';
+        }
+    }
+}
diff --git a/app/Search/Listeners/SearchEntriesCreatedListener.php b/app/Search/Listeners/SearchEntriesCreatedListener.php
new file mode 100644
index 000000000..c85e4c987
--- /dev/null
+++ b/app/Search/Listeners/SearchEntriesCreatedListener.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace App\Search\Listeners;
+
+use Illuminate\Support\Str;
+use Stillat\DocumentationSearch\Events\SearchEntriesCreated;
+
+class SearchEntriesCreatedListener
+{
+    protected array $escapeProperties = [
+        'description',
+        'intro',
+        'content',
+        'search_content',
+    ];
+
+    protected function getParentHeadings($headers, $target)
+    {
+        $hierarchy = [];
+        $levels = [];
+
+        $currentLevel = $target->level;
+
+        for ($i = array_search($target, $headers) - 1; $i >= 0; $i--) {
+            $header = $headers[$i];
+
+            if ($header->level < $currentLevel) {
+                $hierarchy[] = $header;
+                $currentLevel = $header->level;
+            }
+        }
+
+        foreach (array_reverse($hierarchy) as $level) {
+            $levels[$level->level] = $level->text;
+        }
+
+        return $levels;
+    }
+
+    /**
+     * Handle the event.
+     */
+    public function handle(SearchEntriesCreated $event): void
+    {
+        $collection = $event->entry->collection()->title;
+
+        $headers = [];
+
+        foreach ($event->sections as $section) {
+            if ($section->fragment->headerDetails == null) {
+                continue;
+            }
+
+            $headers[] = $section->fragment->headerDetails;
+        }
+
+        foreach ($event->sections as $section) {
+            $data = $section->searchEntry->data();
+            $category = $collection.' » '.$data['origin_title'];
+
+            $parentHeadings = null;
+
+            if (
+                $section->fragment->headerDetails != null &&
+                $section->fragment->headerDetails->level >= 3
+            ) {
+                $header = $section->fragment->headerDetails;
+
+                $parentHeadings = $this->getParentHeadings(
+                    $headers,
+                    $header
+                );
+                $parentHeadings[$header->level] = $header->text;
+            }
+
+            if ($parentHeadings === null) {
+                $parentHeadings = [];
+
+                if ($data['search_title'] != null && $data['origin_title'] != $data['search_title']) {
+                    $parentHeadings[1] = $data['search_title'];
+                }
+            }
+
+            if (count($parentHeadings) > 2) {
+                array_shift($parentHeadings);
+            }
+
+            $data['hierarchy_lvl0'] = $category;
+            $data['hierarchy_lvl1'] = implode(' » ', $parentHeadings);
+
+            if ($data['is_root']) {
+                $data['content'] = strip_tags($event->entry->intro ?? $event->entry->description ?? $data['search_content']);
+            } else {
+                $data['content'] = $data['search_content'] ?? '';
+            }
+
+            $data['url'] = $data['search_url'];
+
+            foreach ($this->escapeProperties as $property) {
+                if (! $data->has($property)) {
+                    continue;
+                }
+
+                $data[$property] = e($data[$property]);
+            }
+
+            // Clear this out to prevent "too much" from a specific page dominating the results.
+            if (! $data['is_root']) {
+                $data['origin_title'] = null;
+            }
+
+            $section->searchEntry->data($data);
+        }
+    }
+}
diff --git a/app/Search/RequestContentRetriever.php b/app/Search/RequestContentRetriever.php
new file mode 100644
index 000000000..198d5d568
--- /dev/null
+++ b/app/Search/RequestContentRetriever.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace App\Search;
+
+use DOMDocument;
+use Illuminate\Http\Request;
+use Statamic\Contracts\Entries\Entry;
+use Statamic\Facades\Cascade;
+use Stillat\DocumentationSearch\Contracts\ContentRetriever;
+
+class RequestContentRetriever implements ContentRetriever
+{
+    public function getContent(Entry $entry): string
+    {
+        $originalRequest = app('request');
+        $request = tap(Request::capture(), function ($request) {
+            app()->instance('request', $request);
+            Cascade::withRequest($request);
+        });
+
+        $content = '';
+
+        try {
+            $content = $entry->toResponse($request)->getContent();
+        } finally {
+            app()->instance('request', $originalRequest);
+        }
+
+        return $this->extractArticleContent($content);
+    }
+
+    protected function extractArticleContent(string $content): string
+    {
+        $dom = new DOMDocument;
+
+        libxml_use_internal_errors(true);
+        $dom->loadHTML($content);
+        libxml_clear_errors();
+
+        $articles = $dom->getElementsByTagName('article');
+
+        $result = '';
+
+        foreach ($articles as $article) {
+            $result .= $dom->saveHTML($article);
+        }
+
+        return $result;
+    }
+}
diff --git a/app/Tags/HeroSponsors.php b/app/Tags/HeroSponsors.php
index 09c6cd26c..23b7046fd 100644
--- a/app/Tags/HeroSponsors.php
+++ b/app/Tags/HeroSponsors.php
@@ -15,9 +15,10 @@ public function index()
     {
         return Cache::remember('hero-sponsors', now()->addHour(), function () {
             try {
-                return $this->sponsors()->collect()->where('price', '>=', 100);
+                return $this->sponsors()->collect()->where('price', '>=', 25);
             } catch (\Exception $e) {
                 Log::error($e);
+
                 return collect(['error' => true]);
             }
         });
@@ -51,7 +52,7 @@ private function request($cursor)
             ->withUserAgent('statamic/docs')
             ->post('/graphql', [
                 'query' => $this->query(),
-                'variables' => ['cursor' => $cursor]
+                'variables' => ['cursor' => $cursor],
             ])
             ->json();
     }
diff --git a/app/ViewModels/Fieldtypes.php b/app/ViewModels/Fieldtypes.php
index 5ea856408..bd9ac7cc0 100644
--- a/app/ViewModels/Fieldtypes.php
+++ b/app/ViewModels/Fieldtypes.php
@@ -8,6 +8,6 @@ class Fieldtypes extends ViewModel
 {
     public function data(): array
     {
-        return ['title' => ucwords($this->cascade->get('title')) . ' Fieldtype'];
+        return ['title' => ucwords($this->cascade->get('title')).' Fieldtype'];
     }
 }
diff --git a/app/ViewModels/Tags.php b/app/ViewModels/Tags.php
new file mode 100644
index 000000000..6b330c27b
--- /dev/null
+++ b/app/ViewModels/Tags.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace App\ViewModels;
+
+use Statamic\View\ViewModel;
+
+class Tags extends ViewModel
+{
+    public function data(): array
+    {
+        return ['title' => ucwords($this->cascade->get('slug')).' Tag'];
+    }
+}
diff --git a/app/ViewModels/Variables.php b/app/ViewModels/Variables.php
index bf6c23c42..79622868b 100644
--- a/app/ViewModels/Variables.php
+++ b/app/ViewModels/Variables.php
@@ -8,6 +8,6 @@ class Variables extends ViewModel
 {
     public function data(): array
     {
-        return ['title' =>  ucwords($this->cascade->get('slug')) . ' Variable'];
+        return ['title' => strtolower($this->cascade->get('slug'))];
     }
 }
diff --git a/composer.json b/composer.json
index 3861cd422..bb888c4e3 100644
--- a/composer.json
+++ b/composer.json
@@ -8,22 +8,26 @@
     ],
     "license": "MIT",
     "require": {
-        "php": "^7.3 || ^8.0",
-        "fideloper/proxy": "^4.0",
-        "laravel/framework": "^8.0",
+        "php": "^7.4 || ^8.0",
+        "laravel/framework": "^10.0",
         "laravel/tinker": "^2.0",
-        "statamic/cms": "3.2.*",
-        "statamic/ssg": "^0.8.0",
-        "torchlight/torchlight-commonmark": "^0.5.1"
+        "league/commonmark": "^2.0",
+        "statamic-rad-pack/meilisearch": "^3.4",
+        "livewire/livewire": "^3.6.4",
+        "statamic/cms": "^5.0",
+        "statamic/ssg": "^3.0",
+        "torchlight/torchlight-commonmark": "^0.5.5",
+        "stillat/documentation-search": "^1.2.1"
     },
     "require-dev": {
         "beyondcode/laravel-dump-server": "^1.7",
-        "facade/ignition": "^2.3.6",
-        "filp/whoops": "^2.0",
         "fakerphp/faker": "^1.4",
+        "filp/whoops": "^2.0",
         "mockery/mockery": "^1.0",
-        "nunomaduro/collision": "^5.0",
-        "phpunit/phpunit": "^9.0"
+        "nunomaduro/collision": "^6.1",
+        "phpunit/phpunit": "^9.0",
+        "spatie/laravel-ignition": "^2.0",
+        "spatie/laravel-ray": "^1.37"
     },
     "config": {
         "optimize-autoloader": true,
@@ -31,7 +35,8 @@
         "sort-packages": true,
         "allow-plugins": {
             "composer/package-versions-deprecated": true,
-            "pixelfear/composer-dist-plugin": true
+            "pixelfear/composer-dist-plugin": true,
+            "php-http/discovery": true
         }
     },
     "extra": {
@@ -53,7 +58,6 @@
             "Tests\\": "tests/"
         }
     },
-    "minimum-stability": "dev",
     "prefer-stable": true,
     "scripts": {
         "pre-update-cmd": [
@@ -62,9 +66,7 @@
         "post-autoload-dump": [
             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
             "@php artisan package:discover --ansi",
-            "@php artisan statamic:install --ansi",
-            "@php artisan statamic:search:update --all --ansi",
-            "@php artisan statamic:static:clear --ansi"
+            "@php artisan statamic:install --ansi"
         ],
         "post-root-package-install": [
             "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
diff --git a/composer.lock b/composer.lock
index 67a6f5ae6..b33f08117 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,42 +4,39 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "8c32cf27e0b12b7f86b180c76984f3ef",
+    "content-hash": "2978be67e8b5a8012e7e5d0984db0d27",
     "packages": [
         {
             "name": "ajthinking/archetype",
-            "version": "v0.2.8",
+            "version": "v2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ajthinking/archetype.git",
-                "reference": "492838aea8ae70ce079b04d1285faf43a6f11c41"
+                "reference": "d2c5cd0f072ebde50dfa8a47a5a672023f561bdb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ajthinking/archetype/zipball/492838aea8ae70ce079b04d1285faf43a6f11c41",
-                "reference": "492838aea8ae70ce079b04d1285faf43a6f11c41",
+                "url": "https://api.github.com/repos/ajthinking/archetype/zipball/d2c5cd0f072ebde50dfa8a47a5a672023f561bdb",
+                "reference": "d2c5cd0f072ebde50dfa8a47a5a672023f561bdb",
                 "shasum": ""
             },
             "require": {
-                "doctrine/dbal": "^2.9 || ^2.10 || ^3.0",
-                "nikic/php-parser": "^4.11"
+                "nikic/php-parser": "^5.0"
             },
             "require-dev": {
-                "laravel/laravel": "^6.0 || ^7.0 || ^8.0",
+                "laravel/laravel": "^6.0 || ^7.0 || ^8.0 || ^9.0",
                 "orchestra/testbench": "^4.0 || ^5.0 || ^6.0",
+                "pestphp/pest": "^1.21",
+                "phpstan/phpstan": "^1.6",
                 "phpunit/phpunit": "^8.0 || ^9.5"
             },
             "type": "package",
             "extra": {
                 "laravel": {
-                    "aliases": {
-                        "LaravelFile": "Archetype\\Facades\\LaravelFile",
-                        "PHPFile": "Archetype\\Facades\\PHPFile"
-                    },
-                    "dont-discover": [],
                     "providers": [
                         "Archetype\\ServiceProvider"
-                    ]
+                    ],
+                    "dont-discover": []
                 }
             },
             "autoload": {
@@ -68,32 +65,31 @@
             ],
             "support": {
                 "issues": "https://github.com/ajthinking/archetype/issues",
-                "source": "https://github.com/ajthinking/archetype/tree/v0.2.8"
+                "source": "https://github.com/ajthinking/archetype/tree/v2.0.0"
             },
-            "time": "2021-11-20T12:33:35+00:00"
+            "time": "2024-05-11T08:05:58+00:00"
         },
         {
             "name": "brick/math",
-            "version": "0.9.3",
+            "version": "0.12.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/brick/math.git",
-                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae"
+                "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae",
-                "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae",
+                "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba",
+                "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "php": "^7.1 || ^8.0"
+                "php": "^8.1"
             },
             "require-dev": {
                 "php-coveralls/php-coveralls": "^2.2",
-                "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0",
-                "vimeo/psalm": "4.9.2"
+                "phpunit/phpunit": "^10.1",
+                "vimeo/psalm": "6.8.8"
             },
             "type": "library",
             "autoload": {
@@ -113,59 +109,55 @@
                 "arithmetic",
                 "bigdecimal",
                 "bignum",
+                "bignumber",
                 "brick",
-                "math"
+                "decimal",
+                "integer",
+                "math",
+                "mathematics",
+                "rational"
             ],
             "support": {
                 "issues": "https://github.com/brick/math/issues",
-                "source": "https://github.com/brick/math/tree/0.9.3"
+                "source": "https://github.com/brick/math/tree/0.12.3"
             },
             "funding": [
                 {
                     "url": "https://github.com/BenMorel",
                     "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/brick/math",
-                    "type": "tidelift"
                 }
             ],
-            "time": "2021-08-15T20:50:18+00:00"
+            "time": "2025-02-28T13:11:00+00:00"
         },
         {
-            "name": "composer/ca-bundle",
-            "version": "1.3.1",
+            "name": "carbonphp/carbon-doctrine-types",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
+                "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
+                "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
-                "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
+                "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb",
+                "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb",
                 "shasum": ""
             },
             "require": {
-                "ext-openssl": "*",
-                "ext-pcre": "*",
-                "php": "^5.3.2 || ^7.0 || ^8.0"
+                "php": "^7.4 || ^8.0"
+            },
+            "conflict": {
+                "doctrine/dbal": "<3.7.0 || >=4.0.0"
             },
             "require-dev": {
-                "phpstan/phpstan": "^0.12.55",
-                "psr/log": "^1.0",
-                "symfony/phpunit-bridge": "^4.2 || ^5",
-                "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
+                "doctrine/dbal": "^3.7.0",
+                "nesbot/carbon": "^2.71.0 || ^3.0.0",
+                "phpunit/phpunit": "^10.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.x-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Composer\\CaBundle\\": "src"
+                    "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -174,99 +166,68 @@
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "KyleKatarn",
+                    "email": "kylekatarnls@gmail.com"
                 }
             ],
-            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "description": "Types to use Carbon in Doctrine",
             "keywords": [
-                "cabundle",
-                "cacert",
-                "certificate",
-                "ssl",
-                "tls"
+                "carbon",
+                "date",
+                "datetime",
+                "doctrine",
+                "time"
             ],
             "support": {
-                "irc": "irc://irc.freenode.org/composer",
-                "issues": "https://github.com/composer/ca-bundle/issues",
-                "source": "https://github.com/composer/ca-bundle/tree/1.3.1"
+                "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
+                "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0"
             },
             "funding": [
                 {
-                    "url": "https://packagist.com",
-                    "type": "custom"
+                    "url": "https://github.com/kylekatarnls",
+                    "type": "github"
                 },
                 {
-                    "url": "https://github.com/composer",
-                    "type": "github"
+                    "url": "https://opencollective.com/Carbon",
+                    "type": "open_collective"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-28T20:44:15+00:00"
+            "time": "2023-12-11T17:09:12+00:00"
         },
         {
-            "name": "composer/composer",
-            "version": "2.3.5",
+            "name": "composer/semver",
+            "version": "3.4.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/composer.git",
-                "reference": "50c47b1f907cfcdb8f072b88164d22b527557ae1"
+                "url": "https://github.com/composer/semver.git",
+                "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/50c47b1f907cfcdb8f072b88164d22b527557ae1",
-                "reference": "50c47b1f907cfcdb8f072b88164d22b527557ae1",
+                "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
+                "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
                 "shasum": ""
             },
             "require": {
-                "composer/ca-bundle": "^1.0",
-                "composer/metadata-minifier": "^1.0",
-                "composer/pcre": "^2 || ^3",
-                "composer/semver": "^3.0",
-                "composer/spdx-licenses": "^1.2",
-                "composer/xdebug-handler": "^2.0.2 || ^3.0.3",
-                "justinrainbow/json-schema": "^5.2.11",
-                "php": "^7.2.5 || ^8.0",
-                "psr/log": "^1.0 || ^2.0 || ^3.0",
-                "react/promise": "^2.8",
-                "seld/jsonlint": "^1.4",
-                "seld/phar-utils": "^1.2",
-                "symfony/console": "^5.4.1 || ^6.0",
-                "symfony/filesystem": "^5.4 || ^6.0",
-                "symfony/finder": "^5.4 || ^6.0",
-                "symfony/polyfill-php73": "^1.24",
-                "symfony/polyfill-php80": "^1.24",
-                "symfony/process": "^5.4 || ^6.0"
+                "php": "^5.3.2 || ^7.0 || ^8.0"
             },
             "require-dev": {
-                "phpstan/phpstan": "^1.4.1",
-                "phpstan/phpstan-deprecation-rules": "^1",
-                "phpstan/phpstan-phpunit": "^1.0",
-                "phpstan/phpstan-strict-rules": "^1",
-                "phpstan/phpstan-symfony": "^1.1",
-                "symfony/phpunit-bridge": "^6.0"
-            },
-            "suggest": {
-                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives",
-                "ext-zlib": "Allow gzip compression of HTTP requests"
+                "phpstan/phpstan": "^1.11",
+                "symfony/phpunit-bridge": "^3 || ^7"
             },
-            "bin": [
-                "bin/composer"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.3-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\": "src/Composer"
+                    "Composer\\Semver\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -277,25 +238,30 @@
                 {
                     "name": "Nils Adermann",
                     "email": "naderman@naderman.de",
-                    "homepage": "https://www.naderman.de"
+                    "homepage": "http://www.naderman.de"
                 },
                 {
                     "name": "Jordi Boggiano",
                     "email": "j.boggiano@seld.be",
-                    "homepage": "https://seld.be"
+                    "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
                 }
             ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
-            "homepage": "https://getcomposer.org/",
+            "description": "Semver library that offers utilities, version constraint parsing and validation.",
             "keywords": [
-                "autoload",
-                "dependency",
-                "package"
+                "semantic",
+                "semver",
+                "validation",
+                "versioning"
             ],
             "support": {
                 "irc": "ircs://irc.libera.chat:6697/composer",
-                "issues": "https://github.com/composer/composer/issues",
-                "source": "https://github.com/composer/composer/tree/2.3.5"
+                "issues": "https://github.com/composer/semver/issues",
+                "source": "https://github.com/composer/semver/tree/3.4.3"
             },
             "funding": [
                 {
@@ -311,39 +277,41 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-04-13T14:43:00+00:00"
+            "time": "2024-09-19T14:15:21+00:00"
         },
         {
-            "name": "composer/metadata-minifier",
-            "version": "1.0.0",
+            "name": "dflydev/dot-access-data",
+            "version": "v3.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/metadata-minifier.git",
-                "reference": "c549d23829536f0d0e984aaabbf02af91f443207"
+                "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+                "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207",
-                "reference": "c549d23829536f0d0e984aaabbf02af91f443207",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f",
+                "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0 || ^8.0"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "composer/composer": "^2",
-                "phpstan/phpstan": "^0.12.55",
-                "symfony/phpunit-bridge": "^4.2 || ^5"
+                "phpstan/phpstan": "^0.12.42",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
+                "scrutinizer/ocular": "1.6.0",
+                "squizlabs/php_codesniffer": "^3.5",
+                "vimeo/psalm": "^4.0.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\MetadataMinifier\\": "src"
+                    "Dflydev\\DotAccessData\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -352,67 +320,69 @@
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Small utility library that handles metadata minification and expansion.",
-            "keywords": [
-                "composer",
-                "compression"
-            ],
-            "support": {
-                "issues": "https://github.com/composer/metadata-minifier/issues",
-                "source": "https://github.com/composer/metadata-minifier/tree/1.0.0"
-            },
-            "funding": [
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
+                },
                 {
-                    "url": "https://packagist.com",
-                    "type": "custom"
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
                 },
                 {
-                    "url": "https://github.com/composer",
-                    "type": "github"
+                    "name": "Carlos Frutos",
+                    "email": "carlos@kiwing.it",
+                    "homepage": "https://github.com/cfrutos"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
+                    "name": "Colin O'Dell",
+                    "email": "colinodell@gmail.com",
+                    "homepage": "https://www.colinodell.com"
                 }
             ],
-            "time": "2021-04-07T13:37:33+00:00"
+            "description": "Given a deep data structure, access data by dot notation.",
+            "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+            "keywords": [
+                "access",
+                "data",
+                "dot",
+                "notation"
+            ],
+            "support": {
+                "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
+                "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3"
+            },
+            "time": "2024-07-08T12:26:09+00:00"
         },
         {
-            "name": "composer/pcre",
-            "version": "3.0.0",
+            "name": "doctrine/inflector",
+            "version": "2.0.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/pcre.git",
-                "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd"
+                "url": "https://github.com/doctrine/inflector.git",
+                "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd",
-                "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd",
+                "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+                "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.4 || ^8.0"
+                "php": "^7.2 || ^8.0"
             },
             "require-dev": {
-                "phpstan/phpstan": "^1.3",
-                "phpstan/phpstan-strict-rules": "^1.1",
-                "symfony/phpunit-bridge": "^5"
+                "doctrine/coding-standard": "^11.0",
+                "phpstan/phpstan": "^1.8",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpstan/phpstan-strict-rules": "^1.3",
+                "phpunit/phpunit": "^8.5 || ^9.5",
+                "vimeo/psalm": "^4.25 || ^5.4"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.x-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Composer\\Pcre\\": "src"
+                    "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -421,68 +391,88 @@
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
                 }
             ],
-            "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
+            "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+            "homepage": "https://www.doctrine-project.org/projects/inflector.html",
             "keywords": [
-                "PCRE",
-                "preg",
-                "regex",
-                "regular expression"
+                "inflection",
+                "inflector",
+                "lowercase",
+                "manipulation",
+                "php",
+                "plural",
+                "singular",
+                "strings",
+                "uppercase",
+                "words"
             ],
             "support": {
-                "issues": "https://github.com/composer/pcre/issues",
-                "source": "https://github.com/composer/pcre/tree/3.0.0"
+                "issues": "https://github.com/doctrine/inflector/issues",
+                "source": "https://github.com/doctrine/inflector/tree/2.0.10"
             },
             "funding": [
                 {
-                    "url": "https://packagist.com",
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
                     "type": "custom"
                 },
                 {
-                    "url": "https://github.com/composer",
-                    "type": "github"
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-02-25T20:21:48+00:00"
+            "time": "2024-02-18T20:23:39+00:00"
         },
         {
-            "name": "composer/semver",
-            "version": "3.3.2",
+            "name": "doctrine/lexer",
+            "version": "3.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9"
+                "url": "https://github.com/doctrine/lexer.git",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9",
-                "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0 || ^8.0"
+                "php": "^8.1"
             },
             "require-dev": {
-                "phpstan/phpstan": "^1.4",
-                "symfony/phpunit-bridge": "^4.2 || ^5"
+                "doctrine/coding-standard": "^12",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^10.5",
+                "psalm/plugin-phpunit": "^0.18.3",
+                "vimeo/psalm": "^5.21"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.x-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Composer\\Semver\\": "src"
+                    "Doctrine\\Common\\Lexer\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -491,79 +481,82 @@
             ],
             "authors": [
                 {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
                 },
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
                 },
                 {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
                 }
             ],
-            "description": "Semver library that offers utilities, version constraint parsing and validation.",
+            "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+            "homepage": "https://www.doctrine-project.org/projects/lexer.html",
             "keywords": [
-                "semantic",
-                "semver",
-                "validation",
-                "versioning"
+                "annotations",
+                "docblock",
+                "lexer",
+                "parser",
+                "php"
             ],
             "support": {
-                "irc": "irc://irc.freenode.org/composer",
-                "issues": "https://github.com/composer/semver/issues",
-                "source": "https://github.com/composer/semver/tree/3.3.2"
+                "issues": "https://github.com/doctrine/lexer/issues",
+                "source": "https://github.com/doctrine/lexer/tree/3.0.1"
             },
             "funding": [
                 {
-                    "url": "https://packagist.com",
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
                     "type": "custom"
                 },
                 {
-                    "url": "https://github.com/composer",
-                    "type": "github"
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-04-01T19:23:25+00:00"
+            "time": "2024-02-05T11:56:58+00:00"
         },
         {
-            "name": "composer/spdx-licenses",
-            "version": "1.5.6",
+            "name": "dragonmantank/cron-expression",
+            "version": "v3.4.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "a30d487169d799745ca7280bc90fdfa693536901"
+                "url": "https://github.com/dragonmantank/cron-expression.git",
+                "reference": "8c784d071debd117328803d86b2097615b457500"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/a30d487169d799745ca7280bc90fdfa693536901",
-                "reference": "a30d487169d799745ca7280bc90fdfa693536901",
+                "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500",
+                "reference": "8c784d071debd117328803d86b2097615b457500",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0 || ^8.0"
+                "php": "^7.2|^8.0",
+                "webmozart/assert": "^1.0"
+            },
+            "replace": {
+                "mtdowling/cron-expression": "^1.0"
             },
             "require-dev": {
-                "phpstan/phpstan": "^0.12.55",
-                "symfony/phpunit-bridge": "^4.2 || ^5"
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^1.0",
+                "phpunit/phpunit": "^7.0|^8.0|^9.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.x-dev"
+                    "dev-master": "3.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\Spdx\\": "src"
+                    "Cron\\": "src/Cron/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -572,76 +565,63 @@
             ],
             "authors": [
                 {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
+                    "name": "Chris Tankersley",
+                    "email": "chris@ctankersley.com",
+                    "homepage": "https://github.com/dragonmantank"
                 }
             ],
-            "description": "SPDX licenses list and validation library.",
+            "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
             "keywords": [
-                "license",
-                "spdx",
-                "validator"
+                "cron",
+                "schedule"
             ],
             "support": {
-                "irc": "irc://irc.freenode.org/composer",
-                "issues": "https://github.com/composer/spdx-licenses/issues",
-                "source": "https://github.com/composer/spdx-licenses/tree/1.5.6"
+                "issues": "https://github.com/dragonmantank/cron-expression/issues",
+                "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0"
             },
             "funding": [
                 {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
+                    "url": "https://github.com/dragonmantank",
                     "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
                 }
             ],
-            "time": "2021-11-18T10:14:14+00:00"
+            "time": "2024-10-09T13:47:03+00:00"
         },
         {
-            "name": "composer/xdebug-handler",
-            "version": "3.0.3",
+            "name": "egulias/email-validator",
+            "version": "4.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "ced299686f41dce890debac69273b47ffe98a40c"
+                "url": "https://github.com/egulias/EmailValidator.git",
+                "reference": "b115554301161fa21467629f1e1391c1936de517"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
-                "reference": "ced299686f41dce890debac69273b47ffe98a40c",
+                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517",
+                "reference": "b115554301161fa21467629f1e1391c1936de517",
                 "shasum": ""
             },
             "require": {
-                "composer/pcre": "^1 || ^2 || ^3",
-                "php": "^7.2.5 || ^8.0",
-                "psr/log": "^1 || ^2 || ^3"
+                "doctrine/lexer": "^2.0 || ^3.0",
+                "php": ">=8.1",
+                "symfony/polyfill-intl-idn": "^1.26"
             },
             "require-dev": {
-                "phpstan/phpstan": "^1.0",
-                "phpstan/phpstan-strict-rules": "^1.1",
-                "symfony/phpunit-bridge": "^6.0"
+                "phpunit/phpunit": "^10.2",
+                "vimeo/psalm": "^5.12"
+            },
+            "suggest": {
+                "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Composer\\XdebugHandler\\": "src"
+                    "Egulias\\EmailValidator\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -650,74 +630,62 @@
             ],
             "authors": [
                 {
-                    "name": "John Stevenson",
-                    "email": "john-stevenson@blueyonder.co.uk"
+                    "name": "Eduardo Gulias Davis"
                 }
             ],
-            "description": "Restarts a process without Xdebug.",
+            "description": "A library for validating emails against several RFCs",
+            "homepage": "https://github.com/egulias/EmailValidator",
             "keywords": [
-                "Xdebug",
-                "performance"
+                "email",
+                "emailvalidation",
+                "emailvalidator",
+                "validation",
+                "validator"
             ],
             "support": {
-                "irc": "irc://irc.freenode.org/composer",
-                "issues": "https://github.com/composer/xdebug-handler/issues",
-                "source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
+                "issues": "https://github.com/egulias/EmailValidator/issues",
+                "source": "https://github.com/egulias/EmailValidator/tree/4.0.3"
             },
             "funding": [
                 {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
+                    "url": "https://github.com/egulias",
                     "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
                 }
             ],
-            "time": "2022-02-25T21:32:43+00:00"
+            "time": "2024-12-27T00:36:43+00:00"
         },
         {
-            "name": "doctrine/cache",
-            "version": "2.1.1",
+            "name": "fruitcake/php-cors",
+            "version": "v1.3.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/cache.git",
-                "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce"
+                "url": "https://github.com/fruitcake/php-cors.git",
+                "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce",
-                "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce",
+                "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b",
+                "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b",
                 "shasum": ""
             },
             "require": {
-                "php": "~7.1 || ^8.0"
-            },
-            "conflict": {
-                "doctrine/common": ">2.2,<2.4"
+                "php": "^7.4|^8.0",
+                "symfony/http-foundation": "^4.4|^5.4|^6|^7"
             },
             "require-dev": {
-                "alcaeus/mongo-php-adapter": "^1.1",
-                "cache/integration-tests": "dev-master",
-                "doctrine/coding-standard": "^8.0",
-                "mongodb/mongodb": "^1.1",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
-                "predis/predis": "~1.0",
-                "psr/cache": "^1.0 || ^2.0 || ^3.0",
-                "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev",
-                "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev"
-            },
-            "suggest": {
-                "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
+                "phpstan/phpstan": "^1.4",
+                "phpunit/phpunit": "^9",
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
+                    "Fruitcake\\Cors\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -726,104 +694,62 @@
             ],
             "authors": [
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
+                    "name": "Fruitcake",
+                    "homepage": "https://fruitcake.nl"
                 },
                 {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "name": "Barryvdh",
+                    "email": "barryvdh@gmail.com"
                 }
             ],
-            "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
-            "homepage": "https://www.doctrine-project.org/projects/cache.html",
+            "description": "Cross-origin resource sharing library for the Symfony HttpFoundation",
+            "homepage": "https://github.com/fruitcake/php-cors",
             "keywords": [
-                "abstraction",
-                "apcu",
-                "cache",
-                "caching",
-                "couchdb",
-                "memcached",
-                "php",
-                "redis",
-                "xcache"
+                "cors",
+                "laravel",
+                "symfony"
             ],
             "support": {
-                "issues": "https://github.com/doctrine/cache/issues",
-                "source": "https://github.com/doctrine/cache/tree/2.1.1"
+                "issues": "https://github.com/fruitcake/php-cors/issues",
+                "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0"
             },
             "funding": [
                 {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "url": "https://fruitcake.nl",
                     "type": "custom"
                 },
                 {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
-                    "type": "tidelift"
+                    "url": "https://github.com/barryvdh",
+                    "type": "github"
                 }
             ],
-            "time": "2021-07-17T14:49:29+00:00"
+            "time": "2023-10-12T05:21:21+00:00"
         },
         {
-            "name": "doctrine/dbal",
-            "version": "3.3.5",
+            "name": "graham-campbell/result-type",
+            "version": "v1.1.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/dbal.git",
-                "reference": "719663b15983278227669c8595151586a2ff3327"
+                "url": "https://github.com/GrahamCampbell/Result-Type.git",
+                "reference": "3ba905c11371512af9d9bdd27d99b782216b6945"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/719663b15983278227669c8595151586a2ff3327",
-                "reference": "719663b15983278227669c8595151586a2ff3327",
+                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945",
+                "reference": "3ba905c11371512af9d9bdd27d99b782216b6945",
                 "shasum": ""
             },
             "require": {
-                "composer-runtime-api": "^2",
-                "doctrine/cache": "^1.11|^2.0",
-                "doctrine/deprecations": "^0.5.3",
-                "doctrine/event-manager": "^1.0",
-                "php": "^7.3 || ^8.0",
-                "psr/cache": "^1|^2|^3",
-                "psr/log": "^1|^2|^3"
+                "php": "^7.2.5 || ^8.0",
+                "phpoption/phpoption": "^1.9.3"
             },
             "require-dev": {
-                "doctrine/coding-standard": "9.0.0",
-                "jetbrains/phpstorm-stubs": "2021.1",
-                "phpstan/phpstan": "1.5.3",
-                "phpstan/phpstan-strict-rules": "^1.1",
-                "phpunit/phpunit": "9.5.16",
-                "psalm/plugin-phpunit": "0.16.1",
-                "squizlabs/php_codesniffer": "3.6.2",
-                "symfony/cache": "^5.2|^6.0",
-                "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0",
-                "vimeo/psalm": "4.22.0"
-            },
-            "suggest": {
-                "symfony/console": "For helpful console commands such as SQL execution and import of files."
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
             },
-            "bin": [
-                "bin/doctrine-dbal"
-            ],
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\DBAL\\": "src"
+                    "GrahamCampbell\\ResultType\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -832,140 +758,192 @@
             ],
             "authors": [
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
                 }
             ],
-            "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
-            "homepage": "https://www.doctrine-project.org/projects/dbal.html",
+            "description": "An Implementation Of The Result Type",
             "keywords": [
-                "abstraction",
-                "database",
-                "db2",
-                "dbal",
-                "mariadb",
-                "mssql",
-                "mysql",
-                "oci8",
-                "oracle",
-                "pdo",
-                "pgsql",
-                "postgresql",
-                "queryobject",
-                "sasql",
-                "sql",
-                "sqlite",
-                "sqlserver",
-                "sqlsrv"
-            ],
-            "support": {
-                "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/3.3.5"
+                "Graham Campbell",
+                "GrahamCampbell",
+                "Result Type",
+                "Result-Type",
+                "result"
+            ],
+            "support": {
+                "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+                "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3"
             },
             "funding": [
                 {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
+                    "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-04-05T09:50:18+00:00"
+            "time": "2024-07-20T21:45:45+00:00"
         },
         {
-            "name": "doctrine/deprecations",
-            "version": "v0.5.3",
+            "name": "guzzlehttp/guzzle",
+            "version": "7.9.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/deprecations.git",
-                "reference": "9504165960a1f83cc1480e2be1dd0a0478561314"
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314",
-                "reference": "9504165960a1f83cc1480e2be1dd0a0478561314",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
+                "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1|^8.0"
+                "ext-json": "*",
+                "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
+                "guzzlehttp/psr7": "^2.7.0",
+                "php": "^7.2.5 || ^8.0",
+                "psr/http-client": "^1.0",
+                "symfony/deprecation-contracts": "^2.2 || ^3.0"
+            },
+            "provide": {
+                "psr/http-client-implementation": "1.0"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^6.0|^7.0|^8.0",
-                "phpunit/phpunit": "^7.0|^8.0|^9.0",
-                "psr/log": "^1.0"
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "ext-curl": "*",
+                "guzzle/client-integration-tests": "3.0.2",
+                "php-http/message-factory": "^1.1",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+                "psr/log": "^1.1 || ^2.0 || ^3.0"
             },
             "suggest": {
-                "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+                "ext-curl": "Required for CURL handler support",
+                "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+                "psr/log": "Required for using the Log middleware"
             },
             "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                }
+            },
             "autoload": {
+                "files": [
+                    "src/functions_include.php"
+                ],
                 "psr-4": {
-                    "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+                    "GuzzleHttp\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
-            "homepage": "https://www.doctrine-project.org/",
+            "authors": [
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Jeremy Lindblom",
+                    "email": "jeremeamia@gmail.com",
+                    "homepage": "https://github.com/jeremeamia"
+                },
+                {
+                    "name": "George Mponos",
+                    "email": "gmponos@gmail.com",
+                    "homepage": "https://github.com/gmponos"
+                },
+                {
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
+                },
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com",
+                    "homepage": "https://github.com/sagikazarmark"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "email": "webmaster@tubo-world.de",
+                    "homepage": "https://github.com/Tobion"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "psr-18",
+                "psr-7",
+                "rest",
+                "web service"
+            ],
             "support": {
-                "issues": "https://github.com/doctrine/deprecations/issues",
-                "source": "https://github.com/doctrine/deprecations/tree/v0.5.3"
+                "issues": "https://github.com/guzzle/guzzle/issues",
+                "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
             },
-            "time": "2021-03-21T12:59:47+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-07-24T11:22:20+00:00"
         },
         {
-            "name": "doctrine/event-manager",
-            "version": "1.1.1",
+            "name": "guzzlehttp/promises",
+            "version": "2.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/event-manager.git",
-                "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
+                "url": "https://github.com/guzzle/promises.git",
+                "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
-                "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
+                "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "conflict": {
-                "doctrine/common": "<2.9@dev"
+                "php": "^7.2.5 || ^8.0"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^6.0",
-                "phpunit/phpunit": "^7.0"
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\Common\\": "lib/Doctrine/Common"
+                    "GuzzleHttp\\Promise\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -974,88 +952,92 @@
             ],
             "authors": [
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
                 },
                 {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
                 },
                 {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
                 },
                 {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com"
+                    "name": "Tobias Schultze",
+                    "email": "webmaster@tubo-world.de",
+                    "homepage": "https://github.com/Tobion"
                 }
             ],
-            "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
-            "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
+            "description": "Guzzle promises library",
             "keywords": [
-                "event",
-                "event dispatcher",
-                "event manager",
-                "event system",
-                "events"
+                "promise"
             ],
             "support": {
-                "issues": "https://github.com/doctrine/event-manager/issues",
-                "source": "https://github.com/doctrine/event-manager/tree/1.1.x"
+                "issues": "https://github.com/guzzle/promises/issues",
+                "source": "https://github.com/guzzle/promises/tree/2.0.4"
             },
             "funding": [
                 {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
                 },
                 {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager",
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-05-29T18:28:51+00:00"
+            "time": "2024-10-17T10:06:22+00:00"
         },
         {
-            "name": "doctrine/inflector",
-            "version": "2.0.4",
+            "name": "guzzlehttp/psr7",
+            "version": "2.7.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/inflector.git",
-                "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89"
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
-                "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+                "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2 || ^8.0"
+                "php": "^7.2.5 || ^8.0",
+                "psr/http-factory": "^1.0",
+                "psr/http-message": "^1.1 || ^2.0",
+                "ralouphie/getallheaders": "^3.0"
+            },
+            "provide": {
+                "psr/http-factory-implementation": "1.0",
+                "psr/http-message-implementation": "1.0"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^8.2",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpstan/phpstan-strict-rules": "^0.12",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
-                "vimeo/psalm": "^4.10"
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "http-interop/http-factory-tests": "0.9.0",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+            },
+            "suggest": {
+                "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
             },
             "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+                    "GuzzleHttp\\Psr7\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1064,87 +1046,105 @@
             ],
             "authors": [
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
                 },
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
                 },
                 {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
+                    "name": "George Mponos",
+                    "email": "gmponos@gmail.com",
+                    "homepage": "https://github.com/gmponos"
                 },
                 {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
                 },
                 {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com",
+                    "homepage": "https://github.com/sagikazarmark"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "email": "webmaster@tubo-world.de",
+                    "homepage": "https://github.com/Tobion"
+                },
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com",
+                    "homepage": "https://sagikazarmark.hu"
                 }
             ],
-            "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
-            "homepage": "https://www.doctrine-project.org/projects/inflector.html",
+            "description": "PSR-7 message implementation that also provides common utility methods",
             "keywords": [
-                "inflection",
-                "inflector",
-                "lowercase",
-                "manipulation",
-                "php",
-                "plural",
-                "singular",
-                "strings",
-                "uppercase",
-                "words"
+                "http",
+                "message",
+                "psr-7",
+                "request",
+                "response",
+                "stream",
+                "uri",
+                "url"
             ],
             "support": {
-                "issues": "https://github.com/doctrine/inflector/issues",
-                "source": "https://github.com/doctrine/inflector/tree/2.0.4"
+                "issues": "https://github.com/guzzle/psr7/issues",
+                "source": "https://github.com/guzzle/psr7/tree/2.7.0"
             },
             "funding": [
                 {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
                 },
                 {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-22T20:16:43+00:00"
+            "time": "2024-07-18T11:15:46+00:00"
         },
         {
-            "name": "doctrine/lexer",
-            "version": "1.2.3",
+            "name": "guzzlehttp/uri-template",
+            "version": "v1.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
+                "url": "https://github.com/guzzle/uri-template.git",
+                "reference": "30e286560c137526eccd4ce21b2de477ab0676d2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
-                "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+                "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2",
+                "reference": "30e286560c137526eccd4ce21b2de477ab0676d2",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1 || ^8.0"
+                "php": "^7.2.5 || ^8.0",
+                "symfony/polyfill-php80": "^1.24"
             },
             "require-dev": {
-                "doctrine/coding-standard": "^9.0",
-                "phpstan/phpstan": "^1.3",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-                "vimeo/psalm": "^4.11"
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "phpunit/phpunit": "^8.5.36 || ^9.6.15",
+                "uri-template/tests": "1.0.0"
             },
             "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
+                    "GuzzleHttp\\UriTemplate\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1153,78 +1153,84 @@
             ],
             "authors": [
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
                 },
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
                 },
                 {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "name": "George Mponos",
+                    "email": "gmponos@gmail.com",
+                    "homepage": "https://github.com/gmponos"
+                },
+                {
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com",
+                    "homepage": "https://github.com/Nyholm"
                 }
             ],
-            "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
-            "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+            "description": "A polyfill class for uri_template of PHP",
             "keywords": [
-                "annotations",
-                "docblock",
-                "lexer",
-                "parser",
-                "php"
+                "guzzlehttp",
+                "uri-template"
             ],
             "support": {
-                "issues": "https://github.com/doctrine/lexer/issues",
-                "source": "https://github.com/doctrine/lexer/tree/1.2.3"
+                "issues": "https://github.com/guzzle/uri-template/issues",
+                "source": "https://github.com/guzzle/uri-template/tree/v1.0.4"
             },
             "funding": [
                 {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
                 },
                 {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template",
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-02-28T11:07:21+00:00"
+            "time": "2025-02-03T10:55:03+00:00"
         },
         {
-            "name": "dragonmantank/cron-expression",
-            "version": "v3.3.1",
+            "name": "http-interop/http-factory-guzzle",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/dragonmantank/cron-expression.git",
-                "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa"
+                "url": "https://github.com/http-interop/http-factory-guzzle.git",
+                "reference": "8f06e92b95405216b237521cc64c804dd44c4a81"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa",
-                "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa",
+                "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81",
+                "reference": "8f06e92b95405216b237521cc64c804dd44c4a81",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2|^8.0",
-                "webmozart/assert": "^1.0"
+                "guzzlehttp/psr7": "^1.7||^2.0",
+                "php": ">=7.3",
+                "psr/http-factory": "^1.0"
             },
-            "replace": {
-                "mtdowling/cron-expression": "^1.0"
+            "provide": {
+                "psr/http-factory-implementation": "^1.0"
             },
             "require-dev": {
-                "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^1.0",
-                "phpstan/phpstan-webmozart-assert": "^1.0",
-                "phpunit/phpunit": "^7.0|^8.0|^9.0"
+                "http-interop/http-factory-tests": "^0.9",
+                "phpunit/phpunit": "^9.5"
+            },
+            "suggest": {
+                "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0"
             },
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Cron\\": "src/Cron/"
+                    "Http\\Factory\\Guzzle\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1233,64 +1239,68 @@
             ],
             "authors": [
                 {
-                    "name": "Chris Tankersley",
-                    "email": "chris@ctankersley.com",
-                    "homepage": "https://github.com/dragonmantank"
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+            "description": "An HTTP Factory using Guzzle PSR7",
             "keywords": [
-                "cron",
-                "schedule"
+                "factory",
+                "http",
+                "psr-17",
+                "psr-7"
             ],
             "support": {
-                "issues": "https://github.com/dragonmantank/cron-expression/issues",
-                "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1"
+                "issues": "https://github.com/http-interop/http-factory-guzzle/issues",
+                "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0"
             },
-            "funding": [
-                {
-                    "url": "https://github.com/dragonmantank",
-                    "type": "github"
-                }
-            ],
-            "time": "2022-01-18T15:43:28+00:00"
+            "time": "2021-07-21T13:50:14+00:00"
         },
         {
-            "name": "egulias/email-validator",
-            "version": "2.1.25",
+            "name": "intervention/image",
+            "version": "2.7.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/egulias/EmailValidator.git",
-                "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4"
+                "url": "https://github.com/Intervention/image.git",
+                "reference": "04be355f8d6734c826045d02a1079ad658322dad"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4",
-                "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+                "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad",
+                "reference": "04be355f8d6734c826045d02a1079ad658322dad",
                 "shasum": ""
             },
             "require": {
-                "doctrine/lexer": "^1.0.1",
-                "php": ">=5.5",
-                "symfony/polyfill-intl-idn": "^1.10"
+                "ext-fileinfo": "*",
+                "guzzlehttp/psr7": "~1.1 || ^2.0",
+                "php": ">=5.4.0"
             },
             "require-dev": {
-                "dominicsayers/isemail": "^3.0.7",
-                "phpunit/phpunit": "^4.8.36|^7.5.15",
-                "satooshi/php-coveralls": "^1.0.1"
+                "mockery/mockery": "~0.9.2",
+                "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15"
             },
             "suggest": {
-                "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+                "ext-gd": "to use GD library based image processing.",
+                "ext-imagick": "to use Imagick based image processing.",
+                "intervention/imagecache": "Caching extension for the Intervention Image library"
             },
             "type": "library",
             "extra": {
+                "laravel": {
+                    "aliases": {
+                        "Image": "Intervention\\Image\\Facades\\Image"
+                    },
+                    "providers": [
+                        "Intervention\\Image\\ImageServiceProvider"
+                    ]
+                },
                 "branch-alias": {
-                    "dev-master": "2.1.x-dev"
+                    "dev-master": "2.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Egulias\\EmailValidator\\": "src"
+                    "Intervention\\Image\\": "src/Intervention/Image"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1299,117 +1309,142 @@
             ],
             "authors": [
                 {
-                    "name": "Eduardo Gulias Davis"
+                    "name": "Oliver Vogel",
+                    "email": "oliver@intervention.io",
+                    "homepage": "https://intervention.io/"
                 }
             ],
-            "description": "A library for validating emails against several RFCs",
-            "homepage": "https://github.com/egulias/EmailValidator",
+            "description": "Image handling and manipulation library with support for Laravel integration",
+            "homepage": "http://image.intervention.io/",
             "keywords": [
-                "email",
-                "emailvalidation",
-                "emailvalidator",
-                "validation",
-                "validator"
+                "gd",
+                "image",
+                "imagick",
+                "laravel",
+                "thumbnail",
+                "watermark"
             ],
             "support": {
-                "issues": "https://github.com/egulias/EmailValidator/issues",
-                "source": "https://github.com/egulias/EmailValidator/tree/2.1.25"
+                "issues": "https://github.com/Intervention/image/issues",
+                "source": "https://github.com/Intervention/image/tree/2.7.2"
             },
             "funding": [
                 {
-                    "url": "https://github.com/egulias",
+                    "url": "https://paypal.me/interventionio",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/Intervention",
                     "type": "github"
                 }
             ],
-            "time": "2020-12-29T14:50:06+00:00"
+            "time": "2022-05-21T17:30:32+00:00"
         },
         {
-            "name": "facade/ignition-contracts",
-            "version": "1.0.2",
+            "name": "james-heinrich/getid3",
+            "version": "v1.9.23",
             "source": {
                 "type": "git",
-                "url": "https://github.com/facade/ignition-contracts.git",
-                "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267"
+                "url": "https://github.com/JamesHeinrich/getID3.git",
+                "reference": "06c7482532ff2b3f9111b011d880ca6699c8542b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
-                "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
+                "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/06c7482532ff2b3f9111b011d880ca6699c8542b",
+                "reference": "06c7482532ff2b3f9111b011d880ca6699c8542b",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.3|^8.0"
+                "php": ">=5.3.0"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^v2.15.8",
-                "phpunit/phpunit": "^9.3.11",
-                "vimeo/psalm": "^3.17.1"
+                "php-parallel-lint/php-parallel-lint": "^1.0"
+            },
+            "suggest": {
+                "ext-SimpleXML": "SimpleXML extension is required to analyze RIFF/WAV/BWF audio files (also requires `ext-libxml`).",
+                "ext-com_dotnet": "COM extension is required when loading files larger than 2GB on Windows.",
+                "ext-ctype": "ctype extension is required when loading files larger than 2GB on 32-bit PHP (also on 64-bit PHP on Windows) or executing `getid3_lib::CopyTagsToComments`.",
+                "ext-dba": "DBA extension is required to use the DBA database as a cache storage.",
+                "ext-exif": "EXIF extension is required for graphic modules.",
+                "ext-iconv": "iconv extension is required to work with different character sets (when `ext-mbstring` is not available).",
+                "ext-json": "JSON extension is required to analyze Apple Quicktime videos.",
+                "ext-libxml": "libxml extension is required to analyze RIFF/WAV/BWF audio files.",
+                "ext-mbstring": "mbstring extension is required to work with different character sets.",
+                "ext-mysql": "MySQL extension is required to use the MySQL database as a cache storage (deprecated in PHP 5.5, removed in PHP >= 7.0, use `ext-mysqli` instead).",
+                "ext-mysqli": "MySQLi extension is required to use the MySQL database as a cache storage.",
+                "ext-rar": "RAR extension is required for RAR archive module.",
+                "ext-sqlite3": "SQLite3 extension is required to use the SQLite3 database as a cache storage.",
+                "ext-xml": "XML extension is required for graphic modules to analyze the XML metadata.",
+                "ext-zlib": "Zlib extension is required for archive modules and compressed metadata."
             },
             "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Facade\\IgnitionContracts\\": "src"
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.9.x-dev"
                 }
             },
+            "autoload": {
+                "classmap": [
+                    "getid3/"
+                ]
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Freek Van der Herten",
-                    "email": "freek@spatie.be",
-                    "homepage": "https://flareapp.io",
-                    "role": "Developer"
-                }
+                "GPL-1.0-or-later",
+                "LGPL-3.0-only",
+                "MPL-2.0"
             ],
-            "description": "Solution contracts for Ignition",
-            "homepage": "https://github.com/facade/ignition-contracts",
+            "description": "PHP script that extracts useful information from popular multimedia file formats",
+            "homepage": "https://www.getid3.org/",
             "keywords": [
-                "contracts",
-                "flare",
-                "ignition"
+                "codecs",
+                "php",
+                "tags"
             ],
             "support": {
-                "issues": "https://github.com/facade/ignition-contracts/issues",
-                "source": "https://github.com/facade/ignition-contracts/tree/1.0.2"
+                "issues": "https://github.com/JamesHeinrich/getID3/issues",
+                "source": "https://github.com/JamesHeinrich/getID3/tree/v1.9.23"
             },
-            "time": "2020-10-16T08:27:54+00:00"
+            "time": "2023-10-19T13:18:49+00:00"
         },
         {
-            "name": "fideloper/proxy",
-            "version": "4.4.1",
+            "name": "laragraph/utils",
+            "version": "v2.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/fideloper/TrustedProxy.git",
-                "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0"
+                "url": "https://github.com/laragraph/utils.git",
+                "reference": "035c92b37f40c6b51027e76f90ef25d9a9458c56"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0",
-                "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0",
+                "url": "https://api.github.com/repos/laragraph/utils/zipball/035c92b37f40c6b51027e76f90ef25d9a9458c56",
+                "reference": "035c92b37f40c6b51027e76f90ef25d9a9458c56",
                 "shasum": ""
             },
             "require": {
-                "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0",
-                "php": ">=5.4.0"
+                "illuminate/contracts": "~5.6.0 || ~5.7.0 || ~5.8.0 || ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12",
+                "illuminate/http": "~5.6.0 || ~5.7.0 || ~5.8.0 || ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12",
+                "php": "^7.2 || ^8",
+                "thecodingmachine/safe": "^1.1 || ^2 || ^3",
+                "webonyx/graphql-php": "^0.13.2 || ^14 || ^15"
             },
             "require-dev": {
-                "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0",
-                "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^6.0"
+                "ergebnis/composer-normalize": "^2.11",
+                "jangregor/phpstan-prophecy": "^1",
+                "mll-lab/php-cs-fixer-config": "^4",
+                "orchestra/testbench": "~3.6.0 || ~3.7.0 || ~3.8.0 || ~3.9.0 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 || ^10 || ^10.x-dev",
+                "phpstan/extension-installer": "^1",
+                "phpstan/phpstan": "^1",
+                "phpstan/phpstan-deprecation-rules": "^1",
+                "phpstan/phpstan-phpunit": "^1",
+                "phpstan/phpstan-strict-rules": "^1",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9 || ^10.5 || ^11",
+                "thecodingmachine/phpstan-safe-rule": "^1.1"
             },
             "type": "library",
-            "extra": {
-                "laravel": {
-                    "providers": [
-                        "Fideloper\\Proxy\\TrustedProxyServiceProvider"
-                    ]
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Fideloper\\Proxy\\": "src/"
+                    "Laragraph\\Utils\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1418,47 +1453,201 @@
             ],
             "authors": [
                 {
-                    "name": "Chris Fidao",
-                    "email": "fideloper@gmail.com"
+                    "name": "Benedikt Franke",
+                    "email": "benedikt@franke.tech"
                 }
             ],
-            "description": "Set trusted proxies for Laravel",
-            "keywords": [
-                "load balancing",
-                "proxy",
-                "trusted proxy"
-            ],
+            "description": "Utilities for using GraphQL with Laravel",
+            "homepage": "https://github.com/laragraph/utils",
             "support": {
-                "issues": "https://github.com/fideloper/TrustedProxy/issues",
-                "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1"
+                "issues": "https://github.com/laragraph/utils/issues",
+                "source": "https://github.com/laragraph/utils"
             },
-            "time": "2020-10-22T13:48:01+00:00"
+            "time": "2025-02-12T13:19:02+00:00"
         },
         {
-            "name": "graham-campbell/result-type",
-            "version": "v1.0.4",
+            "name": "laravel/framework",
+            "version": "v10.48.29",
             "source": {
                 "type": "git",
-                "url": "https://github.com/GrahamCampbell/Result-Type.git",
-                "reference": "0690bde05318336c7221785f2a932467f98b64ca"
+                "url": "https://github.com/laravel/framework.git",
+                "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca",
-                "reference": "0690bde05318336c7221785f2a932467f98b64ca",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/8f7f9247cb8aad1a769d6b9815a6623d89b46b47",
+                "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0 || ^8.0",
-                "phpoption/phpoption": "^1.8"
+                "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12",
+                "composer-runtime-api": "^2.2",
+                "doctrine/inflector": "^2.0.5",
+                "dragonmantank/cron-expression": "^3.3.2",
+                "egulias/email-validator": "^3.2.1|^4.0",
+                "ext-ctype": "*",
+                "ext-filter": "*",
+                "ext-hash": "*",
+                "ext-mbstring": "*",
+                "ext-openssl": "*",
+                "ext-session": "*",
+                "ext-tokenizer": "*",
+                "fruitcake/php-cors": "^1.2",
+                "guzzlehttp/uri-template": "^1.0",
+                "laravel/prompts": "^0.1.9",
+                "laravel/serializable-closure": "^1.3",
+                "league/commonmark": "^2.2.1",
+                "league/flysystem": "^3.8.0",
+                "monolog/monolog": "^3.0",
+                "nesbot/carbon": "^2.67",
+                "nunomaduro/termwind": "^1.13",
+                "php": "^8.1",
+                "psr/container": "^1.1.1|^2.0.1",
+                "psr/log": "^1.0|^2.0|^3.0",
+                "psr/simple-cache": "^1.0|^2.0|^3.0",
+                "ramsey/uuid": "^4.7",
+                "symfony/console": "^6.2",
+                "symfony/error-handler": "^6.2",
+                "symfony/finder": "^6.2",
+                "symfony/http-foundation": "^6.4",
+                "symfony/http-kernel": "^6.2",
+                "symfony/mailer": "^6.2",
+                "symfony/mime": "^6.2",
+                "symfony/process": "^6.2",
+                "symfony/routing": "^6.2",
+                "symfony/uid": "^6.2",
+                "symfony/var-dumper": "^6.2",
+                "tijsverkoyen/css-to-inline-styles": "^2.2.5",
+                "vlucas/phpdotenv": "^5.4.1",
+                "voku/portable-ascii": "^2.0"
+            },
+            "conflict": {
+                "carbonphp/carbon-doctrine-types": ">=3.0",
+                "doctrine/dbal": ">=4.0",
+                "mockery/mockery": "1.6.8",
+                "phpunit/phpunit": ">=11.0.0",
+                "tightenco/collect": "<5.5.33"
+            },
+            "provide": {
+                "psr/container-implementation": "1.1|2.0",
+                "psr/simple-cache-implementation": "1.0|2.0|3.0"
+            },
+            "replace": {
+                "illuminate/auth": "self.version",
+                "illuminate/broadcasting": "self.version",
+                "illuminate/bus": "self.version",
+                "illuminate/cache": "self.version",
+                "illuminate/collections": "self.version",
+                "illuminate/conditionable": "self.version",
+                "illuminate/config": "self.version",
+                "illuminate/console": "self.version",
+                "illuminate/container": "self.version",
+                "illuminate/contracts": "self.version",
+                "illuminate/cookie": "self.version",
+                "illuminate/database": "self.version",
+                "illuminate/encryption": "self.version",
+                "illuminate/events": "self.version",
+                "illuminate/filesystem": "self.version",
+                "illuminate/hashing": "self.version",
+                "illuminate/http": "self.version",
+                "illuminate/log": "self.version",
+                "illuminate/macroable": "self.version",
+                "illuminate/mail": "self.version",
+                "illuminate/notifications": "self.version",
+                "illuminate/pagination": "self.version",
+                "illuminate/pipeline": "self.version",
+                "illuminate/process": "self.version",
+                "illuminate/queue": "self.version",
+                "illuminate/redis": "self.version",
+                "illuminate/routing": "self.version",
+                "illuminate/session": "self.version",
+                "illuminate/support": "self.version",
+                "illuminate/testing": "self.version",
+                "illuminate/translation": "self.version",
+                "illuminate/validation": "self.version",
+                "illuminate/view": "self.version"
             },
             "require-dev": {
-                "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
+                "ably/ably-php": "^1.0",
+                "aws/aws-sdk-php": "^3.235.5",
+                "doctrine/dbal": "^3.5.1",
+                "ext-gmp": "*",
+                "fakerphp/faker": "^1.21",
+                "guzzlehttp/guzzle": "^7.5",
+                "league/flysystem-aws-s3-v3": "^3.0",
+                "league/flysystem-ftp": "^3.0",
+                "league/flysystem-path-prefixing": "^3.3",
+                "league/flysystem-read-only": "^3.3",
+                "league/flysystem-sftp-v3": "^3.0",
+                "mockery/mockery": "^1.5.1",
+                "nyholm/psr7": "^1.2",
+                "orchestra/testbench-core": "^8.23.4",
+                "pda/pheanstalk": "^4.0",
+                "phpstan/phpstan": "~1.11.11",
+                "phpunit/phpunit": "^10.0.7",
+                "predis/predis": "^2.0.2",
+                "symfony/cache": "^6.2",
+                "symfony/http-client": "^6.2.4",
+                "symfony/psr-http-message-bridge": "^2.0"
+            },
+            "suggest": {
+                "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
+                "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).",
+                "brianium/paratest": "Required to run tests in parallel (^6.0).",
+                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).",
+                "ext-apcu": "Required to use the APC cache driver.",
+                "ext-fileinfo": "Required to use the Filesystem class.",
+                "ext-ftp": "Required to use the Flysystem FTP driver.",
+                "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
+                "ext-memcached": "Required to use the memcache cache driver.",
+                "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.",
+                "ext-pdo": "Required to use all database features.",
+                "ext-posix": "Required to use all features of the queue worker.",
+                "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).",
+                "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
+                "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
+                "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).",
+                "laravel/tinker": "Required to use the tinker console command (^2.0).",
+                "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).",
+                "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).",
+                "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).",
+                "league/flysystem-read-only": "Required to use read-only disks (^3.3)",
+                "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).",
+                "mockery/mockery": "Required to use mocking (^1.5.1).",
+                "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
+                "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
+                "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).",
+                "predis/predis": "Required to use the predis connector (^2.0.2).",
+                "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
+                "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
+                "symfony/cache": "Required to PSR-6 cache bridge (^6.2).",
+                "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).",
+                "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).",
+                "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).",
+                "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).",
+                "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)."
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "10.x-dev"
+                }
+            },
             "autoload": {
+                "files": [
+                    "src/Illuminate/Collections/helpers.php",
+                    "src/Illuminate/Events/functions.php",
+                    "src/Illuminate/Filesystem/functions.php",
+                    "src/Illuminate/Foundation/helpers.php",
+                    "src/Illuminate/Support/helpers.php"
+                ],
                 "psr-4": {
-                    "GrahamCampbell\\ResultType\\": "src/"
+                    "Illuminate\\": "src/Illuminate/",
+                    "Illuminate\\Support\\": [
+                        "src/Illuminate/Macroable/",
+                        "src/Illuminate/Collections/",
+                        "src/Illuminate/Conditionable/"
+                    ]
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1467,191 +1656,179 @@
             ],
             "authors": [
                 {
-                    "name": "Graham Campbell",
-                    "email": "hello@gjcampbell.co.uk",
-                    "homepage": "https://github.com/GrahamCampbell"
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
                 }
             ],
-            "description": "An Implementation Of The Result Type",
+            "description": "The Laravel Framework.",
+            "homepage": "https://laravel.com",
             "keywords": [
-                "Graham Campbell",
-                "GrahamCampbell",
-                "Result Type",
-                "Result-Type",
-                "result"
+                "framework",
+                "laravel"
             ],
             "support": {
-                "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
-                "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4"
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
             },
-            "funding": [
-                {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
-                },
+            "time": "2025-03-12T14:42:01+00:00"
+        },
+        {
+            "name": "laravel/pint",
+            "version": "v1.21.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/pint.git",
+                "reference": "c44bffbb2334e90fba560933c45948fa4a3f3e86"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/pint/zipball/c44bffbb2334e90fba560933c45948fa4a3f3e86",
+                "reference": "c44bffbb2334e90fba560933c45948fa4a3f3e86",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-mbstring": "*",
+                "ext-tokenizer": "*",
+                "ext-xml": "*",
+                "php": "^8.2.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3.70.2",
+                "illuminate/view": "^11.44.1",
+                "larastan/larastan": "^3.1.0",
+                "laravel-zero/framework": "^11.36.1",
+                "mockery/mockery": "^1.6.12",
+                "nunomaduro/termwind": "^2.3",
+                "pestphp/pest": "^2.36.0"
+            },
+            "bin": [
+                "builds/pint"
+            ],
+            "type": "project",
+            "autoload": {
+                "psr-4": {
+                    "App\\": "app/",
+                    "Database\\Seeders\\": "database/seeders/",
+                    "Database\\Factories\\": "database/factories/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
-                    "type": "tidelift"
+                    "name": "Nuno Maduro",
+                    "email": "enunomaduro@gmail.com"
                 }
             ],
-            "time": "2021-11-21T21:41:47+00:00"
+            "description": "An opinionated code formatter for PHP.",
+            "homepage": "https://laravel.com",
+            "keywords": [
+                "format",
+                "formatter",
+                "lint",
+                "linter",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel/pint/issues",
+                "source": "https://github.com/laravel/pint"
+            },
+            "time": "2025-03-11T03:22:21+00:00"
         },
         {
-            "name": "guzzlehttp/guzzle",
-            "version": "7.4.5",
+            "name": "laravel/prompts",
+            "version": "v0.1.25",
             "source": {
                 "type": "git",
-                "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82"
+                "url": "https://github.com/laravel/prompts.git",
+                "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
-                "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
+                "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95",
+                "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "guzzlehttp/promises": "^1.5",
-                "guzzlehttp/psr7": "^1.9 || ^2.4",
-                "php": "^7.2.5 || ^8.0",
-                "psr/http-client": "^1.0",
-                "symfony/deprecation-contracts": "^2.2 || ^3.0"
+                "ext-mbstring": "*",
+                "illuminate/collections": "^10.0|^11.0",
+                "php": "^8.1",
+                "symfony/console": "^6.2|^7.0"
             },
-            "provide": {
-                "psr/http-client-implementation": "1.0"
+            "conflict": {
+                "illuminate/console": ">=10.17.0 <10.25.0",
+                "laravel/framework": ">=10.17.0 <10.25.0"
             },
             "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.4.1",
-                "ext-curl": "*",
-                "php-http/client-integration-tests": "^3.0",
-                "phpunit/phpunit": "^8.5.5 || ^9.3.5",
-                "psr/log": "^1.1 || ^2.0 || ^3.0"
+                "mockery/mockery": "^1.5",
+                "pestphp/pest": "^2.3",
+                "phpstan/phpstan": "^1.11",
+                "phpstan/phpstan-mockery": "^1.1"
             },
             "suggest": {
-                "ext-curl": "Required for CURL handler support",
-                "ext-intl": "Required for Internationalized Domain Name (IDN) support",
-                "psr/log": "Required for using the Log middleware"
+                "ext-pcntl": "Required for the spinner to be animated."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "7.4-dev"
+                    "dev-main": "0.1.x-dev"
                 }
             },
             "autoload": {
                 "files": [
-                    "src/functions_include.php"
+                    "src/helpers.php"
                 ],
                 "psr-4": {
-                    "GuzzleHttp\\": "src/"
+                    "Laravel\\Prompts\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "authors": [
-                {
-                    "name": "Graham Campbell",
-                    "email": "hello@gjcampbell.co.uk",
-                    "homepage": "https://github.com/GrahamCampbell"
-                },
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Jeremy Lindblom",
-                    "email": "jeremeamia@gmail.com",
-                    "homepage": "https://github.com/jeremeamia"
-                },
-                {
-                    "name": "George Mponos",
-                    "email": "gmponos@gmail.com",
-                    "homepage": "https://github.com/gmponos"
-                },
-                {
-                    "name": "Tobias Nyholm",
-                    "email": "tobias.nyholm@gmail.com",
-                    "homepage": "https://github.com/Nyholm"
-                },
-                {
-                    "name": "Márk Sági-Kazár",
-                    "email": "mark.sagikazar@gmail.com",
-                    "homepage": "https://github.com/sagikazarmark"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "email": "webmaster@tubo-world.de",
-                    "homepage": "https://github.com/Tobion"
-                }
-            ],
-            "description": "Guzzle is a PHP HTTP client library",
-            "keywords": [
-                "client",
-                "curl",
-                "framework",
-                "http",
-                "http client",
-                "psr-18",
-                "psr-7",
-                "rest",
-                "web service"
-            ],
+            "description": "Add beautiful and user-friendly forms to your command-line applications.",
             "support": {
-                "issues": "https://github.com/guzzle/guzzle/issues",
-                "source": "https://github.com/guzzle/guzzle/tree/7.4.5"
+                "issues": "https://github.com/laravel/prompts/issues",
+                "source": "https://github.com/laravel/prompts/tree/v0.1.25"
             },
-            "funding": [
-                {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/Nyholm",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-06-20T22:16:13+00:00"
+            "time": "2024-08-12T22:06:33+00:00"
         },
         {
-            "name": "guzzlehttp/promises",
-            "version": "1.5.1",
+            "name": "laravel/serializable-closure",
+            "version": "v1.3.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/guzzle/promises.git",
-                "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
+                "url": "https://github.com/laravel/serializable-closure.git",
+                "reference": "4f48ade902b94323ca3be7646db16209ec76be3d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
-                "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
+                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d",
+                "reference": "4f48ade902b94323ca3be7646db16209ec76be3d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
+                "php": "^7.3|^8.0"
             },
             "require-dev": {
-                "symfony/phpunit-bridge": "^4.4 || ^5.1"
+                "illuminate/support": "^8.0|^9.0|^10.0|^11.0",
+                "nesbot/carbon": "^2.61|^3.0",
+                "pestphp/pest": "^1.21.3",
+                "phpstan/phpstan": "^1.8.2",
+                "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/functions_include.php"
-                ],
                 "psr-4": {
-                    "GuzzleHttp\\Promise\\": "src/"
+                    "Laravel\\SerializableClosure\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1660,210 +1837,332 @@
             ],
             "authors": [
                 {
-                    "name": "Graham Campbell",
-                    "email": "hello@gjcampbell.co.uk",
-                    "homepage": "https://github.com/GrahamCampbell"
-                },
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
                 },
                 {
-                    "name": "Tobias Nyholm",
-                    "email": "tobias.nyholm@gmail.com",
-                    "homepage": "https://github.com/Nyholm"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "email": "webmaster@tubo-world.de",
-                    "homepage": "https://github.com/Tobion"
+                    "name": "Nuno Maduro",
+                    "email": "nuno@laravel.com"
                 }
             ],
-            "description": "Guzzle promises library",
+            "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
             "keywords": [
-                "promise"
+                "closure",
+                "laravel",
+                "serializable"
             ],
             "support": {
-                "issues": "https://github.com/guzzle/promises/issues",
-                "source": "https://github.com/guzzle/promises/tree/1.5.1"
+                "issues": "https://github.com/laravel/serializable-closure/issues",
+                "source": "https://github.com/laravel/serializable-closure"
             },
-            "funding": [
-                {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/Nyholm",
-                    "type": "github"
-                },
+            "time": "2024-11-14T18:34:49+00:00"
+        },
+        {
+            "name": "laravel/tinker",
+            "version": "v2.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/tinker.git",
+                "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3",
+                "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3",
+                "shasum": ""
+            },
+            "require": {
+                "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+                "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+                "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+                "php": "^7.2.5|^8.0",
+                "psy/psysh": "^0.11.1|^0.12.0",
+                "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "~1.3.3|^1.4.2",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0"
+            },
+            "suggest": {
+                "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)."
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Laravel\\Tinker\\TinkerServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Laravel\\Tinker\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
-                    "type": "tidelift"
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
                 }
             ],
-            "time": "2021-10-22T20:56:57+00:00"
+            "description": "Powerful REPL for the Laravel framework.",
+            "keywords": [
+                "REPL",
+                "Tinker",
+                "laravel",
+                "psysh"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel/tinker/issues",
+                "source": "https://github.com/laravel/tinker/tree/v2.10.1"
+            },
+            "time": "2025-01-27T14:24:01+00:00"
         },
         {
-            "name": "guzzlehttp/psr7",
-            "version": "2.4.0",
+            "name": "league/commonmark",
+            "version": "2.6.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/guzzle/psr7.git",
-                "reference": "13388f00956b1503577598873fffb5ae994b5737"
+                "url": "https://github.com/thephpleague/commonmark.git",
+                "reference": "d990688c91cedfb69753ffc2512727ec646df2ad"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737",
-                "reference": "13388f00956b1503577598873fffb5ae994b5737",
+                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad",
+                "reference": "d990688c91cedfb69753ffc2512727ec646df2ad",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2.5 || ^8.0",
-                "psr/http-factory": "^1.0",
-                "psr/http-message": "^1.0",
-                "ralouphie/getallheaders": "^3.0"
-            },
-            "provide": {
-                "psr/http-factory-implementation": "1.0",
-                "psr/http-message-implementation": "1.0"
+                "ext-mbstring": "*",
+                "league/config": "^1.1.1",
+                "php": "^7.4 || ^8.0",
+                "psr/event-dispatcher": "^1.0",
+                "symfony/deprecation-contracts": "^2.1 || ^3.0",
+                "symfony/polyfill-php80": "^1.16"
             },
             "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.4.1",
-                "http-interop/http-factory-tests": "^0.9",
-                "phpunit/phpunit": "^8.5.8 || ^9.3.10"
+                "cebe/markdown": "^1.0",
+                "commonmark/cmark": "0.31.1",
+                "commonmark/commonmark.js": "0.31.1",
+                "composer/package-versions-deprecated": "^1.8",
+                "embed/embed": "^4.4",
+                "erusev/parsedown": "^1.0",
+                "ext-json": "*",
+                "github/gfm": "0.29.0",
+                "michelf/php-markdown": "^1.4 || ^2.0",
+                "nyholm/psr7": "^1.5",
+                "phpstan/phpstan": "^1.8.2",
+                "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
+                "scrutinizer/ocular": "^1.8.1",
+                "symfony/finder": "^5.3 | ^6.0 | ^7.0",
+                "symfony/process": "^5.4 | ^6.0 | ^7.0",
+                "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
+                "unleashedtech/php-coding-standard": "^3.1.1",
+                "vimeo/psalm": "^4.24.0 || ^5.0.0"
             },
             "suggest": {
-                "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+                "symfony/yaml": "v2.3+ required if using the Front Matter extension"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
+                    "dev-main": "2.7-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "GuzzleHttp\\Psr7\\": "src/"
+                    "League\\CommonMark\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Graham Campbell",
-                    "email": "hello@gjcampbell.co.uk",
-                    "homepage": "https://github.com/GrahamCampbell"
-                },
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
+                    "name": "Colin O'Dell",
+                    "email": "colinodell@gmail.com",
+                    "homepage": "https://www.colinodell.com",
+                    "role": "Lead Developer"
+                }
+            ],
+            "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)",
+            "homepage": "https://commonmark.thephpleague.com",
+            "keywords": [
+                "commonmark",
+                "flavored",
+                "gfm",
+                "github",
+                "github-flavored",
+                "markdown",
+                "md",
+                "parser"
+            ],
+            "support": {
+                "docs": "https://commonmark.thephpleague.com/",
+                "forum": "https://github.com/thephpleague/commonmark/discussions",
+                "issues": "https://github.com/thephpleague/commonmark/issues",
+                "rss": "https://github.com/thephpleague/commonmark/releases.atom",
+                "source": "https://github.com/thephpleague/commonmark"
+            },
+            "funding": [
                 {
-                    "name": "George Mponos",
-                    "email": "gmponos@gmail.com",
-                    "homepage": "https://github.com/gmponos"
+                    "url": "https://www.colinodell.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "name": "Tobias Nyholm",
-                    "email": "tobias.nyholm@gmail.com",
-                    "homepage": "https://github.com/Nyholm"
+                    "url": "https://www.paypal.me/colinpodell/10.00",
+                    "type": "custom"
                 },
                 {
-                    "name": "Márk Sági-Kazár",
-                    "email": "mark.sagikazar@gmail.com",
-                    "homepage": "https://github.com/sagikazarmark"
+                    "url": "https://github.com/colinodell",
+                    "type": "github"
                 },
                 {
-                    "name": "Tobias Schultze",
-                    "email": "webmaster@tubo-world.de",
-                    "homepage": "https://github.com/Tobion"
-                },
+                    "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-12-29T14:10:59+00:00"
+        },
+        {
+            "name": "league/config",
+            "version": "v1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/config.git",
+                "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
+                "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^3.0.1",
+                "nette/schema": "^1.2",
+                "php": "^7.4 || ^8.0"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^1.8.2",
+                "phpunit/phpunit": "^9.5.5",
+                "scrutinizer/ocular": "^1.8.1",
+                "unleashedtech/php-coding-standard": "^3.1",
+                "vimeo/psalm": "^4.7.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "League\\Config\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
                 {
-                    "name": "Márk Sági-Kazár",
-                    "email": "mark.sagikazar@gmail.com",
-                    "homepage": "https://sagikazarmark.hu"
+                    "name": "Colin O'Dell",
+                    "email": "colinodell@gmail.com",
+                    "homepage": "https://www.colinodell.com",
+                    "role": "Lead Developer"
                 }
             ],
-            "description": "PSR-7 message implementation that also provides common utility methods",
+            "description": "Define configuration arrays with strict schemas and access values with dot notation",
+            "homepage": "https://config.thephpleague.com",
             "keywords": [
-                "http",
-                "message",
-                "psr-7",
-                "request",
-                "response",
-                "stream",
-                "uri",
-                "url"
+                "array",
+                "config",
+                "configuration",
+                "dot",
+                "dot-access",
+                "nested",
+                "schema"
             ],
             "support": {
-                "issues": "https://github.com/guzzle/psr7/issues",
-                "source": "https://github.com/guzzle/psr7/tree/2.4.0"
+                "docs": "https://config.thephpleague.com/",
+                "issues": "https://github.com/thephpleague/config/issues",
+                "rss": "https://github.com/thephpleague/config/releases.atom",
+                "source": "https://github.com/thephpleague/config"
             },
             "funding": [
                 {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
+                    "url": "https://www.colinodell.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "url": "https://github.com/Nyholm",
-                    "type": "github"
+                    "url": "https://www.paypal.me/colinpodell/10.00",
+                    "type": "custom"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
-                    "type": "tidelift"
+                    "url": "https://github.com/colinodell",
+                    "type": "github"
                 }
             ],
-            "time": "2022-06-20T21:43:11+00:00"
+            "time": "2022-12-11T20:36:23+00:00"
         },
         {
-            "name": "intervention/image",
-            "version": "2.7.1",
+            "name": "league/csv",
+            "version": "9.22.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Intervention/image.git",
-                "reference": "744ebba495319501b873a4e48787759c72e3fb8c"
+                "url": "https://github.com/thephpleague/csv.git",
+                "reference": "afc109aa11f3086b8be8dfffa04ac31480b36b76"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Intervention/image/zipball/744ebba495319501b873a4e48787759c72e3fb8c",
-                "reference": "744ebba495319501b873a4e48787759c72e3fb8c",
+                "url": "https://api.github.com/repos/thephpleague/csv/zipball/afc109aa11f3086b8be8dfffa04ac31480b36b76",
+                "reference": "afc109aa11f3086b8be8dfffa04ac31480b36b76",
                 "shasum": ""
             },
             "require": {
-                "ext-fileinfo": "*",
-                "guzzlehttp/psr7": "~1.1 || ^2.0",
-                "php": ">=5.4.0"
+                "ext-filter": "*",
+                "php": "^8.1.2"
             },
             "require-dev": {
-                "mockery/mockery": "~0.9.2",
-                "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15"
+                "ext-dom": "*",
+                "ext-xdebug": "*",
+                "friendsofphp/php-cs-fixer": "^3.69.0",
+                "phpbench/phpbench": "^1.4.0",
+                "phpstan/phpstan": "^1.12.18",
+                "phpstan/phpstan-deprecation-rules": "^1.2.1",
+                "phpstan/phpstan-phpunit": "^1.4.2",
+                "phpstan/phpstan-strict-rules": "^1.6.2",
+                "phpunit/phpunit": "^10.5.16 || ^11.5.7",
+                "symfony/var-dumper": "^6.4.8 || ^7.2.3"
             },
             "suggest": {
-                "ext-gd": "to use GD library based image processing.",
-                "ext-imagick": "to use Imagick based image processing.",
-                "intervention/imagecache": "Caching extension for the Intervention Image library"
+                "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
+                "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters",
+                "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters",
+                "ext-mysqli": "Requiered to use the package with the MySQLi extension",
+                "ext-pdo": "Required to use the package with the PDO extension",
+                "ext-pgsql": "Requiered to use the package with the PgSQL extension",
+                "ext-sqlite3": "Required to use the package with the SQLite3 extension"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.4-dev"
-                },
-                "laravel": {
-                    "providers": [
-                        "Intervention\\Image\\ImageServiceProvider"
-                    ],
-                    "aliases": {
-                        "Image": "Intervention\\Image\\Facades\\Image"
-                    }
+                    "dev-master": "9.x-dev"
                 }
             },
             "autoload": {
+                "files": [
+                    "src/functions_include.php"
+                ],
                 "psr-4": {
-                    "Intervention\\Image\\": "src/Intervention/Image"
+                    "League\\Csv\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1872,138 +2171,342 @@
             ],
             "authors": [
                 {
-                    "name": "Oliver Vogel",
-                    "email": "oliver@olivervogel.com",
-                    "homepage": "http://olivervogel.com/"
+                    "name": "Ignace Nyamagana Butera",
+                    "email": "nyamsprod@gmail.com",
+                    "homepage": "https://github.com/nyamsprod/",
+                    "role": "Developer"
                 }
             ],
-            "description": "Image handling and manipulation library with support for Laravel integration",
-            "homepage": "http://image.intervention.io/",
+            "description": "CSV data manipulation made easy in PHP",
+            "homepage": "https://csv.thephpleague.com",
             "keywords": [
-                "gd",
-                "image",
-                "imagick",
-                "laravel",
-                "thumbnail",
-                "watermark"
+                "convert",
+                "csv",
+                "export",
+                "filter",
+                "import",
+                "read",
+                "transform",
+                "write"
             ],
             "support": {
-                "issues": "https://github.com/Intervention/image/issues",
-                "source": "https://github.com/Intervention/image/tree/2.7.1"
+                "docs": "https://csv.thephpleague.com",
+                "issues": "https://github.com/thephpleague/csv/issues",
+                "rss": "https://github.com/thephpleague/csv/releases.atom",
+                "source": "https://github.com/thephpleague/csv"
             },
             "funding": [
                 {
-                    "url": "https://www.paypal.me/interventionphp",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/Intervention",
+                    "url": "https://github.com/sponsors/nyamsprod",
                     "type": "github"
                 }
             ],
-            "time": "2021-12-16T16:49:26+00:00"
+            "time": "2025-02-28T10:00:39+00:00"
         },
         {
-            "name": "james-heinrich/getid3",
-            "version": "v1.9.21",
+            "name": "league/flysystem",
+            "version": "3.29.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/JamesHeinrich/getID3.git",
-                "reference": "36f5dabb1325415a4b07a401113f8db2eb81eca1"
+                "url": "https://github.com/thephpleague/flysystem.git",
+                "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/36f5dabb1325415a4b07a401113f8db2eb81eca1",
-                "reference": "36f5dabb1325415a4b07a401113f8db2eb81eca1",
+                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319",
+                "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "league/flysystem-local": "^3.0.0",
+                "league/mime-type-detection": "^1.0.0",
+                "php": "^8.0.2"
+            },
+            "conflict": {
+                "async-aws/core": "<1.19.0",
+                "async-aws/s3": "<1.14.0",
+                "aws/aws-sdk-php": "3.209.31 || 3.210.0",
+                "guzzlehttp/guzzle": "<7.0",
+                "guzzlehttp/ringphp": "<1.1.1",
+                "phpseclib/phpseclib": "3.0.15",
+                "symfony/http-client": "<5.2"
             },
             "require-dev": {
-                "php-parallel-lint/php-parallel-lint": "^1.0"
+                "async-aws/s3": "^1.5 || ^2.0",
+                "async-aws/simple-s3": "^1.1 || ^2.0",
+                "aws/aws-sdk-php": "^3.295.10",
+                "composer/semver": "^3.0",
+                "ext-fileinfo": "*",
+                "ext-ftp": "*",
+                "ext-mongodb": "^1.3",
+                "ext-zip": "*",
+                "friendsofphp/php-cs-fixer": "^3.5",
+                "google/cloud-storage": "^1.23",
+                "guzzlehttp/psr7": "^2.6",
+                "microsoft/azure-storage-blob": "^1.1",
+                "mongodb/mongodb": "^1.2",
+                "phpseclib/phpseclib": "^3.0.36",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^9.5.11|^10.0",
+                "sabre/dav": "^4.6.0"
             },
-            "suggest": {
-                "ext-SimpleXML": "SimpleXML extension is required to analyze RIFF/WAV/BWF audio files (also requires `ext-libxml`).",
-                "ext-com_dotnet": "COM extension is required when loading files larger than 2GB on Windows.",
-                "ext-ctype": "ctype extension is required when loading files larger than 2GB on 32-bit PHP (also on 64-bit PHP on Windows) or executing `getid3_lib::CopyTagsToComments`.",
-                "ext-dba": "DBA extension is required to use the DBA database as a cache storage.",
-                "ext-exif": "EXIF extension is required for graphic modules.",
-                "ext-iconv": "iconv extension is required to work with different character sets (when `ext-mbstring` is not available).",
-                "ext-json": "JSON extension is required to analyze Apple Quicktime videos.",
-                "ext-libxml": "libxml extension is required to analyze RIFF/WAV/BWF audio files.",
-                "ext-mbstring": "mbstring extension is required to work with different character sets.",
-                "ext-mysql": "MySQL extension is required to use the MySQL database as a cache storage (deprecated in PHP 5.5, removed in PHP >= 7.0, use `ext-mysqli` instead).",
-                "ext-mysqli": "MySQLi extension is required to use the MySQL database as a cache storage.",
-                "ext-rar": "RAR extension is required for RAR archive module.",
-                "ext-sqlite3": "SQLite3 extension is required to use the SQLite3 database as a cache storage.",
-                "ext-xml": "XML extension is required for graphic modules to analyze the XML metadata.",
-                "ext-zlib": "Zlib extension is required for archive modules and compressed metadata."
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "League\\Flysystem\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Frank de Jonge",
+                    "email": "info@frankdejonge.nl"
+                }
+            ],
+            "description": "File storage abstraction for PHP",
+            "keywords": [
+                "WebDAV",
+                "aws",
+                "cloud",
+                "file",
+                "files",
+                "filesystem",
+                "filesystems",
+                "ftp",
+                "s3",
+                "sftp",
+                "storage"
+            ],
+            "support": {
+                "issues": "https://github.com/thephpleague/flysystem/issues",
+                "source": "https://github.com/thephpleague/flysystem/tree/3.29.1"
+            },
+            "time": "2024-10-08T08:58:34+00:00"
+        },
+        {
+            "name": "league/flysystem-local",
+            "version": "3.29.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/flysystem-local.git",
+                "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27",
+                "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27",
+                "shasum": ""
+            },
+            "require": {
+                "ext-fileinfo": "*",
+                "league/flysystem": "^3.0.0",
+                "league/mime-type-detection": "^1.0.0",
+                "php": "^8.0.2"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.9.x-dev"
+            "autoload": {
+                "psr-4": {
+                    "League\\Flysystem\\Local\\": ""
                 }
             },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Frank de Jonge",
+                    "email": "info@frankdejonge.nl"
+                }
+            ],
+            "description": "Local filesystem adapter for Flysystem.",
+            "keywords": [
+                "Flysystem",
+                "file",
+                "files",
+                "filesystem",
+                "local"
+            ],
+            "support": {
+                "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0"
+            },
+            "time": "2024-08-09T21:24:39+00:00"
+        },
+        {
+            "name": "league/glide",
+            "version": "2.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/glide.git",
+                "reference": "62fc5ebd579e013e7573c00d1fb7e083ed395f00"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/glide/zipball/62fc5ebd579e013e7573c00d1fb7e083ed395f00",
+                "reference": "62fc5ebd579e013e7573c00d1fb7e083ed395f00",
+                "shasum": ""
+            },
+            "require": {
+                "intervention/image": "^2.7",
+                "league/flysystem": "^2.0|^3.0",
+                "php": "^7.2|^8.0",
+                "psr/http-message": "^1.0|^2.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "^1.3.3",
+                "phpunit/php-token-stream": "^3.1|^4.0",
+                "phpunit/phpunit": "^8.5|^9.0"
+            },
+            "type": "library",
             "autoload": {
-                "classmap": [
-                    "getid3/"
-                ]
+                "psr-4": {
+                    "League\\Glide\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jonathan Reinink",
+                    "email": "jonathan@reinink.ca",
+                    "homepage": "http://reinink.ca"
+                },
+                {
+                    "name": "Titouan Galopin",
+                    "email": "galopintitouan@gmail.com",
+                    "homepage": "https://titouangalopin.com"
+                }
+            ],
+            "description": "Wonderfully easy on-demand image manipulation library with an HTTP based API.",
+            "homepage": "http://glide.thephpleague.com",
+            "keywords": [
+                "ImageMagick",
+                "editing",
+                "gd",
+                "image",
+                "imagick",
+                "league",
+                "manipulation",
+                "processing"
+            ],
+            "support": {
+                "issues": "https://github.com/thephpleague/glide/issues",
+                "source": "https://github.com/thephpleague/glide/tree/2.3.1"
+            },
+            "time": "2024-12-17T05:40:16+00:00"
+        },
+        {
+            "name": "league/mime-type-detection",
+            "version": "1.16.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/mime-type-detection.git",
+                "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9",
+                "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9",
+                "shasum": ""
+            },
+            "require": {
+                "ext-fileinfo": "*",
+                "php": "^7.4 || ^8.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3.2",
+                "phpstan/phpstan": "^0.12.68",
+                "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "League\\MimeTypeDetection\\": "src"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "GPL-1.0-or-later",
-                "LGPL-3.0-only",
-                "MPL-2.0"
+                "MIT"
             ],
-            "description": "PHP script that extracts useful information from popular multimedia file formats",
-            "homepage": "https://www.getid3.org/",
-            "keywords": [
-                "codecs",
-                "php",
-                "tags"
+            "authors": [
+                {
+                    "name": "Frank de Jonge",
+                    "email": "info@frankdejonge.nl"
+                }
             ],
+            "description": "Mime-type detection for Flysystem",
             "support": {
-                "issues": "https://github.com/JamesHeinrich/getID3/issues",
-                "source": "https://github.com/JamesHeinrich/getID3/tree/v1.9.21"
+                "issues": "https://github.com/thephpleague/mime-type-detection/issues",
+                "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0"
             },
-            "time": "2021-09-22T16:34:51+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/frankdejonge",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-21T08:32:55+00:00"
         },
         {
-            "name": "justinrainbow/json-schema",
-            "version": "5.2.12",
+            "name": "livewire/livewire",
+            "version": "v3.6.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60"
+                "url": "https://github.com/livewire/livewire.git",
+                "reference": "ef04be759da41b14d2d129e670533180a44987dc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60",
-                "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60",
+                "url": "https://api.github.com/repos/livewire/livewire/zipball/ef04be759da41b14d2d129e670533180a44987dc",
+                "reference": "ef04be759da41b14d2d129e670533180a44987dc",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "illuminate/database": "^10.0|^11.0|^12.0",
+                "illuminate/routing": "^10.0|^11.0|^12.0",
+                "illuminate/support": "^10.0|^11.0|^12.0",
+                "illuminate/validation": "^10.0|^11.0|^12.0",
+                "laravel/prompts": "^0.1.24|^0.2|^0.3",
+                "league/mime-type-detection": "^1.9",
+                "php": "^8.1",
+                "symfony/console": "^6.0|^7.0",
+                "symfony/http-kernel": "^6.2|^7.0"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
-                "json-schema/json-schema-test-suite": "1.2.0",
-                "phpunit/phpunit": "^4.8.35"
+                "calebporzio/sushi": "^2.1",
+                "laravel/framework": "^10.15.0|^11.0|^12.0",
+                "mockery/mockery": "^1.3.1",
+                "orchestra/testbench": "^8.21.0|^9.0|^10.0",
+                "orchestra/testbench-dusk": "^8.24|^9.1|^10.0",
+                "phpunit/phpunit": "^10.4|^11.5",
+                "psy/psysh": "^0.11.22|^0.12"
             },
-            "bin": [
-                "bin/validate-json"
-            ],
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "5.0.x-dev"
+                "laravel": {
+                    "aliases": {
+                        "Livewire": "Livewire\\Livewire"
+                    },
+                    "providers": [
+                        "Livewire\\LivewireServiceProvider"
+                    ]
                 }
             },
             "autoload": {
+                "files": [
+                    "src/helpers.php"
+                ],
                 "psr-4": {
-                    "JsonSchema\\": "src/JsonSchema/"
+                    "Livewire\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2012,183 +2515,60 @@
             ],
             "authors": [
                 {
-                    "name": "Bruno Prieto Reis",
-                    "email": "bruno.p.reis@gmail.com"
-                },
-                {
-                    "name": "Justin Rainbow",
-                    "email": "justin.rainbow@gmail.com"
-                },
-                {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
-                },
-                {
-                    "name": "Robert Schönthal",
-                    "email": "seroscho@googlemail.com"
+                    "name": "Caleb Porzio",
+                    "email": "calebporzio@gmail.com"
                 }
             ],
-            "description": "A library to validate a json schema.",
-            "homepage": "https://github.com/justinrainbow/json-schema",
-            "keywords": [
-                "json",
-                "schema"
-            ],
+            "description": "A front-end framework for Laravel.",
             "support": {
-                "issues": "https://github.com/justinrainbow/json-schema/issues",
-                "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12"
+                "issues": "https://github.com/livewire/livewire/issues",
+                "source": "https://github.com/livewire/livewire/tree/v3.6.4"
             },
-            "time": "2022-04-13T08:02:27+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/livewire",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-07-17T05:12:15+00:00"
         },
         {
-            "name": "laravel/framework",
-            "version": "v8.83.10",
+            "name": "maennchen/zipstream-php",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/laravel/framework.git",
-                "reference": "148ae59b7da6c3db6736374d357c5aaef9506fb7"
+                "url": "https://github.com/maennchen/ZipStream-PHP.git",
+                "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/148ae59b7da6c3db6736374d357c5aaef9506fb7",
-                "reference": "148ae59b7da6c3db6736374d357c5aaef9506fb7",
+                "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f",
+                "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f",
                 "shasum": ""
             },
             "require": {
-                "doctrine/inflector": "^1.4|^2.0",
-                "dragonmantank/cron-expression": "^3.0.2",
-                "egulias/email-validator": "^2.1.10",
-                "ext-json": "*",
                 "ext-mbstring": "*",
-                "ext-openssl": "*",
-                "laravel/serializable-closure": "^1.0",
-                "league/commonmark": "^1.3|^2.0.2",
-                "league/flysystem": "^1.1",
-                "monolog/monolog": "^2.0",
-                "nesbot/carbon": "^2.53.1",
-                "opis/closure": "^3.6",
-                "php": "^7.3|^8.0",
-                "psr/container": "^1.0",
-                "psr/log": "^1.0|^2.0",
-                "psr/simple-cache": "^1.0",
-                "ramsey/uuid": "^4.2.2",
-                "swiftmailer/swiftmailer": "^6.3",
-                "symfony/console": "^5.4",
-                "symfony/error-handler": "^5.4",
-                "symfony/finder": "^5.4",
-                "symfony/http-foundation": "^5.4",
-                "symfony/http-kernel": "^5.4",
-                "symfony/mime": "^5.4",
-                "symfony/process": "^5.4",
-                "symfony/routing": "^5.4",
-                "symfony/var-dumper": "^5.4",
-                "tijsverkoyen/css-to-inline-styles": "^2.2.2",
-                "vlucas/phpdotenv": "^5.4.1",
-                "voku/portable-ascii": "^1.6.1"
-            },
-            "conflict": {
-                "tightenco/collect": "<5.5.33"
-            },
-            "provide": {
-                "psr/container-implementation": "1.0",
-                "psr/simple-cache-implementation": "1.0"
-            },
-            "replace": {
-                "illuminate/auth": "self.version",
-                "illuminate/broadcasting": "self.version",
-                "illuminate/bus": "self.version",
-                "illuminate/cache": "self.version",
-                "illuminate/collections": "self.version",
-                "illuminate/config": "self.version",
-                "illuminate/console": "self.version",
-                "illuminate/container": "self.version",
-                "illuminate/contracts": "self.version",
-                "illuminate/cookie": "self.version",
-                "illuminate/database": "self.version",
-                "illuminate/encryption": "self.version",
-                "illuminate/events": "self.version",
-                "illuminate/filesystem": "self.version",
-                "illuminate/hashing": "self.version",
-                "illuminate/http": "self.version",
-                "illuminate/log": "self.version",
-                "illuminate/macroable": "self.version",
-                "illuminate/mail": "self.version",
-                "illuminate/notifications": "self.version",
-                "illuminate/pagination": "self.version",
-                "illuminate/pipeline": "self.version",
-                "illuminate/queue": "self.version",
-                "illuminate/redis": "self.version",
-                "illuminate/routing": "self.version",
-                "illuminate/session": "self.version",
-                "illuminate/support": "self.version",
-                "illuminate/testing": "self.version",
-                "illuminate/translation": "self.version",
-                "illuminate/validation": "self.version",
-                "illuminate/view": "self.version"
+                "ext-zlib": "*",
+                "php-64bit": "^8.2"
             },
             "require-dev": {
-                "aws/aws-sdk-php": "^3.198.1",
-                "doctrine/dbal": "^2.13.3|^3.1.4",
-                "filp/whoops": "^2.14.3",
-                "guzzlehttp/guzzle": "^6.5.5|^7.0.1",
-                "league/flysystem-cached-adapter": "^1.0",
-                "mockery/mockery": "^1.4.4",
-                "orchestra/testbench-core": "^6.27",
-                "pda/pheanstalk": "^4.0",
-                "phpunit/phpunit": "^8.5.19|^9.5.8",
-                "predis/predis": "^1.1.9",
-                "symfony/cache": "^5.4"
+                "brianium/paratest": "^7.7",
+                "ext-zip": "*",
+                "friendsofphp/php-cs-fixer": "^3.16",
+                "guzzlehttp/guzzle": "^7.5",
+                "mikey179/vfsstream": "^1.6",
+                "php-coveralls/php-coveralls": "^2.5",
+                "phpunit/phpunit": "^11.0",
+                "vimeo/psalm": "^6.0"
             },
             "suggest": {
-                "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
-                "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).",
-                "brianium/paratest": "Required to run tests in parallel (^6.0).",
-                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
-                "ext-bcmath": "Required to use the multiple_of validation rule.",
-                "ext-ftp": "Required to use the Flysystem FTP driver.",
-                "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
-                "ext-memcached": "Required to use the memcache cache driver.",
-                "ext-pcntl": "Required to use all features of the queue worker.",
-                "ext-posix": "Required to use all features of the queue worker.",
-                "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).",
-                "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
-                "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
-                "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).",
-                "laravel/tinker": "Required to use the tinker console command (^2.0).",
-                "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
-                "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
-                "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
-                "mockery/mockery": "Required to use mocking (^1.4.4).",
-                "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
-                "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
-                "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).",
-                "predis/predis": "Required to use the predis connector (^1.1.9).",
-                "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
-                "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).",
-                "symfony/cache": "Required to PSR-6 cache bridge (^5.4).",
-                "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).",
-                "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).",
-                "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)."
+                "guzzlehttp/psr7": "^2.4",
+                "psr/http-message": "^2.0"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "8.x-dev"
-                }
-            },
             "autoload": {
-                "files": [
-                    "src/Illuminate/Collections/helpers.php",
-                    "src/Illuminate/Events/functions.php",
-                    "src/Illuminate/Foundation/helpers.php",
-                    "src/Illuminate/Support/helpers.php"
-                ],
                 "psr-4": {
-                    "Illuminate\\": "src/Illuminate/",
-                    "Illuminate\\Support\\": [
-                        "src/Illuminate/Macroable/",
-                        "src/Illuminate/Collections/"
-                    ]
+                    "ZipStream\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2197,53 +2577,80 @@
             ],
             "authors": [
                 {
-                    "name": "Taylor Otwell",
-                    "email": "taylor@laravel.com"
+                    "name": "Paul Duncan",
+                    "email": "pabs@pablotron.org"
+                },
+                {
+                    "name": "Jonatan Männchen",
+                    "email": "jonatan@maennchen.ch"
+                },
+                {
+                    "name": "Jesse Donat",
+                    "email": "donatj@gmail.com"
+                },
+                {
+                    "name": "András Kolesár",
+                    "email": "kolesar@kolesar.hu"
                 }
             ],
-            "description": "The Laravel Framework.",
-            "homepage": "https://laravel.com",
+            "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
             "keywords": [
-                "framework",
-                "laravel"
+                "stream",
+                "zip"
             ],
             "support": {
-                "issues": "https://github.com/laravel/framework/issues",
-                "source": "https://github.com/laravel/framework"
+                "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
+                "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2"
             },
-            "time": "2022-04-27T14:07:37+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/maennchen",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-01-27T12:07:53+00:00"
         },
         {
-            "name": "laravel/helpers",
-            "version": "v1.5.0",
+            "name": "meilisearch/meilisearch-php",
+            "version": "v1.13.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/laravel/helpers.git",
-                "reference": "c28b0ccd799d58564c41a62395ac9511a1e72931"
+                "url": "https://github.com/meilisearch/meilisearch-php.git",
+                "reference": "16a3c31ddbe8eaec3aa1e1da3bada906d57dfc66"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/helpers/zipball/c28b0ccd799d58564c41a62395ac9511a1e72931",
-                "reference": "c28b0ccd799d58564c41a62395ac9511a1e72931",
+                "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/16a3c31ddbe8eaec3aa1e1da3bada906d57dfc66",
+                "reference": "16a3c31ddbe8eaec3aa1e1da3bada906d57dfc66",
                 "shasum": ""
             },
             "require": {
-                "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0|^9.0",
-                "php": "^7.1.3|^8.0"
+                "ext-json": "*",
+                "php": "^7.4 || ^8.0",
+                "php-http/discovery": "^1.7",
+                "psr/http-client": "^1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^7.0|^8.0|^9.0"
+                "guzzlehttp/guzzle": "^7.8.1",
+                "http-interop/http-factory-guzzle": "^1.2.0",
+                "php-cs-fixer/shim": "^3.59.3",
+                "phpstan/extension-installer": "^1.4.1",
+                "phpstan/phpstan": "^2.0",
+                "phpstan/phpstan-deprecation-rules": "^2.0",
+                "phpstan/phpstan-phpunit": "^2.0",
+                "phpstan/phpstan-strict-rules": "^2.0",
+                "phpunit/phpunit": "^9.5 || ^10.5"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
+            "suggest": {
+                "guzzlehttp/guzzle": "Use Guzzle ^7 as HTTP client",
+                "http-interop/http-factory-guzzle": "Factory for guzzlehttp/guzzle"
             },
+            "type": "library",
             "autoload": {
-                "files": [
-                    "src/helpers.php"
-                ]
+                "psr-4": {
+                    "MeiliSearch\\": "src/",
+                    "Meilisearch\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -2251,126 +2658,146 @@
             ],
             "authors": [
                 {
-                    "name": "Taylor Otwell",
-                    "email": "taylor@laravel.com"
-                },
-                {
-                    "name": "Dries Vints",
-                    "email": "dries@laravel.com"
+                    "name": "Clementine",
+                    "email": "clementine@meilisearch.com"
                 }
             ],
-            "description": "Provides backwards compatibility for helpers in the latest Laravel release.",
+            "description": "PHP wrapper for the Meilisearch API",
             "keywords": [
-                "helpers",
-                "laravel"
+                "api",
+                "client",
+                "instant",
+                "meilisearch",
+                "php",
+                "search"
             ],
             "support": {
-                "source": "https://github.com/laravel/helpers/tree/v1.5.0"
+                "issues": "https://github.com/meilisearch/meilisearch-php/issues",
+                "source": "https://github.com/meilisearch/meilisearch-php/tree/v1.13.0"
             },
-            "time": "2022-01-12T15:58:51+00:00"
+            "time": "2025-02-17T12:48:45+00:00"
         },
         {
-            "name": "laravel/serializable-closure",
-            "version": "v1.1.1",
+            "name": "michelf/php-smartypants",
+            "version": "1.8.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/laravel/serializable-closure.git",
-                "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e"
+                "url": "https://github.com/michelf/php-smartypants.git",
+                "reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e",
-                "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e",
+                "url": "https://api.github.com/repos/michelf/php-smartypants/zipball/47d17c90a4dfd0ccf1f87e25c65e6c8012415aad",
+                "reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.3|^8.0"
-            },
-            "require-dev": {
-                "pestphp/pest": "^1.18",
-                "phpstan/phpstan": "^0.12.98",
-                "symfony/var-dumper": "^5.3"
+                "php": ">=5.3.0"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Laravel\\SerializableClosure\\": "src/"
+                "psr-0": {
+                    "Michelf": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Taylor Otwell",
-                    "email": "taylor@laravel.com"
+                    "name": "Michel Fortin",
+                    "email": "michel.fortin@michelf.ca",
+                    "homepage": "https://michelf.ca/",
+                    "role": "Developer"
                 },
                 {
-                    "name": "Nuno Maduro",
-                    "email": "nuno@laravel.com"
+                    "name": "John Gruber",
+                    "homepage": "https://daringfireball.net/"
                 }
             ],
-            "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+            "description": "PHP SmartyPants",
+            "homepage": "https://michelf.ca/projects/php-smartypants/",
             "keywords": [
-                "closure",
-                "laravel",
-                "serializable"
+                "dashes",
+                "quotes",
+                "spaces",
+                "typographer",
+                "typography"
             ],
             "support": {
-                "issues": "https://github.com/laravel/serializable-closure/issues",
-                "source": "https://github.com/laravel/serializable-closure"
+                "issues": "https://github.com/michelf/php-smartypants/issues",
+                "source": "https://github.com/michelf/php-smartypants/tree/1.8.1"
             },
-            "time": "2022-02-11T19:23:53+00:00"
+            "time": "2016-12-13T01:01:17+00:00"
         },
         {
-            "name": "laravel/tinker",
-            "version": "v2.7.2",
+            "name": "monolog/monolog",
+            "version": "3.8.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/laravel/tinker.git",
-                "reference": "dff39b661e827dae6e092412f976658df82dbac5"
+                "url": "https://github.com/Seldaek/monolog.git",
+                "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5",
-                "reference": "dff39b661e827dae6e092412f976658df82dbac5",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4",
+                "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4",
                 "shasum": ""
             },
             "require": {
-                "illuminate/console": "^6.0|^7.0|^8.0|^9.0",
-                "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0",
-                "illuminate/support": "^6.0|^7.0|^8.0|^9.0",
-                "php": "^7.2.5|^8.0",
-                "psy/psysh": "^0.10.4|^0.11.1",
-                "symfony/var-dumper": "^4.3.4|^5.0|^6.0"
+                "php": ">=8.1",
+                "psr/log": "^2.0 || ^3.0"
+            },
+            "provide": {
+                "psr/log-implementation": "3.0.0"
             },
             "require-dev": {
-                "mockery/mockery": "~1.3.3|^1.4.2",
-                "phpunit/phpunit": "^8.5.8|^9.3.3"
+                "aws/aws-sdk-php": "^3.0",
+                "doctrine/couchdb": "~1.0@dev",
+                "elasticsearch/elasticsearch": "^7 || ^8",
+                "ext-json": "*",
+                "graylog2/gelf-php": "^1.4.2 || ^2.0",
+                "guzzlehttp/guzzle": "^7.4.5",
+                "guzzlehttp/psr7": "^2.2",
+                "mongodb/mongodb": "^1.8",
+                "php-amqplib/php-amqplib": "~2.4 || ^3",
+                "php-console/php-console": "^3.1.8",
+                "phpstan/phpstan": "^2",
+                "phpstan/phpstan-deprecation-rules": "^2",
+                "phpstan/phpstan-strict-rules": "^2",
+                "phpunit/phpunit": "^10.5.17 || ^11.0.7",
+                "predis/predis": "^1.1 || ^2",
+                "rollbar/rollbar": "^4.0",
+                "ruflin/elastica": "^7 || ^8",
+                "symfony/mailer": "^5.4 || ^6",
+                "symfony/mime": "^5.4 || ^6"
             },
             "suggest": {
-                "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)."
+                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+                "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
+                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+                "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
+                "ext-mbstring": "Allow to work properly with unicode symbols",
+                "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
+                "ext-openssl": "Required to send log messages using SSL",
+                "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
+                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+                "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
+                "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+                "rollbar/rollbar": "Allow sending log messages to Rollbar",
+                "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "2.x-dev"
-                },
-                "laravel": {
-                    "providers": [
-                        "Laravel\\Tinker\\TinkerServiceProvider"
-                    ]
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Laravel\\Tinker\\": "src/"
+                    "Monolog\\": "src/Monolog"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2379,391 +2806,391 @@
             ],
             "authors": [
                 {
-                    "name": "Taylor Otwell",
-                    "email": "taylor@laravel.com"
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "https://seld.be"
                 }
             ],
-            "description": "Powerful REPL for the Laravel framework.",
+            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+            "homepage": "https://github.com/Seldaek/monolog",
             "keywords": [
-                "REPL",
-                "Tinker",
-                "laravel",
-                "psysh"
+                "log",
+                "logging",
+                "psr-3"
             ],
             "support": {
-                "issues": "https://github.com/laravel/tinker/issues",
-                "source": "https://github.com/laravel/tinker/tree/v2.7.2"
+                "issues": "https://github.com/Seldaek/monolog/issues",
+                "source": "https://github.com/Seldaek/monolog/tree/3.8.1"
             },
-            "time": "2022-03-23T12:38:24+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/Seldaek",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-12-05T17:15:07+00:00"
         },
         {
-            "name": "league/commonmark",
-            "version": "1.6.7",
+            "name": "nesbot/carbon",
+            "version": "2.73.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/thephpleague/commonmark.git",
-                "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b"
+                "url": "https://github.com/CarbonPHP/carbon.git",
+                "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2b8185c13bc9578367a5bf901881d1c1b5bbd09b",
-                "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b",
+                "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075",
+                "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075",
                 "shasum": ""
             },
             "require": {
-                "ext-mbstring": "*",
-                "php": "^7.1 || ^8.0"
+                "carbonphp/carbon-doctrine-types": "*",
+                "ext-json": "*",
+                "php": "^7.1.8 || ^8.0",
+                "psr/clock": "^1.0",
+                "symfony/polyfill-mbstring": "^1.0",
+                "symfony/polyfill-php80": "^1.16",
+                "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
             },
-            "conflict": {
-                "scrutinizer/ocular": "1.7.*"
+            "provide": {
+                "psr/clock-implementation": "1.0"
             },
             "require-dev": {
-                "cebe/markdown": "~1.0",
-                "commonmark/commonmark.js": "0.29.2",
-                "erusev/parsedown": "~1.0",
-                "ext-json": "*",
-                "github/gfm": "0.29.0",
-                "michelf/php-markdown": "~1.4",
-                "mikehaertl/php-shellcommand": "^1.4",
-                "phpstan/phpstan": "^0.12.90",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2",
-                "scrutinizer/ocular": "^1.5",
-                "symfony/finder": "^4.2"
+                "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0",
+                "doctrine/orm": "^2.7 || ^3.0",
+                "friendsofphp/php-cs-fixer": "^3.0",
+                "kylekatarnls/multi-tester": "^2.0",
+                "ondrejmirtes/better-reflection": "<6",
+                "phpmd/phpmd": "^2.9",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^0.12.99 || ^1.7.14",
+                "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20",
+                "squizlabs/php_codesniffer": "^3.4"
             },
             "bin": [
-                "bin/commonmark"
+                "bin/carbon"
             ],
             "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Carbon\\Laravel\\ServiceProvider"
+                    ]
+                },
+                "phpstan": {
+                    "includes": [
+                        "extension.neon"
+                    ]
+                },
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev",
+                    "dev-master": "3.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "League\\CommonMark\\": "src"
+                    "Carbon\\": "src/Carbon/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Colin O'Dell",
-                    "email": "colinodell@gmail.com",
-                    "homepage": "https://www.colinodell.com",
-                    "role": "Lead Developer"
+                    "name": "Brian Nesbitt",
+                    "email": "brian@nesbot.com",
+                    "homepage": "https://markido.com"
+                },
+                {
+                    "name": "kylekatarnls",
+                    "homepage": "https://github.com/kylekatarnls"
                 }
             ],
-            "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)",
-            "homepage": "https://commonmark.thephpleague.com",
+            "description": "An API extension for DateTime that supports 281 different languages.",
+            "homepage": "https://carbon.nesbot.com",
             "keywords": [
-                "commonmark",
-                "flavored",
-                "gfm",
-                "github",
-                "github-flavored",
-                "markdown",
-                "md",
-                "parser"
+                "date",
+                "datetime",
+                "time"
             ],
             "support": {
-                "docs": "https://commonmark.thephpleague.com/",
-                "issues": "https://github.com/thephpleague/commonmark/issues",
-                "rss": "https://github.com/thephpleague/commonmark/releases.atom",
-                "source": "https://github.com/thephpleague/commonmark"
+                "docs": "https://carbon.nesbot.com/docs",
+                "issues": "https://github.com/briannesbitt/Carbon/issues",
+                "source": "https://github.com/briannesbitt/Carbon"
             },
             "funding": [
                 {
-                    "url": "https://www.colinodell.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.paypal.me/colinpodell/10.00",
-                    "type": "custom"
+                    "url": "https://github.com/sponsors/kylekatarnls",
+                    "type": "github"
                 },
                 {
-                    "url": "https://github.com/colinodell",
-                    "type": "github"
+                    "url": "https://opencollective.com/Carbon#sponsor",
+                    "type": "opencollective"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
+                    "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme",
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-13T17:18:13+00:00"
+            "time": "2025-01-08T20:10:23+00:00"
         },
         {
-            "name": "league/csv",
-            "version": "9.8.0",
+            "name": "nette/schema",
+            "version": "v1.3.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/thephpleague/csv.git",
-                "reference": "9d2e0265c5d90f5dd601bc65ff717e05cec19b47"
+                "url": "https://github.com/nette/schema.git",
+                "reference": "da801d52f0354f70a638673c4a0f04e16529431d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/csv/zipball/9d2e0265c5d90f5dd601bc65ff717e05cec19b47",
-                "reference": "9d2e0265c5d90f5dd601bc65ff717e05cec19b47",
+                "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d",
+                "reference": "da801d52f0354f70a638673c4a0f04e16529431d",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "php": "^7.4 || ^8.0"
+                "nette/utils": "^4.0",
+                "php": "8.1 - 8.4"
             },
             "require-dev": {
-                "ext-curl": "*",
-                "ext-dom": "*",
-                "friendsofphp/php-cs-fixer": "^v3.4.0",
-                "phpstan/phpstan": "^1.3.0",
-                "phpstan/phpstan-phpunit": "^1.0.0",
-                "phpstan/phpstan-strict-rules": "^1.1.0",
-                "phpunit/phpunit": "^9.5.11"
-            },
-            "suggest": {
-                "ext-dom": "Required to use the XMLConverter and or the HTMLConverter classes",
-                "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters"
+                "nette/tester": "^2.5.2",
+                "phpstan/phpstan-nette": "^1.0",
+                "tracy/tracy": "^2.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "9.x-dev"
+                    "dev-master": "1.3-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/functions_include.php"
-                ],
-                "psr-4": {
-                    "League\\Csv\\": "src"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause",
+                "GPL-2.0-only",
+                "GPL-3.0-only"
             ],
             "authors": [
                 {
-                    "name": "Ignace Nyamagana Butera",
-                    "email": "nyamsprod@gmail.com",
-                    "homepage": "https://github.com/nyamsprod/",
-                    "role": "Developer"
+                    "name": "David Grudl",
+                    "homepage": "https://davidgrudl.com"
+                },
+                {
+                    "name": "Nette Community",
+                    "homepage": "https://nette.org/contributors"
                 }
             ],
-            "description": "CSV data manipulation made easy in PHP",
-            "homepage": "https://csv.thephpleague.com",
+            "description": "📐 Nette Schema: validating data structures against a given Schema.",
+            "homepage": "https://nette.org",
             "keywords": [
-                "convert",
-                "csv",
-                "export",
-                "filter",
-                "import",
-                "read",
-                "transform",
-                "write"
+                "config",
+                "nette"
             ],
             "support": {
-                "docs": "https://csv.thephpleague.com",
-                "issues": "https://github.com/thephpleague/csv/issues",
-                "rss": "https://github.com/thephpleague/csv/releases.atom",
-                "source": "https://github.com/thephpleague/csv"
+                "issues": "https://github.com/nette/schema/issues",
+                "source": "https://github.com/nette/schema/tree/v1.3.2"
             },
-            "funding": [
-                {
-                    "url": "https://github.com/sponsors/nyamsprod",
-                    "type": "github"
-                }
-            ],
-            "time": "2022-01-04T00:13:07+00:00"
+            "time": "2024-10-06T23:10:23+00:00"
         },
         {
-            "name": "league/flysystem",
-            "version": "1.1.9",
+            "name": "nette/utils",
+            "version": "v4.0.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/thephpleague/flysystem.git",
-                "reference": "094defdb4a7001845300334e7c1ee2335925ef99"
+                "url": "https://github.com/nette/utils.git",
+                "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99",
-                "reference": "094defdb4a7001845300334e7c1ee2335925ef99",
+                "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
+                "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
                 "shasum": ""
             },
             "require": {
-                "ext-fileinfo": "*",
-                "league/mime-type-detection": "^1.3",
-                "php": "^7.2.5 || ^8.0"
+                "php": "8.0 - 8.4"
             },
             "conflict": {
-                "league/flysystem-sftp": "<1.0.6"
+                "nette/finder": "<3",
+                "nette/schema": "<1.2.2"
             },
             "require-dev": {
-                "phpspec/prophecy": "^1.11.1",
-                "phpunit/phpunit": "^8.5.8"
+                "jetbrains/phpstorm-attributes": "dev-master",
+                "nette/tester": "^2.5",
+                "phpstan/phpstan": "^1.0",
+                "tracy/tracy": "^2.9"
             },
             "suggest": {
-                "ext-ftp": "Allows you to use FTP server storage",
-                "ext-openssl": "Allows you to use FTPS server storage",
-                "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
-                "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
-                "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
-                "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
-                "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
-                "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
-                "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
-                "league/flysystem-webdav": "Allows you to use WebDAV storage",
-                "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
-                "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
-                "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
+                "ext-gd": "to use Image",
+                "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
+                "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+                "ext-json": "to use Nette\\Utils\\Json",
+                "ext-mbstring": "to use Strings::lower() etc...",
+                "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.1-dev"
+                    "dev-master": "4.0-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "League\\Flysystem\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause",
+                "GPL-2.0-only",
+                "GPL-3.0-only"
             ],
             "authors": [
                 {
-                    "name": "Frank de Jonge",
-                    "email": "info@frenky.net"
+                    "name": "David Grudl",
+                    "homepage": "https://davidgrudl.com"
+                },
+                {
+                    "name": "Nette Community",
+                    "homepage": "https://nette.org/contributors"
                 }
             ],
-            "description": "Filesystem abstraction: Many filesystems, one API.",
+            "description": "🛠  Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+            "homepage": "https://nette.org",
             "keywords": [
-                "Cloud Files",
-                "WebDAV",
-                "abstraction",
-                "aws",
-                "cloud",
-                "copy.com",
-                "dropbox",
-                "file systems",
-                "files",
-                "filesystem",
-                "filesystems",
-                "ftp",
-                "rackspace",
-                "remote",
-                "s3",
-                "sftp",
-                "storage"
+                "array",
+                "core",
+                "datetime",
+                "images",
+                "json",
+                "nette",
+                "paginator",
+                "password",
+                "slugify",
+                "string",
+                "unicode",
+                "utf-8",
+                "utility",
+                "validation"
             ],
             "support": {
-                "issues": "https://github.com/thephpleague/flysystem/issues",
-                "source": "https://github.com/thephpleague/flysystem/tree/1.1.9"
+                "issues": "https://github.com/nette/utils/issues",
+                "source": "https://github.com/nette/utils/tree/v4.0.5"
             },
-            "funding": [
-                {
-                    "url": "https://offset.earth/frankdejonge",
-                    "type": "other"
-                }
-            ],
-            "time": "2021-12-09T09:40:50+00:00"
+            "time": "2024-08-07T15:39:19+00:00"
         },
         {
-            "name": "league/glide",
-            "version": "1.7.1",
+            "name": "nikic/php-parser",
+            "version": "v5.4.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/thephpleague/glide.git",
-                "reference": "257e0c3612ef3dc57eb7f90cb741198151a45a5f"
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/glide/zipball/257e0c3612ef3dc57eb7f90cb741198151a45a5f",
-                "reference": "257e0c3612ef3dc57eb7f90cb741198151a45a5f",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
+                "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
                 "shasum": ""
             },
             "require": {
-                "intervention/image": "^2.4",
-                "league/flysystem": "^1.0",
-                "php": "^7.2|^8.0",
-                "psr/http-message": "^1.0"
+                "ext-ctype": "*",
+                "ext-json": "*",
+                "ext-tokenizer": "*",
+                "php": ">=7.4"
             },
             "require-dev": {
-                "mockery/mockery": "^1.3.3",
-                "phpunit/php-token-stream": "^3.1|^4.0",
-                "phpunit/phpunit": "^8.5|^9.0"
+                "ircmaxell/php-yacc": "^0.0.7",
+                "phpunit/phpunit": "^9.0"
             },
+            "bin": [
+                "bin/php-parse"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.1-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "League\\Glide\\": "src/"
+                    "PhpParser\\": "lib/PhpParser"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Jonathan Reinink",
-                    "email": "jonathan@reinink.ca",
-                    "homepage": "http://reinink.ca"
-                },
-                {
-                    "name": "Titouan Galopin",
-                    "email": "galopintitouan@gmail.com",
-                    "homepage": "https://titouangalopin.com"
+                    "name": "Nikita Popov"
                 }
             ],
-            "description": "Wonderfully easy on-demand image manipulation library with an HTTP based API.",
-            "homepage": "http://glide.thephpleague.com",
+            "description": "A PHP parser written in PHP",
             "keywords": [
-                "ImageMagick",
-                "editing",
-                "gd",
-                "image",
-                "imagick",
-                "league",
-                "manipulation",
-                "processing"
+                "parser",
+                "php"
             ],
             "support": {
-                "issues": "https://github.com/thephpleague/glide/issues",
-                "source": "https://github.com/thephpleague/glide/tree/1.7.1"
+                "issues": "https://github.com/nikic/PHP-Parser/issues",
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
             },
-            "time": "2022-04-27T04:03:46+00:00"
+            "time": "2024-12-30T11:07:19+00:00"
         },
         {
-            "name": "league/mime-type-detection",
-            "version": "1.11.0",
+            "name": "nunomaduro/termwind",
+            "version": "v1.17.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/thephpleague/mime-type-detection.git",
-                "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd"
+                "url": "https://github.com/nunomaduro/termwind.git",
+                "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
-                "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
+                "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/5369ef84d8142c1d87e4ec278711d4ece3cbf301",
+                "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301",
                 "shasum": ""
             },
             "require": {
-                "ext-fileinfo": "*",
-                "php": "^7.2 || ^8.0"
+                "ext-mbstring": "*",
+                "php": "^8.1",
+                "symfony/console": "^6.4.15"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^3.2",
-                "phpstan/phpstan": "^0.12.68",
-                "phpunit/phpunit": "^8.5.8 || ^9.3"
+                "illuminate/console": "^10.48.24",
+                "illuminate/support": "^10.48.24",
+                "laravel/pint": "^1.18.2",
+                "pestphp/pest": "^2.36.0",
+                "pestphp/pest-plugin-mock": "2.0.0",
+                "phpstan/phpstan": "^1.12.11",
+                "phpstan/phpstan-strict-rules": "^1.6.1",
+                "symfony/var-dumper": "^6.4.15",
+                "thecodingmachine/phpstan-strict-rules": "^1.0.0"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Termwind\\Laravel\\TermwindServiceProvider"
+                    ]
+                }
             },
-            "type": "library",
             "autoload": {
+                "files": [
+                    "src/Functions.php"
+                ],
                 "psr-4": {
-                    "League\\MimeTypeDetection\\": "src"
+                    "Termwind\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2772,235 +3199,262 @@
             ],
             "authors": [
                 {
-                    "name": "Frank de Jonge",
-                    "email": "info@frankdejonge.nl"
+                    "name": "Nuno Maduro",
+                    "email": "enunomaduro@gmail.com"
                 }
             ],
-            "description": "Mime-type detection for Flysystem",
+            "description": "Its like Tailwind CSS, but for the console.",
+            "keywords": [
+                "cli",
+                "console",
+                "css",
+                "package",
+                "php",
+                "style"
+            ],
             "support": {
-                "issues": "https://github.com/thephpleague/mime-type-detection/issues",
-                "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0"
+                "issues": "https://github.com/nunomaduro/termwind/issues",
+                "source": "https://github.com/nunomaduro/termwind/tree/v1.17.0"
             },
             "funding": [
                 {
-                    "url": "https://github.com/frankdejonge",
+                    "url": "https://www.paypal.com/paypalme/enunomaduro",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/nunomaduro",
                     "type": "github"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
-                    "type": "tidelift"
+                    "url": "https://github.com/xiCO2k",
+                    "type": "github"
                 }
             ],
-            "time": "2022-04-17T13:12:02+00:00"
+            "time": "2024-11-21T10:36:35+00:00"
         },
         {
-            "name": "michelf/php-smartypants",
-            "version": "1.8.1",
+            "name": "php-http/discovery",
+            "version": "1.20.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/michelf/php-smartypants.git",
-                "reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad"
+                "url": "https://github.com/php-http/discovery.git",
+                "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/michelf/php-smartypants/zipball/47d17c90a4dfd0ccf1f87e25c65e6c8012415aad",
-                "reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad",
+                "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d",
+                "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "composer-plugin-api": "^1.0|^2.0",
+                "php": "^7.1 || ^8.0"
+            },
+            "conflict": {
+                "nyholm/psr7": "<1.0",
+                "zendframework/zend-diactoros": "*"
+            },
+            "provide": {
+                "php-http/async-client-implementation": "*",
+                "php-http/client-implementation": "*",
+                "psr/http-client-implementation": "*",
+                "psr/http-factory-implementation": "*",
+                "psr/http-message-implementation": "*"
+            },
+            "require-dev": {
+                "composer/composer": "^1.0.2|^2.0",
+                "graham-campbell/phpspec-skip-example-extension": "^5.0",
+                "php-http/httplug": "^1.0 || ^2.0",
+                "php-http/message-factory": "^1.0",
+                "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
+                "sebastian/comparator": "^3.0.5 || ^4.0.8",
+                "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "Http\\Discovery\\Composer\\Plugin",
+                "plugin-optional": true
             },
-            "type": "library",
             "autoload": {
-                "psr-0": {
-                    "Michelf": ""
-                }
+                "psr-4": {
+                    "Http\\Discovery\\": "src/"
+                },
+                "exclude-from-classmap": [
+                    "src/Composer/Plugin.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Michel Fortin",
-                    "email": "michel.fortin@michelf.ca",
-                    "homepage": "https://michelf.ca/",
-                    "role": "Developer"
-                },
-                {
-                    "name": "John Gruber",
-                    "homepage": "https://daringfireball.net/"
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com"
                 }
             ],
-            "description": "PHP SmartyPants",
-            "homepage": "https://michelf.ca/projects/php-smartypants/",
+            "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations",
+            "homepage": "http://php-http.org",
             "keywords": [
-                "dashes",
-                "quotes",
-                "spaces",
-                "typographer",
-                "typography"
+                "adapter",
+                "client",
+                "discovery",
+                "factory",
+                "http",
+                "message",
+                "psr17",
+                "psr7"
             ],
             "support": {
-                "issues": "https://github.com/michelf/php-smartypants/issues",
-                "source": "https://github.com/michelf/php-smartypants/tree/1.8.1"
+                "issues": "https://github.com/php-http/discovery/issues",
+                "source": "https://github.com/php-http/discovery/tree/1.20.0"
             },
-            "time": "2016-12-13T01:01:17+00:00"
+            "time": "2024-10-02T11:20:13+00:00"
         },
         {
-            "name": "monolog/monolog",
-            "version": "2.5.0",
+            "name": "phpoption/phpoption",
+            "version": "1.9.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Seldaek/monolog.git",
-                "reference": "4192345e260f1d51b365536199744b987e160edc"
+                "url": "https://github.com/schmittjoh/php-option.git",
+                "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4192345e260f1d51b365536199744b987e160edc",
-                "reference": "4192345e260f1d51b365536199744b987e160edc",
+                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54",
+                "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2",
-                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
+                "php": "^7.2.5 || ^8.0"
             },
             "require-dev": {
-                "aws/aws-sdk-php": "^2.4.9 || ^3.0",
-                "doctrine/couchdb": "~1.0@dev",
-                "elasticsearch/elasticsearch": "^7",
-                "graylog2/gelf-php": "^1.4.2",
-                "mongodb/mongodb": "^1.8",
-                "php-amqplib/php-amqplib": "~2.4 || ^3",
-                "php-console/php-console": "^3.1.3",
-                "phpspec/prophecy": "^1.6.1",
-                "phpstan/phpstan": "^0.12.91",
-                "phpunit/phpunit": "^8.5",
-                "predis/predis": "^1.1",
-                "rollbar/rollbar": "^1.3 || ^2 || ^3",
-                "ruflin/elastica": ">=0.90@dev",
-                "swiftmailer/swiftmailer": "^5.3|^6.0"
-            },
-            "suggest": {
-                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
-                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
-                "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
-                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
-                "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
-                "ext-mbstring": "Allow to work properly with unicode symbols",
-                "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
-                "ext-openssl": "Required to send log messages using SSL",
-                "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
-                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
-                "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
-                "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
-                "php-console/php-console": "Allow sending log messages to Google Chrome",
-                "rollbar/rollbar": "Allow sending log messages to Rollbar",
-                "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
             },
             "type": "library",
             "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                },
                 "branch-alias": {
-                    "dev-main": "2.x-dev"
+                    "dev-master": "1.9-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Monolog\\": "src/Monolog"
+                    "PhpOption\\": "src/PhpOption/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "Apache-2.0"
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "https://seld.be"
+                    "name": "Johannes M. Schmitt",
+                    "email": "schmittjoh@gmail.com",
+                    "homepage": "https://github.com/schmittjoh"
+                },
+                {
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
                 }
             ],
-            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
-            "homepage": "https://github.com/Seldaek/monolog",
+            "description": "Option Type for PHP",
             "keywords": [
-                "log",
-                "logging",
-                "psr-3"
+                "language",
+                "option",
+                "php",
+                "type"
             ],
             "support": {
-                "issues": "https://github.com/Seldaek/monolog/issues",
-                "source": "https://github.com/Seldaek/monolog/tree/2.5.0"
+                "issues": "https://github.com/schmittjoh/php-option/issues",
+                "source": "https://github.com/schmittjoh/php-option/tree/1.9.3"
             },
             "funding": [
                 {
-                    "url": "https://github.com/Seldaek",
+                    "url": "https://github.com/GrahamCampbell",
                     "type": "github"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+                    "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-04-08T15:43:54+00:00"
+            "time": "2024-07-20T21:41:07+00:00"
         },
         {
-            "name": "nesbot/carbon",
-            "version": "2.57.0",
+            "name": "pixelfear/composer-dist-plugin",
+            "version": "v0.1.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/briannesbitt/Carbon.git",
-                "reference": "4a54375c21eea4811dbd1149fe6b246517554e78"
+                "url": "https://github.com/pixelfear/composer-dist-plugin.git",
+                "reference": "40cd101208c975fd14e5f3b5b0710cf6cd0084d5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78",
-                "reference": "4a54375c21eea4811dbd1149fe6b246517554e78",
+                "url": "https://api.github.com/repos/pixelfear/composer-dist-plugin/zipball/40cd101208c975fd14e5f3b5b0710cf6cd0084d5",
+                "reference": "40cd101208c975fd14e5f3b5b0710cf6cd0084d5",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "php": "^7.1.8 || ^8.0",
-                "symfony/polyfill-mbstring": "^1.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
+                "composer-plugin-api": "^1.1 || ^2.0"
             },
             "require-dev": {
-                "doctrine/dbal": "^2.0 || ^3.0",
-                "doctrine/orm": "^2.7",
-                "friendsofphp/php-cs-fixer": "^3.0",
-                "kylekatarnls/multi-tester": "^2.0",
-                "phpmd/phpmd": "^2.9",
-                "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^0.12.54 || ^1.0",
-                "phpunit/phpunit": "^7.5.20 || ^8.5.14",
-                "squizlabs/php_codesniffer": "^3.4"
+                "composer/composer": "^1.10",
+                "mockery/mockery": "^1.3",
+                "phpunit/phpunit": "^8.4"
             },
-            "bin": [
-                "bin/carbon"
-            ],
-            "type": "library",
+            "type": "composer-plugin",
             "extra": {
-                "branch-alias": {
-                    "dev-3.x": "3.x-dev",
-                    "dev-master": "2.x-dev"
-                },
-                "laravel": {
-                    "providers": [
-                        "Carbon\\Laravel\\ServiceProvider"
-                    ]
-                },
-                "phpstan": {
-                    "includes": [
-                        "extension.neon"
-                    ]
+                "class": "Pixelfear\\ComposerDistPlugin\\Plugin"
+            },
+            "autoload": {
+                "psr-4": {
+                    "Pixelfear\\ComposerDistPlugin\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Downloads distributable assets to be used in packages so you don't have to commit them.",
+            "support": {
+                "issues": "https://github.com/pixelfear/composer-dist-plugin/issues",
+                "source": "https://github.com/pixelfear/composer-dist-plugin/tree/v0.1.6"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/jasonvarga",
+                    "type": "github"
                 }
+            ],
+            "time": "2021-05-24T14:05:38+00:00"
+        },
+        {
+            "name": "psr/clock",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/clock.git",
+                "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+                "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0 || ^8.0"
             },
+            "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Carbon\\": "src/Carbon/"
+                    "Psr\\Clock\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3009,128 +3463,104 @@
             ],
             "authors": [
                 {
-                    "name": "Brian Nesbitt",
-                    "email": "brian@nesbot.com",
-                    "homepage": "https://markido.com"
-                },
-                {
-                    "name": "kylekatarnls",
-                    "homepage": "https://github.com/kylekatarnls"
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
                 }
             ],
-            "description": "An API extension for DateTime that supports 281 different languages.",
-            "homepage": "https://carbon.nesbot.com",
+            "description": "Common interface for reading the clock.",
+            "homepage": "https://github.com/php-fig/clock",
             "keywords": [
-                "date",
-                "datetime",
+                "clock",
+                "now",
+                "psr",
+                "psr-20",
                 "time"
             ],
             "support": {
-                "docs": "https://carbon.nesbot.com/docs",
-                "issues": "https://github.com/briannesbitt/Carbon/issues",
-                "source": "https://github.com/briannesbitt/Carbon"
+                "issues": "https://github.com/php-fig/clock/issues",
+                "source": "https://github.com/php-fig/clock/tree/1.0.0"
             },
-            "funding": [
-                {
-                    "url": "https://opencollective.com/Carbon",
-                    "type": "open_collective"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-02-13T18:13:33+00:00"
+            "time": "2022-11-25T14:36:26+00:00"
         },
         {
-            "name": "nikic/php-parser",
-            "version": "v4.13.2",
+            "name": "psr/container",
+            "version": "2.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
-                "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
                 "shasum": ""
             },
             "require": {
-                "ext-tokenizer": "*",
-                "php": ">=7.0"
-            },
-            "require-dev": {
-                "ircmaxell/php-yacc": "^0.0.7",
-                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+                "php": ">=7.4.0"
             },
-            "bin": [
-                "bin/php-parse"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.9-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
+                    "Psr\\Container\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Nikita Popov"
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
                 }
             ],
-            "description": "A PHP parser written in PHP",
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
             "keywords": [
-                "parser",
-                "php"
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
             ],
             "support": {
-                "issues": "https://github.com/nikic/PHP-Parser/issues",
-                "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
+                "issues": "https://github.com/php-fig/container/issues",
+                "source": "https://github.com/php-fig/container/tree/2.0.2"
             },
-            "time": "2021-11-30T19:35:32+00:00"
+            "time": "2021-11-05T16:47:00+00:00"
         },
         {
-            "name": "opis/closure",
-            "version": "3.6.3",
+            "name": "psr/event-dispatcher",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/opis/closure.git",
-                "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad"
+                "url": "https://github.com/php-fig/event-dispatcher.git",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad",
-                "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad",
+                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.4 || ^7.0 || ^8.0"
-            },
-            "require-dev": {
-                "jeremeamia/superclosure": "^2.0",
-                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+                "php": ">=7.2.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.6.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "functions.php"
-                ],
                 "psr-4": {
-                    "Opis\\Closure\\": "src/"
+                    "Psr\\EventDispatcher\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3139,172 +3569,155 @@
             ],
             "authors": [
                 {
-                    "name": "Marius Sarca",
-                    "email": "marius.sarca@gmail.com"
-                },
-                {
-                    "name": "Sorin Sarca",
-                    "email": "sarca_sorin@hotmail.com"
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
-            "homepage": "https://opis.io/closure",
+            "description": "Standard interfaces for event handling.",
             "keywords": [
-                "anonymous functions",
-                "closure",
-                "function",
-                "serializable",
-                "serialization",
-                "serialize"
+                "events",
+                "psr",
+                "psr-14"
             ],
             "support": {
-                "issues": "https://github.com/opis/closure/issues",
-                "source": "https://github.com/opis/closure/tree/3.6.3"
+                "issues": "https://github.com/php-fig/event-dispatcher/issues",
+                "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
             },
-            "time": "2022-01-27T09:35:39+00:00"
+            "time": "2019-01-08T18:20:26+00:00"
         },
         {
-            "name": "phpoption/phpoption",
-            "version": "1.8.1",
+            "name": "psr/http-client",
+            "version": "1.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/schmittjoh/php-option.git",
-                "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15"
+                "url": "https://github.com/php-fig/http-client.git",
+                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
-                "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15",
+                "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0 || ^8.0"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.4.1",
-                "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
+                "php": "^7.0 || ^8.0",
+                "psr/http-message": "^1.0 || ^2.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "PhpOption\\": "src/PhpOption/"
+                    "Psr\\Http\\Client\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "Apache-2.0"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Johannes M. Schmitt",
-                    "email": "schmittjoh@gmail.com",
-                    "homepage": "https://github.com/schmittjoh"
-                },
-                {
-                    "name": "Graham Campbell",
-                    "email": "hello@gjcampbell.co.uk",
-                    "homepage": "https://github.com/GrahamCampbell"
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
                 }
             ],
-            "description": "Option Type for PHP",
+            "description": "Common interface for HTTP clients",
+            "homepage": "https://github.com/php-fig/http-client",
             "keywords": [
-                "language",
-                "option",
-                "php",
-                "type"
+                "http",
+                "http-client",
+                "psr",
+                "psr-18"
             ],
             "support": {
-                "issues": "https://github.com/schmittjoh/php-option/issues",
-                "source": "https://github.com/schmittjoh/php-option/tree/1.8.1"
+                "source": "https://github.com/php-fig/http-client"
             },
-            "funding": [
-                {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2021-12-04T23:24:31+00:00"
+            "time": "2023-09-23T14:17:50+00:00"
         },
         {
-            "name": "pixelfear/composer-dist-plugin",
-            "version": "v0.1.5",
+            "name": "psr/http-factory",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/pixelfear/composer-dist-plugin.git",
-                "reference": "f1cec1e14d026eb898f985a22dfb140ae0d74d6c"
+                "url": "https://github.com/php-fig/http-factory.git",
+                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pixelfear/composer-dist-plugin/zipball/f1cec1e14d026eb898f985a22dfb140ae0d74d6c",
-                "reference": "f1cec1e14d026eb898f985a22dfb140ae0d74d6c",
+                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.1 || ^2.0"
-            },
-            "require-dev": {
-                "composer/composer": "^1.10",
-                "mockery/mockery": "^1.3",
-                "phpunit/phpunit": "^8.4"
+                "php": ">=7.1",
+                "psr/http-message": "^1.0 || ^2.0"
             },
-            "type": "composer-plugin",
+            "type": "library",
             "extra": {
-                "class": "Pixelfear\\ComposerDistPlugin\\Plugin"
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
             },
             "autoload": {
                 "psr-4": {
-                    "Pixelfear\\ComposerDistPlugin\\": "src/"
+                    "Psr\\Http\\Message\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "description": "Downloads distributable assets to be used in packages so you don't have to commit them.",
-            "support": {
-                "issues": "https://github.com/pixelfear/composer-dist-plugin/issues",
-                "source": "https://github.com/pixelfear/composer-dist-plugin/tree/v0.1.5"
-            },
-            "funding": [
+            "license": [
+                "MIT"
+            ],
+            "authors": [
                 {
-                    "url": "https://github.com/jasonvarga",
-                    "type": "github"
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
                 }
             ],
-            "time": "2021-05-20T15:49:08+00:00"
+            "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+            "keywords": [
+                "factory",
+                "http",
+                "message",
+                "psr",
+                "psr-17",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-factory"
+            },
+            "time": "2024-04-15T12:06:14+00:00"
         },
         {
-            "name": "psr/cache",
-            "version": "1.0.1",
+            "name": "psr/http-message",
+            "version": "2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/cache.git",
-                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
-                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": "^7.2 || ^8.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Cache\\": "src/"
+                    "Psr\\Http\\Message\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3314,41 +3727,50 @@
             "authors": [
                 {
                     "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "homepage": "https://www.php-fig.org/"
                 }
             ],
-            "description": "Common interface for caching libraries",
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
             "keywords": [
-                "cache",
+                "http",
+                "http-message",
                 "psr",
-                "psr-6"
+                "psr-7",
+                "request",
+                "response"
             ],
             "support": {
-                "source": "https://github.com/php-fig/cache/tree/master"
+                "source": "https://github.com/php-fig/http-message/tree/2.0"
             },
-            "time": "2016-08-06T20:24:11+00:00"
+            "time": "2023-04-04T09:54:51+00:00"
         },
         {
-            "name": "psr/container",
-            "version": "1.1.2",
+            "name": "psr/log",
+            "version": "3.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/container.git",
-                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
-                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+                "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.4.0"
+                "php": ">=8.0.0"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Container\\": "src/"
+                    "Psr\\Log\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3361,47 +3783,44 @@
                     "homepage": "https://www.php-fig.org/"
                 }
             ],
-            "description": "Common Container Interface (PHP FIG PSR-11)",
-            "homepage": "https://github.com/php-fig/container",
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
             "keywords": [
-                "PSR-11",
-                "container",
-                "container-interface",
-                "container-interop",
-                "psr"
+                "log",
+                "psr",
+                "psr-3"
             ],
             "support": {
-                "issues": "https://github.com/php-fig/container/issues",
-                "source": "https://github.com/php-fig/container/tree/1.1.2"
+                "source": "https://github.com/php-fig/log/tree/3.0.2"
             },
-            "time": "2021-11-05T16:50:12+00:00"
+            "time": "2024-09-11T13:17:53+00:00"
         },
         {
-            "name": "psr/event-dispatcher",
-            "version": "1.0.0",
+            "name": "psr/simple-cache",
+            "version": "3.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/event-dispatcher.git",
-                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+                "url": "https://github.com/php-fig/simple-cache.git",
+                "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
-                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+                "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
+                "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.0"
+                "php": ">=8.0.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "3.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\EventDispatcher\\": "src/"
+                    "Psr\\SimpleCache\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3411,48 +3830,74 @@
             "authors": [
                 {
                     "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "homepage": "https://www.php-fig.org/"
                 }
             ],
-            "description": "Standard interfaces for event handling.",
+            "description": "Common interfaces for simple caching",
             "keywords": [
-                "events",
+                "cache",
+                "caching",
                 "psr",
-                "psr-14"
+                "psr-16",
+                "simple-cache"
             ],
             "support": {
-                "issues": "https://github.com/php-fig/event-dispatcher/issues",
-                "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+                "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
             },
-            "time": "2019-01-08T18:20:26+00:00"
+            "time": "2021-10-29T13:26:27+00:00"
         },
         {
-            "name": "psr/http-client",
-            "version": "1.0.1",
+            "name": "psy/psysh",
+            "version": "v0.12.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/http-client.git",
-                "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+                "url": "https://github.com/bobthecow/psysh.git",
+                "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
-                "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c",
+                "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0 || ^8.0",
-                "psr/http-message": "^1.0"
+                "ext-json": "*",
+                "ext-tokenizer": "*",
+                "nikic/php-parser": "^5.0 || ^4.0",
+                "php": "^8.0 || ^7.4",
+                "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
+                "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
+            },
+            "conflict": {
+                "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.2"
+            },
+            "suggest": {
+                "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+                "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+                "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
             },
+            "bin": [
+                "bin/psysh"
+            ],
             "type": "library",
             "extra": {
+                "bamarni-bin": {
+                    "bin-links": false,
+                    "forward-command": false
+                },
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-main": "0.12.x-dev"
                 }
             },
             "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
                 "psr-4": {
-                    "Psr\\Http\\Client\\": "src/"
+                    "Psy\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3461,51 +3906,51 @@
             ],
             "authors": [
                 {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "name": "Justin Hileman",
+                    "email": "justin@justinhileman.info",
+                    "homepage": "http://justinhileman.com"
                 }
             ],
-            "description": "Common interface for HTTP clients",
-            "homepage": "https://github.com/php-fig/http-client",
+            "description": "An interactive shell for modern PHP.",
+            "homepage": "http://psysh.org",
             "keywords": [
-                "http",
-                "http-client",
-                "psr",
-                "psr-18"
+                "REPL",
+                "console",
+                "interactive",
+                "shell"
             ],
             "support": {
-                "source": "https://github.com/php-fig/http-client/tree/master"
+                "issues": "https://github.com/bobthecow/psysh/issues",
+                "source": "https://github.com/bobthecow/psysh/tree/v0.12.7"
             },
-            "time": "2020-06-29T06:28:15+00:00"
+            "time": "2024-12-10T01:58:33+00:00"
         },
         {
-            "name": "psr/http-factory",
-            "version": "1.0.1",
+            "name": "ralouphie/getallheaders",
+            "version": "3.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/http-factory.git",
-                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+                "url": "https://github.com/ralouphie/getallheaders.git",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
-                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.0.0",
-                "psr/http-message": "^1.0"
+                "php": ">=5.6"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
             },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/getallheaders.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -3513,52 +3958,65 @@
             ],
             "authors": [
                 {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "name": "Ralph Khattar",
+                    "email": "ralph.khattar@gmail.com"
                 }
             ],
-            "description": "Common interfaces for PSR-7 HTTP message factories",
-            "keywords": [
-                "factory",
-                "http",
-                "message",
-                "psr",
-                "psr-17",
-                "psr-7",
-                "request",
-                "response"
-            ],
+            "description": "A polyfill for getallheaders.",
             "support": {
-                "source": "https://github.com/php-fig/http-factory/tree/master"
+                "issues": "https://github.com/ralouphie/getallheaders/issues",
+                "source": "https://github.com/ralouphie/getallheaders/tree/develop"
             },
-            "time": "2019-04-30T12:38:16+00:00"
+            "time": "2019-03-08T08:55:37+00:00"
         },
         {
-            "name": "psr/http-message",
-            "version": "1.0.1",
+            "name": "ramsey/collection",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+                "url": "https://github.com/ramsey/collection.git",
+                "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
+                "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "captainhook/plugin-composer": "^5.3",
+                "ergebnis/composer-normalize": "^2.45",
+                "fakerphp/faker": "^1.24",
+                "hamcrest/hamcrest-php": "^2.0",
+                "jangregor/phpstan-prophecy": "^2.1",
+                "mockery/mockery": "^1.6",
+                "php-parallel-lint/php-console-highlighter": "^1.0",
+                "php-parallel-lint/php-parallel-lint": "^1.4",
+                "phpspec/prophecy-phpunit": "^2.3",
+                "phpstan/extension-installer": "^1.4",
+                "phpstan/phpstan": "^2.1",
+                "phpstan/phpstan-mockery": "^2.0",
+                "phpstan/phpstan-phpunit": "^2.0",
+                "phpunit/phpunit": "^10.5",
+                "ramsey/coding-standard": "^2.3",
+                "ramsey/conventional-commits": "^1.6",
+                "roave/security-advisories": "dev-latest"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                "captainhook": {
+                    "force-install": true
+                },
+                "ramsey/conventional-commits": {
+                    "configFile": "conventional-commits.json"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
+                    "Ramsey\\Collection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3567,101 +4025,174 @@
             ],
             "authors": [
                 {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "name": "Ben Ramsey",
+                    "email": "ben@benramsey.com",
+                    "homepage": "https://benramsey.com"
                 }
             ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
+            "description": "A PHP library for representing and manipulating collections.",
             "keywords": [
-                "http",
-                "http-message",
-                "psr",
-                "psr-7",
-                "request",
-                "response"
+                "array",
+                "collection",
+                "hash",
+                "map",
+                "queue",
+                "set"
             ],
             "support": {
-                "source": "https://github.com/php-fig/http-message/tree/master"
+                "issues": "https://github.com/ramsey/collection/issues",
+                "source": "https://github.com/ramsey/collection/tree/2.1.0"
             },
-            "time": "2016-08-06T14:39:51+00:00"
+            "time": "2025-03-02T04:48:29+00:00"
         },
         {
-            "name": "psr/log",
-            "version": "1.1.4",
+            "name": "ramsey/uuid",
+            "version": "4.7.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+                "url": "https://github.com/ramsey/uuid.git",
+                "reference": "91039bc1faa45ba123c4328958e620d382ec7088"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
-                "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+                "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088",
+                "reference": "91039bc1faa45ba123c4328958e620d382ec7088",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
+                "ext-json": "*",
+                "php": "^8.0",
+                "ramsey/collection": "^1.2 || ^2.0"
+            },
+            "replace": {
+                "rhumsaa/uuid": "self.version"
+            },
+            "require-dev": {
+                "captainhook/captainhook": "^5.10",
+                "captainhook/plugin-composer": "^5.3",
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+                "doctrine/annotations": "^1.8",
+                "ergebnis/composer-normalize": "^2.15",
+                "mockery/mockery": "^1.3",
+                "paragonie/random-lib": "^2",
+                "php-mock/php-mock": "^2.2",
+                "php-mock/php-mock-mockery": "^1.3",
+                "php-parallel-lint/php-parallel-lint": "^1.1",
+                "phpbench/phpbench": "^1.0",
+                "phpstan/extension-installer": "^1.1",
+                "phpstan/phpstan": "^1.8",
+                "phpstan/phpstan-mockery": "^1.1",
+                "phpstan/phpstan-phpunit": "^1.1",
+                "phpunit/phpunit": "^8.5 || ^9",
+                "ramsey/composer-repl": "^1.4",
+                "slevomat/coding-standard": "^8.4",
+                "squizlabs/php_codesniffer": "^3.5",
+                "vimeo/psalm": "^4.9"
+            },
+            "suggest": {
+                "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+                "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+                "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+                "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+                "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1.x-dev"
+                "captainhook": {
+                    "force-install": true
                 }
             },
             "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
                 "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
+                    "Ramsey\\Uuid\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
+            "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
             "keywords": [
-                "log",
-                "psr",
-                "psr-3"
+                "guid",
+                "identifier",
+                "uuid"
             ],
             "support": {
-                "source": "https://github.com/php-fig/log/tree/1.1.4"
+                "issues": "https://github.com/ramsey/uuid/issues",
+                "source": "https://github.com/ramsey/uuid/tree/4.7.6"
             },
-            "time": "2021-05-03T11:20:27+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/ramsey",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-04-27T21:32:50+00:00"
         },
         {
-            "name": "psr/simple-cache",
-            "version": "1.0.1",
+            "name": "rebing/graphql-laravel",
+            "version": "9.8.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/simple-cache.git",
-                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+                "url": "https://github.com/rebing/graphql-laravel.git",
+                "reference": "1c1b1aeca54c9b4cb3d5e2adff2f3db5dba20431"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
-                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+                "url": "https://api.github.com/repos/rebing/graphql-laravel/zipball/1c1b1aeca54c9b4cb3d5e2adff2f3db5dba20431",
+                "reference": "1c1b1aeca54c9b4cb3d5e2adff2f3db5dba20431",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "ext-json": "*",
+                "illuminate/contracts": "^10.0|^11.0|^12.0",
+                "illuminate/support": "^10.0|^11.0|^12.0",
+                "laragraph/utils": "^2.0.1",
+                "php": "^8.1",
+                "thecodingmachine/safe": "^3.0",
+                "webonyx/graphql-php": "^15.0.3"
+            },
+            "require-dev": {
+                "ext-pdo_sqlite": "*",
+                "fakerphp/faker": "^1.6",
+                "friendsofphp/php-cs-fixer": "^3",
+                "larastan/larastan": "^3",
+                "laravel/framework": "^10.0|^11.0|^12.0",
+                "mfn/php-cs-fixer-config": "^2",
+                "mockery/mockery": "^1.5",
+                "orchestra/testbench": "^8.0|^9.0|^10.0",
+                "phpstan/phpstan": "^2",
+                "phpunit/phpunit": "^10.5.32 || ^11.0",
+                "thecodingmachine/phpstan-safe-rule": "^1"
+            },
+            "suggest": {
+                "mll-lab/laravel-graphiql": "Easily integrate GraphiQL into your Laravel projects. "
             },
             "type": "library",
             "extra": {
+                "laravel": {
+                    "aliases": {
+                        "GraphQL": "Rebing\\GraphQL\\Support\\Facades\\GraphQL"
+                    },
+                    "providers": [
+                        "Rebing\\GraphQL\\GraphQLServiceProvider"
+                    ]
+                },
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "9.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\SimpleCache\\": "src/"
+                    "Rebing\\GraphQL\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3670,74 +4201,78 @@
             ],
             "authors": [
                 {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "name": "Rebing OÜ",
+                    "homepage": "http://www.rebing.ee",
+                    "role": "Company"
+                },
+                {
+                    "name": "Mikk Mihkel Nurges",
+                    "email": "mikk.nurges@rebing.ee",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Folklore",
+                    "email": "info@atelierfolklore.ca",
+                    "homepage": "http://atelierfolklore.ca"
+                },
+                {
+                    "name": "David Mongeau-Petitpas",
+                    "email": "dmp@atelierfolklore.ca",
+                    "homepage": "http://mongo.ca",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Markus Podar",
+                    "email": "markus@fischer.name",
+                    "homepage": "https://github.com/mfn",
+                    "role": "Developer"
                 }
             ],
-            "description": "Common interfaces for simple caching",
+            "description": "Laravel wrapper for PHP GraphQL",
             "keywords": [
-                "cache",
-                "caching",
-                "psr",
-                "psr-16",
-                "simple-cache"
+                "framework",
+                "graphql",
+                "laravel",
+                "react"
             ],
             "support": {
-                "source": "https://github.com/php-fig/simple-cache/tree/master"
+                "issues": "https://github.com/rebing/graphql-laravel/issues",
+                "source": "https://github.com/rebing/graphql-laravel/tree/9.8.0"
             },
-            "time": "2017-10-23T01:57:42+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/mfn",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-02-24T19:35:59+00:00"
         },
         {
-            "name": "psy/psysh",
-            "version": "v0.11.2",
+            "name": "rhukster/dom-sanitizer",
+            "version": "1.0.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "7f7da640d68b9c9fec819caae7c744a213df6514"
+                "url": "https://github.com/rhukster/dom-sanitizer.git",
+                "reference": "c2a98f27ad742668b254282ccc5581871d0fb601"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7f7da640d68b9c9fec819caae7c744a213df6514",
-                "reference": "7f7da640d68b9c9fec819caae7c744a213df6514",
+                "url": "https://api.github.com/repos/rhukster/dom-sanitizer/zipball/c2a98f27ad742668b254282ccc5581871d0fb601",
+                "reference": "c2a98f27ad742668b254282ccc5581871d0fb601",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "ext-tokenizer": "*",
-                "nikic/php-parser": "^4.0 || ^3.1",
-                "php": "^8.0 || ^7.0.8",
-                "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4",
-                "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4"
-            },
-            "conflict": {
-                "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "php": ">=7.3"
             },
             "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.2",
-                "hoa/console": "3.17.05.02"
-            },
-            "suggest": {
-                "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
-                "ext-pdo-sqlite": "The doc command requires SQLite to work.",
-                "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
-                "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
-                "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+                "phpunit/phpunit": "^9"
             },
-            "bin": [
-                "bin/psysh"
-            ],
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "0.11.x-dev"
-                }
-            },
             "autoload": {
-                "files": [
-                    "src/functions.php"
-                ],
                 "psr-4": {
-                    "Psy\\": "src/"
+                    "Rhukster\\DomSanitizer\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3746,110 +4281,123 @@
             ],
             "authors": [
                 {
-                    "name": "Justin Hileman",
-                    "email": "justin@justinhileman.info",
-                    "homepage": "http://justinhileman.com"
+                    "name": "Andy Miller",
+                    "email": "rhuk@rhuk.net"
                 }
             ],
-            "description": "An interactive shell for modern PHP.",
-            "homepage": "http://psysh.org",
-            "keywords": [
-                "REPL",
-                "console",
-                "interactive",
-                "shell"
-            ],
+            "description": "A simple but effective DOM/SVG/MathML Sanitizer for PHP 7.4+",
             "support": {
-                "issues": "https://github.com/bobthecow/psysh/issues",
-                "source": "https://github.com/bobthecow/psysh/tree/v0.11.2"
+                "issues": "https://github.com/rhukster/dom-sanitizer/issues",
+                "source": "https://github.com/rhukster/dom-sanitizer/tree/1.0.7"
             },
-            "time": "2022-02-28T15:28:54+00:00"
+            "time": "2023-11-06T16:46:48+00:00"
         },
         {
-            "name": "ralouphie/getallheaders",
-            "version": "3.0.3",
+            "name": "scrivo/highlight.php",
+            "version": "v9.18.1.10",
             "source": {
                 "type": "git",
-                "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "120b605dfeb996808c31b6477290a714d356e822"
+                "url": "https://github.com/scrivo/highlight.php.git",
+                "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
-                "reference": "120b605dfeb996808c31b6477290a714d356e822",
+                "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/850f4b44697a2552e892ffe71490ba2733c2fc6e",
+                "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.6"
+                "ext-json": "*",
+                "php": ">=5.4"
             },
             "require-dev": {
-                "php-coveralls/php-coveralls": "^2.1",
-                "phpunit/phpunit": "^5 || ^6.5"
+                "phpunit/phpunit": "^4.8|^5.7",
+                "sabberworm/php-css-parser": "^8.3",
+                "symfony/finder": "^2.8|^3.4|^5.4",
+                "symfony/var-dumper": "^2.8|^3.4|^5.4"
+            },
+            "suggest": {
+                "ext-mbstring": "Allows highlighting code with unicode characters and supports language with unicode keywords"
             },
             "type": "library",
             "autoload": {
                 "files": [
-                    "src/getallheaders.php"
-                ]
+                    "HighlightUtilities/functions.php"
+                ],
+                "psr-0": {
+                    "Highlight\\": "",
+                    "HighlightUtilities\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Ralph Khattar",
-                    "email": "ralph.khattar@gmail.com"
+                    "name": "Geert Bergman",
+                    "homepage": "http://www.scrivo.org/",
+                    "role": "Project Author"
+                },
+                {
+                    "name": "Vladimir Jimenez",
+                    "homepage": "https://allejo.io",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Martin Folkers",
+                    "homepage": "https://twobrain.io",
+                    "role": "Contributor"
                 }
             ],
-            "description": "A polyfill for getallheaders.",
+            "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js",
+            "keywords": [
+                "code",
+                "highlight",
+                "highlight.js",
+                "highlight.php",
+                "syntax"
+            ],
             "support": {
-                "issues": "https://github.com/ralouphie/getallheaders/issues",
-                "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+                "issues": "https://github.com/scrivo/highlight.php/issues",
+                "source": "https://github.com/scrivo/highlight.php"
             },
-            "time": "2019-03-08T08:55:37+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/allejo",
+                    "type": "github"
+                }
+            ],
+            "time": "2022-12-17T21:53:22+00:00"
         },
         {
-            "name": "ramsey/collection",
-            "version": "1.2.2",
+            "name": "spatie/backtrace",
+            "version": "1.7.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/ramsey/collection.git",
-                "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
+                "url": "https://github.com/spatie/backtrace.git",
+                "reference": "0f2477c520e3729de58e061b8192f161c99f770b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
-                "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
+                "url": "https://api.github.com/repos/spatie/backtrace/zipball/0f2477c520e3729de58e061b8192f161c99f770b",
+                "reference": "0f2477c520e3729de58e061b8192f161c99f770b",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.3 || ^8",
-                "symfony/polyfill-php81": "^1.23"
+                "php": "^7.3 || ^8.0"
             },
             "require-dev": {
-                "captainhook/captainhook": "^5.3",
-                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
-                "ergebnis/composer-normalize": "^2.6",
-                "fakerphp/faker": "^1.5",
-                "hamcrest/hamcrest-php": "^2",
-                "jangregor/phpstan-prophecy": "^0.8",
-                "mockery/mockery": "^1.3",
-                "phpspec/prophecy-phpunit": "^2.0",
-                "phpstan/extension-installer": "^1",
-                "phpstan/phpstan": "^0.12.32",
-                "phpstan/phpstan-mockery": "^0.12.5",
-                "phpstan/phpstan-phpunit": "^0.12.11",
-                "phpunit/phpunit": "^8.5 || ^9",
-                "psy/psysh": "^0.10.4",
-                "slevomat/coding-standard": "^6.3",
-                "squizlabs/php_codesniffer": "^3.5",
-                "vimeo/psalm": "^4.4"
+                "ext-json": "*",
+                "laravel/serializable-closure": "^1.3 || ^2.0",
+                "phpunit/phpunit": "^9.3 || ^11.4.3",
+                "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6",
+                "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0"
             },
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Ramsey\\Collection\\": "src/"
+                    "Spatie\\Backtrace\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -3858,161 +4406,138 @@
             ],
             "authors": [
                 {
-                    "name": "Ben Ramsey",
-                    "email": "ben@benramsey.com",
-                    "homepage": "https://benramsey.com"
+                    "name": "Freek Van de Herten",
+                    "email": "freek@spatie.be",
+                    "homepage": "https://spatie.be",
+                    "role": "Developer"
                 }
             ],
-            "description": "A PHP library for representing and manipulating collections.",
+            "description": "A better backtrace",
+            "homepage": "https://github.com/spatie/backtrace",
             "keywords": [
-                "array",
-                "collection",
-                "hash",
-                "map",
-                "queue",
-                "set"
+                "Backtrace",
+                "spatie"
             ],
             "support": {
-                "issues": "https://github.com/ramsey/collection/issues",
-                "source": "https://github.com/ramsey/collection/tree/1.2.2"
+                "source": "https://github.com/spatie/backtrace/tree/1.7.1"
             },
             "funding": [
                 {
-                    "url": "https://github.com/ramsey",
+                    "url": "https://github.com/sponsors/spatie",
                     "type": "github"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
-                    "type": "tidelift"
+                    "url": "https://spatie.be/open-source/support-us",
+                    "type": "other"
                 }
             ],
-            "time": "2021-10-10T03:01:02+00:00"
+            "time": "2024-12-02T13:28:15+00:00"
         },
         {
-            "name": "ramsey/uuid",
-            "version": "4.2.3",
+            "name": "spatie/blink",
+            "version": "1.4.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/ramsey/uuid.git",
-                "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df"
+                "url": "https://github.com/spatie/blink.git",
+                "reference": "d2c12b84ba04d4c5b53d701cc09810bf7e5d546f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
-                "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df",
+                "url": "https://api.github.com/repos/spatie/blink/zipball/d2c12b84ba04d4c5b53d701cc09810bf7e5d546f",
+                "reference": "d2c12b84ba04d4c5b53d701cc09810bf7e5d546f",
                 "shasum": ""
             },
             "require": {
-                "brick/math": "^0.8 || ^0.9",
-                "ext-json": "*",
-                "php": "^7.2 || ^8.0",
-                "ramsey/collection": "^1.0",
-                "symfony/polyfill-ctype": "^1.8",
-                "symfony/polyfill-php80": "^1.14"
-            },
-            "replace": {
-                "rhumsaa/uuid": "self.version"
+                "php": "^8.0"
             },
             "require-dev": {
-                "captainhook/captainhook": "^5.10",
-                "captainhook/plugin-composer": "^5.3",
-                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
-                "doctrine/annotations": "^1.8",
-                "ergebnis/composer-normalize": "^2.15",
-                "mockery/mockery": "^1.3",
-                "moontoast/math": "^1.1",
-                "paragonie/random-lib": "^2",
-                "php-mock/php-mock": "^2.2",
-                "php-mock/php-mock-mockery": "^1.3",
-                "php-parallel-lint/php-parallel-lint": "^1.1",
-                "phpbench/phpbench": "^1.0",
-                "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-mockery": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpunit/phpunit": "^8.5 || ^9",
-                "slevomat/coding-standard": "^7.0",
-                "squizlabs/php_codesniffer": "^3.5",
-                "vimeo/psalm": "^4.9"
-            },
-            "suggest": {
-                "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
-                "ext-ctype": "Enables faster processing of character classification using ctype functions.",
-                "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
-                "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
-                "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
-                "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+                "phpunit/phpunit": "^9.5"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "4.x-dev"
-                },
-                "captainhook": {
-                    "force-install": true
-                }
-            },
             "autoload": {
-                "files": [
-                    "src/functions.php"
-                ],
                 "psr-4": {
-                    "Ramsey\\Uuid\\": "src/"
+                    "Spatie\\Blink\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+            "authors": [
+                {
+                    "name": "Freek Van der Herten",
+                    "email": "freek@spatie.be",
+                    "homepage": "https://spatie.be",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Cache that expires in the blink of an eye",
+            "homepage": "https://github.com/spatie/blink",
             "keywords": [
-                "guid",
-                "identifier",
-                "uuid"
+                "Blink",
+                "cache",
+                "caching",
+                "spatie"
             ],
             "support": {
-                "issues": "https://github.com/ramsey/uuid/issues",
-                "source": "https://github.com/ramsey/uuid/tree/4.2.3"
+                "issues": "https://github.com/spatie/blink/issues",
+                "source": "https://github.com/spatie/blink/tree/1.4.0"
             },
             "funding": [
                 {
-                    "url": "https://github.com/ramsey",
-                    "type": "github"
+                    "url": "https://spatie.be/open-source/support-us",
+                    "type": "custom"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
-                    "type": "tidelift"
+                    "url": "https://github.com/spatie",
+                    "type": "github"
                 }
             ],
-            "time": "2021-09-25T23:10:38+00:00"
+            "time": "2023-07-19T18:28:44+00:00"
         },
         {
-            "name": "react/promise",
-            "version": "v2.9.0",
+            "name": "spatie/error-solutions",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/reactphp/promise.git",
-                "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910"
+                "url": "https://github.com/spatie/error-solutions.git",
+                "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910",
-                "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910",
+                "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936",
+                "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.4.0"
+                "php": "^8.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
+                "illuminate/broadcasting": "^10.0|^11.0|^12.0",
+                "illuminate/cache": "^10.0|^11.0|^12.0",
+                "illuminate/support": "^10.0|^11.0|^12.0",
+                "livewire/livewire": "^2.11|^3.5.20",
+                "openai-php/client": "^0.10.1",
+                "orchestra/testbench": "8.22.3|^9.0|^10.0",
+                "pestphp/pest": "^2.20|^3.0",
+                "phpstan/phpstan": "^2.1",
+                "psr/simple-cache": "^3.0",
+                "psr/simple-cache-implementation": "^3.0",
+                "spatie/ray": "^1.28",
+                "symfony/cache": "^5.4|^6.0|^7.0",
+                "symfony/process": "^5.4|^6.0|^7.0",
+                "vlucas/phpdotenv": "^5.5"
+            },
+            "suggest": {
+                "openai-php/client": "Require get solutions from OpenAI",
+                "simple-cache-implementation": "To cache solutions from OpenAI"
             },
             "type": "library",
             "autoload": {
-                "files": [
-                    "src/functions_include.php"
-                ],
                 "psr-4": {
-                    "React\\Promise\\": "src/"
+                    "Spatie\\Ignition\\": "legacy/ignition",
+                    "Spatie\\ErrorSolutions\\": "src",
+                    "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -4021,170 +4546,146 @@
             ],
             "authors": [
                 {
-                    "name": "Jan Sorgalla",
-                    "email": "jsorgalla@gmail.com",
-                    "homepage": "https://sorgalla.com/"
-                },
-                {
-                    "name": "Christian Lück",
-                    "email": "christian@clue.engineering",
-                    "homepage": "https://clue.engineering/"
-                },
-                {
-                    "name": "Cees-Jan Kiewiet",
-                    "email": "reactphp@ceesjankiewiet.nl",
-                    "homepage": "https://wyrihaximus.net/"
-                },
-                {
-                    "name": "Chris Boden",
-                    "email": "cboden@gmail.com",
-                    "homepage": "https://cboden.dev/"
+                    "name": "Ruben Van Assche",
+                    "email": "ruben@spatie.be",
+                    "role": "Developer"
                 }
             ],
-            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+            "description": "This is my package error-solutions",
+            "homepage": "https://github.com/spatie/error-solutions",
             "keywords": [
-                "promise",
-                "promises"
+                "error-solutions",
+                "spatie"
             ],
             "support": {
-                "issues": "https://github.com/reactphp/promise/issues",
-                "source": "https://github.com/reactphp/promise/tree/v2.9.0"
+                "issues": "https://github.com/spatie/error-solutions/issues",
+                "source": "https://github.com/spatie/error-solutions/tree/1.1.3"
             },
             "funding": [
                 {
-                    "url": "https://github.com/WyriHaximus",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/clue",
+                    "url": "https://github.com/Spatie",
                     "type": "github"
                 }
             ],
-            "time": "2022-02-11T10:27:51+00:00"
+            "time": "2025-02-14T12:29:50+00:00"
         },
         {
-            "name": "rebing/graphql-laravel",
-            "version": "6.5.0",
+            "name": "spatie/flare-client-php",
+            "version": "1.10.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/rebing/graphql-laravel.git",
-                "reference": "4743033ddef1dd9e817935fea1986ed887fc0ce4"
+                "url": "https://github.com/spatie/flare-client-php.git",
+                "reference": "bf1716eb98bd689451b071548ae9e70738dce62f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rebing/graphql-laravel/zipball/4743033ddef1dd9e817935fea1986ed887fc0ce4",
-                "reference": "4743033ddef1dd9e817935fea1986ed887fc0ce4",
+                "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f",
+                "reference": "bf1716eb98bd689451b071548ae9e70738dce62f",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "illuminate/contracts": "^6.0|^7.0|^8.0",
-                "illuminate/support": "^6.0|^7.0|^8.0",
-                "php": ">= 7.2",
-                "webonyx/graphql-php": "^14.0"
+                "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0",
+                "php": "^8.0",
+                "spatie/backtrace": "^1.6.1",
+                "symfony/http-foundation": "^5.2|^6.0|^7.0",
+                "symfony/mime": "^5.2|^6.0|^7.0",
+                "symfony/process": "^5.2|^6.0|^7.0",
+                "symfony/var-dumper": "^5.2|^6.0|^7.0"
             },
             "require-dev": {
-                "ext-pdo_sqlite": "*",
-                "friendsofphp/php-cs-fixer": "^2.15",
-                "laravel/legacy-factories": "^1.0",
-                "mockery/mockery": "^1.2",
-                "nunomaduro/larastan": "0.7.0",
-                "orchestra/testbench": "4.0.*|5.0.*|^6.0",
-                "phpunit/phpunit": "~7.0|~8.0|^9"
+                "dms/phpunit-arraysubset-asserts": "^0.5.0",
+                "pestphp/pest": "^1.20|^2.0",
+                "phpstan/extension-installer": "^1.1",
+                "phpstan/phpstan-deprecation-rules": "^1.0",
+                "phpstan/phpstan-phpunit": "^1.0",
+                "spatie/pest-plugin-snapshots": "^1.0|^2.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "6.x-dev"
-                },
-                "laravel": {
-                    "providers": [
-                        "Rebing\\GraphQL\\GraphQLServiceProvider"
-                    ],
-                    "aliases": {
-                        "GraphQL": "Rebing\\GraphQL\\Support\\Facades\\GraphQL"
-                    }
+                    "dev-main": "1.3.x-dev"
                 }
             },
             "autoload": {
+                "files": [
+                    "src/helpers.php"
+                ],
                 "psr-4": {
-                    "Rebing\\GraphQL\\": "src/"
+                    "Spatie\\FlareClient\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "authors": [
-                {
-                    "name": "Rebing OÜ",
-                    "homepage": "http://www.rebing.ee",
-                    "role": "Company"
-                },
-                {
-                    "name": "Mikk Mihkel Nurges",
-                    "email": "mikk.nurges@rebing.ee",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Folklore",
-                    "email": "info@atelierfolklore.ca",
-                    "homepage": "http://atelierfolklore.ca"
-                },
-                {
-                    "name": "David Mongeau-Petitpas",
-                    "email": "dmp@atelierfolklore.ca",
-                    "homepage": "http://mongo.ca",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Markus Podar",
-                    "email": "markus@fischer.name",
-                    "homepage": "https://github.com/mfn",
-                    "role": "Developer"
-                }
-            ],
-            "description": "Laravel wrapper for PHP GraphQL",
+            "description": "Send PHP errors to Flare",
+            "homepage": "https://github.com/spatie/flare-client-php",
             "keywords": [
-                "framework",
-                "graphql",
-                "laravel",
-                "react"
+                "exception",
+                "flare",
+                "reporting",
+                "spatie"
             ],
             "support": {
-                "issues": "https://github.com/rebing/graphql-laravel/issues",
-                "source": "https://github.com/rebing/graphql-laravel/tree/6.5.0"
+                "issues": "https://github.com/spatie/flare-client-php/issues",
+                "source": "https://github.com/spatie/flare-client-php/tree/1.10.1"
             },
-            "time": "2021-04-03T19:55:47+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/spatie",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-02-14T13:42:06+00:00"
         },
         {
-            "name": "seld/jsonlint",
-            "version": "1.9.0",
+            "name": "spatie/ignition",
+            "version": "1.15.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "4211420d25eba80712bff236a98960ef68b866b7"
+                "url": "https://github.com/spatie/ignition.git",
+                "reference": "31f314153020aee5af3537e507fef892ffbf8c85"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7",
-                "reference": "4211420d25eba80712bff236a98960ef68b866b7",
+                "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85",
+                "reference": "31f314153020aee5af3537e507fef892ffbf8c85",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3 || ^7.0 || ^8.0"
+                "ext-json": "*",
+                "ext-mbstring": "*",
+                "php": "^8.0",
+                "spatie/error-solutions": "^1.0",
+                "spatie/flare-client-php": "^1.7",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/var-dumper": "^5.4|^6.0|^7.0"
             },
             "require-dev": {
-                "phpstan/phpstan": "^1.5",
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13"
+                "illuminate/cache": "^9.52|^10.0|^11.0|^12.0",
+                "mockery/mockery": "^1.4",
+                "pestphp/pest": "^1.20|^2.0",
+                "phpstan/extension-installer": "^1.1",
+                "phpstan/phpstan-deprecation-rules": "^1.0",
+                "phpstan/phpstan-phpunit": "^1.0",
+                "psr/simple-cache-implementation": "*",
+                "symfony/cache": "^5.4|^6.0|^7.0",
+                "symfony/process": "^5.4|^6.0|^7.0",
+                "vlucas/phpdotenv": "^5.5"
+            },
+            "suggest": {
+                "openai-php/client": "Require get solutions from OpenAI",
+                "simple-cache-implementation": "To cache solutions from OpenAI"
             },
-            "bin": [
-                "bin/jsonlint"
-            ],
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "1.5.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+                    "Spatie\\Ignition\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -4193,60 +4694,63 @@
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Spatie",
+                    "email": "info@spatie.be",
+                    "role": "Developer"
                 }
             ],
-            "description": "JSON Linter",
+            "description": "A beautiful error page for PHP applications.",
+            "homepage": "https://flareapp.io/ignition",
             "keywords": [
-                "json",
-                "linter",
-                "parser",
-                "validator"
+                "error",
+                "flare",
+                "laravel",
+                "page"
             ],
             "support": {
-                "issues": "https://github.com/Seldaek/jsonlint/issues",
-                "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0"
+                "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction",
+                "forum": "https://twitter.com/flareappio",
+                "issues": "https://github.com/spatie/ignition/issues",
+                "source": "https://github.com/spatie/ignition"
             },
             "funding": [
                 {
-                    "url": "https://github.com/Seldaek",
+                    "url": "https://github.com/spatie",
                     "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
-                    "type": "tidelift"
                 }
             ],
-            "time": "2022-04-01T13:37:23+00:00"
+            "time": "2025-02-21T14:31:39+00:00"
         },
         {
-            "name": "seld/phar-utils",
-            "version": "1.2.0",
+            "name": "spatie/shiki-php",
+            "version": "2.3.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "9f3452c93ff423469c0d56450431562ca423dcee"
+                "url": "https://github.com/spatie/shiki-php.git",
+                "reference": "a2e78a9ff8a1290b25d550be8fbf8285c13175c5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/9f3452c93ff423469c0d56450431562ca423dcee",
-                "reference": "9f3452c93ff423469c0d56450431562ca423dcee",
+                "url": "https://api.github.com/repos/spatie/shiki-php/zipball/a2e78a9ff8a1290b25d550be8fbf8285c13175c5",
+                "reference": "a2e78a9ff8a1290b25d550be8fbf8285c13175c5",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3"
+                "ext-json": "*",
+                "php": "^8.0",
+                "symfony/process": "^5.4|^6.4|^7.1"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^v3.0",
+                "pestphp/pest": "^1.8",
+                "phpunit/phpunit": "^9.5",
+                "spatie/pest-plugin-snapshots": "^1.1",
+                "spatie/ray": "^1.10"
             },
+            "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Seld\\PharUtils\\": "src/"
+                    "Spatie\\ShikiPhp\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -4255,44 +4759,75 @@
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
+                    "name": "Rias Van der Veken",
+                    "email": "rias@spatie.be",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Freek Van der Herten",
+                    "email": "freek@spatie.be",
+                    "role": "Developer"
                 }
             ],
-            "description": "PHAR file format utilities, for when PHP phars you up",
+            "description": "Highlight code using Shiki in PHP",
+            "homepage": "https://github.com/spatie/shiki-php",
             "keywords": [
-                "phar"
+                "shiki",
+                "spatie"
             ],
             "support": {
-                "issues": "https://github.com/Seldaek/phar-utils/issues",
-                "source": "https://github.com/Seldaek/phar-utils/tree/1.2.0"
+                "source": "https://github.com/spatie/shiki-php/tree/2.3.2"
             },
-            "time": "2021-12-10T11:20:11+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/spatie",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-02-21T14:16:57+00:00"
         },
         {
-            "name": "spatie/blink",
-            "version": "1.1.3",
+            "name": "statamic-rad-pack/meilisearch",
+            "version": "v3.4.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/spatie/blink.git",
-                "reference": "2830fa61a6e4ad7353aad64b8ae487b0468c9e5c"
+                "url": "https://github.com/statamic-rad-pack/meilisearch.git",
+                "reference": "24f04b24b6c91eefcb6403e2976d89399c0a17a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/spatie/blink/zipball/2830fa61a6e4ad7353aad64b8ae487b0468c9e5c",
-                "reference": "2830fa61a6e4ad7353aad64b8ae487b0468c9e5c",
+                "url": "https://api.github.com/repos/statamic-rad-pack/meilisearch/zipball/24f04b24b6c91eefcb6403e2976d89399c0a17a9",
+                "reference": "24f04b24b6c91eefcb6403e2976d89399c0a17a9",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.3 || ^8.0"
+                "guzzlehttp/guzzle": "^7.3",
+                "http-interop/http-factory-guzzle": "^1.0",
+                "illuminate/support": "^10.0 || ^11.0 || ^12.0",
+                "meilisearch/meilisearch-php": "^1.0",
+                "php": "^8.2",
+                "statamic/cms": "^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.0"
+                "laravel/pint": "^1.21",
+                "orchestra/testbench": "^8.14 || ^9.0 || ^10.0",
+                "phpunit/phpunit": "^10.0 || ^11.5.10"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "StatamicRadPack\\Meilisearch\\ServiceProvider"
+                    ]
+                },
+                "statamic": {
+                    "name": "Meilisearch",
+                    "description": "Meilisearch search driver for Statamic"
+                }
             },
-            "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Spatie\\Blink\\": "src"
+                    "StatamicRadPack\\Meilisearch\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -4301,97 +4836,109 @@
             ],
             "authors": [
                 {
-                    "name": "Freek Van der Herten",
-                    "email": "freek@spatie.be",
-                    "homepage": "https://spatie.be",
+                    "name": "Daniel Shields",
+                    "email": "daniel@karuna.co.za",
+                    "homepage": "https://twitter.com/k4runa",
                     "role": "Developer"
+                },
+                {
+                    "name": "Oliver Kaufmann",
+                    "email": "okaufmann91@gmail.com",
+                    "homepage": "https://twitter.com/okaufmannCH",
+                    "role": "Co-Developer"
                 }
             ],
-            "description": "Cache that expires in the blink of an eye",
-            "homepage": "https://github.com/spatie/blink",
+            "description": "meilisearch search driver for Statamic",
+            "homepage": "https://github.com/statamic-rad-pack/meilisearch",
             "keywords": [
-                "Blink",
-                "cache",
-                "caching",
-                "spatie"
+                "meilisearch",
+                "search",
+                "statamic"
             ],
             "support": {
-                "issues": "https://github.com/spatie/blink/issues",
-                "source": "https://github.com/spatie/blink/tree/1.1.3"
+                "issues": "https://github.com/statamic-rad-pack/meilisearch/issues",
+                "source": "https://github.com/statamic-rad-pack/meilisearch/tree/v3.4.0"
             },
-            "funding": [
-                {
-                    "url": "https://spatie.be/open-source/support-us",
-                    "type": "custom"
-                }
-            ],
-            "time": "2020-11-29T19:47:08+00:00"
+            "time": "2025-03-04T09:55:03+00:00"
         },
         {
             "name": "statamic/cms",
-            "version": "v3.2.39",
+            "version": "v5.51.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/statamic/cms.git",
-                "reference": "08610687432c95d054db776bc1a2d100adf1f106"
+                "reference": "ceaa464450bfa6caf6f5c1a1ec8e5fa07527fdf8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/statamic/cms/zipball/08610687432c95d054db776bc1a2d100adf1f106",
-                "reference": "08610687432c95d054db776bc1a2d100adf1f106",
+                "url": "https://api.github.com/repos/statamic/cms/zipball/ceaa464450bfa6caf6f5c1a1ec8e5fa07527fdf8",
+                "reference": "ceaa464450bfa6caf6f5c1a1ec8e5fa07527fdf8",
                 "shasum": ""
             },
             "require": {
-                "ajthinking/archetype": "^0.2.5",
-                "composer/composer": "^1.10.22 || ^2.0.13",
+                "ajthinking/archetype": "^1.0.3 || ^2.0",
+                "composer/semver": "^3.4",
                 "ext-json": "*",
-                "facade/ignition-contracts": "^1.0",
                 "guzzlehttp/guzzle": "^6.3 || ^7.0",
-                "james-heinrich/getid3": "^1.9",
-                "laravel/framework": "^6.20.14 || ^7.30.4 || ^8.24.0",
-                "laravel/helpers": "^1.1",
-                "league/commonmark": "^1.5",
+                "james-heinrich/getid3": "^1.9.21",
+                "laravel/framework": "^10.40 || ^11.34 || ^12.0",
+                "laravel/prompts": "^0.1.16 || ^0.2.0 || ^0.3.0",
+                "league/commonmark": "^2.2",
                 "league/csv": "^9.0",
-                "league/glide": "^1.1",
-                "michelf/php-smartypants": "^1.8",
+                "league/glide": "^2.3",
+                "maennchen/zipstream-php": "^3.1",
+                "michelf/php-smartypants": "^1.8.1",
+                "nesbot/carbon": "^2.62.1 || ^3.0",
                 "pixelfear/composer-dist-plugin": "^0.1.4",
-                "rebing/graphql-laravel": "^6.5",
-                "spatie/blink": "^1.1.2",
-                "statamic/stringy": "^3.1",
-                "symfony/http-foundation": "^4.3.3 || ^5.1.4",
-                "symfony/lock": "^5.1",
-                "symfony/var-exporter": "^4.3 || ^5.1",
-                "symfony/yaml": "^4.1 || ^5.1",
-                "ueberdosis/html-to-prosemirror": "^1.3",
-                "ueberdosis/prosemirror-to-html": "^2.6",
-                "voku/portable-ascii": "^1.6.1 || ^2.0",
+                "rebing/graphql-laravel": "^9.8",
+                "rhukster/dom-sanitizer": "^1.0.6",
+                "spatie/blink": "^1.3",
+                "spatie/ignition": "^1.15.1",
+                "statamic/stringy": "^3.1.2",
+                "stillat/blade-parser": "^1.10.1 || ^2.0",
+                "symfony/lock": "^6.4",
+                "symfony/var-exporter": "^6.0",
+                "symfony/yaml": "^6.0 || ^7.0",
+                "ueberdosis/tiptap-php": "^1.4",
+                "voku/portable-ascii": "^2.0.2",
                 "wilderborn/partyline": "^1.0"
             },
             "require-dev": {
+                "doctrine/dbal": "^3.6",
                 "fakerphp/faker": "~1.10",
                 "google/cloud-translate": "^1.6",
-                "mockery/mockery": "^1.2.3",
-                "orchestra/testbench": "^4.0 || ^5.0 || ^6.0"
+                "laravel/pint": "1.16.0",
+                "mockery/mockery": "^1.6.10",
+                "orchestra/testbench": "^8.14 || ^9.2 || ^10.0",
+                "phpunit/phpunit": "^10.5.35 || ^11.5.3",
+                "spatie/laravel-ray": "^1.37"
             },
             "type": "library",
             "extra": {
-                "download-dist": {
-                    "url": "https://github.com/statamic/cms/releases/download/{$version}/dist.tar.gz",
-                    "path": "resources/dist"
-                },
                 "laravel": {
-                    "providers": [
-                        "Statamic\\Providers\\StatamicServiceProvider"
-                    ],
                     "aliases": {
                         "Statamic": "Statamic\\Statamic"
+                    },
+                    "providers": [
+                        "Statamic\\Providers\\StatamicServiceProvider"
+                    ]
+                },
+                "download-dist": [
+                    {
+                        "url": "https://github.com/statamic/cms/releases/download/{$version}/dist.tar.gz",
+                        "path": "resources/dist"
+                    },
+                    {
+                        "url": "https://github.com/statamic/cms/releases/download/{$version}/dist-frontend.tar.gz",
+                        "path": "resources/dist-frontend"
                     }
-                }
+                ]
             },
             "autoload": {
                 "files": [
                     "src/helpers.php",
-                    "src/namespaced_helpers.php"
+                    "src/namespaced_helpers.php",
+                    "src/View/Blade/helpers.php"
                 ],
                 "psr-4": {
                     "Statamic\\": "src/"
@@ -4410,7 +4957,7 @@
             ],
             "support": {
                 "issues": "https://github.com/statamic/cms/issues",
-                "source": "https://github.com/statamic/cms/tree/v3.2.39"
+                "source": "https://github.com/statamic/cms/tree/v5.51.0"
             },
             "funding": [
                 {
@@ -4418,41 +4965,42 @@
                     "type": "github"
                 }
             ],
-            "time": "2022-03-22T19:08:49+00:00"
+            "time": "2025-03-17T21:51:45+00:00"
         },
         {
             "name": "statamic/ssg",
-            "version": "0.8.0",
+            "version": "3.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/statamic/ssg.git",
-                "reference": "1055c953ab8e1fbf72a68c828d19f3db5a1dbd06"
+                "reference": "c5be777a1e8ebb78c468a5d034ea4910bed24a4a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/statamic/ssg/zipball/1055c953ab8e1fbf72a68c828d19f3db5a1dbd06",
-                "reference": "1055c953ab8e1fbf72a68c828d19f3db5a1dbd06",
+                "url": "https://api.github.com/repos/statamic/ssg/zipball/c5be777a1e8ebb78c468a5d034ea4910bed24a4a",
+                "reference": "c5be777a1e8ebb78c468a5d034ea4910bed24a4a",
                 "shasum": ""
             },
             "require": {
-                "statamic/cms": "~3.1.7 || 3.2.*"
+                "statamic/cms": "^5.41"
             },
             "require-dev": {
-                "orchestra/testbench": "^4.0"
+                "orchestra/testbench": "^8.28 || ^9.6.1",
+                "phpunit/phpunit": "^10.5.35"
             },
             "suggest": {
                 "spatie/fork": "Required to generate pages concurrently (^0.0.4)."
             },
             "type": "statamic-addon",
             "extra": {
-                "statamic": {
-                    "name": "Static Site Generator",
-                    "description": "Static Site Generator addon"
-                },
                 "laravel": {
                     "providers": [
                         "Statamic\\StaticSite\\ServiceProvider"
                     ]
+                },
+                "statamic": {
+                    "name": "Static Site Generator",
+                    "description": "Generate static sites with Statamic."
                 }
             },
             "autoload": {
@@ -4461,25 +5009,25 @@
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
-            "description": "Static site generator for Statamic 3.",
+            "description": "Generate static sites with Statamic.",
             "support": {
                 "issues": "https://github.com/statamic/ssg/issues",
-                "source": "https://github.com/statamic/ssg/tree/0.8.0"
+                "source": "https://github.com/statamic/ssg/tree/3.1.1"
             },
-            "time": "2021-08-16T17:33:02+00:00"
+            "time": "2025-02-24T16:05:36+00:00"
         },
         {
             "name": "statamic/stringy",
-            "version": "3.1.2",
+            "version": "3.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/statamic/Stringy.git",
-                "reference": "7c2be439de2e4ab29f8e1a461567d36fb984b4b8"
+                "reference": "7b8d20b72971295f947b6153cc4cf820a21b03e1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/statamic/Stringy/zipball/7c2be439de2e4ab29f8e1a461567d36fb984b4b8",
-                "reference": "7c2be439de2e4ab29f8e1a461567d36fb984b4b8",
+                "url": "https://api.github.com/repos/statamic/Stringy/zipball/7b8d20b72971295f947b6153cc4cf820a21b03e1",
+                "reference": "7b8d20b72971295f947b6153cc4cf820a21b03e1",
                 "shasum": ""
             },
             "require": {
@@ -4534,132 +5082,216 @@
                 "issues": "https://github.com/statamic/Stringy/issues",
                 "source": "https://github.com/statamic/Stringy"
             },
-            "time": "2020-12-09T23:24:32+00:00"
+            "time": "2022-05-04T18:41:52+00:00"
         },
         {
-            "name": "swiftmailer/swiftmailer",
-            "version": "v6.3.0",
+            "name": "stillat/blade-parser",
+            "version": "v2.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/swiftmailer/swiftmailer.git",
-                "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c"
+                "url": "https://github.com/Stillat/blade-parser.git",
+                "reference": "d6df786667543d31a0fd45d90c8b78042625c4b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c",
-                "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c",
+                "url": "https://api.github.com/repos/Stillat/blade-parser/zipball/d6df786667543d31a0fd45d90c8b78042625c4b4",
+                "reference": "d6df786667543d31a0fd45d90c8b78042625c4b4",
                 "shasum": ""
             },
             "require": {
-                "egulias/email-validator": "^2.0|^3.1",
-                "php": ">=7.0.0",
-                "symfony/polyfill-iconv": "^1.0",
-                "symfony/polyfill-intl-idn": "^1.10",
-                "symfony/polyfill-mbstring": "^1.0"
+                "laravel/framework": "^10.0 || ^11.0 || ^12.0",
+                "php": "^8.2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^1.0",
-                "symfony/phpunit-bridge": "^4.4|^5.4"
-            },
-            "suggest": {
-                "ext-intl": "Needed to support internationalized email addresses"
+                "brianium/paratest": "*",
+                "laravel/pint": "^1.4",
+                "mockery/mockery": ">=1.3.3",
+                "orchestra/testbench": "^8.14 || ^9.2 || ^10.0",
+                "pestphp/pest": "^3.7.3"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "6.2-dev"
+                "laravel": {
+                    "providers": [
+                        "Stillat\\BladeParser\\ServiceProvider",
+                        "Stillat\\BladeParser\\Providers\\ValidatorServiceProvider"
+                    ]
                 }
             },
             "autoload": {
-                "files": [
-                    "lib/swift_required.php"
-                ]
+                "psr-4": {
+                    "Stillat\\BladeParser\\": "src"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "authors": [
-                {
-                    "name": "Chris Corbyn"
-                },
+            "support": {
+                "issues": "https://github.com/Stillat/blade-parser/issues",
+                "source": "https://github.com/Stillat/blade-parser/tree/v2.0.0"
+            },
+            "funding": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/johnathonkoster",
+                    "type": "github"
                 }
             ],
-            "description": "Swiftmailer, free feature-rich PHP mailer",
-            "homepage": "https://swiftmailer.symfony.com",
-            "keywords": [
-                "email",
-                "mail",
-                "mailer"
+            "time": "2025-02-21T23:40:49+00:00"
+        },
+        {
+            "name": "stillat/documentation-search",
+            "version": "v1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Stillat/documentation-search.git",
+                "reference": "f0547392772a4fedec8b147ad60979f83be48454"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Stillat/documentation-search/zipball/f0547392772a4fedec8b147ad60979f83be48454",
+                "reference": "f0547392772a4fedec8b147ad60979f83be48454",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "laravel/pint": "^1.13",
+                "php": "^8.1",
+                "statamic/cms": "^4 || ^5",
+                "stillat/statamic-template-resolver": "^1.1"
+            },
+            "require-dev": {
+                "orchestra/testbench": "^8.14 || ^9",
+                "pestphp/pest": "^2.24",
+                "pestphp/pest-plugin-laravel": "^2.2"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Stillat\\DocumentationSearch\\ServiceProvider"
+                    ]
+                },
+                "statamic": {
+                    "name": "Documentation Search for Statamic",
+                    "description": "Documentation Search provides a custom Statamic Search provider, targeted at documentation websites."
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Stillat\\DocumentationSearch\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
             ],
             "support": {
-                "issues": "https://github.com/swiftmailer/swiftmailer/issues",
-                "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0"
+                "issues": "https://github.com/Stillat/documentation-search/issues",
+                "source": "https://github.com/Stillat/documentation-search/tree/v1.2.1"
             },
             "funding": [
                 {
-                    "url": "https://github.com/fabpot",
+                    "url": "https://github.com/JohnathonKoster",
                     "type": "github"
+                }
+            ],
+            "time": "2024-12-03T23:11:25+00:00"
+        },
+        {
+            "name": "stillat/statamic-template-resolver",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Stillat/statamic-template-resolver.git",
+                "reference": "565bdffcd702bc3fd6287e45e1cbb80ac328e718"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Stillat/statamic-template-resolver/zipball/565bdffcd702bc3fd6287e45e1cbb80ac328e718",
+                "reference": "565bdffcd702bc3fd6287e45e1cbb80ac328e718",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.0",
+                "statamic/cms": "^4 || ^5"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": []
                 },
+                "statamic": {
+                    "name": "Statamic Template Resolver",
+                    "description": "Provides utilities to resolve templates based on an entry's collection or blueprint handles, with support for a fallback template."
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Stillat\\StatamicTemplateResolver\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "support": {
+                "issues": "https://github.com/Stillat/statamic-template-resolver/issues",
+                "source": "https://github.com/Stillat/statamic-template-resolver/tree/v1.1.0"
+            },
+            "funding": [
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer",
-                    "type": "tidelift"
+                    "url": "https://github.com/JohnathonKoster",
+                    "type": "github"
                 }
             ],
-            "abandoned": "symfony/mailer",
-            "time": "2021-10-18T15:26:12+00:00"
+            "time": "2024-05-11T20:09:44+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v5.4.7",
+            "version": "v6.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6"
+                "reference": "799445db3f15768ecc382ac5699e6da0520a0a04"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/900275254f0a1a2afff1ab0e11abd5587a10e1d6",
-                "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6",
+                "url": "https://api.github.com/repos/symfony/console/zipball/799445db3f15768ecc382ac5699e6da0520a0a04",
+                "reference": "799445db3f15768ecc382ac5699e6da0520a0a04",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php73": "^1.9",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/string": "^5.1|^6.0"
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/string": "^5.4|^6.0|^7.0"
             },
             "conflict": {
-                "psr/log": ">=3",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/dotenv": "<5.1",
-                "symfony/event-dispatcher": "<4.4",
-                "symfony/lock": "<4.4",
-                "symfony/process": "<4.4"
+                "symfony/dependency-injection": "<5.4",
+                "symfony/dotenv": "<5.4",
+                "symfony/event-dispatcher": "<5.4",
+                "symfony/lock": "<5.4",
+                "symfony/process": "<5.4"
             },
             "provide": {
-                "psr/log-implementation": "1.0|2.0"
+                "psr/log-implementation": "1.0|2.0|3.0"
             },
             "require-dev": {
-                "psr/log": "^1|^2",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
-                "symfony/lock": "^4.4|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "psr/log": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
+                "psr/log": "^1|^2|^3",
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/lock": "^5.4|^6.0|^7.0",
+                "symfony/messenger": "^5.4|^6.0|^7.0",
+                "symfony/process": "^5.4|^6.0|^7.0",
+                "symfony/stopwatch": "^5.4|^6.0|^7.0",
+                "symfony/var-dumper": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
@@ -4688,12 +5320,12 @@
             "homepage": "https://symfony.com",
             "keywords": [
                 "cli",
-                "command line",
+                "command-line",
                 "console",
                 "terminal"
             ],
             "support": {
-                "source": "https://github.com/symfony/console/tree/v5.4.7"
+                "source": "https://github.com/symfony/console/tree/v6.4.17"
             },
             "funding": [
                 {
@@ -4709,25 +5341,24 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-31T17:09:19+00:00"
+            "time": "2024-12-07T12:07:30+00:00"
         },
         {
             "name": "symfony/css-selector",
-            "version": "v5.4.3",
+            "version": "v7.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "b0a190285cd95cb019237851205b8140ef6e368e"
+                "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e",
-                "reference": "b0a190285cd95cb019237851205b8140ef6e368e",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2",
+                "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.16"
+                "php": ">=8.2"
             },
             "type": "library",
             "autoload": {
@@ -4759,7 +5390,7 @@
             "description": "Converts CSS selectors to XPath expressions",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/css-selector/tree/v5.4.3"
+                "source": "https://github.com/symfony/css-selector/tree/v7.2.0"
             },
             "funding": [
                 {
@@ -4775,33 +5406,33 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:53:40+00:00"
+            "time": "2024-09-25T14:21:43+00:00"
         },
         {
             "name": "symfony/deprecation-contracts",
-            "version": "v2.5.1",
+            "version": "v3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/deprecation-contracts.git",
-                "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
+                "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
-                "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+                "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=8.1"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                },
                 "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
                 }
             },
             "autoload": {
@@ -4826,7 +5457,7 @@
             "description": "A generic function and convention to trigger deprecation notices",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1"
+                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
             },
             "funding": [
                 {
@@ -4842,31 +5473,35 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:53:40+00:00"
+            "time": "2024-09-25T14:20:29+00:00"
         },
         {
             "name": "symfony/error-handler",
-            "version": "v5.4.7",
+            "version": "v6.4.19",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/error-handler.git",
-                "reference": "060bc01856a1846e3e4385261bc9ed11a1dd7b6a"
+                "reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/error-handler/zipball/060bc01856a1846e3e4385261bc9ed11a1dd7b6a",
-                "reference": "060bc01856a1846e3e4385261bc9ed11a1dd7b6a",
+                "url": "https://api.github.com/repos/symfony/error-handler/zipball/3d4e55cd2b8f1979a65eba9ab749d6466c316f71",
+                "reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
+                "php": ">=8.1",
                 "psr/log": "^1|^2|^3",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
+                "symfony/var-dumper": "^5.4|^6.0|^7.0"
+            },
+            "conflict": {
+                "symfony/deprecation-contracts": "<2.5",
+                "symfony/http-kernel": "<6.4"
             },
             "require-dev": {
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/http-kernel": "^4.4|^5.0|^6.0",
-                "symfony/serializer": "^4.4|^5.0|^6.0"
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/http-kernel": "^6.4|^7.0",
+                "symfony/serializer": "^5.4|^6.0|^7.0"
             },
             "bin": [
                 "Resources/bin/patch-type-declarations"
@@ -4897,7 +5532,7 @@
             "description": "Provides tools to manage errors and ease debugging PHP code",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/error-handler/tree/v5.4.7"
+                "source": "https://github.com/symfony/error-handler/tree/v6.4.19"
             },
             "funding": [
                 {
@@ -4913,48 +5548,43 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-18T16:21:29+00:00"
+            "time": "2025-02-02T20:16:33+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v5.4.3",
+            "version": "v7.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d"
+                "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d",
-                "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1",
+                "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/event-dispatcher-contracts": "^2|^3",
-                "symfony/polyfill-php80": "^1.16"
+                "php": ">=8.2",
+                "symfony/event-dispatcher-contracts": "^2.5|^3"
             },
             "conflict": {
-                "symfony/dependency-injection": "<4.4"
+                "symfony/dependency-injection": "<6.4",
+                "symfony/service-contracts": "<2.5"
             },
             "provide": {
                 "psr/event-dispatcher-implementation": "1.0",
-                "symfony/event-dispatcher-implementation": "2.0"
+                "symfony/event-dispatcher-implementation": "2.0|3.0"
             },
             "require-dev": {
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/error-handler": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^4.4|^5.0|^6.0",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "symfony/config": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/error-handler": "^6.4|^7.0",
+                "symfony/expression-language": "^6.4|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/stopwatch": "^6.4|^7.0"
             },
             "type": "library",
             "autoload": {
@@ -4982,7 +5612,7 @@
             "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3"
+                "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0"
             },
             "funding": [
                 {
@@ -4998,37 +5628,34 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:53:40+00:00"
+            "time": "2024-09-25T14:21:43+00:00"
         },
         {
             "name": "symfony/event-dispatcher-contracts",
-            "version": "v2.5.1",
+            "version": "v3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher-contracts.git",
-                "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1"
+                "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1",
-                "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f",
+                "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
+                "php": ">=8.1",
                 "psr/event-dispatcher": "^1"
             },
-            "suggest": {
-                "symfony/event-dispatcher-implementation": ""
-            },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                },
                 "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
                 }
             },
             "autoload": {
@@ -5061,71 +5688,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-01-02T09:53:40+00:00"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v5.4.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/3a4442138d80c9f7b600fb297534ac718b61d37f",
-                "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.8",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides basic utilities for the filesystem",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/filesystem/tree/v5.4.7"
+                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1"
             },
             "funding": [
                 {
@@ -5141,26 +5704,27 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-04-01T12:33:59+00:00"
+            "time": "2024-09-25T14:20:29+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v5.4.3",
+            "version": "v6.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
+                "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
-                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
+                "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16"
+                "php": ">=8.1"
+            },
+            "require-dev": {
+                "symfony/filesystem": "^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
@@ -5188,7 +5752,7 @@
             "description": "Finds files and directories via an intuitive fluent interface",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/finder/tree/v5.4.3"
+                "source": "https://github.com/symfony/finder/tree/v6.4.17"
             },
             "funding": [
                 {
@@ -5204,36 +5768,40 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-26T16:34:36+00:00"
+            "time": "2024-12-29T13:51:37+00:00"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v5.4.6",
+            "version": "v6.4.18",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465"
+                "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/34e89bc147633c0f9dd6caaaf56da3b806a21465",
-                "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0492d6217e5ab48f51fca76f64cf8e78919d0db",
+                "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-mbstring": "~1.1",
-                "symfony/polyfill-php80": "^1.16"
+                "symfony/polyfill-php83": "^1.27"
             },
-            "require-dev": {
-                "predis/predis": "~1.0",
-                "symfony/cache": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/mime": "^4.4|^5.0|^6.0"
+            "conflict": {
+                "symfony/cache": "<6.4.12|>=7.0,<7.1.5"
             },
-            "suggest": {
-                "symfony/mime": "To use the file extension guesser"
+            "require-dev": {
+                "doctrine/dbal": "^2.13.1|^3|^4",
+                "predis/predis": "^1.1|^2.0",
+                "symfony/cache": "^6.4.12|^7.1.5",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0",
+                "symfony/mime": "^5.4|^6.0|^7.0",
+                "symfony/rate-limiter": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
@@ -5261,7 +5829,7 @@
             "description": "Defines an object-oriented layer for the HTTP specification",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v5.4.6"
+                "source": "https://github.com/symfony/http-foundation/tree/v6.4.18"
             },
             "funding": [
                 {
@@ -5277,76 +5845,78 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-05T21:03:43+00:00"
+            "time": "2025-01-09T15:48:56+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v5.4.7",
+            "version": "v6.4.19",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "509243b9b3656db966284c45dffce9316c1ecc5c"
+                "reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/509243b9b3656db966284c45dffce9316c1ecc5c",
-                "reference": "509243b9b3656db966284c45dffce9316c1ecc5c",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/88f2c9f7feff86bb7b9105c5151bc2c1404cd64c",
+                "reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "psr/log": "^1|^2",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/error-handler": "^4.4|^5.0|^6.0",
-                "symfony/event-dispatcher": "^5.0|^6.0",
-                "symfony/http-foundation": "^5.3.7|^6.0",
-                "symfony/polyfill-ctype": "^1.8",
-                "symfony/polyfill-php73": "^1.9",
-                "symfony/polyfill-php80": "^1.16"
+                "php": ">=8.1",
+                "psr/log": "^1|^2|^3",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/error-handler": "^6.4|^7.0",
+                "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
+                "symfony/polyfill-ctype": "^1.8"
             },
             "conflict": {
                 "symfony/browser-kit": "<5.4",
-                "symfony/cache": "<5.0",
-                "symfony/config": "<5.0",
-                "symfony/console": "<4.4",
-                "symfony/dependency-injection": "<5.3",
-                "symfony/doctrine-bridge": "<5.0",
-                "symfony/form": "<5.0",
-                "symfony/http-client": "<5.0",
-                "symfony/mailer": "<5.0",
-                "symfony/messenger": "<5.0",
-                "symfony/translation": "<5.0",
-                "symfony/twig-bridge": "<5.0",
-                "symfony/validator": "<5.0",
+                "symfony/cache": "<5.4",
+                "symfony/config": "<6.1",
+                "symfony/console": "<5.4",
+                "symfony/dependency-injection": "<6.4",
+                "symfony/doctrine-bridge": "<5.4",
+                "symfony/form": "<5.4",
+                "symfony/http-client": "<5.4",
+                "symfony/http-client-contracts": "<2.5",
+                "symfony/mailer": "<5.4",
+                "symfony/messenger": "<5.4",
+                "symfony/translation": "<5.4",
+                "symfony/translation-contracts": "<2.5",
+                "symfony/twig-bridge": "<5.4",
+                "symfony/validator": "<6.4",
+                "symfony/var-dumper": "<6.3",
                 "twig/twig": "<2.13"
             },
             "provide": {
-                "psr/log-implementation": "1.0|2.0"
+                "psr/log-implementation": "1.0|2.0|3.0"
             },
             "require-dev": {
                 "psr/cache": "^1.0|^2.0|^3.0",
-                "symfony/browser-kit": "^5.4|^6.0",
-                "symfony/config": "^5.0|^6.0",
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/css-selector": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^5.3|^6.0",
-                "symfony/dom-crawler": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/http-client-contracts": "^1.1|^2|^3",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/routing": "^4.4|^5.0|^6.0",
-                "symfony/stopwatch": "^4.4|^5.0|^6.0",
-                "symfony/translation": "^4.4|^5.0|^6.0",
-                "symfony/translation-contracts": "^1.1|^2|^3",
+                "symfony/browser-kit": "^5.4|^6.0|^7.0",
+                "symfony/clock": "^6.2|^7.0",
+                "symfony/config": "^6.1|^7.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/css-selector": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/dom-crawler": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/finder": "^5.4|^6.0|^7.0",
+                "symfony/http-client-contracts": "^2.5|^3",
+                "symfony/process": "^5.4|^6.0|^7.0",
+                "symfony/property-access": "^5.4.5|^6.0.5|^7.0",
+                "symfony/routing": "^5.4|^6.0|^7.0",
+                "symfony/serializer": "^6.4.4|^7.0.4",
+                "symfony/stopwatch": "^5.4|^6.0|^7.0",
+                "symfony/translation": "^5.4|^6.0|^7.0",
+                "symfony/translation-contracts": "^2.5|^3",
+                "symfony/uid": "^5.4|^6.0|^7.0",
+                "symfony/validator": "^6.4|^7.0",
+                "symfony/var-dumper": "^5.4|^6.4|^7.0",
+                "symfony/var-exporter": "^6.2|^7.0",
                 "twig/twig": "^2.13|^3.0.4"
             },
-            "suggest": {
-                "symfony/browser-kit": "",
-                "symfony/config": "",
-                "symfony/console": "",
-                "symfony/dependency-injection": ""
-            },
             "type": "library",
             "autoload": {
                 "psr-4": {
@@ -5373,7 +5943,7 @@
             "description": "Provides a structured process for converting a Request into a Response",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v5.4.7"
+                "source": "https://github.com/symfony/http-kernel/tree/v6.4.19"
             },
             "funding": [
                 {
@@ -5389,34 +5959,34 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-04-02T06:04:20+00:00"
+            "time": "2025-02-26T10:51:37+00:00"
         },
         {
             "name": "symfony/lock",
-            "version": "v5.4.7",
+            "version": "v6.4.13",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/lock.git",
-                "reference": "a16279554621453840eb8af14d12cfa24c10b8d3"
+                "reference": "a69c3dd151ab7e14925f119164cfdf65d55392a4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/lock/zipball/a16279554621453840eb8af14d12cfa24c10b8d3",
-                "reference": "a16279554621453840eb8af14d12cfa24c10b8d3",
+                "url": "https://api.github.com/repos/symfony/lock/zipball/a69c3dd151ab7e14925f119164cfdf65d55392a4",
+                "reference": "a69c3dd151ab7e14925f119164cfdf65d55392a4",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
+                "php": ">=8.1",
                 "psr/log": "^1|^2|^3",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16"
+                "symfony/deprecation-contracts": "^2.5|^3"
             },
             "conflict": {
-                "doctrine/dbal": "<2.13"
+                "doctrine/dbal": "<2.13",
+                "symfony/cache": "<6.2"
             },
             "require-dev": {
-                "doctrine/dbal": "^2.13|^3.0",
-                "predis/predis": "~1.0"
+                "doctrine/dbal": "^2.13|^3|^4",
+                "predis/predis": "^1.1|^2.0"
             },
             "type": "library",
             "autoload": {
@@ -5452,7 +6022,7 @@
                 "semaphore"
             ],
             "support": {
-                "source": "https://github.com/symfony/lock/tree/v5.4.7"
+                "source": "https://github.com/symfony/lock/tree/v6.4.13"
             },
             "funding": [
                 {
@@ -5468,47 +6038,48 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-22T15:31:03+00:00"
+            "time": "2024-10-25T15:19:46+00:00"
         },
         {
-            "name": "symfony/mime",
-            "version": "v5.4.7",
+            "name": "symfony/mailer",
+            "version": "v6.4.18",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/mime.git",
-                "reference": "92d27a34dea2e199fa9b687e3fff3a7d169b7b1c"
+                "url": "https://github.com/symfony/mailer.git",
+                "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/92d27a34dea2e199fa9b687e3fff3a7d169b7b1c",
-                "reference": "92d27a34dea2e199fa9b687e3fff3a7d169b7b1c",
+                "url": "https://api.github.com/repos/symfony/mailer/zipball/e93a6ae2767d7f7578c2b7961d9d8e27580b2b11",
+                "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-intl-idn": "^1.10",
-                "symfony/polyfill-mbstring": "^1.0",
-                "symfony/polyfill-php80": "^1.16"
+                "egulias/email-validator": "^2.1.10|^3|^4",
+                "php": ">=8.1",
+                "psr/event-dispatcher": "^1",
+                "psr/log": "^1|^2|^3",
+                "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+                "symfony/mime": "^6.2|^7.0",
+                "symfony/service-contracts": "^2.5|^3"
             },
             "conflict": {
-                "egulias/email-validator": "~3.0.0",
-                "phpdocumentor/reflection-docblock": "<3.2.2",
-                "phpdocumentor/type-resolver": "<1.4.0",
-                "symfony/mailer": "<4.4"
+                "symfony/http-client-contracts": "<2.5",
+                "symfony/http-kernel": "<5.4",
+                "symfony/messenger": "<6.2",
+                "symfony/mime": "<6.2",
+                "symfony/twig-bridge": "<6.2.1"
             },
             "require-dev": {
-                "egulias/email-validator": "^2.1.10|^3.1",
-                "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/property-access": "^4.4|^5.1|^6.0",
-                "symfony/property-info": "^4.4|^5.1|^6.0",
-                "symfony/serializer": "^5.2|^6.0"
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/http-client": "^5.4|^6.0|^7.0",
+                "symfony/messenger": "^6.2|^7.0",
+                "symfony/twig-bridge": "^6.2|^7.0"
             },
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Mime\\": ""
+                    "Symfony\\Component\\Mailer\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -5528,14 +6099,10 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Allows manipulating MIME messages",
+            "description": "Helps sending emails",
             "homepage": "https://symfony.com",
-            "keywords": [
-                "mime",
-                "mime-type"
-            ],
             "support": {
-                "source": "https://github.com/symfony/mime/tree/v5.4.7"
+                "source": "https://github.com/symfony/mailer/tree/v6.4.18"
             },
             "funding": [
                 {
@@ -5551,48 +6118,53 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-11T16:08:05+00:00"
+            "time": "2025-01-24T15:27:15+00:00"
         },
         {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.25.0",
+            "name": "symfony/mime",
+            "version": "v6.4.19",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "30885182c981ab175d4d034db0f6f469898070ab"
+                "url": "https://github.com/symfony/mime.git",
+                "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
-                "reference": "30885182c981ab175d4d034db0f6f469898070ab",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3",
+                "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
-            },
-            "provide": {
-                "ext-ctype": "*"
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-intl-idn": "^1.10",
+                "symfony/polyfill-mbstring": "^1.0"
             },
-            "suggest": {
-                "ext-ctype": "For best performance"
+            "conflict": {
+                "egulias/email-validator": "~3.0.0",
+                "phpdocumentor/reflection-docblock": "<3.2.2",
+                "phpdocumentor/type-resolver": "<1.4.0",
+                "symfony/mailer": "<5.4",
+                "symfony/serializer": "<6.4.3|>7.0,<7.0.3"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
+            "require-dev": {
+                "egulias/email-validator": "^2.1.10|^3.1|^4",
+                "league/html-to-markdown": "^5.0",
+                "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/process": "^5.4|^6.4|^7.0",
+                "symfony/property-access": "^5.4|^6.0|^7.0",
+                "symfony/property-info": "^5.4|^6.0|^7.0",
+                "symfony/serializer": "^6.4.3|^7.0.3"
             },
+            "type": "library",
             "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
                 "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                }
+                    "Symfony\\Component\\Mime\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -5600,24 +6172,22 @@
             ],
             "authors": [
                 {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill for ctype functions",
+            "description": "Allows manipulating MIME messages",
             "homepage": "https://symfony.com",
             "keywords": [
-                "compatibility",
-                "ctype",
-                "polyfill",
-                "portable"
+                "mime",
+                "mime-type"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
+                "source": "https://github.com/symfony/mime/tree/v6.4.19"
             },
             "funding": [
                 {
@@ -5633,39 +6203,36 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-20T20:35:02+00:00"
+            "time": "2025-02-17T21:23:52+00:00"
         },
         {
-            "name": "symfony/polyfill-iconv",
-            "version": "v1.25.0",
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-iconv.git",
-                "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40"
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40",
-                "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.2"
             },
             "provide": {
-                "ext-iconv": "*"
+                "ext-ctype": "*"
             },
             "suggest": {
-                "ext-iconv": "For best performance"
+                "ext-ctype": "For best performance"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
                 "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
@@ -5673,7 +6240,7 @@
                     "bootstrap.php"
                 ],
                 "psr-4": {
-                    "Symfony\\Polyfill\\Iconv\\": ""
+                    "Symfony\\Polyfill\\Ctype\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -5682,25 +6249,24 @@
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill for the Iconv extension",
+            "description": "Symfony polyfill for ctype functions",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
-                "iconv",
+                "ctype",
                 "polyfill",
-                "portable",
-                "shim"
+                "portable"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-iconv/tree/v1.25.0"
+                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -5716,36 +6282,33 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-04T09:04:05+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
             "name": "symfony/polyfill-intl-grapheme",
-            "version": "v1.25.0",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
-                "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
+                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
-                "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.2"
             },
             "suggest": {
                 "ext-intl": "For best performance"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
                 "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
@@ -5781,7 +6344,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
+                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -5797,38 +6360,34 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-11-23T21:10:46+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
             "name": "symfony/polyfill-intl-idn",
-            "version": "v1.26.0",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-idn.git",
-                "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8"
+                "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8",
-                "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
+                "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1",
-                "symfony/polyfill-intl-normalizer": "^1.10",
-                "symfony/polyfill-php72": "^1.10"
+                "php": ">=7.2",
+                "symfony/polyfill-intl-normalizer": "^1.10"
             },
             "suggest": {
                 "ext-intl": "For best performance"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "1.26-dev"
-                },
                 "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
@@ -5868,7 +6427,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0"
+                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -5884,36 +6443,33 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-05-24T11:49:31+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
             "name": "symfony/polyfill-intl-normalizer",
-            "version": "v1.26.0",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
-                "reference": "219aa369ceff116e673852dce47c3a41794c14bd"
+                "reference": "3833d7255cc303546435cb650316bff708a1c75c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
-                "reference": "219aa369ceff116e673852dce47c3a41794c14bd",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
+                "reference": "3833d7255cc303546435cb650316bff708a1c75c",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.2"
             },
             "suggest": {
                 "ext-intl": "For best performance"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "1.26-dev"
-                },
                 "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
@@ -5952,7 +6508,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
+                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -5968,24 +6524,24 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-05-24T11:49:31+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.26.0",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
+                "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
-                "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
+                "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.2"
             },
             "provide": {
                 "ext-mbstring": "*"
@@ -5995,12 +6551,9 @@
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "1.26-dev"
-                },
                 "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
@@ -6035,83 +6588,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2022-05-24T11:49:31+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php72",
-            "version": "v1.26.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php72.git",
-                "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2",
-                "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "1.26-dev"
-                },
-                "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php72\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0"
+                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -6127,33 +6604,30 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-05-24T11:49:31+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
-            "name": "symfony/polyfill-php73",
-            "version": "v1.25.0",
+            "name": "symfony/polyfill-php80",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-php73.git",
-                "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
-                "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.2"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
                 "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
@@ -6161,7 +6635,7 @@
                     "bootstrap.php"
                 ],
                 "psr-4": {
-                    "Symfony\\Polyfill\\Php73\\": ""
+                    "Symfony\\Polyfill\\Php80\\": ""
                 },
                 "classmap": [
                     "Resources/stubs"
@@ -6172,6 +6646,10 @@
                 "MIT"
             ],
             "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
                 {
                     "name": "Nicolas Grekas",
                     "email": "p@tchwork.com"
@@ -6181,7 +6659,7 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
@@ -6190,7 +6668,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -6206,33 +6684,30 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-06-05T21:20:04+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
-            "name": "symfony/polyfill-php80",
-            "version": "v1.25.0",
+            "name": "symfony/polyfill-php83",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-php80.git",
-                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
+                "url": "https://github.com/symfony/polyfill-php83.git",
+                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
-                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
+                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.2"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
                 "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
@@ -6240,7 +6715,7 @@
                     "bootstrap.php"
                 ],
                 "psr-4": {
-                    "Symfony\\Polyfill\\Php80\\": ""
+                    "Symfony\\Polyfill\\Php83\\": ""
                 },
                 "classmap": [
                     "Resources/stubs"
@@ -6251,10 +6726,6 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Ion Bazan",
-                    "email": "ion.bazan@gmail.com"
-                },
                 {
                     "name": "Nicolas Grekas",
                     "email": "p@tchwork.com"
@@ -6264,7 +6735,7 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
@@ -6273,7 +6744,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -6289,33 +6760,36 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-04T08:16:47+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
-            "name": "symfony/polyfill-php81",
-            "version": "v1.25.0",
+            "name": "symfony/polyfill-uuid",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-php81.git",
-                "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
+                "url": "https://github.com/symfony/polyfill-uuid.git",
+                "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
-                "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
+                "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+                "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.2"
+            },
+            "provide": {
+                "ext-uuid": "*"
+            },
+            "suggest": {
+                "ext-uuid": "For best performance"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "1.23-dev"
-                },
                 "thanks": {
-                    "name": "symfony/polyfill",
-                    "url": "https://github.com/symfony/polyfill"
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
@@ -6323,11 +6797,8 @@
                     "bootstrap.php"
                 ],
                 "psr-4": {
-                    "Symfony\\Polyfill\\Php81\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
+                    "Symfony\\Polyfill\\Uuid\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -6335,24 +6806,24 @@
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
+                    "name": "Grégoire Pineau",
+                    "email": "lyrixx@lyrixx.info"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+            "description": "Symfony polyfill for uuid functions",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
                 "polyfill",
                 "portable",
-                "shim"
+                "uuid"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0"
+                "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -6368,25 +6839,24 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-13T13:58:11+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v5.4.7",
+            "version": "v6.4.19",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb"
+                "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/38a44b2517b470a436e1c944bf9b9ba3961137fb",
-                "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb",
+                "url": "https://api.github.com/repos/symfony/process/zipball/7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3",
+                "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.16"
+                "php": ">=8.1"
             },
             "type": "library",
             "autoload": {
@@ -6414,7 +6884,7 @@
             "description": "Executes commands in sub-processes",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/process/tree/v5.4.7"
+                "source": "https://github.com/symfony/process/tree/v6.4.19"
             },
             "funding": [
                 {
@@ -6430,47 +6900,40 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-18T16:18:52+00:00"
+            "time": "2025-02-04T13:35:48+00:00"
         },
         {
             "name": "symfony/routing",
-            "version": "v5.4.3",
+            "version": "v6.4.18",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "44b29c7a94e867ccde1da604792f11a469958981"
+                "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981",
-                "reference": "44b29c7a94e867ccde1da604792f11a469958981",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/e9bfc94953019089acdfb9be51c1b9142c4afa68",
+                "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-php80": "^1.16"
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3"
             },
             "conflict": {
                 "doctrine/annotations": "<1.12",
-                "symfony/config": "<5.3",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/yaml": "<4.4"
+                "symfony/config": "<6.2",
+                "symfony/dependency-injection": "<5.4",
+                "symfony/yaml": "<5.4"
             },
             "require-dev": {
-                "doctrine/annotations": "^1.12",
+                "doctrine/annotations": "^1.12|^2",
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^5.3|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/expression-language": "^4.4|^5.0|^6.0",
-                "symfony/http-foundation": "^4.4|^5.0|^6.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "symfony/config": "For using the all-in-one router or any loader",
-                "symfony/expression-language": "For using expression matching",
-                "symfony/http-foundation": "For using a Symfony Request object",
-                "symfony/yaml": "For using the YAML loader"
+                "symfony/config": "^6.2|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/expression-language": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^5.4|^6.0|^7.0",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
@@ -6504,7 +6967,7 @@
                 "url"
             ],
             "support": {
-                "source": "https://github.com/symfony/routing/tree/v5.4.3"
+                "source": "https://github.com/symfony/routing/tree/v6.4.18"
             },
             "funding": [
                 {
@@ -6520,47 +6983,47 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:53:40+00:00"
+            "time": "2025-01-09T08:51:02+00:00"
         },
         {
             "name": "symfony/service-contracts",
-            "version": "v2.5.1",
+            "version": "v3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c"
+                "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
-                "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
+                "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "psr/container": "^1.1",
-                "symfony/deprecation-contracts": "^2.1|^3"
+                "php": ">=8.1",
+                "psr/container": "^1.1|^2.0",
+                "symfony/deprecation-contracts": "^2.5|^3"
             },
             "conflict": {
                 "ext-psr": "<1.1|>=2"
             },
-            "suggest": {
-                "symfony/service-implementation": ""
-            },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                },
                 "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Contracts\\Service\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -6587,7 +7050,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/service-contracts/tree/v2.5.1"
+                "source": "https://github.com/symfony/service-contracts/tree/v3.5.1"
             },
             "funding": [
                 {
@@ -6603,38 +7066,39 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-13T20:07:29+00:00"
+            "time": "2024-09-25T14:20:29+00:00"
         },
         {
             "name": "symfony/string",
-            "version": "v5.4.3",
+            "version": "v7.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/string.git",
-                "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
+                "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
-                "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
+                "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82",
+                "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
+                "php": ">=8.2",
                 "symfony/polyfill-ctype": "~1.8",
                 "symfony/polyfill-intl-grapheme": "~1.0",
                 "symfony/polyfill-intl-normalizer": "~1.0",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "~1.15"
+                "symfony/polyfill-mbstring": "~1.0"
             },
             "conflict": {
-                "symfony/translation-contracts": ">=3.0"
+                "symfony/translation-contracts": "<2.5"
             },
             "require-dev": {
-                "symfony/error-handler": "^4.4|^5.0|^6.0",
-                "symfony/http-client": "^4.4|^5.0|^6.0",
-                "symfony/translation-contracts": "^1.1|^2",
-                "symfony/var-exporter": "^4.4|^5.0|^6.0"
+                "symfony/emoji": "^7.1",
+                "symfony/error-handler": "^6.4|^7.0",
+                "symfony/http-client": "^6.4|^7.0",
+                "symfony/intl": "^6.4|^7.0",
+                "symfony/translation-contracts": "^2.5|^3.0",
+                "symfony/var-exporter": "^6.4|^7.0"
             },
             "type": "library",
             "autoload": {
@@ -6673,7 +7137,7 @@
                 "utf8"
             ],
             "support": {
-                "source": "https://github.com/symfony/string/tree/v5.4.3"
+                "source": "https://github.com/symfony/string/tree/v7.2.0"
             },
             "funding": [
                 {
@@ -6689,57 +7153,55 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:53:40+00:00"
+            "time": "2024-11-13T13:31:26+00:00"
         },
         {
             "name": "symfony/translation",
-            "version": "v5.4.7",
+            "version": "v6.4.19",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "e1eb790575202ee3ac2659f55b93b05853726f8e"
+                "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/e1eb790575202ee3ac2659f55b93b05853726f8e",
-                "reference": "e1eb790575202ee3ac2659f55b93b05853726f8e",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/3b9bf9f33997c064885a7bfc126c14b9daa0e00e",
+                "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/translation-contracts": "^2.3"
+                "symfony/translation-contracts": "^2.5|^3.0"
             },
             "conflict": {
-                "symfony/config": "<4.4",
-                "symfony/console": "<5.3",
-                "symfony/dependency-injection": "<5.0",
-                "symfony/http-kernel": "<5.0",
-                "symfony/twig-bundle": "<5.0",
-                "symfony/yaml": "<4.4"
+                "symfony/config": "<5.4",
+                "symfony/console": "<5.4",
+                "symfony/dependency-injection": "<5.4",
+                "symfony/http-client-contracts": "<2.5",
+                "symfony/http-kernel": "<5.4",
+                "symfony/service-contracts": "<2.5",
+                "symfony/twig-bundle": "<5.4",
+                "symfony/yaml": "<5.4"
             },
             "provide": {
-                "symfony/translation-implementation": "2.3"
+                "symfony/translation-implementation": "2.3|3.0"
             },
             "require-dev": {
+                "nikic/php-parser": "^4.18|^5.0",
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/console": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
-                "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
-                "symfony/http-kernel": "^5.0|^6.0",
-                "symfony/intl": "^4.4|^5.0|^6.0",
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/finder": "^5.4|^6.0|^7.0",
+                "symfony/http-client-contracts": "^2.5|^3.0",
+                "symfony/http-kernel": "^5.4|^6.0|^7.0",
+                "symfony/intl": "^5.4|^6.0|^7.0",
                 "symfony/polyfill-intl-icu": "^1.21",
-                "symfony/service-contracts": "^1.1.2|^2|^3",
-                "symfony/yaml": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "psr/log-implementation": "To use logging capability in translator",
-                "symfony/config": "",
-                "symfony/yaml": ""
+                "symfony/routing": "^5.4|^6.0|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
@@ -6770,7 +7232,7 @@
             "description": "Provides tools to internationalize your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/translation/tree/v5.4.7"
+                "source": "https://github.com/symfony/translation/tree/v6.4.19"
             },
             "funding": [
                 {
@@ -6786,48 +7248,125 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-24T17:09:09+00:00"
+            "time": "2025-02-13T10:18:43+00:00"
         },
         {
             "name": "symfony/translation-contracts",
-            "version": "v2.5.1",
+            "version": "v3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation-contracts.git",
-                "reference": "1211df0afa701e45a04253110e959d4af4ef0f07"
+                "reference": "4667ff3bd513750603a09c8dedbea942487fb07c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07",
-                "reference": "1211df0afa701e45a04253110e959d4af4ef0f07",
+                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c",
+                "reference": "4667ff3bd513750603a09c8dedbea942487fb07c",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5"
-            },
-            "suggest": {
-                "symfony/translation-implementation": ""
+                "php": ">=8.1"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                },
                 "thanks": {
-                    "name": "symfony/contracts",
-                    "url": "https://github.com/symfony/contracts"
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Contracts\\Translation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Test/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to translation",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1"
+            },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
+            ],
+            "time": "2024-09-25T14:20:29+00:00"
+        },
+        {
+            "name": "symfony/uid",
+            "version": "v6.4.13",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/uid.git",
+                "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/uid/zipball/18eb207f0436a993fffbdd811b5b8fa35fa5e007",
+                "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/polyfill-uuid": "^1.15"
+            },
+            "require-dev": {
+                "symfony/console": "^5.4|^6.0|^7.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Uid\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "authors": [
+                {
+                    "name": "Grégoire Pineau",
+                    "email": "lyrixx@lyrixx.info"
+                },
                 {
                     "name": "Nicolas Grekas",
                     "email": "p@tchwork.com"
@@ -6837,18 +7376,15 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Generic abstractions related to translation",
+            "description": "Provides an object-oriented API to generate and represent UIDs",
             "homepage": "https://symfony.com",
             "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
+                "UID",
+                "ulid",
+                "uuid"
             ],
             "support": {
-                "source": "https://github.com/symfony/translation-contracts/tree/v2.5.1"
+                "source": "https://github.com/symfony/uid/tree/v6.4.13"
             },
             "funding": [
                 {
@@ -6864,43 +7400,39 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-02T09:53:40+00:00"
+            "time": "2024-09-25T14:18:03+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v5.4.6",
+            "version": "v6.4.18",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0"
+                "reference": "4ad10cf8b020e77ba665305bb7804389884b4837"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0",
-                "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4ad10cf8b020e77ba665305bb7804389884b4837",
+                "reference": "4ad10cf8b020e77ba665305bb7804389884b4837",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.16"
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-mbstring": "~1.0"
             },
             "conflict": {
-                "phpunit/phpunit": "<5.4.3",
-                "symfony/console": "<4.4"
+                "symfony/console": "<5.4"
             },
             "require-dev": {
                 "ext-iconv": "*",
-                "symfony/console": "^4.4|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/uid": "^5.1|^6.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/error-handler": "^6.3|^7.0",
+                "symfony/http-kernel": "^5.4|^6.0|^7.0",
+                "symfony/process": "^5.4|^6.0|^7.0",
+                "symfony/uid": "^5.4|^6.0|^7.0",
                 "twig/twig": "^2.13|^3.0.4"
             },
-            "suggest": {
-                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
-                "ext-intl": "To show region name in time zone dump",
-                "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
-            },
             "bin": [
                 "Resources/bin/var-dump-server"
             ],
@@ -6937,7 +7469,7 @@
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v5.4.6"
+                "source": "https://github.com/symfony/var-dumper/tree/v6.4.18"
             },
             "funding": [
                 {
@@ -6953,28 +7485,30 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-02T12:42:23+00:00"
+            "time": "2025-01-17T11:26:11+00:00"
         },
         {
             "name": "symfony/var-exporter",
-            "version": "v5.4.7",
+            "version": "v6.4.19",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-exporter.git",
-                "reference": "7eacaa588c9b27f2738575adb4a8457a80d9c807"
+                "reference": "be6e71b0c257884c1107313de5d247741cfea172"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-exporter/zipball/7eacaa588c9b27f2738575adb4a8457a80d9c807",
-                "reference": "7eacaa588c9b27f2738575adb4a8457a80d9c807",
+                "url": "https://api.github.com/repos/symfony/var-exporter/zipball/be6e71b0c257884c1107313de5d247741cfea172",
+                "reference": "be6e71b0c257884c1107313de5d247741cfea172",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.16"
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3"
             },
             "require-dev": {
-                "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0"
+                "symfony/property-access": "^6.4|^7.0",
+                "symfony/serializer": "^6.4|^7.0",
+                "symfony/var-dumper": "^5.4|^6.0|^7.0"
             },
             "type": "library",
             "autoload": {
@@ -7007,10 +7541,12 @@
                 "export",
                 "hydrate",
                 "instantiate",
+                "lazy-loading",
+                "proxy",
                 "serialize"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-exporter/tree/v5.4.7"
+                "source": "https://github.com/symfony/var-exporter/tree/v6.4.19"
             },
             "funding": [
                 {
@@ -7026,35 +7562,32 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-31T17:09:19+00:00"
+            "time": "2025-02-13T09:33:32+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v5.4.3",
+            "version": "v7.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "e80f87d2c9495966768310fc531b487ce64237a2"
+                "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2",
-                "reference": "e80f87d2c9495966768310fc531b487ce64237a2",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/ac238f173df0c9c1120f862d0f599e17535a87ec",
+                "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
+                "php": ">=8.2",
+                "symfony/deprecation-contracts": "^2.5|^3.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
             "conflict": {
-                "symfony/console": "<5.3"
+                "symfony/console": "<6.4"
             },
             "require-dev": {
-                "symfony/console": "^5.3|^6.0"
-            },
-            "suggest": {
-                "symfony/console": "For validating YAML files using the lint command"
+                "symfony/console": "^6.4|^7.0"
             },
             "bin": [
                 "Resources/bin/yaml-lint"
@@ -7085,7 +7618,7 @@
             "description": "Loads and dumps YAML files",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/yaml/tree/v5.4.3"
+                "source": "https://github.com/symfony/yaml/tree/v7.2.3"
             },
             "funding": [
                 {
@@ -7101,40 +7634,435 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-26T16:32:32+00:00"
+            "time": "2025-01-07T12:55:42+00:00"
+        },
+        {
+            "name": "thecodingmachine/safe",
+            "version": "v3.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thecodingmachine/safe.git",
+                "reference": "22ffad3248982a784f9870a37aeb2e522bd19645"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/22ffad3248982a784f9870a37aeb2e522bd19645",
+                "reference": "22ffad3248982a784f9870a37aeb2e522bd19645",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "php-parallel-lint/php-parallel-lint": "^1.4",
+                "phpstan/phpstan": "^2",
+                "phpunit/phpunit": "^10",
+                "squizlabs/php_codesniffer": "^3.2"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "lib/special_cases.php",
+                    "generated/apache.php",
+                    "generated/apcu.php",
+                    "generated/array.php",
+                    "generated/bzip2.php",
+                    "generated/calendar.php",
+                    "generated/classobj.php",
+                    "generated/com.php",
+                    "generated/cubrid.php",
+                    "generated/curl.php",
+                    "generated/datetime.php",
+                    "generated/dir.php",
+                    "generated/eio.php",
+                    "generated/errorfunc.php",
+                    "generated/exec.php",
+                    "generated/fileinfo.php",
+                    "generated/filesystem.php",
+                    "generated/filter.php",
+                    "generated/fpm.php",
+                    "generated/ftp.php",
+                    "generated/funchand.php",
+                    "generated/gettext.php",
+                    "generated/gmp.php",
+                    "generated/gnupg.php",
+                    "generated/hash.php",
+                    "generated/ibase.php",
+                    "generated/ibmDb2.php",
+                    "generated/iconv.php",
+                    "generated/image.php",
+                    "generated/imap.php",
+                    "generated/info.php",
+                    "generated/inotify.php",
+                    "generated/json.php",
+                    "generated/ldap.php",
+                    "generated/libxml.php",
+                    "generated/lzf.php",
+                    "generated/mailparse.php",
+                    "generated/mbstring.php",
+                    "generated/misc.php",
+                    "generated/mysql.php",
+                    "generated/mysqli.php",
+                    "generated/network.php",
+                    "generated/oci8.php",
+                    "generated/opcache.php",
+                    "generated/openssl.php",
+                    "generated/outcontrol.php",
+                    "generated/pcntl.php",
+                    "generated/pcre.php",
+                    "generated/pgsql.php",
+                    "generated/posix.php",
+                    "generated/ps.php",
+                    "generated/pspell.php",
+                    "generated/readline.php",
+                    "generated/rnp.php",
+                    "generated/rpminfo.php",
+                    "generated/rrd.php",
+                    "generated/sem.php",
+                    "generated/session.php",
+                    "generated/shmop.php",
+                    "generated/sockets.php",
+                    "generated/sodium.php",
+                    "generated/solr.php",
+                    "generated/spl.php",
+                    "generated/sqlsrv.php",
+                    "generated/ssdeep.php",
+                    "generated/ssh2.php",
+                    "generated/stream.php",
+                    "generated/strings.php",
+                    "generated/swoole.php",
+                    "generated/uodbc.php",
+                    "generated/uopz.php",
+                    "generated/url.php",
+                    "generated/var.php",
+                    "generated/xdiff.php",
+                    "generated/xml.php",
+                    "generated/xmlrpc.php",
+                    "generated/yaml.php",
+                    "generated/yaz.php",
+                    "generated/zip.php",
+                    "generated/zlib.php"
+                ],
+                "classmap": [
+                    "lib/DateTime.php",
+                    "lib/DateTimeImmutable.php",
+                    "lib/Exceptions/",
+                    "generated/Exceptions/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
+            "support": {
+                "issues": "https://github.com/thecodingmachine/safe/issues",
+                "source": "https://github.com/thecodingmachine/safe/tree/v3.0.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/OskarStark",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/shish",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/staabm",
+                    "type": "github"
+                }
+            ],
+            "time": "2025-02-19T19:23:00+00:00"
         },
         {
             "name": "tijsverkoyen/css-to-inline-styles",
-            "version": "2.2.4",
+            "version": "v2.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
-                "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c"
+                "reference": "0d72ac1c00084279c1816675284073c5a337c20d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c",
-                "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c",
+                "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d",
+                "reference": "0d72ac1c00084279c1816675284073c5a337c20d",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-libxml": "*",
-                "php": "^5.5 || ^7.0 || ^8.0",
-                "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
+                "php": "^7.4 || ^8.0",
+                "symfony/css-selector": "^5.4 || ^6.0 || ^7.0"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^2.0",
+                "phpstan/phpstan-phpunit": "^2.0",
+                "phpunit/phpunit": "^8.5.21 || ^9.5.10"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "TijsVerkoyen\\CssToInlineStyles\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Tijs Verkoyen",
+                    "email": "css_to_inline_styles@verkoyen.eu",
+                    "role": "Developer"
+                }
+            ],
+            "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
+            "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
+            "support": {
+                "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
+                "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0"
+            },
+            "time": "2024-12-21T16:25:41+00:00"
+        },
+        {
+            "name": "torchlight/torchlight-commonmark",
+            "version": "v0.5.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/torchlight-api/torchlight-commonmark-php.git",
+                "reference": "eb618ae6187090126a9ef881ccaf9c315d49c99b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/torchlight-api/torchlight-commonmark-php/zipball/eb618ae6187090126a9ef881ccaf9c315d49c99b",
+                "reference": "eb618ae6187090126a9ef881ccaf9c315d49c99b",
+                "shasum": ""
+            },
+            "require": {
+                "league/commonmark": "^1.5|^2.0",
+                "php": "^7.2|^8.0",
+                "torchlight/torchlight-laravel": "^0.5.10"
+            },
+            "require-dev": {
+                "mockery/mockery": "^1.3.3",
+                "orchestra/testbench": "^5.0|^6.0",
+                "phpunit/phpunit": "^8.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Torchlight\\Commonmark\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Aaron Francis",
+                    "email": "aaron@hammerstone.dev"
+                }
+            ],
+            "description": "A Commonmark extension for Torchlight, the syntax highlighting API.",
+            "homepage": "https://torchlight.dev",
+            "keywords": [
+                "Code highlighting",
+                "commonmark",
+                "laravel",
+                "markdown",
+                "syntax highlighting"
+            ],
+            "support": {
+                "issues": "https://github.com/torchlight-api/torchlight-commonmark-php/issues",
+                "source": "https://github.com/torchlight-api/torchlight-commonmark-php/tree/v0.5.5"
+            },
+            "time": "2022-02-23T17:09:44+00:00"
+        },
+        {
+            "name": "torchlight/torchlight-laravel",
+            "version": "v0.5.14",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/torchlight-api/torchlight-laravel.git",
+                "reference": "6a47c9dfdc5dc11ce0ef0672337119026189326d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/torchlight-api/torchlight-laravel/zipball/6a47c9dfdc5dc11ce0ef0672337119026189326d",
+                "reference": "6a47c9dfdc5dc11ce0ef0672337119026189326d",
+                "shasum": ""
+            },
+            "require": {
+                "guzzlehttp/guzzle": "^7.2",
+                "illuminate/cache": "^8.0|^9.0|^10.0",
+                "illuminate/console": "^8.0|^9.0|^10.0",
+                "illuminate/http": "^8.0|^9.0|^10.0",
+                "illuminate/support": "^8.0|^9.0|^10.0",
+                "illuminate/view": "^8.0|^9.0|^10.0",
+                "php": "^7.3|^8.0",
+                "ramsey/uuid": "^3.7|^4.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "^1.3.3",
+                "orchestra/testbench": "^5.0|^6.0|^7.0",
+                "phpunit/phpunit": "^8.5.23|^9.5"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Torchlight\\TorchlightServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Torchlight\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Aaron Francis",
+                    "email": "aaron@hammerstone.dev"
+                }
+            ],
+            "description": "A Laravel Client for Torchlight, the syntax highlighting API.",
+            "homepage": "https://torchlight.dev",
+            "keywords": [
+                "Code highlighting",
+                "laravel",
+                "syntax highlighting"
+            ],
+            "support": {
+                "issues": "https://github.com/torchlight-api/torchlight-laravel/issues",
+                "source": "https://github.com/torchlight-api/torchlight-laravel/tree/v0.5.14"
+            },
+            "time": "2023-08-18T21:14:06+00:00"
+        },
+        {
+            "name": "ueberdosis/tiptap-php",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ueberdosis/tiptap-php.git",
+                "reference": "640667176da4cdfaa84c32093171e0674c3c807f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ueberdosis/tiptap-php/zipball/640667176da4cdfaa84c32093171e0674c3c807f",
+                "reference": "640667176da4cdfaa84c32093171e0674c3c807f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.4|^8.0",
+                "scrivo/highlight.php": "^9.18",
+                "spatie/shiki-php": "^2.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3.5",
+                "pestphp/pest": "^1.21",
+                "phpunit/phpunit": "^9.5",
+                "vimeo/psalm": "^4.3"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Tiptap\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Hans Pagel",
+                    "email": "humans@tiptap.dev",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A PHP package to work with Tiptap output",
+            "homepage": "https://github.com/ueberdosis/tiptap-php",
+            "keywords": [
+                "prosemirror",
+                "tiptap",
+                "ueberdosis"
+            ],
+            "support": {
+                "issues": "https://github.com/ueberdosis/tiptap-php/issues",
+                "source": "https://github.com/ueberdosis/tiptap-php/tree/1.4.0"
+            },
+            "funding": [
+                {
+                    "url": "https://tiptap.dev/pricing",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/ueberdosis",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/tiptap",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-08-12T08:25:45+00:00"
+        },
+        {
+            "name": "vlucas/phpdotenv",
+            "version": "v5.6.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/vlucas/phpdotenv.git",
+                "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2",
+                "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2",
+                "shasum": ""
+            },
+            "require": {
+                "ext-pcre": "*",
+                "graham-campbell/result-type": "^1.1.3",
+                "php": "^7.2.5 || ^8.0",
+                "phpoption/phpoption": "^1.9.3",
+                "symfony/polyfill-ctype": "^1.24",
+                "symfony/polyfill-mbstring": "^1.24",
+                "symfony/polyfill-php80": "^1.24"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10"
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "ext-filter": "*",
+                "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+            },
+            "suggest": {
+                "ext-filter": "Required to use the boolean validator."
             },
             "type": "library",
             "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                },
                 "branch-alias": {
-                    "dev-master": "2.2.x-dev"
+                    "dev-master": "5.6-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "TijsVerkoyen\\CssToInlineStyles\\": "src"
+                    "Dotenv\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -7143,47 +8071,65 @@
             ],
             "authors": [
                 {
-                    "name": "Tijs Verkoyen",
-                    "email": "css_to_inline_styles@verkoyen.eu",
-                    "role": "Developer"
+                    "name": "Graham Campbell",
+                    "email": "hello@gjcampbell.co.uk",
+                    "homepage": "https://github.com/GrahamCampbell"
+                },
+                {
+                    "name": "Vance Lucas",
+                    "email": "vance@vancelucas.com",
+                    "homepage": "https://github.com/vlucas"
                 }
             ],
-            "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
-            "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
+            "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+            "keywords": [
+                "dotenv",
+                "env",
+                "environment"
+            ],
             "support": {
-                "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
-                "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4"
+                "issues": "https://github.com/vlucas/phpdotenv/issues",
+                "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1"
             },
-            "time": "2021-12-08T09:12:39+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-07-20T21:52:34+00:00"
         },
         {
-            "name": "torchlight/torchlight-commonmark",
-            "version": "v0.5.5",
+            "name": "voku/portable-ascii",
+            "version": "2.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/torchlight-api/torchlight-commonmark-php.git",
-                "reference": "eb618ae6187090126a9ef881ccaf9c315d49c99b"
+                "url": "https://github.com/voku/portable-ascii.git",
+                "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/torchlight-api/torchlight-commonmark-php/zipball/eb618ae6187090126a9ef881ccaf9c315d49c99b",
-                "reference": "eb618ae6187090126a9ef881ccaf9c315d49c99b",
+                "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
+                "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
                 "shasum": ""
             },
             "require": {
-                "league/commonmark": "^1.5|^2.0",
-                "php": "^7.2|^8.0",
-                "torchlight/torchlight-laravel": "^0.5.10"
+                "php": ">=7.0.0"
             },
             "require-dev": {
-                "mockery/mockery": "^1.3.3",
-                "orchestra/testbench": "^5.0|^6.0",
-                "phpunit/phpunit": "^8.4"
+                "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
+            },
+            "suggest": {
+                "ext-intl": "Use Intl for transliterator_transliterate() support"
             },
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Torchlight\\Commonmark\\": "src/"
+                    "voku\\": "src/voku/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -7192,65 +8138,79 @@
             ],
             "authors": [
                 {
-                    "name": "Aaron Francis",
-                    "email": "aaron@hammerstone.dev"
+                    "name": "Lars Moelleken",
+                    "homepage": "https://www.moelleken.org/"
                 }
             ],
-            "description": "A Commonmark extension for Torchlight, the syntax highlighting API.",
-            "homepage": "https://torchlight.dev",
+            "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
+            "homepage": "https://github.com/voku/portable-ascii",
             "keywords": [
-                "Code highlighting",
-                "commonmark",
-                "laravel",
-                "markdown",
-                "syntax highlighting"
+                "ascii",
+                "clean",
+                "php"
             ],
             "support": {
-                "issues": "https://github.com/torchlight-api/torchlight-commonmark-php/issues",
-                "source": "https://github.com/torchlight-api/torchlight-commonmark-php/tree/v0.5.5"
+                "issues": "https://github.com/voku/portable-ascii/issues",
+                "source": "https://github.com/voku/portable-ascii/tree/2.0.3"
             },
-            "time": "2022-02-23T17:09:44+00:00"
+            "funding": [
+                {
+                    "url": "https://www.paypal.me/moelleken",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/voku",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/portable-ascii",
+                    "type": "open_collective"
+                },
+                {
+                    "url": "https://www.patreon.com/voku",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-11-21T01:49:47+00:00"
         },
         {
-            "name": "torchlight/torchlight-laravel",
-            "version": "v0.5.11",
+            "name": "webmozart/assert",
+            "version": "1.11.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/torchlight-api/torchlight-laravel.git",
-                "reference": "e69530e720d09f6791eff2a13e4d408ba0eaf6dc"
+                "url": "https://github.com/webmozarts/assert.git",
+                "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/torchlight-api/torchlight-laravel/zipball/e69530e720d09f6791eff2a13e4d408ba0eaf6dc",
-                "reference": "e69530e720d09f6791eff2a13e4d408ba0eaf6dc",
+                "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
+                "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
                 "shasum": ""
             },
             "require": {
-                "guzzlehttp/guzzle": "^7.2",
-                "illuminate/cache": "^7.26.0|^8.0|^9.0",
-                "illuminate/console": "^7.26.0|^8.0|^9.0",
-                "illuminate/http": "^7.26.0|^8.0|^9.0",
-                "illuminate/support": "^7.26.0|^8.0|^9.0",
-                "illuminate/view": "^7.26.0|^8.0|^9.0",
-                "php": "^7.3|^8.0",
-                "ramsey/uuid": "^3.7|^4.0"
+                "ext-ctype": "*",
+                "php": "^7.2 || ^8.0"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<4.6.1 || 4.6.2"
             },
             "require-dev": {
-                "mockery/mockery": "^1.3.3",
-                "orchestra/testbench": "^5.0|^6.0|^7.0",
-                "phpunit/phpunit": "^8.5.23|^9.5"
+                "phpunit/phpunit": "^8.5.13"
             },
             "type": "library",
             "extra": {
-                "laravel": {
-                    "providers": [
-                        "Torchlight\\TorchlightServiceProvider"
-                    ]
+                "branch-alias": {
+                    "dev-master": "1.10-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Torchlight\\": "src/"
+                    "Webmozart\\Assert\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -7259,103 +8219,124 @@
             ],
             "authors": [
                 {
-                    "name": "Aaron Francis",
-                    "email": "aaron@hammerstone.dev"
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
-            "description": "A Laravel Client for Torchlight, the syntax highlighting API.",
-            "homepage": "https://torchlight.dev",
+            "description": "Assertions to validate method input/output with nice error messages.",
             "keywords": [
-                "Code highlighting",
-                "laravel",
-                "syntax highlighting"
+                "assert",
+                "check",
+                "validate"
             ],
             "support": {
-                "issues": "https://github.com/torchlight-api/torchlight-laravel/issues",
-                "source": "https://github.com/torchlight-api/torchlight-laravel/tree/v0.5.11"
+                "issues": "https://github.com/webmozarts/assert/issues",
+                "source": "https://github.com/webmozarts/assert/tree/1.11.0"
             },
-            "time": "2022-02-13T15:30:32+00:00"
+            "time": "2022-06-03T18:03:27+00:00"
         },
         {
-            "name": "ueberdosis/html-to-prosemirror",
-            "version": "1.5.0",
+            "name": "webonyx/graphql-php",
+            "version": "v15.19.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/ueberdosis/html-to-prosemirror.git",
-                "reference": "d2de3dbd7d8d891ed595c3b695b5f80d03697af6"
+                "url": "https://github.com/webonyx/graphql-php.git",
+                "reference": "fa01712b1a170ddc1d92047011b2f4c2bdfa8234"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ueberdosis/html-to-prosemirror/zipball/d2de3dbd7d8d891ed595c3b695b5f80d03697af6",
-                "reference": "d2de3dbd7d8d891ed595c3b695b5f80d03697af6",
+                "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/fa01712b1a170ddc1d92047011b2f4c2bdfa8234",
+                "reference": "fa01712b1a170ddc1d92047011b2f4c2bdfa8234",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3|^8.0"
+                "ext-json": "*",
+                "ext-mbstring": "*",
+                "php": "^7.4 || ^8"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.15",
-                "league/climate": "^3.5",
-                "phpunit/phpunit": "^7.0|^8.0|^9.0"
+                "amphp/amp": "^2.6",
+                "amphp/http-server": "^2.1",
+                "dms/phpunit-arraysubset-asserts": "dev-master",
+                "ergebnis/composer-normalize": "^2.28",
+                "friendsofphp/php-cs-fixer": "3.65.0",
+                "mll-lab/php-cs-fixer-config": "^5.9.2",
+                "nyholm/psr7": "^1.5",
+                "phpbench/phpbench": "^1.2",
+                "phpstan/extension-installer": "^1.1",
+                "phpstan/phpstan": "1.12.12",
+                "phpstan/phpstan-phpunit": "1.4.1",
+                "phpstan/phpstan-strict-rules": "1.6.1",
+                "phpunit/phpunit": "^9.5 || ^10.5.21 || ^11",
+                "psr/http-message": "^1 || ^2",
+                "react/http": "^1.6",
+                "react/promise": "^2.0 || ^3.0",
+                "rector/rector": "^1.0",
+                "symfony/polyfill-php81": "^1.23",
+                "symfony/var-exporter": "^5 || ^6 || ^7",
+                "thecodingmachine/safe": "^1.3 || ^2"
+            },
+            "suggest": {
+                "amphp/http-server": "To leverage async resolving with webserver on AMPHP platform",
+                "psr/http-message": "To use standard GraphQL server",
+                "react/promise": "To leverage async resolving on React PHP platform"
             },
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "HtmlToProseMirror\\": "src/"
+                    "GraphQL\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "authors": [
-                {
-                    "name": "Hans Pagel"
-                }
-            ],
-            "description": "Takes HTML and outputs ProseMirror compatible JSON.",
+            "description": "A PHP port of GraphQL reference implementation",
+            "homepage": "https://github.com/webonyx/graphql-php",
             "keywords": [
-                "prosemirror"
+                "api",
+                "graphql"
             ],
             "support": {
-                "issues": "https://github.com/ueberdosis/html-to-prosemirror/issues",
-                "source": "https://github.com/ueberdosis/html-to-prosemirror/tree/1.5.0"
+                "issues": "https://github.com/webonyx/graphql-php/issues",
+                "source": "https://github.com/webonyx/graphql-php/tree/v15.19.1"
             },
             "funding": [
                 {
-                    "url": "https://github.com/sponsors/ueberdosis/",
-                    "type": "github"
+                    "url": "https://opencollective.com/webonyx-graphql-php",
+                    "type": "open_collective"
                 }
             ],
-            "abandoned": true,
-            "time": "2021-01-19T11:34:35+00:00"
+            "time": "2024-12-19T10:52:18+00:00"
         },
         {
-            "name": "ueberdosis/prosemirror-to-html",
-            "version": "2.7.0",
+            "name": "wilderborn/partyline",
+            "version": "1.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/ueberdosis/prosemirror-to-html.git",
-                "reference": "7d22a0d213d3f204322a8814eab47ed4ea817f54"
+                "url": "https://github.com/wilderborn/partyline.git",
+                "reference": "74dcc591b5581c24e8be848e45ef5f59d8376c86"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ueberdosis/prosemirror-to-html/zipball/7d22a0d213d3f204322a8814eab47ed4ea817f54",
-                "reference": "7d22a0d213d3f204322a8814eab47ed4ea817f54",
+                "url": "https://api.github.com/repos/wilderborn/partyline/zipball/74dcc591b5581c24e8be848e45ef5f59d8376c86",
+                "reference": "74dcc591b5581c24e8be848e45ef5f59d8376c86",
                 "shasum": ""
             },
-            "require": {
-                "php": "^7.1.3|^8.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.15",
-                "league/climate": "^3.5",
-                "phpunit/phpunit": "^7.5.20"
-            },
             "type": "library",
+            "extra": {
+                "laravel": {
+                    "aliases": {
+                        "Partyline": "Wilderborn\\Partyline\\Facade"
+                    },
+                    "providers": [
+                        "Wilderborn\\Partyline\\ServiceProvider"
+                    ]
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "ProseMirrorToHtml\\": "src/"
+                    "Wilderborn\\Partyline\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -7364,133 +8345,115 @@
             ],
             "authors": [
                 {
-                    "name": "Hans Pagel"
+                    "name": "Jason Varga",
+                    "email": "jason@wilderborn.com"
                 }
             ],
-            "description": "Takes HTML and outputs ProseMirror compatible JSON.",
-            "keywords": [
-                "prosemirror"
-            ],
+            "description": "A Laravel 5 package to output to the console from outside of command classes",
             "support": {
-                "issues": "https://github.com/ueberdosis/prosemirror-to-html/issues",
-                "source": "https://github.com/ueberdosis/prosemirror-to-html/tree/2.7.0"
+                "issues": "https://github.com/wilderborn/partyline/issues",
+                "source": "https://github.com/wilderborn/partyline/tree/1.0.2"
             },
-            "funding": [
-                {
-                    "url": "https://github.com/sponsors/ueberdosis/",
-                    "type": "github"
-                }
-            ],
-            "abandoned": true,
-            "time": "2021-08-18T08:05:58+00:00"
-        },
+            "time": "2022-12-14T18:38:34+00:00"
+        }
+    ],
+    "packages-dev": [
         {
-            "name": "vlucas/phpdotenv",
-            "version": "v5.4.1",
+            "name": "beyondcode/laravel-dump-server",
+            "version": "1.9.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/vlucas/phpdotenv.git",
-                "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f"
+                "url": "https://github.com/beyondcode/laravel-dump-server.git",
+                "reference": "1f2452617afc64e47b3cf49978beb7beeef084df"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f",
-                "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f",
+                "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/1f2452617afc64e47b3cf49978beb7beeef084df",
+                "reference": "1f2452617afc64e47b3cf49978beb7beeef084df",
                 "shasum": ""
             },
             "require": {
-                "ext-pcre": "*",
-                "graham-campbell/result-type": "^1.0.2",
-                "php": "^7.1.3 || ^8.0",
-                "phpoption/phpoption": "^1.8",
-                "symfony/polyfill-ctype": "^1.23",
-                "symfony/polyfill-mbstring": "^1.23.1",
-                "symfony/polyfill-php80": "^1.23.1"
+                "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0",
+                "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0",
+                "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0",
+                "php": ">=7.2.5",
+                "symfony/var-dumper": "^5.0|^6.0"
             },
             "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.4.1",
-                "ext-filter": "*",
-                "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10"
-            },
-            "suggest": {
-                "ext-filter": "Required to use the boolean validator."
+                "larapack/dd": "^1.0",
+                "phpunit/phpunit": "^7.0|^9.3"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "5.4-dev"
+                "laravel": {
+                    "providers": [
+                        "BeyondCode\\DumpServer\\DumpServerServiceProvider"
+                    ]
                 }
             },
             "autoload": {
+                "files": [
+                    "helpers.php"
+                ],
                 "psr-4": {
-                    "Dotenv\\": "src/"
+                    "BeyondCode\\DumpServer\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Graham Campbell",
-                    "email": "hello@gjcampbell.co.uk",
-                    "homepage": "https://github.com/GrahamCampbell"
-                },
-                {
-                    "name": "Vance Lucas",
-                    "email": "vance@vancelucas.com",
-                    "homepage": "https://github.com/vlucas"
-                }
-            ],
-            "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
-            "keywords": [
-                "dotenv",
-                "env",
-                "environment"
-            ],
-            "support": {
-                "issues": "https://github.com/vlucas/phpdotenv/issues",
-                "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
-                    "type": "tidelift"
+                    "name": "Marcel Pociot",
+                    "email": "marcel@beyondco.de",
+                    "homepage": "https://beyondco.de",
+                    "role": "Developer"
                 }
             ],
-            "time": "2021-12-12T23:22:04+00:00"
+            "description": "Symfony Var-Dump Server for Laravel",
+            "homepage": "https://github.com/beyondcode/laravel-dump-server",
+            "keywords": [
+                "beyondcode",
+                "laravel-dump-server"
+            ],
+            "support": {
+                "issues": "https://github.com/beyondcode/laravel-dump-server/issues",
+                "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.9.0"
+            },
+            "time": "2023-02-15T10:29:26+00:00"
         },
         {
-            "name": "voku/portable-ascii",
-            "version": "1.6.1",
+            "name": "doctrine/instantiator",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/voku/portable-ascii.git",
-                "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a"
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a",
-                "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+                "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.0.0"
+                "php": "^8.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
-            },
-            "suggest": {
-                "ext-intl": "Use Intl for transliterator_transliterate() support"
+                "doctrine/coding-standard": "^11",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^1.2",
+                "phpstan/phpstan": "^1.9.4",
+                "phpstan/phpstan-phpunit": "^1.3",
+                "phpunit/phpunit": "^9.5.27",
+                "vimeo/psalm": "^5.4"
             },
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "voku\\": "src/voku/"
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -7499,79 +8462,77 @@
             ],
             "authors": [
                 {
-                    "name": "Lars Moelleken",
-                    "homepage": "http://www.moelleken.org/"
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "https://ocramius.github.io/"
                 }
             ],
-            "description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
-            "homepage": "https://github.com/voku/portable-ascii",
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
-                "ascii",
-                "clean",
-                "php"
+                "constructor",
+                "instantiate"
             ],
             "support": {
-                "issues": "https://github.com/voku/portable-ascii/issues",
-                "source": "https://github.com/voku/portable-ascii/tree/1.6.1"
+                "issues": "https://github.com/doctrine/instantiator/issues",
+                "source": "https://github.com/doctrine/instantiator/tree/2.0.0"
             },
             "funding": [
                 {
-                    "url": "https://www.paypal.me/moelleken",
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
                     "type": "custom"
                 },
                 {
-                    "url": "https://github.com/voku",
-                    "type": "github"
-                },
-                {
-                    "url": "https://opencollective.com/portable-ascii",
-                    "type": "open_collective"
-                },
-                {
-                    "url": "https://www.patreon.com/voku",
+                    "url": "https://www.patreon.com/phpdoctrine",
                     "type": "patreon"
                 },
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii",
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-01-24T18:55:24+00:00"
+            "time": "2022-12-30T00:23:10+00:00"
         },
         {
-            "name": "webmozart/assert",
-            "version": "1.10.0",
+            "name": "fakerphp/faker",
+            "version": "v1.24.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/webmozarts/assert.git",
-                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
+                "url": "https://github.com/FakerPHP/Faker.git",
+                "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
-                "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
+                "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
+                "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2 || ^8.0",
-                "symfony/polyfill-ctype": "^1.8"
+                "php": "^7.4 || ^8.0",
+                "psr/container": "^1.0 || ^2.0",
+                "symfony/deprecation-contracts": "^2.2 || ^3.0"
             },
             "conflict": {
-                "phpstan/phpstan": "<0.12.20",
-                "vimeo/psalm": "<4.6.1 || 4.6.2"
+                "fzaninotto/faker": "*"
             },
             "require-dev": {
-                "phpunit/phpunit": "^8.5.13"
+                "bamarni/composer-bin-plugin": "^1.4.1",
+                "doctrine/persistence": "^1.3 || ^2.0",
+                "ext-intl": "*",
+                "phpunit/phpunit": "^9.5.26",
+                "symfony/phpunit-bridge": "^5.4.16"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.10-dev"
-                }
+            "suggest": {
+                "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+                "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+                "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+                "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+                "ext-mbstring": "Required for multibyte Unicode string functionality."
             },
+            "type": "library",
             "autoload": {
                 "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
+                    "Faker\\": "src/Faker/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -7580,639 +8541,666 @@
             ],
             "authors": [
                 {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
+                    "name": "François Zaninotto"
                 }
             ],
-            "description": "Assertions to validate method input/output with nice error messages.",
+            "description": "Faker is a PHP library that generates fake data for you.",
             "keywords": [
-                "assert",
-                "check",
-                "validate"
+                "data",
+                "faker",
+                "fixtures"
             ],
             "support": {
-                "issues": "https://github.com/webmozarts/assert/issues",
-                "source": "https://github.com/webmozarts/assert/tree/1.10.0"
+                "issues": "https://github.com/FakerPHP/Faker/issues",
+                "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1"
             },
-            "time": "2021-03-09T10:59:23+00:00"
+            "time": "2024-11-21T13:46:39+00:00"
         },
         {
-            "name": "webonyx/graphql-php",
-            "version": "v14.11.6",
+            "name": "filp/whoops",
+            "version": "2.17.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/webonyx/graphql-php.git",
-                "reference": "6070542725b61fc7d0654a8a9855303e5e157434"
+                "url": "https://github.com/filp/whoops.git",
+                "reference": "075bc0c26631110584175de6523ab3f1652eb28e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/6070542725b61fc7d0654a8a9855303e5e157434",
-                "reference": "6070542725b61fc7d0654a8a9855303e5e157434",
+                "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e",
+                "reference": "075bc0c26631110584175de6523ab3f1652eb28e",
                 "shasum": ""
             },
             "require": {
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "php": "^7.1 || ^8"
+                "php": "^7.1 || ^8.0",
+                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
             },
             "require-dev": {
-                "amphp/amp": "^2.3",
-                "doctrine/coding-standard": "^6.0",
-                "nyholm/psr7": "^1.2",
-                "phpbench/phpbench": "^1.2",
-                "phpstan/extension-installer": "^1.0",
-                "phpstan/phpstan": "0.12.82",
-                "phpstan/phpstan-phpunit": "0.12.18",
-                "phpstan/phpstan-strict-rules": "0.12.9",
-                "phpunit/phpunit": "^7.2 || ^8.5",
-                "psr/http-message": "^1.0",
-                "react/promise": "2.*",
-                "simpod/php-coveralls-mirror": "^3.0",
-                "squizlabs/php_codesniffer": "3.5.4"
+                "mockery/mockery": "^1.0",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3",
+                "symfony/var-dumper": "^4.0 || ^5.0"
             },
             "suggest": {
-                "psr/http-message": "To use standard GraphQL server",
-                "react/promise": "To leverage async resolving on React PHP platform"
+                "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
+                "whoops/soap": "Formats errors as SOAP responses"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.7-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "GraphQL\\": "src/"
+                    "Whoops\\": "src/Whoops/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "description": "A PHP port of GraphQL reference implementation",
-            "homepage": "https://github.com/webonyx/graphql-php",
+            "authors": [
+                {
+                    "name": "Filipe Dobreira",
+                    "homepage": "https://github.com/filp",
+                    "role": "Developer"
+                }
+            ],
+            "description": "php error handling for cool kids",
+            "homepage": "https://filp.github.io/whoops/",
             "keywords": [
-                "api",
-                "graphql"
+                "error",
+                "exception",
+                "handling",
+                "library",
+                "throwable",
+                "whoops"
             ],
             "support": {
-                "issues": "https://github.com/webonyx/graphql-php/issues",
-                "source": "https://github.com/webonyx/graphql-php/tree/v14.11.6"
+                "issues": "https://github.com/filp/whoops/issues",
+                "source": "https://github.com/filp/whoops/tree/2.17.0"
             },
             "funding": [
                 {
-                    "url": "https://opencollective.com/webonyx-graphql-php",
-                    "type": "open_collective"
+                    "url": "https://github.com/denis-sokolov",
+                    "type": "github"
                 }
             ],
-            "time": "2022-04-13T16:25:32+00:00"
+            "time": "2025-01-25T12:00:00+00:00"
         },
         {
-            "name": "wilderborn/partyline",
-            "version": "1.0.1",
+            "name": "hamcrest/hamcrest-php",
+            "version": "v2.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/wilderborn/partyline.git",
-                "reference": "32623756e376da900e4554f3150437527c88a2ef"
+                "url": "https://github.com/hamcrest/hamcrest-php.git",
+                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/wilderborn/partyline/zipball/32623756e376da900e4554f3150437527c88a2ef",
-                "reference": "32623756e376da900e4554f3150437527c88a2ef",
+                "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
                 "shasum": ""
             },
+            "require": {
+                "php": "^5.3|^7.0|^8.0"
+            },
+            "replace": {
+                "cordoval/hamcrest-php": "*",
+                "davedevelopment/hamcrest-php": "*",
+                "kodova/hamcrest-php": "*"
+            },
+            "require-dev": {
+                "phpunit/php-file-iterator": "^1.4 || ^2.0",
+                "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+            },
             "type": "library",
             "extra": {
-                "laravel": {
-                    "providers": [
-                        "Wilderborn\\Partyline\\ServiceProvider"
-                    ],
-                    "aliases": {
-                        "Partyline": "Wilderborn\\Partyline\\Facade"
-                    }
+                "branch-alias": {
+                    "dev-master": "2.1-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Wilderborn\\Partyline\\": "src"
-                }
+                "classmap": [
+                    "hamcrest"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
-            "authors": [
-                {
-                    "name": "Jason Varga",
-                    "email": "jason@wilderborn.com"
-                }
+            "description": "This is the PHP port of Hamcrest Matchers",
+            "keywords": [
+                "test"
             ],
-            "description": "A Laravel 5 package to output to the console from outside of command classes",
             "support": {
-                "issues": "https://github.com/wilderborn/partyline/issues",
-                "source": "https://github.com/wilderborn/partyline/tree/1.0.1"
+                "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+                "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
             },
-            "time": "2022-03-15T20:23:29+00:00"
-        }
-    ],
-    "packages-dev": [
+            "time": "2020-07-09T08:09:16+00:00"
+        },
         {
-            "name": "beyondcode/laravel-dump-server",
-            "version": "1.8.0",
+            "name": "mockery/mockery",
+            "version": "1.6.12",
             "source": {
                 "type": "git",
-                "url": "https://github.com/beyondcode/laravel-dump-server.git",
-                "reference": "33a19c632655c1d4f16c0bc67ce6ba0504116b8a"
+                "url": "https://github.com/mockery/mockery.git",
+                "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/33a19c632655c1d4f16c0bc67ce6ba0504116b8a",
-                "reference": "33a19c632655c1d4f16c0bc67ce6ba0504116b8a",
+                "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+                "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699",
                 "shasum": ""
             },
             "require": {
-                "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0",
-                "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0",
-                "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0",
-                "php": ">=7.2.5",
-                "symfony/var-dumper": "^5.0|^6.0"
+                "hamcrest/hamcrest-php": "^2.0.1",
+                "lib-pcre": ">=7.0",
+                "php": ">=7.3"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<8.0"
             },
             "require-dev": {
-                "larapack/dd": "^1.0",
-                "phpunit/phpunit": "^7.0|^9.3"
+                "phpunit/phpunit": "^8.5 || ^9.6.17",
+                "symplify/easy-coding-standard": "^12.1.14"
             },
             "type": "library",
-            "extra": {
-                "laravel": {
-                    "providers": [
-                        "BeyondCode\\DumpServer\\DumpServerServiceProvider"
-                    ]
-                }
-            },
             "autoload": {
                 "files": [
-                    "helpers.php"
+                    "library/helpers.php",
+                    "library/Mockery.php"
                 ],
                 "psr-4": {
-                    "BeyondCode\\DumpServer\\": "src"
+                    "Mockery\\": "library/Mockery"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Marcel Pociot",
-                    "email": "marcel@beyondco.de",
-                    "homepage": "https://beyondco.de",
+                    "name": "Pádraic Brady",
+                    "email": "padraic.brady@gmail.com",
+                    "homepage": "https://github.com/padraic",
+                    "role": "Author"
+                },
+                {
+                    "name": "Dave Marshall",
+                    "email": "dave.marshall@atstsolutions.co.uk",
+                    "homepage": "https://davedevelopment.co.uk",
                     "role": "Developer"
+                },
+                {
+                    "name": "Nathanael Esayeas",
+                    "email": "nathanael.esayeas@protonmail.com",
+                    "homepage": "https://github.com/ghostwriter",
+                    "role": "Lead Developer"
                 }
             ],
-            "description": "Symfony Var-Dump Server for Laravel",
-            "homepage": "https://github.com/beyondcode/laravel-dump-server",
+            "description": "Mockery is a simple yet flexible PHP mock object framework",
+            "homepage": "https://github.com/mockery/mockery",
             "keywords": [
-                "beyondcode",
-                "laravel-dump-server"
+                "BDD",
+                "TDD",
+                "library",
+                "mock",
+                "mock objects",
+                "mockery",
+                "stub",
+                "test",
+                "test double",
+                "testing"
             ],
             "support": {
-                "issues": "https://github.com/beyondcode/laravel-dump-server/issues",
-                "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.8.0"
+                "docs": "https://docs.mockery.io/",
+                "issues": "https://github.com/mockery/mockery/issues",
+                "rss": "https://github.com/mockery/mockery/releases.atom",
+                "security": "https://github.com/mockery/mockery/security/advisories",
+                "source": "https://github.com/mockery/mockery"
             },
-            "time": "2022-02-12T12:37:34+00:00"
+            "time": "2024-05-16T03:13:13+00:00"
         },
         {
-            "name": "doctrine/instantiator",
-            "version": "1.4.1",
+            "name": "myclabs/deep-copy",
+            "version": "1.13.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "024473a478be9df5fdaca2c793f2232fe788e414"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
-                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414",
+                "reference": "024473a478be9df5fdaca2c793f2232fe788e414",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.1 || ^8.0"
             },
+            "conflict": {
+                "doctrine/collections": "<1.6.8",
+                "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+            },
             "require-dev": {
-                "doctrine/coding-standard": "^9",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpbench/phpbench": "^0.16 || ^1",
-                "phpstan/phpstan": "^1.4",
-                "phpstan/phpstan-phpunit": "^1",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-                "vimeo/psalm": "^4.22"
+                "doctrine/collections": "^1.6.8",
+                "doctrine/common": "^2.13.3 || ^3.2.2",
+                "phpspec/prophecy": "^1.10",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
             },
             "type": "library",
             "autoload": {
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ],
                 "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                    "DeepCopy\\": "src/DeepCopy/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "https://ocramius.github.io/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "description": "Create deep copies (clones) of your objects",
             "keywords": [
-                "constructor",
-                "instantiate"
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
             ],
             "support": {
-                "issues": "https://github.com/doctrine/instantiator/issues",
-                "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
+                "issues": "https://github.com/myclabs/DeepCopy/issues",
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0"
             },
             "funding": [
                 {
-                    "url": "https://www.doctrine-project.org/sponsorship.html",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://www.patreon.com/phpdoctrine",
-                    "type": "patreon"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
                     "type": "tidelift"
                 }
             ],
-            "time": "2022-03-03T08:28:38+00:00"
+            "time": "2025-02-12T12:17:51+00:00"
         },
         {
-            "name": "facade/flare-client-php",
-            "version": "1.9.1",
+            "name": "nunomaduro/collision",
+            "version": "v6.4.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/facade/flare-client-php.git",
-                "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed"
+                "url": "https://github.com/nunomaduro/collision.git",
+                "reference": "f05978827b9343cba381ca05b8c7deee346b6015"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed",
-                "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed",
+                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015",
+                "reference": "f05978827b9343cba381ca05b8c7deee346b6015",
                 "shasum": ""
             },
             "require": {
-                "facade/ignition-contracts": "~1.0",
-                "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0",
-                "php": "^7.1|^8.0",
-                "symfony/http-foundation": "^3.3|^4.1|^5.0",
-                "symfony/mime": "^3.4|^4.0|^5.1",
-                "symfony/var-dumper": "^3.4|^4.0|^5.0"
+                "filp/whoops": "^2.14.5",
+                "php": "^8.0.0",
+                "symfony/console": "^6.0.2"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.14",
-                "phpunit/phpunit": "^7.5.16",
-                "spatie/phpunit-snapshot-assertions": "^2.0"
+                "brianium/paratest": "^6.4.1",
+                "laravel/framework": "^9.26.1",
+                "laravel/pint": "^1.1.1",
+                "nunomaduro/larastan": "^1.0.3",
+                "nunomaduro/mock-final-classes": "^1.1.0",
+                "orchestra/testbench": "^7.7",
+                "phpunit/phpunit": "^9.5.23",
+                "spatie/ignition": "^1.4.1"
             },
             "type": "library",
             "extra": {
+                "laravel": {
+                    "providers": [
+                        "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
+                    ]
+                },
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-develop": "6.x-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/helpers.php"
-                ],
                 "psr-4": {
-                    "Facade\\FlareClient\\": "src"
+                    "NunoMaduro\\Collision\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "description": "Send PHP errors to Flare",
-            "homepage": "https://github.com/facade/flare-client-php",
+            "authors": [
+                {
+                    "name": "Nuno Maduro",
+                    "email": "enunomaduro@gmail.com"
+                }
+            ],
+            "description": "Cli error handling for console/command-line PHP applications.",
             "keywords": [
-                "exception",
-                "facade",
-                "flare",
-                "reporting"
+                "artisan",
+                "cli",
+                "command-line",
+                "console",
+                "error",
+                "handling",
+                "laravel",
+                "laravel-zero",
+                "php",
+                "symfony"
             ],
             "support": {
-                "issues": "https://github.com/facade/flare-client-php/issues",
-                "source": "https://github.com/facade/flare-client-php/tree/1.9.1"
+                "issues": "https://github.com/nunomaduro/collision/issues",
+                "source": "https://github.com/nunomaduro/collision"
             },
             "funding": [
                 {
-                    "url": "https://github.com/spatie",
+                    "url": "https://www.paypal.com/paypalme/enunomaduro",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/nunomaduro",
                     "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/nunomaduro",
+                    "type": "patreon"
                 }
             ],
-            "time": "2021-09-13T12:16:46+00:00"
+            "time": "2023-01-03T12:54:54+00:00"
         },
         {
-            "name": "facade/ignition",
-            "version": "2.17.5",
+            "name": "phar-io/manifest",
+            "version": "2.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/facade/ignition.git",
-                "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c"
+                "url": "https://github.com/phar-io/manifest.git",
+                "reference": "54750ef60c58e43759730615a392c31c80e23176"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/facade/ignition/zipball/1d71996f83c9a5a7807331b8986ac890352b7a0c",
-                "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c",
+                "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+                "reference": "54750ef60c58e43759730615a392c31c80e23176",
                 "shasum": ""
             },
             "require": {
-                "ext-curl": "*",
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "facade/flare-client-php": "^1.9.1",
-                "facade/ignition-contracts": "^1.0.2",
-                "illuminate/support": "^7.0|^8.0",
-                "monolog/monolog": "^2.0",
-                "php": "^7.2.5|^8.0",
-                "symfony/console": "^5.0",
-                "symfony/var-dumper": "^5.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.14",
-                "livewire/livewire": "^2.4",
-                "mockery/mockery": "^1.3",
-                "orchestra/testbench": "^5.0|^6.0",
-                "psalm/plugin-laravel": "^1.2"
-            },
-            "suggest": {
-                "laravel/telescope": "^3.1"
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "ext-phar": "*",
+                "ext-xmlwriter": "*",
+                "phar-io/version": "^3.0.1",
+                "php": "^7.2 || ^8.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
-                },
-                "laravel": {
-                    "providers": [
-                        "Facade\\Ignition\\IgnitionServiceProvider"
-                    ],
-                    "aliases": {
-                        "Flare": "Facade\\Ignition\\Facades\\Flare"
-                    }
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/helpers.php"
-                ],
-                "psr-4": {
-                    "Facade\\Ignition\\": "src"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
-            "description": "A beautiful error page for Laravel applications.",
-            "homepage": "https://github.com/facade/ignition",
-            "keywords": [
-                "error",
-                "flare",
-                "laravel",
-                "page"
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
+                }
             ],
+            "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
             "support": {
-                "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction",
-                "forum": "https://twitter.com/flareappio",
-                "issues": "https://github.com/facade/ignition/issues",
-                "source": "https://github.com/facade/ignition"
+                "issues": "https://github.com/phar-io/manifest/issues",
+                "source": "https://github.com/phar-io/manifest/tree/2.0.4"
             },
-            "time": "2022-02-23T18:31:24+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/theseer",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-03T12:33:53+00:00"
         },
         {
-            "name": "fakerphp/faker",
-            "version": "v1.19.0",
+            "name": "phar-io/version",
+            "version": "3.2.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/FakerPHP/Faker.git",
-                "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75"
+                "url": "https://github.com/phar-io/version.git",
+                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75",
-                "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75",
+                "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1 || ^8.0",
-                "psr/container": "^1.0 || ^2.0",
-                "symfony/deprecation-contracts": "^2.2 || ^3.0"
-            },
-            "conflict": {
-                "fzaninotto/faker": "*"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.4.1",
-                "doctrine/persistence": "^1.3 || ^2.0",
-                "ext-intl": "*",
-                "symfony/phpunit-bridge": "^4.4 || ^5.2"
-            },
-            "suggest": {
-                "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
-                "ext-curl": "Required by Faker\\Provider\\Image to download images.",
-                "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
-                "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
-                "ext-mbstring": "Required for multibyte Unicode string functionality."
+                "php": "^7.2 || ^8.0"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "v1.19-dev"
-                }
-            },
             "autoload": {
-                "psr-4": {
-                    "Faker\\": "src/Faker/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "François Zaninotto"
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
                 }
             ],
-            "description": "Faker is a PHP library that generates fake data for you.",
-            "keywords": [
-                "data",
-                "faker",
-                "fixtures"
-            ],
+            "description": "Library for handling version information and constraints",
             "support": {
-                "issues": "https://github.com/FakerPHP/Faker/issues",
-                "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0"
+                "issues": "https://github.com/phar-io/version/issues",
+                "source": "https://github.com/phar-io/version/tree/3.2.1"
             },
-            "time": "2022-02-02T17:38:57+00:00"
+            "time": "2022-02-21T01:04:05+00:00"
         },
         {
-            "name": "filp/whoops",
-            "version": "2.14.5",
+            "name": "php-di/invoker",
+            "version": "2.3.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/filp/whoops.git",
-                "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc"
+                "url": "https://github.com/PHP-DI/Invoker.git",
+                "reference": "59f15608528d8a8838d69b422a919fd6b16aa576"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
-                "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
+                "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/59f15608528d8a8838d69b422a919fd6b16aa576",
+                "reference": "59f15608528d8a8838d69b422a919fd6b16aa576",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9 || ^7.0 || ^8.0",
-                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+                "php": ">=7.3",
+                "psr/container": "^1.0|^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9 || ^1.0",
-                "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3",
-                "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
-            },
-            "suggest": {
-                "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
-                "whoops/soap": "Formats errors as SOAP responses"
+                "athletic/athletic": "~0.1.8",
+                "mnapoli/hard-mode": "~0.3.0",
+                "phpunit/phpunit": "^9.0"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.7-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
-                    "Whoops\\": "src/Whoops/"
+                    "Invoker\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
-            "authors": [
-                {
-                    "name": "Filipe Dobreira",
-                    "homepage": "https://github.com/filp",
-                    "role": "Developer"
-                }
-            ],
-            "description": "php error handling for cool kids",
-            "homepage": "https://filp.github.io/whoops/",
+            "description": "Generic and extensible callable invoker",
+            "homepage": "https://github.com/PHP-DI/Invoker",
             "keywords": [
-                "error",
-                "exception",
-                "handling",
-                "library",
-                "throwable",
-                "whoops"
+                "callable",
+                "dependency",
+                "dependency-injection",
+                "injection",
+                "invoke",
+                "invoker"
             ],
             "support": {
-                "issues": "https://github.com/filp/whoops/issues",
-                "source": "https://github.com/filp/whoops/tree/2.14.5"
+                "issues": "https://github.com/PHP-DI/Invoker/issues",
+                "source": "https://github.com/PHP-DI/Invoker/tree/2.3.6"
             },
             "funding": [
                 {
-                    "url": "https://github.com/denis-sokolov",
+                    "url": "https://github.com/mnapoli",
                     "type": "github"
                 }
             ],
-            "time": "2022-01-07T12:00:00+00:00"
+            "time": "2025-01-17T12:49:27+00:00"
         },
         {
-            "name": "hamcrest/hamcrest-php",
-            "version": "v2.0.1",
+            "name": "php-di/php-di",
+            "version": "7.0.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/hamcrest/hamcrest-php.git",
-                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
+                "url": "https://github.com/PHP-DI/PHP-DI.git",
+                "reference": "d8480267f5cf239650debba704f3ecd15b638cde"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
-                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+                "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/d8480267f5cf239650debba704f3ecd15b638cde",
+                "reference": "d8480267f5cf239650debba704f3ecd15b638cde",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3|^7.0|^8.0"
+                "laravel/serializable-closure": "^1.0 || ^2.0",
+                "php": ">=8.0",
+                "php-di/invoker": "^2.0",
+                "psr/container": "^1.1 || ^2.0"
             },
-            "replace": {
-                "cordoval/hamcrest-php": "*",
-                "davedevelopment/hamcrest-php": "*",
-                "kodova/hamcrest-php": "*"
+            "provide": {
+                "psr/container-implementation": "^1.0"
             },
             "require-dev": {
-                "phpunit/php-file-iterator": "^1.4 || ^2.0",
-                "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+                "friendsofphp/php-cs-fixer": "^3",
+                "friendsofphp/proxy-manager-lts": "^1",
+                "mnapoli/phpunit-easymock": "^1.3",
+                "phpunit/phpunit": "^9.6",
+                "vimeo/psalm": "^5|^6"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.1-dev"
-                }
+            "suggest": {
+                "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)"
             },
+            "type": "library",
             "autoload": {
-                "classmap": [
-                    "hamcrest"
-                ]
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "DI\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
-            "description": "This is the PHP port of Hamcrest Matchers",
+            "description": "The dependency injection container for humans",
+            "homepage": "https://php-di.org/",
             "keywords": [
-                "test"
+                "PSR-11",
+                "container",
+                "container-interop",
+                "dependency injection",
+                "di",
+                "ioc",
+                "psr11"
             ],
             "support": {
-                "issues": "https://github.com/hamcrest/hamcrest-php/issues",
-                "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+                "issues": "https://github.com/PHP-DI/PHP-DI/issues",
+                "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.9"
             },
-            "time": "2020-07-09T08:09:16+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/mnapoli",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/php-di/php-di",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2025-02-28T12:46:35+00:00"
         },
         {
-            "name": "mockery/mockery",
-            "version": "1.5.0",
+            "name": "phpunit/php-code-coverage",
+            "version": "9.2.32",
             "source": {
                 "type": "git",
-                "url": "https://github.com/mockery/mockery.git",
-                "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac"
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
-                "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5",
+                "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5",
                 "shasum": ""
             },
             "require": {
-                "hamcrest/hamcrest-php": "^2.0.1",
-                "lib-pcre": ">=7.0",
-                "php": "^7.3 || ^8.0"
-            },
-            "conflict": {
-                "phpunit/phpunit": "<8.0"
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "ext-xmlwriter": "*",
+                "nikic/php-parser": "^4.19.1 || ^5.1.0",
+                "php": ">=7.3",
+                "phpunit/php-file-iterator": "^3.0.6",
+                "phpunit/php-text-template": "^2.0.4",
+                "sebastian/code-unit-reverse-lookup": "^2.0.3",
+                "sebastian/complexity": "^2.0.3",
+                "sebastian/environment": "^5.1.5",
+                "sebastian/lines-of-code": "^1.0.4",
+                "sebastian/version": "^3.0.2",
+                "theseer/tokenizer": "^1.2.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "^8.5 || ^9.3"
+                "phpunit/phpunit": "^9.6"
+            },
+            "suggest": {
+                "ext-pcov": "PHP extension that provides line coverage",
+                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4.x-dev"
+                    "dev-main": "9.2.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Mockery": "library/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -8220,260 +9208,239 @@
             ],
             "authors": [
                 {
-                    "name": "Pádraic Brady",
-                    "email": "padraic.brady@gmail.com",
-                    "homepage": "http://blog.astrumfutura.com"
-                },
-                {
-                    "name": "Dave Marshall",
-                    "email": "dave.marshall@atstsolutions.co.uk",
-                    "homepage": "http://davedevelopment.co.uk"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Mockery is a simple yet flexible PHP mock object framework",
-            "homepage": "https://github.com/mockery/mockery",
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
             "keywords": [
-                "BDD",
-                "TDD",
-                "library",
-                "mock",
-                "mock objects",
-                "mockery",
-                "stub",
-                "test",
-                "test double",
-                "testing"
+                "coverage",
+                "testing",
+                "xunit"
             ],
             "support": {
-                "issues": "https://github.com/mockery/mockery/issues",
-                "source": "https://github.com/mockery/mockery/tree/1.5.0"
+                "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+                "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32"
             },
-            "time": "2022-01-20T13:18:17+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-08-22T04:23:01+00:00"
         },
         {
-            "name": "myclabs/deep-copy",
-            "version": "1.11.0",
+            "name": "phpunit/php-file-iterator",
+            "version": "3.0.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
-                "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "conflict": {
-                "doctrine/collections": "<1.6.8",
-                "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+                "php": ">=7.3"
             },
             "require-dev": {
-                "doctrine/collections": "^1.6.8",
-                "doctrine/common": "^2.13.3 || ^3.2.2",
-                "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+                "phpunit/phpunit": "^9.3"
             },
             "type": "library",
-            "autoload": {
-                "files": [
-                    "src/DeepCopy/deep_copy.php"
-                ],
-                "psr-4": {
-                    "DeepCopy\\": "src/DeepCopy/"
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
                 }
             },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
-            "description": "Create deep copies (clones) of your objects",
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
             "keywords": [
-                "clone",
-                "copy",
-                "duplicate",
-                "object",
-                "object graph"
+                "filesystem",
+                "iterator"
             ],
             "support": {
-                "issues": "https://github.com/myclabs/DeepCopy/issues",
-                "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
+                "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
             },
             "funding": [
                 {
-                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
-                    "type": "tidelift"
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
                 }
             ],
-            "time": "2022-03-03T13:19:32+00:00"
+            "time": "2021-12-02T12:48:52+00:00"
         },
         {
-            "name": "nunomaduro/collision",
-            "version": "v5.11.0",
+            "name": "phpunit/php-invoker",
+            "version": "3.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/nunomaduro/collision.git",
-                "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461"
+                "url": "https://github.com/sebastianbergmann/php-invoker.git",
+                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461",
-                "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
                 "shasum": ""
             },
             "require": {
-                "facade/ignition-contracts": "^1.0",
-                "filp/whoops": "^2.14.3",
-                "php": "^7.3 || ^8.0",
-                "symfony/console": "^5.0"
+                "php": ">=7.3"
             },
             "require-dev": {
-                "brianium/paratest": "^6.1",
-                "fideloper/proxy": "^4.4.1",
-                "fruitcake/laravel-cors": "^2.0.3",
-                "laravel/framework": "8.x-dev",
-                "nunomaduro/larastan": "^0.6.2",
-                "nunomaduro/mock-final-classes": "^1.0",
-                "orchestra/testbench": "^6.0",
-                "phpstan/phpstan": "^0.12.64",
-                "phpunit/phpunit": "^9.5.0"
+                "ext-pcntl": "*",
+                "phpunit/phpunit": "^9.3"
+            },
+            "suggest": {
+                "ext-pcntl": "*"
             },
             "type": "library",
             "extra": {
-                "laravel": {
-                    "providers": [
-                        "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
-                    ]
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "NunoMaduro\\Collision\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Nuno Maduro",
-                    "email": "enunomaduro@gmail.com"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Cli error handling for console/command-line PHP applications.",
+            "description": "Invoke callables with a timeout",
+            "homepage": "https://github.com/sebastianbergmann/php-invoker/",
             "keywords": [
-                "artisan",
-                "cli",
-                "command-line",
-                "console",
-                "error",
-                "handling",
-                "laravel",
-                "laravel-zero",
-                "php",
-                "symfony"
+                "process"
             ],
             "support": {
-                "issues": "https://github.com/nunomaduro/collision/issues",
-                "source": "https://github.com/nunomaduro/collision"
+                "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+                "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
             },
             "funding": [
                 {
-                    "url": "https://www.paypal.com/paypalme/enunomaduro",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/nunomaduro",
+                    "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://www.patreon.com/nunomaduro",
-                    "type": "patreon"
                 }
             ],
-            "time": "2022-01-10T16:22:52+00:00"
+            "time": "2020-09-28T05:58:55+00:00"
         },
         {
-            "name": "phar-io/manifest",
-            "version": "2.0.3",
+            "name": "phpunit/php-text-template",
+            "version": "2.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phar-io/manifest.git",
-                "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
-                "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
                 "shasum": ""
             },
             "require": {
-                "ext-dom": "*",
-                "ext-phar": "*",
-                "ext-xmlwriter": "*",
-                "phar-io/version": "^3.0.1",
-                "php": "^7.2 || ^8.0"
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0.x-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
                 "classmap": [
                     "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Arne Blankerts",
-                    "email": "arne@blankerts.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Heuer",
-                    "email": "sebastian@phpeople.de",
-                    "role": "Developer"
-                },
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
                 {
                     "name": "Sebastian Bergmann",
                     "email": "sebastian@phpunit.de",
-                    "role": "Developer"
+                    "role": "lead"
                 }
             ],
-            "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
             "support": {
-                "issues": "https://github.com/phar-io/manifest/issues",
-                "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+                "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+                "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
             },
-            "time": "2021-07-20T11:28:43+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T05:33:50+00:00"
         },
         {
-            "name": "phar-io/version",
-            "version": "3.2.1",
+            "name": "phpunit/php-timer",
+            "version": "5.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phar-io/version.git",
-                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
-                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2 || ^8.0"
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0-dev"
+                }
+            },
             "autoload": {
                 "classmap": [
                     "src/"
@@ -8484,296 +9451,325 @@
                 "BSD-3-Clause"
             ],
             "authors": [
-                {
-                    "name": "Arne Blankerts",
-                    "email": "arne@blankerts.de",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Sebastian Heuer",
-                    "email": "sebastian@phpeople.de",
-                    "role": "Developer"
-                },
                 {
                     "name": "Sebastian Bergmann",
                     "email": "sebastian@phpunit.de",
-                    "role": "Developer"
+                    "role": "lead"
                 }
             ],
-            "description": "Library for handling version information and constraints",
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
             "support": {
-                "issues": "https://github.com/phar-io/version/issues",
-                "source": "https://github.com/phar-io/version/tree/3.2.1"
+                "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+                "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
             },
-            "time": "2022-02-21T01:04:05+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:16:10+00:00"
         },
         {
-            "name": "phpdocumentor/reflection-common",
-            "version": "2.2.0",
+            "name": "phpunit/phpunit",
+            "version": "9.6.22",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
-                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
+                "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2 || ^8.0"
+                "doctrine/instantiator": "^1.5.0 || ^2",
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "ext-xmlwriter": "*",
+                "myclabs/deep-copy": "^1.12.1",
+                "phar-io/manifest": "^2.0.4",
+                "phar-io/version": "^3.2.1",
+                "php": ">=7.3",
+                "phpunit/php-code-coverage": "^9.2.32",
+                "phpunit/php-file-iterator": "^3.0.6",
+                "phpunit/php-invoker": "^3.1.1",
+                "phpunit/php-text-template": "^2.0.4",
+                "phpunit/php-timer": "^5.0.3",
+                "sebastian/cli-parser": "^1.0.2",
+                "sebastian/code-unit": "^1.0.8",
+                "sebastian/comparator": "^4.0.8",
+                "sebastian/diff": "^4.0.6",
+                "sebastian/environment": "^5.1.5",
+                "sebastian/exporter": "^4.0.6",
+                "sebastian/global-state": "^5.0.7",
+                "sebastian/object-enumerator": "^4.0.4",
+                "sebastian/resource-operations": "^3.0.4",
+                "sebastian/type": "^3.2.1",
+                "sebastian/version": "^3.0.2"
+            },
+            "suggest": {
+                "ext-soap": "To be able to generate mocks based on WSDL files",
+                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
             },
+            "bin": [
+                "phpunit"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-2.x": "2.x-dev"
+                    "dev-master": "9.6-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": "src/"
-                }
+                "files": [
+                    "src/Framework/Assert/Functions.php"
+                ],
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Jaap van Otterdijk",
-                    "email": "opensource@ijaap.nl"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
-            "homepage": "http://www.phpdoc.org",
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
             "keywords": [
-                "FQSEN",
-                "phpDocumentor",
-                "phpdoc",
-                "reflection",
-                "static analysis"
+                "phpunit",
+                "testing",
+                "xunit"
             ],
             "support": {
-                "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+                "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+                "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22"
             },
-            "time": "2020-06-27T09:03:43+00:00"
+            "funding": [
+                {
+                    "url": "https://phpunit.de/sponsors.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-12-05T13:48:26+00:00"
         },
         {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "5.3.0",
+            "name": "sebastian/cli-parser",
+            "version": "1.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
+                "url": "https://github.com/sebastianbergmann/cli-parser.git",
+                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
-                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
+                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
                 "shasum": ""
             },
             "require": {
-                "ext-filter": "*",
-                "php": "^7.2 || ^8.0",
-                "phpdocumentor/reflection-common": "^2.2",
-                "phpdocumentor/type-resolver": "^1.3",
-                "webmozart/assert": "^1.9.1"
+                "php": ">=7.3"
             },
             "require-dev": {
-                "mockery/mockery": "~1.3.2",
-                "psalm/phar": "^4.8"
+                "phpunit/phpunit": "^9.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.x-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": "src"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                },
-                {
-                    "name": "Jaap van Otterdijk",
-                    "email": "account@ijaap.nl"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "description": "Library for parsing CLI options",
+            "homepage": "https://github.com/sebastianbergmann/cli-parser",
             "support": {
-                "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
-                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
+                "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+                "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
             },
-            "time": "2021-10-19T17:43:47+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-02T06:27:43+00:00"
         },
         {
-            "name": "phpdocumentor/type-resolver",
-            "version": "1.6.1",
+            "name": "sebastian/code-unit",
+            "version": "1.0.8",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "77a32518733312af16a44300404e945338981de3"
+                "url": "https://github.com/sebastianbergmann/code-unit.git",
+                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
-                "reference": "77a32518733312af16a44300404e945338981de3",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.2 || ^8.0",
-                "phpdocumentor/reflection-common": "^2.0"
+                "php": ">=7.3"
             },
             "require-dev": {
-                "ext-tokenizer": "*",
-                "psalm/phar": "^4.8"
+                "phpunit/phpunit": "^9.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-1.x": "1.x-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": "src"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "description": "Collection of value objects that represent the PHP code units",
+            "homepage": "https://github.com/sebastianbergmann/code-unit",
             "support": {
-                "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
-                "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
+                "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+                "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
             },
-            "time": "2022-03-15T21:29:03+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:08:54+00:00"
         },
         {
-            "name": "phpspec/prophecy",
-            "version": "v1.15.0",
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "2.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
-                "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
                 "shasum": ""
             },
             "require": {
-                "doctrine/instantiator": "^1.2",
-                "php": "^7.2 || ~8.0, <8.2",
-                "phpdocumentor/reflection-docblock": "^5.2",
-                "sebastian/comparator": "^3.0 || ^4.0",
-                "sebastian/recursion-context": "^3.0 || ^4.0"
+                "php": ">=7.3"
             },
             "require-dev": {
-                "phpspec/phpspec": "^6.0 || ^7.0",
-                "phpunit/phpunit": "^8.0 || ^9.0"
+                "phpunit/phpunit": "^9.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Prophecy\\": "src/Prophecy"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                },
-                {
-                    "name": "Marcello Duarte",
-                    "email": "marcello.duarte@gmail.com"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Highly opinionated mocking framework for PHP 5.3+",
-            "homepage": "https://github.com/phpspec/prophecy",
-            "keywords": [
-                "Double",
-                "Dummy",
-                "fake",
-                "mock",
-                "spy",
-                "stub"
-            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
             "support": {
-                "issues": "https://github.com/phpspec/prophecy/issues",
-                "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
+                "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
             },
-            "time": "2021-12-08T12:19:24+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T05:30:19+00:00"
         },
         {
-            "name": "phpunit/php-code-coverage",
-            "version": "9.2.15",
+            "name": "sebastian/comparator",
+            "version": "4.0.8",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
-                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
+                "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
                 "shasum": ""
             },
             "require": {
-                "ext-dom": "*",
-                "ext-libxml": "*",
-                "ext-xmlwriter": "*",
-                "nikic/php-parser": "^4.13.0",
                 "php": ">=7.3",
-                "phpunit/php-file-iterator": "^3.0.3",
-                "phpunit/php-text-template": "^2.0.2",
-                "sebastian/code-unit-reverse-lookup": "^2.0.2",
-                "sebastian/complexity": "^2.0",
-                "sebastian/environment": "^5.1.2",
-                "sebastian/lines-of-code": "^1.0.3",
-                "sebastian/version": "^3.0.1",
-                "theseer/tokenizer": "^1.2.0"
+                "sebastian/diff": "^4.0",
+                "sebastian/exporter": "^4.0"
             },
             "require-dev": {
                 "phpunit/phpunit": "^9.3"
             },
-            "suggest": {
-                "ext-pcov": "*",
-                "ext-xdebug": "*"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "9.2-dev"
+                    "dev-master": "4.0-dev"
                 }
             },
             "autoload": {
@@ -8788,20 +9784,31 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
                 }
             ],
-            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
-            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "https://github.com/sebastianbergmann/comparator",
             "keywords": [
-                "coverage",
-                "testing",
-                "xunit"
+                "comparator",
+                "compare",
+                "equality"
             ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
+                "issues": "https://github.com/sebastianbergmann/comparator/issues",
+                "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
             },
             "funding": [
                 {
@@ -8809,23 +9816,24 @@
                     "type": "github"
                 }
             ],
-            "time": "2022-03-07T09:28:20+00:00"
+            "time": "2022-09-14T12:41:17+00:00"
         },
         {
-            "name": "phpunit/php-file-iterator",
-            "version": "3.0.6",
+            "name": "sebastian/complexity",
+            "version": "2.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
-                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+                "url": "https://github.com/sebastianbergmann/complexity.git",
+                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
-                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
+                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
                 "shasum": ""
             },
             "require": {
+                "nikic/php-parser": "^4.18 || ^5.0",
                 "php": ">=7.3"
             },
             "require-dev": {
@@ -8834,7 +9842,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.0-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
@@ -8853,15 +9861,11 @@
                     "role": "lead"
                 }
             ],
-            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
-            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
-            "keywords": [
-                "filesystem",
-                "iterator"
-            ],
+            "description": "Library for calculating the complexity of PHP code units",
+            "homepage": "https://github.com/sebastianbergmann/complexity",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
-                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+                "issues": "https://github.com/sebastianbergmann/complexity/issues",
+                "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
             },
             "funding": [
                 {
@@ -8869,36 +9873,33 @@
                     "type": "github"
                 }
             ],
-            "time": "2021-12-02T12:48:52+00:00"
+            "time": "2023-12-22T06:19:30+00:00"
         },
         {
-            "name": "phpunit/php-invoker",
-            "version": "3.1.1",
+            "name": "sebastian/diff",
+            "version": "4.0.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-invoker.git",
-                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
-                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
+                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.3"
             },
             "require-dev": {
-                "ext-pcntl": "*",
-                "phpunit/phpunit": "^9.3"
-            },
-            "suggest": {
-                "ext-pcntl": "*"
+                "phpunit/phpunit": "^9.3",
+                "symfony/process": "^4.2 || ^5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.1-dev"
+                    "dev-master": "4.0-dev"
                 }
             },
             "autoload": {
@@ -8913,18 +9914,24 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
                 }
             ],
-            "description": "Invoke callables with a timeout",
-            "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
             "keywords": [
-                "process"
+                "diff",
+                "udiff",
+                "unidiff",
+                "unified diff"
             ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
-                "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+                "issues": "https://github.com/sebastianbergmann/diff/issues",
+                "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
             },
             "funding": [
                 {
@@ -8932,20 +9939,20 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T05:58:55+00:00"
+            "time": "2024-03-02T06:30:58+00:00"
         },
         {
-            "name": "phpunit/php-text-template",
-            "version": "2.0.4",
+            "name": "sebastian/environment",
+            "version": "5.1.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-text-template.git",
-                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
-                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
                 "shasum": ""
             },
             "require": {
@@ -8954,10 +9961,13 @@
             "require-dev": {
                 "phpunit/phpunit": "^9.3"
             },
+            "suggest": {
+                "ext-posix": "*"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-master": "5.1-dev"
                 }
             },
             "autoload": {
@@ -8972,18 +9982,19 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Simple template engine.",
-            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
             "keywords": [
-                "template"
+                "Xdebug",
+                "environment",
+                "hhvm"
             ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
-                "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+                "issues": "https://github.com/sebastianbergmann/environment/issues",
+                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
             },
             "funding": [
                 {
@@ -8991,32 +10002,34 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T05:33:50+00:00"
+            "time": "2023-02-03T06:03:51+00:00"
         },
         {
-            "name": "phpunit/php-timer",
-            "version": "5.0.3",
+            "name": "sebastian/exporter",
+            "version": "4.0.6",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/php-timer.git",
-                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
-                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
+                "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=7.3",
+                "sebastian/recursion-context": "^4.0"
             },
             "require-dev": {
+                "ext-mbstring": "*",
                 "phpunit/phpunit": "^9.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.0-dev"
+                    "dev-master": "4.0-dev"
                 }
             },
             "autoload": {
@@ -9031,18 +10044,34 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
-            "description": "Utility class for timing",
-            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "https://www.github.com/sebastianbergmann/exporter",
             "keywords": [
-                "timer"
+                "export",
+                "exporter"
             ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/php-timer/issues",
-                "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+                "issues": "https://github.com/sebastianbergmann/exporter/issues",
+                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
             },
             "funding": [
                 {
@@ -9050,73 +10079,41 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:16:10+00:00"
+            "time": "2024-03-02T06:33:00+00:00"
         },
         {
-            "name": "phpunit/phpunit",
-            "version": "9.5.20",
+            "name": "sebastian/global-state",
+            "version": "5.0.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
-                "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+                "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
                 "shasum": ""
             },
             "require": {
-                "doctrine/instantiator": "^1.3.1",
-                "ext-dom": "*",
-                "ext-json": "*",
-                "ext-libxml": "*",
-                "ext-mbstring": "*",
-                "ext-xml": "*",
-                "ext-xmlwriter": "*",
-                "myclabs/deep-copy": "^1.10.1",
-                "phar-io/manifest": "^2.0.3",
-                "phar-io/version": "^3.0.2",
                 "php": ">=7.3",
-                "phpspec/prophecy": "^1.12.1",
-                "phpunit/php-code-coverage": "^9.2.13",
-                "phpunit/php-file-iterator": "^3.0.5",
-                "phpunit/php-invoker": "^3.1.1",
-                "phpunit/php-text-template": "^2.0.3",
-                "phpunit/php-timer": "^5.0.2",
-                "sebastian/cli-parser": "^1.0.1",
-                "sebastian/code-unit": "^1.0.6",
-                "sebastian/comparator": "^4.0.5",
-                "sebastian/diff": "^4.0.3",
-                "sebastian/environment": "^5.1.3",
-                "sebastian/exporter": "^4.0.3",
-                "sebastian/global-state": "^5.0.1",
-                "sebastian/object-enumerator": "^4.0.3",
-                "sebastian/resource-operations": "^3.0.3",
-                "sebastian/type": "^3.0",
-                "sebastian/version": "^3.0.2"
+                "sebastian/object-reflector": "^2.0",
+                "sebastian/recursion-context": "^4.0"
             },
             "require-dev": {
-                "ext-pdo": "*",
-                "phpspec/prophecy-phpunit": "^2.0.1"
+                "ext-dom": "*",
+                "phpunit/phpunit": "^9.3"
             },
             "suggest": {
-                "ext-soap": "*",
-                "ext-xdebug": "*"
+                "ext-uopz": "*"
             },
-            "bin": [
-                "phpunit"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "9.5-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/Framework/Assert/Functions.php"
-                ],
                 "classmap": [
                     "src/"
                 ]
@@ -9128,48 +10125,42 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "The PHP Unit Testing framework.",
-            "homepage": "https://phpunit.de/",
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
             "keywords": [
-                "phpunit",
-                "testing",
-                "xunit"
+                "global state"
             ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/phpunit/issues",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20"
+                "issues": "https://github.com/sebastianbergmann/global-state/issues",
+                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
             },
             "funding": [
-                {
-                    "url": "https://phpunit.de/sponsors.html",
-                    "type": "custom"
-                },
                 {
                     "url": "https://github.com/sebastianbergmann",
                     "type": "github"
                 }
             ],
-            "time": "2022-04-01T12:37:26+00:00"
+            "time": "2024-03-02T06:35:11+00:00"
         },
         {
-            "name": "sebastian/cli-parser",
-            "version": "1.0.1",
+            "name": "sebastian/lines-of-code",
+            "version": "1.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/cli-parser.git",
-                "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+                "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
-                "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
                 "shasum": ""
             },
             "require": {
+                "nikic/php-parser": "^4.18 || ^5.0",
                 "php": ">=7.3"
             },
             "require-dev": {
@@ -9197,11 +10188,11 @@
                     "role": "lead"
                 }
             ],
-            "description": "Library for parsing CLI options",
-            "homepage": "https://github.com/sebastianbergmann/cli-parser",
+            "description": "Library for counting the lines of code in PHP source code",
+            "homepage": "https://github.com/sebastianbergmann/lines-of-code",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
-                "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+                "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
             },
             "funding": [
                 {
@@ -9209,24 +10200,26 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T06:08:49+00:00"
+            "time": "2023-12-22T06:20:34+00:00"
         },
         {
-            "name": "sebastian/code-unit",
-            "version": "1.0.8",
+            "name": "sebastian/object-enumerator",
+            "version": "4.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/code-unit.git",
-                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
-                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=7.3",
+                "sebastian/object-reflector": "^2.0",
+                "sebastian/recursion-context": "^4.0"
             },
             "require-dev": {
                 "phpunit/phpunit": "^9.3"
@@ -9234,7 +10227,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "4.0-dev"
                 }
             },
             "autoload": {
@@ -9249,15 +10242,14 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Collection of value objects that represent the PHP code units",
-            "homepage": "https://github.com/sebastianbergmann/code-unit",
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/code-unit/issues",
-                "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+                "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
             },
             "funding": [
                 {
@@ -9265,20 +10257,20 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:08:54+00:00"
+            "time": "2020-10-26T13:12:34+00:00"
         },
         {
-            "name": "sebastian/code-unit-reverse-lookup",
-            "version": "2.0.3",
+            "name": "sebastian/object-reflector",
+            "version": "2.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
-                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+                "url": "https://github.com/sebastianbergmann/object-reflector.git",
+                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
-                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
                 "shasum": ""
             },
             "require": {
@@ -9308,11 +10300,11 @@
                     "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Looks up which function or method a line of code belongs to",
-            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "description": "Allows reflection of object attributes, including inherited and non-public ones",
+            "homepage": "https://github.com/sebastianbergmann/object-reflector/",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
-                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+                "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+                "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
             },
             "funding": [
                 {
@@ -9320,26 +10312,24 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T05:30:19+00:00"
+            "time": "2020-10-26T13:14:26+00:00"
         },
         {
-            "name": "sebastian/comparator",
-            "version": "4.0.6",
+            "name": "sebastian/recursion-context",
+            "version": "4.0.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
-                "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/diff": "^4.0",
-                "sebastian/exporter": "^4.0"
+                "php": ">=7.3"
             },
             "require-dev": {
                 "phpunit/phpunit": "^9.3"
@@ -9366,27 +10356,18 @@
                 },
                 {
                     "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
+                    "email": "whatthejeff@gmail.com"
                 },
                 {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
                 }
             ],
-            "description": "Provides the functionality to compare PHP values for equality",
-            "homepage": "https://github.com/sebastianbergmann/comparator",
-            "keywords": [
-                "comparator",
-                "compare",
-                "equality"
-            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "https://github.com/sebastianbergmann/recursion-context",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/comparator/issues",
-                "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
+                "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+                "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
             },
             "funding": [
                 {
@@ -9394,33 +10375,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T15:49:45+00:00"
+            "time": "2023-02-03T06:07:39+00:00"
         },
         {
-            "name": "sebastian/complexity",
-            "version": "2.0.2",
+            "name": "sebastian/resource-operations",
+            "version": "3.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/complexity.git",
-                "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
-                "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+                "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
                 "shasum": ""
             },
             "require": {
-                "nikic/php-parser": "^4.7",
                 "php": ">=7.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^9.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0-dev"
+                    "dev-main": "3.0-dev"
                 }
             },
             "autoload": {
@@ -9435,15 +10415,13 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "Library for calculating the complexity of PHP code units",
-            "homepage": "https://github.com/sebastianbergmann/complexity",
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/complexity/issues",
-                "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
+                "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
             },
             "funding": [
                 {
@@ -9451,33 +10429,32 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T15:52:27+00:00"
+            "time": "2024-03-14T16:00:52+00:00"
         },
         {
-            "name": "sebastian/diff",
-            "version": "4.0.4",
+            "name": "sebastian/type",
+            "version": "3.2.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/diff.git",
-                "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
+                "url": "https://github.com/sebastianbergmann/type.git",
+                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
-                "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3",
-                "symfony/process": "^4.2 || ^5"
+                "phpunit/phpunit": "^9.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-master": "3.2-dev"
                 }
             },
             "autoload": {
@@ -9492,24 +10469,15 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Kore Nordmann",
-                    "email": "mail@kore-nordmann.de"
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Diff implementation",
-            "homepage": "https://github.com/sebastianbergmann/diff",
-            "keywords": [
-                "diff",
-                "udiff",
-                "unidiff",
-                "unified diff"
-            ],
+            "description": "Collection of value objects that represent the types of the PHP type system",
+            "homepage": "https://github.com/sebastianbergmann/type",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/diff/issues",
-                "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+                "issues": "https://github.com/sebastianbergmann/type/issues",
+                "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
             },
             "funding": [
                 {
@@ -9517,35 +10485,29 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-10-26T13:10:38+00:00"
+            "time": "2023-02-03T06:13:03+00:00"
         },
         {
-            "name": "sebastian/environment",
-            "version": "5.1.4",
+            "name": "sebastian/version",
+            "version": "3.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "c6c1022351a901512170118436c764e473f6de8c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
-                "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+                "reference": "c6c1022351a901512170118436c764e473f6de8c",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.3"
             },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
-            },
-            "suggest": {
-                "ext-posix": "*"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.1-dev"
+                    "dev-master": "3.0-dev"
                 }
             },
             "autoload": {
@@ -9560,19 +10522,15 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Provides functionality to handle HHVM/PHP environments",
-            "homepage": "http://www.github.com/sebastianbergmann/environment",
-            "keywords": [
-                "Xdebug",
-                "environment",
-                "hhvm"
-            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/environment/issues",
-                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
+                "issues": "https://github.com/sebastianbergmann/version/issues",
+                "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
             },
             "funding": [
                 {
@@ -9580,407 +10538,485 @@
                     "type": "github"
                 }
             ],
-            "time": "2022-04-03T09:37:03+00:00"
+            "time": "2020-09-28T06:39:44+00:00"
         },
         {
-            "name": "sebastian/exporter",
-            "version": "4.0.4",
+            "name": "spatie/laravel-ignition",
+            "version": "2.9.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
+                "url": "https://github.com/spatie/laravel-ignition.git",
+                "reference": "1baee07216d6748ebd3a65ba97381b051838707a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
-                "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+                "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a",
+                "reference": "1baee07216d6748ebd3a65ba97381b051838707a",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/recursion-context": "^4.0"
+                "ext-curl": "*",
+                "ext-json": "*",
+                "ext-mbstring": "*",
+                "illuminate/support": "^10.0|^11.0|^12.0",
+                "php": "^8.1",
+                "spatie/ignition": "^1.15",
+                "symfony/console": "^6.2.3|^7.0",
+                "symfony/var-dumper": "^6.2.3|^7.0"
             },
             "require-dev": {
-                "ext-mbstring": "*",
-                "phpunit/phpunit": "^9.3"
+                "livewire/livewire": "^2.11|^3.3.5",
+                "mockery/mockery": "^1.5.1",
+                "openai-php/client": "^0.8.1|^0.10",
+                "orchestra/testbench": "8.22.3|^9.0|^10.0",
+                "pestphp/pest": "^2.34|^3.7",
+                "phpstan/extension-installer": "^1.3.1",
+                "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0",
+                "phpstan/phpstan-phpunit": "^1.3.16|^2.0",
+                "vlucas/phpdotenv": "^5.5"
+            },
+            "suggest": {
+                "openai-php/client": "Require get solutions from OpenAI",
+                "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
+                "laravel": {
+                    "aliases": {
+                        "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare"
+                    },
+                    "providers": [
+                        "Spatie\\LaravelIgnition\\IgnitionServiceProvider"
+                    ]
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "files": [
+                    "src/helpers.php"
+                ],
+                "psr-4": {
+                    "Spatie\\LaravelIgnition\\": "src"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
-                {
-                    "name": "Volker Dusch",
-                    "email": "github@wallbash.com"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
-                },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
+                    "name": "Spatie",
+                    "email": "info@spatie.be",
+                    "role": "Developer"
                 }
             ],
-            "description": "Provides the functionality to export PHP variables for visualization",
-            "homepage": "https://www.github.com/sebastianbergmann/exporter",
+            "description": "A beautiful error page for Laravel applications.",
+            "homepage": "https://flareapp.io/ignition",
             "keywords": [
-                "export",
-                "exporter"
+                "error",
+                "flare",
+                "laravel",
+                "page"
             ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/exporter/issues",
-                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
+                "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction",
+                "forum": "https://twitter.com/flareappio",
+                "issues": "https://github.com/spatie/laravel-ignition/issues",
+                "source": "https://github.com/spatie/laravel-ignition"
             },
             "funding": [
                 {
-                    "url": "https://github.com/sebastianbergmann",
+                    "url": "https://github.com/spatie",
                     "type": "github"
                 }
             ],
-            "time": "2021-11-11T14:18:36+00:00"
+            "time": "2025-02-20T13:13:55+00:00"
         },
         {
-            "name": "sebastian/global-state",
-            "version": "5.0.5",
+            "name": "spatie/laravel-ray",
+            "version": "1.40.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/global-state.git",
-                "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
+                "url": "https://github.com/spatie/laravel-ray.git",
+                "reference": "2d01295c5a1306935450b01ff950955479096f5f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
-                "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+                "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/2d01295c5a1306935450b01ff950955479096f5f",
+                "reference": "2d01295c5a1306935450b01ff950955479096f5f",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
+                "composer-runtime-api": "^2.2",
+                "ext-json": "*",
+                "illuminate/contracts": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
+                "illuminate/database": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
+                "illuminate/queue": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
+                "illuminate/support": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
+                "php": "^7.4 || ^8.0",
+                "spatie/backtrace": "^1.7.1",
+                "spatie/ray": "^1.41.3",
+                "symfony/stopwatch": "4.2 || ^5.1 || ^6.0 || ^7.0",
+                "zbateson/mail-mime-parser": "^1.3.1 || ^2.0 || ^3.0"
             },
             "require-dev": {
-                "ext-dom": "*",
-                "phpunit/phpunit": "^9.3"
-            },
-            "suggest": {
-                "ext-uopz": "*"
+                "guzzlehttp/guzzle": "^7.3",
+                "laravel/framework": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
+                "orchestra/testbench-core": "^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0",
+                "pestphp/pest": "^1.22 || ^2.0 || ^3.0",
+                "phpstan/phpstan": "^1.10.57 || ^2.0.2",
+                "phpunit/phpunit": "^9.3 || ^10.1 || ^11.0.10",
+                "rector/rector": "^0.19.2 || ^1.0.1 || ^2.0.0",
+                "spatie/pest-plugin-snapshots": "^1.1 || ^2.0",
+                "symfony/var-dumper": "^4.2 || ^5.1 || ^6.0 || ^7.0.3"
             },
             "type": "library",
             "extra": {
+                "laravel": {
+                    "providers": [
+                        "Spatie\\LaravelRay\\RayServiceProvider"
+                    ]
+                },
                 "branch-alias": {
-                    "dev-master": "5.0-dev"
+                    "dev-main": "1.x-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-4": {
+                    "Spatie\\LaravelRay\\": "src"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Freek Van der Herten",
+                    "email": "freek@spatie.be",
+                    "homepage": "https://spatie.be",
+                    "role": "Developer"
                 }
             ],
-            "description": "Snapshotting of global state",
-            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "description": "Easily debug Laravel apps",
+            "homepage": "https://github.com/spatie/laravel-ray",
             "keywords": [
-                "global state"
+                "laravel-ray",
+                "spatie"
             ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/global-state/issues",
-                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
+                "issues": "https://github.com/spatie/laravel-ray/issues",
+                "source": "https://github.com/spatie/laravel-ray/tree/1.40.1"
             },
             "funding": [
                 {
-                    "url": "https://github.com/sebastianbergmann",
+                    "url": "https://github.com/sponsors/spatie",
                     "type": "github"
+                },
+                {
+                    "url": "https://spatie.be/open-source/support-us",
+                    "type": "other"
                 }
             ],
-            "time": "2022-02-14T08:28:10+00:00"
+            "time": "2025-03-14T13:11:12+00:00"
         },
         {
-            "name": "sebastian/lines-of-code",
-            "version": "1.0.3",
+            "name": "spatie/macroable",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/lines-of-code.git",
-                "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
+                "url": "https://github.com/spatie/macroable.git",
+                "reference": "ec2c320f932e730607aff8052c44183cf3ecb072"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
-                "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+                "url": "https://api.github.com/repos/spatie/macroable/zipball/ec2c320f932e730607aff8052c44183cf3ecb072",
+                "reference": "ec2c320f932e730607aff8052c44183cf3ecb072",
                 "shasum": ""
             },
             "require": {
-                "nikic/php-parser": "^4.6",
-                "php": ">=7.3"
+                "php": "^8.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "phpunit/phpunit": "^8.0|^9.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-4": {
+                    "Spatie\\Macroable\\": "src"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "name": "Freek Van der Herten",
+                    "email": "freek@spatie.be",
+                    "homepage": "https://spatie.be",
+                    "role": "Developer"
                 }
             ],
-            "description": "Library for counting the lines of code in PHP source code",
-            "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+            "description": "A trait to dynamically add methods to a class",
+            "homepage": "https://github.com/spatie/macroable",
+            "keywords": [
+                "macroable",
+                "spatie"
+            ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
-                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+                "issues": "https://github.com/spatie/macroable/issues",
+                "source": "https://github.com/spatie/macroable/tree/2.0.0"
             },
-            "funding": [
-                {
-                    "url": "https://github.com/sebastianbergmann",
-                    "type": "github"
-                }
-            ],
-            "time": "2020-11-28T06:42:11+00:00"
+            "time": "2021-03-26T22:39:02+00:00"
         },
         {
-            "name": "sebastian/object-enumerator",
-            "version": "4.0.4",
+            "name": "spatie/ray",
+            "version": "1.41.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
-                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+                "url": "https://github.com/spatie/ray.git",
+                "reference": "9d078f04ffa32ad543a20716844ec343fdd7d856"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
-                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+                "url": "https://api.github.com/repos/spatie/ray/zipball/9d078f04ffa32ad543a20716844ec343fdd7d856",
+                "reference": "9d078f04ffa32ad543a20716844ec343fdd7d856",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3",
-                "sebastian/object-reflector": "^2.0",
-                "sebastian/recursion-context": "^4.0"
+                "ext-curl": "*",
+                "ext-json": "*",
+                "php": "^7.4 || ^8.0",
+                "ramsey/uuid": "^3.0 || ^4.1",
+                "spatie/backtrace": "^1.7.1",
+                "spatie/macroable": "^1.0 || ^2.0",
+                "symfony/stopwatch": "^4.2 || ^5.1 || ^6.0 || ^7.0",
+                "symfony/var-dumper": "^4.2 || ^5.1 || ^6.0 || ^7.0.3"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "illuminate/support": "^7.20 || ^8.18 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
+                "nesbot/carbon": "^2.63 || ^3.8.4",
+                "pestphp/pest": "^1.22",
+                "phpstan/phpstan": "^1.10.57 || ^2.0.3",
+                "phpunit/phpunit": "^9.5",
+                "rector/rector": "^0.19.2 || ^1.0.1 || ^2.0.0",
+                "spatie/phpunit-snapshot-assertions": "^4.2",
+                "spatie/test-time": "^1.2"
             },
+            "bin": [
+                "bin/remove-ray.sh"
+            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.0-dev"
+                    "dev-main": "1.x-dev"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "files": [
+                    "src/helpers.php"
+                ],
+                "psr-4": {
+                    "Spatie\\Ray\\": "src"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Freek Van der Herten",
+                    "email": "freek@spatie.be",
+                    "homepage": "https://spatie.be",
+                    "role": "Developer"
                 }
             ],
-            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
-            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "description": "Debug with Ray to fix problems faster",
+            "homepage": "https://github.com/spatie/ray",
+            "keywords": [
+                "ray",
+                "spatie"
+            ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
-                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+                "issues": "https://github.com/spatie/ray/issues",
+                "source": "https://github.com/spatie/ray/tree/1.41.5"
             },
             "funding": [
                 {
-                    "url": "https://github.com/sebastianbergmann",
+                    "url": "https://github.com/sponsors/spatie",
                     "type": "github"
+                },
+                {
+                    "url": "https://spatie.be/open-source/support-us",
+                    "type": "other"
                 }
             ],
-            "time": "2020-10-26T13:12:34+00:00"
+            "time": "2025-02-14T12:51:43+00:00"
         },
         {
-            "name": "sebastian/object-reflector",
-            "version": "2.0.4",
+            "name": "symfony/polyfill-iconv",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/object-reflector.git",
-                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+                "url": "https://github.com/symfony/polyfill-iconv.git",
+                "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
-                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/48becf00c920479ca2e910c22a5a39e5d47ca956",
+                "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=7.2"
             },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
+            "provide": {
+                "ext-iconv": "*"
+            },
+            "suggest": {
+                "ext-iconv": "For best performance"
             },
             "type": "library",
             "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Iconv\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Allows reflection of object attributes, including inherited and non-public ones",
-            "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+            "description": "Symfony polyfill for the Iconv extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "iconv",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
-                "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+                "source": "https://github.com/symfony/polyfill-iconv/tree/v1.31.0"
             },
             "funding": [
                 {
-                    "url": "https://github.com/sebastianbergmann",
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
                     "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "time": "2020-10-26T13:14:26+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
-            "name": "sebastian/recursion-context",
-            "version": "4.0.4",
+            "name": "symfony/stopwatch",
+            "version": "v7.2.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
-                "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd",
+                "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.3"
+                "php": ">=8.2",
+                "symfony/service-contracts": "^2.5|^3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
             "autoload": {
-                "classmap": [
-                    "src/"
+                "psr-4": {
+                    "Symfony\\Component\\Stopwatch\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Provides functionality to recursively process PHP variables",
-            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "description": "Provides a way to profile code",
+            "homepage": "https://symfony.com",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
-                "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
+                "source": "https://github.com/symfony/stopwatch/tree/v7.2.4"
             },
             "funding": [
                 {
-                    "url": "https://github.com/sebastianbergmann",
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
                     "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "time": "2020-10-26T13:17:30+00:00"
+            "time": "2025-02-24T10:49:57+00:00"
         },
         {
-            "name": "sebastian/resource-operations",
-            "version": "3.0.3",
+            "name": "theseer/tokenizer",
+            "version": "1.2.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/resource-operations.git",
-                "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+                "url": "https://github.com/theseer/tokenizer.git",
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
-                "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.0"
+                "ext-dom": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": "^7.2 || ^8.0"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
             "autoload": {
                 "classmap": [
                     "src/"
@@ -9992,192 +11028,241 @@
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
                 }
             ],
-            "description": "Provides a list of PHP built-in functions that operate on resources",
-            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
             "support": {
-                "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
-                "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+                "issues": "https://github.com/theseer/tokenizer/issues",
+                "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
             },
             "funding": [
                 {
-                    "url": "https://github.com/sebastianbergmann",
+                    "url": "https://github.com/theseer",
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T06:45:17+00:00"
+            "time": "2024-03-03T12:36:25+00:00"
         },
         {
-            "name": "sebastian/type",
-            "version": "3.0.0",
+            "name": "zbateson/mail-mime-parser",
+            "version": "3.0.3",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/type.git",
-                "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
+                "url": "https://github.com/zbateson/mail-mime-parser.git",
+                "reference": "e0d4423fe27850c9dd301190767dbc421acc2f19"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
-                "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
+                "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/e0d4423fe27850c9dd301190767dbc421acc2f19",
+                "reference": "e0d4423fe27850c9dd301190767dbc421acc2f19",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "guzzlehttp/psr7": "^2.5",
+                "php": ">=8.0",
+                "php-di/php-di": "^6.0|^7.0",
+                "psr/log": "^1|^2|^3",
+                "zbateson/mb-wrapper": "^2.0",
+                "zbateson/stream-decorators": "^2.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^9.5"
+                "friendsofphp/php-cs-fixer": "*",
+                "monolog/monolog": "^2|^3",
+                "phpstan/phpstan": "*",
+                "phpunit/phpunit": "^9.6"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
+            "suggest": {
+                "ext-iconv": "For best support/performance",
+                "ext-mbstring": "For best support/performance"
             },
+            "type": "library",
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-4": {
+                    "ZBateson\\MailMimeParser\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "BSD-2-Clause"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "name": "Zaahid Bateson"
+                },
+                {
+                    "name": "Contributors",
+                    "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors"
                 }
             ],
-            "description": "Collection of value objects that represent the types of the PHP type system",
-            "homepage": "https://github.com/sebastianbergmann/type",
+            "description": "MIME email message parser",
+            "homepage": "https://mail-mime-parser.org",
+            "keywords": [
+                "MimeMailParser",
+                "email",
+                "mail",
+                "mailparse",
+                "mime",
+                "mimeparse",
+                "parser",
+                "php-imap"
+            ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/type/issues",
-                "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
+                "docs": "https://mail-mime-parser.org/#usage-guide",
+                "issues": "https://github.com/zbateson/mail-mime-parser/issues",
+                "source": "https://github.com/zbateson/mail-mime-parser"
             },
             "funding": [
                 {
-                    "url": "https://github.com/sebastianbergmann",
+                    "url": "https://github.com/zbateson",
                     "type": "github"
                 }
             ],
-            "time": "2022-03-15T09:54:48+00:00"
+            "time": "2024-08-10T18:44:09+00:00"
         },
         {
-            "name": "sebastian/version",
-            "version": "3.0.2",
+            "name": "zbateson/mb-wrapper",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "c6c1022351a901512170118436c764e473f6de8c"
+                "url": "https://github.com/zbateson/mb-wrapper.git",
+                "reference": "50a14c0c9537f978a61cde9fdc192a0267cc9cff"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
-                "reference": "c6c1022351a901512170118436c764e473f6de8c",
+                "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/50a14c0c9537f978a61cde9fdc192a0267cc9cff",
+                "reference": "50a14c0c9537f978a61cde9fdc192a0267cc9cff",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.3"
+                "php": ">=8.0",
+                "symfony/polyfill-iconv": "^1.9",
+                "symfony/polyfill-mbstring": "^1.9"
             },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "*",
+                "phpstan/phpstan": "*",
+                "phpunit/phpunit": "^9.6|^10.0"
             },
+            "suggest": {
+                "ext-iconv": "For best support/performance",
+                "ext-mbstring": "For best support/performance"
+            },
+            "type": "library",
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-4": {
+                    "ZBateson\\MbWrapper\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "BSD-2-Clause"
             ],
             "authors": [
                 {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "name": "Zaahid Bateson"
                 }
             ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
+            "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation",
+            "keywords": [
+                "charset",
+                "encoding",
+                "http",
+                "iconv",
+                "mail",
+                "mb",
+                "mb_convert_encoding",
+                "mbstring",
+                "mime",
+                "multibyte",
+                "string"
+            ],
             "support": {
-                "issues": "https://github.com/sebastianbergmann/version/issues",
-                "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+                "issues": "https://github.com/zbateson/mb-wrapper/issues",
+                "source": "https://github.com/zbateson/mb-wrapper/tree/2.0.1"
             },
             "funding": [
                 {
-                    "url": "https://github.com/sebastianbergmann",
+                    "url": "https://github.com/zbateson",
                     "type": "github"
                 }
             ],
-            "time": "2020-09-28T06:39:44+00:00"
+            "time": "2024-12-20T22:05:33+00:00"
         },
         {
-            "name": "theseer/tokenizer",
-            "version": "1.2.1",
+            "name": "zbateson/stream-decorators",
+            "version": "2.1.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
+                "url": "https://github.com/zbateson/stream-decorators.git",
+                "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
-                "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
+                "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/32a2a62fb0f26313395c996ebd658d33c3f9c4e5",
+                "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5",
                 "shasum": ""
             },
             "require": {
-                "ext-dom": "*",
-                "ext-tokenizer": "*",
-                "ext-xmlwriter": "*",
-                "php": "^7.2 || ^8.0"
+                "guzzlehttp/psr7": "^2.5",
+                "php": ">=8.0",
+                "zbateson/mb-wrapper": "^2.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "*",
+                "phpstan/phpstan": "*",
+                "phpunit/phpunit": "^9.6|^10.0"
             },
             "type": "library",
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
+                "psr-4": {
+                    "ZBateson\\StreamDecorators\\": "src/"
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "BSD-2-Clause"
             ],
             "authors": [
                 {
-                    "name": "Arne Blankerts",
-                    "email": "arne@blankerts.de",
-                    "role": "Developer"
+                    "name": "Zaahid Bateson"
                 }
             ],
-            "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+            "description": "PHP psr7 stream decorators for mime message part streams",
+            "keywords": [
+                "base64",
+                "charset",
+                "decorators",
+                "mail",
+                "mime",
+                "psr7",
+                "quoted-printable",
+                "stream",
+                "uuencode"
+            ],
             "support": {
-                "issues": "https://github.com/theseer/tokenizer/issues",
-                "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
+                "issues": "https://github.com/zbateson/stream-decorators/issues",
+                "source": "https://github.com/zbateson/stream-decorators/tree/2.1.1"
             },
             "funding": [
                 {
-                    "url": "https://github.com/theseer",
+                    "url": "https://github.com/zbateson",
                     "type": "github"
                 }
             ],
-            "time": "2021-07-28T10:34:58+00:00"
+            "time": "2024-04-29T21:42:39+00:00"
         }
     ],
     "aliases": [],
-    "minimum-stability": "dev",
-    "stability-flags": [],
+    "minimum-stability": "stable",
+    "stability-flags": {},
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
-        "php": "^7.3 || ^8.0"
+        "php": "^7.4 || ^8.0"
     },
-    "platform-dev": [],
-    "plugin-api-version": "2.3.0"
+    "platform-dev": {},
+    "plugin-api-version": "2.6.0"
 }
diff --git a/config/statamic/amp.php b/config/statamic/amp.php
deleted file mode 100644
index 9c110bafc..000000000
--- a/config/statamic/amp.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-return [
-
-    'enabled' => false,
-    'route' => 'amp',
-
-];
diff --git a/config/statamic/antlers.php b/config/statamic/antlers.php
new file mode 100644
index 000000000..9dfa455e4
--- /dev/null
+++ b/config/statamic/antlers.php
@@ -0,0 +1,60 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Version
+    |--------------------------------------------------------------------------
+    |
+    | The desired Antlers language version to utilize. Possible values are:
+    |   - regex: Utilize pre-3.3 Antlers. Appropriate for existing sites.
+    |   - runtime: Utilizes >= 3.3 Antlers, recommended for new sites.
+    |
+    */
+
+    'version' => 'runtime',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Guarded Variables
+    |--------------------------------------------------------------------------
+    |
+    | Any variable pattern that appears in this list will not be allowed
+    | in any Antlers template, including any user-supplied values.
+    |
+    */
+
+    'guardedVariables' => [
+        'config.app.key',
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Guarded Tags
+    |--------------------------------------------------------------------------
+    |
+    | Any tag pattern that appears in this list will not be allowed
+    | in any Antlers template, including any user-supplied values.
+    |
+    */
+
+    'guardedTags' => [
+
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Guarded Modifiers
+    |--------------------------------------------------------------------------
+    |
+    | Any modifier pattern that appears in this list will not be allowed
+    | in any Antlers template, including any user-supplied values.
+    |
+    */
+
+    'guardedModifiers' => [
+
+    ],
+
+];
diff --git a/config/statamic/autosave.php b/config/statamic/autosave.php
new file mode 100644
index 000000000..5f7a0eff7
--- /dev/null
+++ b/config/statamic/autosave.php
@@ -0,0 +1,36 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Enable autosave
+    |--------------------------------------------------------------------------
+    |
+    | THIS IS A EXPERIMENTAL FEATURE. Things may go wrong.
+    |
+    | Set to true to enable autosave. You must also enable autosave
+    | manually in every collection in order for it to work.
+    |
+    | For example, inside `content/collections/pages.yaml`, add
+    | `autosave: 5000` for a 5s interval or `autosave: true`
+    | to use the default interval as defined below.
+    |
+    */
+
+    'enabled' => false,
+
+    /*
+    |--------------------------------------------------------------------------
+    | Default autosave interval
+    |--------------------------------------------------------------------------
+    |
+    | The default value may be set here and will apply to all collections.
+    | However, it is also possible to manually adjust the value in the
+    | each collection's config file. By default, this is set to 5s.
+    |
+    */
+
+    'interval' => 5000,
+
+];
diff --git a/config/statamic/editions.php b/config/statamic/editions.php
index e4839d4c3..cad0faaaa 100644
--- a/config/statamic/editions.php
+++ b/config/statamic/editions.php
@@ -2,7 +2,7 @@
 
 return [
 
-    'pro' => false,
+    'pro' => true,
 
     'addons' => [
         //
diff --git a/config/statamic/git.php b/config/statamic/git.php
index c50590629..f0c7c7114 100644
--- a/config/statamic/git.php
+++ b/config/statamic/git.php
@@ -83,6 +83,7 @@
         resource_path('fieldsets'),
         resource_path('forms'),
         resource_path('users'),
+        resource_path('preferences.yaml'),
         storage_path('forms'),
     ],
 
diff --git a/config/statamic/markdown.php b/config/statamic/markdown.php
new file mode 100644
index 000000000..8a4112948
--- /dev/null
+++ b/config/statamic/markdown.php
@@ -0,0 +1,28 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Markdown Parser Configurations
+    |--------------------------------------------------------------------------
+    |
+    | Here you may define the configuration arrays for each markdown parser.
+    | You may use the base CommonMark options as well as any extensions'
+    | options here. The available options are in the CommonMark docs.
+    |
+    | https://statamic.dev/extending/markdown#configuration
+    |
+    */
+
+    'configs' => [
+
+        'default' => [
+            // 'heading_permalink' => [
+            //     'symbol' => '#',
+            // ],
+        ],
+
+    ],
+
+];
diff --git a/config/statamic/search.php b/config/statamic/search.php
index 5234a37f7..75f06cfa0 100644
--- a/config/statamic/search.php
+++ b/config/statamic/search.php
@@ -26,9 +26,44 @@
     'indexes' => [
 
         'default' => [
-            'driver' => 'local',
-            'searchables' => ['collection:*', 'taxonomy:*'],
-            'fields' => ['title'],
+            'driver' => env('SEARCH_DRIVER', 'meilisearch'),
+            'searchables' => ['docs:*'],
+            'fields' => [
+                'title',
+                'search_title',
+                'content',
+                'origin_title',
+                'search_content',
+                'additional_context',
+                'hierarchy_lvl0',
+                'hierarchy_lvl1',
+                'url',
+            ],
+            'settings' => [
+                'rankingRules' => [
+                    'words',
+                    'typo',
+                    'proximity',
+                    'attribute',
+                    'exactness',
+                    'origin_title:desc',
+                    'hierarchy_lvl0:asc',
+                ],
+                'searchableAttributes' => [
+                    'additional_context',
+                    'hierarchy_lvl0',
+                    'title',
+                    'origin_title',
+                    'search_title',
+                    'search_content',
+                    'hierarchy_lvl1',
+                    'url',
+                ],
+            ],
+            'content_retriever' => App\Search\RequestContentRetriever::class,
+            'document_transformers' => [
+                App\Search\DocTransformer::class,
+            ],
         ],
 
         // 'blog' => [
@@ -62,7 +97,12 @@
                 'secret' => env('ALGOLIA_SECRET', ''),
             ],
         ],
-
+        'meilisearch' => [
+            'credentials' => [
+                'url' => env('MEILISEARCH_HOST', 'http://localhost:7700'),
+                'secret' => env('MEILISEARCH_KEY', ''),
+            ],
+        ],
     ],
 
     /*
@@ -76,7 +116,7 @@
     */
 
     'defaults' => [
-        'fields' => ['title']
-    ]
+        'fields' => ['title'],
+    ],
 
 ];
diff --git a/config/statamic/sites.php b/config/statamic/sites.php
deleted file mode 100644
index ab257b80e..000000000
--- a/config/statamic/sites.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | Default Site
-    |--------------------------------------------------------------------------
-    |
-    | The default site will hold the majority of the content on your website.
-    | Additional sites with unlocalized content will fall back to the data
-    | defined in the default. You should specify a site handle below.
-    |
-    */
-
-    'default' => 'default',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Sites
-    |--------------------------------------------------------------------------
-    |
-    | Each site should have root URL that is either relative or absolute. Sites
-    | are typically used for localization (eg. English/French) but may also
-    | be used for related content (eg. different franchise locations).
-    |
-    */
-
-    'sites' => [
-
-        'default' => [
-            'name' => config('app.name'),
-            'locale' => 'en_US',
-            'url' => '/',
-        ]
-
-    ]
-];
\ No newline at end of file
diff --git a/config/statamic/system.php b/config/statamic/system.php
index c9392c6af..c3e0437e7 100644
--- a/config/statamic/system.php
+++ b/config/statamic/system.php
@@ -16,6 +16,22 @@
 
     'license_key' => env('STATAMIC_LICENSE_KEY'),
 
+    /*
+    |--------------------------------------------------------------------------
+    | Enable Multi-site
+    |--------------------------------------------------------------------------
+    |
+    | Whether Statamic's multi-site functionality should be enabled. It is
+    | assumed Statamic Pro is also enabled. To get started, you can run
+    | the `php please multisite` command to update your content file
+    | structure, after which you can manage your sites in the CP.
+    |
+    | https://statamic.dev/multi-site
+    |
+    */
+
+    'multisite' => false,
+
     /*
     |--------------------------------------------------------------------------
     | Default Addons Paths
diff --git a/content/collections/adverts.yaml b/content/collections/adverts.yaml
new file mode 100644
index 000000000..f42ad8bda
--- /dev/null
+++ b/content/collections/adverts.yaml
@@ -0,0 +1,13 @@
+title: Adverts
+template: default
+layout: layout
+revisions: false
+sort_dir: asc
+date_behavior:
+  past: public
+  future: private
+preview_targets:
+  -
+    label: Entry
+    url: '{permalink}'
+    refresh: true
diff --git a/content/collections/adverts/seo-pro.md b/content/collections/adverts/seo-pro.md
new file mode 100644
index 000000000..0fed42a68
--- /dev/null
+++ b/content/collections/adverts/seo-pro.md
@@ -0,0 +1,10 @@
+---
+id: 972d7159-e76a-4817-a441-65d965d8c794
+blueprint: advert
+title: 'SEO Pro'
+image: adverts/seo-pro.jpg
+heading: 'A Statamic SEO Addon'
+text: 'Optimize your website for search engines with a complete SEO addon.'
+link_text: 'Get SEO Pro'
+link: 'https://statamic.com/addons/statamic/seo-pro'
+---
diff --git a/content/collections/adverts/title.md b/content/collections/adverts/title.md
new file mode 100644
index 000000000..b34cf71e7
--- /dev/null
+++ b/content/collections/adverts/title.md
@@ -0,0 +1,10 @@
+---
+id: 86d73269-3670-4813-915e-3bf1538581f1
+blueprint: advert
+title: 'Photographer Starter Kit'
+heading: 'A Statamic Starter Kit'
+image: adverts/photographer.jpg
+text: 'An elegant gallery site for professional photographers.'
+link_text: 'Start with this kit'
+link: 'https://statamic.com/starter-kits/rad-pack/photographer'
+---
diff --git a/content/collections/docs/3-4-to-4-0.md b/content/collections/docs/3-4-to-4-0.md
new file mode 100644
index 000000000..f5c50eedf
--- /dev/null
+++ b/content/collections/docs/3-4-to-4-0.md
@@ -0,0 +1,252 @@
+---
+id: e077f513-45c1-4eff-ba87-210340dd6f54
+blueprint: page
+title: 'Upgrade from 3.4 to 4.0'
+intro: 'A guide for upgrading from 3.4 to 4.0. For most sites (those running Laravel > 8), the process will take less than 5 minutes.'
+template: page
+---
+## Overview
+
+First read through this guide to see if there's anything that you might need to adjust. While there are many items on this page, a majority of them only apply to addons or custom code. We've noted who each item would apply to so you can more easily scan through the changes.
+
+### Upgrade using Composer
+
+In your `composer.json`, change the `statamic/cms` requirement:
+
+```json
+"statamic/cms": "3.4.*" // [tl!--]
+"statamic/cms": "^4.0" // [tl!++]
+```
+
+Then run:
+
+``` shell
+composer update statamic/cms --with-dependencies
+```
+
+## High impact changes
+
+### PHP and Laravel support
+**Affects apps using PHP < 8 or Laravel < 9.**
+
+- The minimum version of PHP is now 8.0.
+- The minimum version of Laravel is now 9.
+
+
+### AMP has been removed
+**Affects apps using the AMP feature.**
+
+AMP is considered a dead project, and no longer provides SEO benefits, so the entire AMP feature has been removed.
+
+
+### API filters are opt-in
+**Affects apps using the GraphQL or REST API features.**
+
+All filters are disabled by default now for increased security. You must opt into each one you want made available.
+
+```php
+// config/statamic/api.php or config/statamic/graphql.php
+
+'resources' => [
+    'collections' => true, // [tl!--]
+    'collections' => [ // [tl! ++:start]
+        'blog' => [
+            'allowed_filters' => ['title', 'slug']
+        ]
+    ] // [tl! ++:end]
+]
+```
+
+If you try to use a filter that has not been explicitly allowed, it will result in a validation error.
+
+## Medium impact changes
+
+### Route namespaces have been removed
+**Affects apps or addons using PHP-based routes.**
+
+When using the following various methods of adding custom routes, previously Statamic would assume a namespace. In 4.0, the namespace is removed.
+
+Standard Laravel routes that you've added to your app routes files are not affected.
+
+- `Statamic::pushCpRoutes()`
+- `Statamic::pushWebRoutes()`
+- `Statamic::pushActionRoutes()`
+- Addon route files
+- Addon service provider `$this->registerCpRoutes()`
+- Addon service provider `$this->registerWebRoutes()`
+- Addon service provider `$this->registerActionRoutes()`
+
+For example, in an addon's `cp.php` routes file:
+
+```php
+Route::get('example', 'ExampleController@foo');
+// v3 = Your\Addon\Http\Controllers\ExampleController@foo
+// v4 = ExampleController@foo
+```
+
+In an addon, if you _want_ a namespace, you can add one with a property:
+
+```php
+protected $routeNamespace = 'Your\Addon\Http\Controllers';
+```
+
+However, we recommend using the class reference syntax:
+
+```php
+use Your\Addon\Http\Controllers\ExampleController;
+
+Route::get('example', [ExampleController::class, 'foo']);
+```
+
+
+### Str::replace arguments changed
+**Affects apps or addons using `Statamic\Support\Str::replace()`.**
+
+The `Statamic\Support\Str::replace()` method changed the argument order. The `$subject` argument moved from first to last.
+
+```php
+Str::replace($subject, $search, $replace); // [tl! --]
+Str::replace($search, $replace, $subject); // [tl! ++]
+```
+
+### Tailwind 3
+**Affects apps or addons with custom CP components.**
+
+The Control Panel has been upgraded from Tailwind 1 to 3. The sizing scale has been adjusted. Custom components may render unexpectedly and may need to have classes renamed.
+
+### Entry date behavior
+**Affects apps or addons with custom code.**
+
+When using the `date` method on an entry, an exception will be thrown if the entry is not in a dated collection.
+
+Because of this, if you are creating an entry instance, you should set the collection _before_ the date.
+
+```php
+Entry::make()
+    ->date($date) // [tl! --]
+    ->collection($collection)
+    ->date($date) // [tl! ++]
+    ->set('foo', 'bar');
+```
+
+## Low impact changes
+
+### Control Panel Composer actions have been removed
+**Affects users who are used to updating Statamic and addons using the Control Panel.**
+
+The ability to update Statamic, as well as installing and updating addons through the Control Panel has been removed. You will now need to use Composer on the command line.
+
+The Control Panel sections remain, however the buttons will now give you the Composer commands rather than running them for you.
+
+### jQuery removed
+**Affects apps or addons with custom CP components using jQuery.**
+jQuery and jQuery UI were seldom used, and have been removed to lower the CP's overhead. We suggest replacing with Vue or Alpine equivalents.
+
+### vue-reactive-provide removed
+**Affects custom CP Vue components using the `reactiveProvide` property.**
+
+The `vue-reactive-provide` package was removed. We suggest using providing an observed object.
+
+```js
+reactiveProvide: { // [tl! --:start]
+    name: 'foo',
+    include: ['alfa', 'bravo']
+} // [tl! --:end]
+provide: { // [tl! ++:start]
+    foo: this.foo
+},
+data() {
+    foo: this.makeProvidedFoo();
+},
+methods: {
+    makeProvidedFoo() {
+        const foo = {};
+        Object.defineProperties(grid, {
+            alfa: { get: () => this.alfa },
+            bravo: { get: () => this.bravo },
+        });
+        return foo;
+    }
+} // [tl! ++:end]
+```
+
+### Flysystem v1 support dropped
+**Affects apps or addons explicitly using Flysystem v1 code.**
+
+Support for `league/flysystem` v1 has been removed. Only v3 is supported.
+
+### CommonMark v1 support dropped
+**Affects apps or addons with custom CommonMark v1 extensions.**
+
+Support for `league/commonmark` v1 has been removed. Only v2 is supported.
+
+### Typography CSS styling
+**Affects apps or addons with custom CP components using the `clean-content` CSS class.**
+
+The custom `.clean-content` css class in the Control Panel has been replaced by `.prose` from Tailwind's typography plugin.
+
+### FontAwesome and Entypo fonts have been removed
+**Affects apps or addons with custom CP components using these fonts.**
+
+Both icon fonts have been removed, and replaced with Streamline SVG icons.
+
+### SortableList delay has been reduced to zero
+**Affects apps or addons with custom CP components using the `SortableList` component.**
+
+The delay was reduced from 200 to 0. The prop still exists, so you can manually bring it back.
+
+```html
+<sortable-list> <!-- [tl!--] -->
+<sortable-list :delay="200"> <!-- [tl!++] -->
+```
+
+However, we suggest using a distance over delay in most cases.
+
+
+```html
+<sortable-list :distance="10"> <!-- [tl!++] -->
+```
+
+
+### Panes have been removed
+**Affects apps or addons with custom CP components using the `Pane` component.**
+
+The "pane" feature has been removed. You can replace it with a narrow stack.
+
+```html
+<pane> <!-- [tl!--] -->
+<stack narrow> <!-- [tl!++] -->
+  Some content
+</pane> <!-- [tl!--] -->
+</stack> <!-- [tl!++] -->
+```
+
+
+### Color fieldtype has been simplified
+**Affects apps using the `color` fieldtype in their blueprints.**
+
+The color fieldtype now only supports hex values with no alpha channel.
+
+
+### PortalVue and vue-js-modal components have been renamed.
+**Affects apps or addons with custom CP components using the `<portal>` or `<vue-modal>` components.**
+
+Statamic v4 introduces our own `<portal>` component, so to prevent conflicts, the underlying PortalVue package's component has been renamed to `<v-portal>`.
+
+```html
+<portal><!-- [tl!--]-->
+<v-portal><!-- [tl!++]-->
+  ...
+</portal><!-- [tl!--]-->
+</v-portal><!-- [tl!++]-->
+```
+
+For consistency, we renamed the underlying modal component from `<vue-modal>` to `<v-modal>`.
+
+```html
+<vue-modal><!-- [tl!--]-->
+<v-modal><!-- [tl!++]-->
+  ...
+</vue-modal><!-- [tl!--]-->
+</v-modal><!-- [tl!++]-->
+```
diff --git a/content/collections/docs/4-to-5.md b/content/collections/docs/4-to-5.md
new file mode 100644
index 000000000..9ccbb09e1
--- /dev/null
+++ b/content/collections/docs/4-to-5.md
@@ -0,0 +1,488 @@
+---
+id: 91e8f239-2f99-47bc-b4dd-3518cd3e36ae
+blueprint: page
+title: 'Upgrade from 4 to 5'
+intro: 'A guide for upgrading from 4 to 5. For most sites (those running Laravel > 9), the process will take less than 5 minutes.'
+template: page
+---
+## Overview
+
+First read through this guide to see if there's anything that you might need to adjust. While there are many items on this page, a majority of them only apply to addons or custom code. We've noted who each item would apply to so you can more easily scan through the changes.
+
+### Upgrade using Composer
+
+In your `composer.json`, change the `statamic/cms` requirement:
+
+```json
+"statamic/cms": "^4.0" // [tl!--]
+"statamic/cms": "^5.0" // [tl!++]
+```
+
+Then run:
+
+``` shell
+composer update statamic/cms --with-dependencies
+```
+
+## High impact changes
+
+### PHP and Laravel support
+**Affects apps using PHP < 8.1 or Laravel < 10.**
+
+- The minimum version of PHP is now 8.1.
+- The minimum version of Laravel is now 10.
+
+We highly recommend upgrading all the way to Laravel 11 and PHP 8.3.
+
+:::tip
+If you want to (semi-)automate the Laravel upgrade process, we recommend using [Laravel Shift](https://laravelshift.com/discounts/statamic-1983) (use that link for a special 19.83% discount 🤘).
+:::
+
+### Site configuration changes
+**Affects everyone.**
+
+_Note that Statamic will attempt to migrate this for you automatically during the upgrade._
+
+The site config has been moved from `config/statamic/sites.php` into `resources/sites.yaml`. This allows you to manage your sites from the Control Panel.
+
+```php
+// config/statamic/sites.php
+return [ // [tl! --:start]
+  'sites' => [
+    'default' => [
+      'name' => 'First Site',
+      'url' => config('app.url'),
+      'locale' => 'en_US',
+    ],
+    'two' => [
+      'name' => 'Second Site',
+      'url' => config('app.url').'/fr/',
+      'locale' => 'fr_FR',
+    ]
+  ]
+]; // [tl! --:end]
+```
+
+```yaml
+# resources/sites.yaml
+default: # [tl! ++:start]
+  name: First Site
+  url: '{{ config:app:url }}'
+  locale: en_US
+two:
+  name: Second Site
+  url: '{{ config:app:url }}/fr/'
+  locale: fr_FR # [tl! ++:end]
+```
+
+_**Note:** Text direction is now also automatic, [based on each site's language](/multi-site#text-direction). You do not need to migrate `direction` values to your `resources/sites.yaml`._
+
+There is now also a new `multisite` boolean in `config/statamic/system.php`. Previously, the multi-site feature would be considered "enabled" as soon as you configured a second site. Now there is an explicit option to enable it.
+
+This should be set to `true` if you previously had 2 or more sites configured.
+
+```php
+// config/statamic/system.php
+'multisite' => true,
+```
+
+## Medium impact changes
+
+### Blueprint default value usage
+**Affects apps that have `default` defined in their blueprints or fieldsets.**
+
+In v4, setting a `default` value for a field would only make it show up in the respective publish forms. In v5, these values will actually be used where appropriate, such as within front-end templates.
+
+```yaml
+handle: myfield
+field:
+  type: text
+  default: my default value
+```
+```yaml
+title: My Entry
+# the "myfield" is missing
+```
+```antlers
+{{ if myfield }}yes{{ else }}no{{ /if }}: {{ myfield }}
+
+v4 outputs: "no: " {{# [tl! --] #}}
+v5 outputs: "yes: my default value"  {{# [tl! ++] #}}
+```
+
+In most cases, this is what you would have expected to happen anyway.
+
+### Site methods
+**Affects apps or addons using the `Site::hasMultiple()` method.**
+
+Continuing from the multi-site configuration changes above, there are now two separate methods for determining multi-site state.
+
+- The new `Site::multiEnabled()` method will return true if the `multisite` boolean in `system.php` is enabled.
+- The existing `Site::hasMultiple()` method will return `true` if at least two sites are configured.
+
+You should decide whether each existing usage of `Site::hasMultiple()` should imply that the feature is enabled entirely, or if you need to actually count the number of sites.
+
+### Laravel Helpers package has been removed
+**Affects apps or addons relying on methods from that package in custom code.**
+
+The `laravel/helpers` package provided support for the older global-style string/array/misc functions like `array_get`, `str_contains`, `snake_case`, `ends_with`, etc. You will now need to either require this package yourself, or update to use the underlying methods.
+
+For example:
+
+```php
+namespace App\Example;
+
+use Statamic\Support\Arr; // [tl! ++,**]
+use Statamic\Support\Str; // [tl! ++,**]
+
+class Example
+{
+  function example()
+  {
+    array_get($arr, $key); // [tl! --,**]
+    Arr::get($arr, $key); // [tl! ++,**]
+
+    str_start($str, $prefix); // [tl! --,**]
+    Str::start($str, $prefix); // [tl! ++,**]
+
+    ends_with($str, $needle); // [tl! --,**]
+    Str::endsWith($str, $needle); // [tl! ++,**]
+  }
+}
+```
+
+We recommend making the code changes. However, if you just want to require the package:
+
+```sh
+composer require laravel/helpers
+```
+
+### Statamic will now use your app's default pagination view
+**Affects apps using the `auto_links` pagination variable in templates.**
+
+Previously, Statamic used the `pagination::default` view to rendering pagination links. In Statamic 5, it will use your app's default pagination view, typically `pagination::tailwind`.
+
+To avoid making code changes, you may wish to change the default view back to `pagination::default`:
+
+```php
+// app/Providers/AppServiceProvider.php
+
+use Illuminate\Pagination\Paginator; // [tl! ++]
+
+public function boot(): void
+{
+    Paginator::defaultView('pagination::default'); // [tl! ++]
+}
+```
+
+### Updated `please` file for Laravel 11
+**Affects apps upgrading to Laravel 11 and the new application skeleton (including all upgrades via Laravel Shift).**
+
+Previously, our `please` command line utility assumed an `app/Console/Kernel.php` file existed in your application. However, with the introduction of Laravel 11, this file is no longer included with the new application structure.
+
+When upgrading apps to Laravel 11 with the new application skeleton, you'll need to update the `please` file in your app's root directory:
+
+```php
+#!/usr/bin/env php
+<?php
+
+use Symfony\Component\Console\Input\ArgvInput;
+
+define('LARAVEL_START', microtime(true));
+
+// Register the Composer autoloader...
+require __DIR__.'/vendor/autoload.php';
+
+// Bootstrap Laravel...
+$app = require_once __DIR__.'/bootstrap/app.php';
+
+// Rebind the kernel...
+Statamic\Console\Please\Application::rebindKernel();
+
+// Handle the command...
+$status = $app->handleCommand(new ArgvInput);
+
+exit($status);
+```
+
+## Low impact changes
+
+### Regex Antlers Parser has been removed
+**Affects apps that are still using the `regex` parser.**
+
+The new Antlers parser was introduced in 3.3 and was made the default in 3.4.
+
+You would have been using the old Parser if either of these apply:
+- In `config/statamic/antlers.php`, the `version` was set to `regex`.
+- The `antlers.php` file doesn't exist at all.
+
+The newer parser should be backwards compatible but if you encounter any errors, you may need to check the [docs](/antlers).
+
+### Form submission path config
+**Affects apps that have customized the `submissions` path in `config/statamic/forms.php`.**
+
+The place to customize the directory for form submissions has moved from `forms.php` into `stache.php`.
+
+```php
+// config/statamic/forms.php
+'submissions' => 'custom path', // [tl! --]
+
+// config/statamic/stache.php
+'stores' => [
+    'form-submissions' => [ // [tl! ++:start]
+        'directory' => 'custom path',
+    ], // [tl! ++:end]
+],
+```
+
+### Validation rule changes
+**Affects apps using `unique_entry_value`, `unique_term_value`, or `unique_user_value` rules.**
+
+_Note that assuming you haven't done anything too unusual, the following changes may have been performed automatically by Statamic during the update process._
+
+We have updated our custom validation rules to use the more modern Laravel syntax. This means dropping the string based aliases in favor of classes.
+
+```yaml
+validate:
+  - 'unique_entry_value:{collection},{id},{site}' #[tl!--]
+  - 'new \Statamic\Rules\UniqueEntryValue({collection},{id},{site})' #[tl!++]
+
+  - 'unique_term_value:{taxonomy},{id},{site}' #[tl!--]
+  - 'new \Statamic\Rules\UniqueTermValue({taxonomy},{id},{site})' #[tl!++]
+
+  - 'unique_user_value:{id}' #[tl!--]
+  - 'new \Statamic\Rules\UniqueUserValue({id})' #[tl!++]
+```
+
+### Antlers sanitization
+**Affects apps or addons using the `sanitize` modifier or the `Html::sanitize` method.**
+
+The `sanitize` modifier (and `Html::sanitize()` method) method has changed under the hood from using `htmlentities` to `htmlspecialchars`.
+
+This change allows for things like accent characters (ü, í, etc) to remain unescaped. This is likely what you want to happen anyway, but if you have a reason for them to be converted, you should use `entities` modifier or `Html::entities()` method respectively.
+
+### Seed removed from `shuffle` modifier
+**Affects apps using the shuffle modifier with an argument.**
+
+In Laravel 11, the underlying randomization technique was made more secure and no longer supports seeds. If you need to support seeds, you will need to use a custom modifier.
+
+```
+{{ my_array | shuffle:123 }} {{# [tl! --] #}}
+{{ my_array | custom_shuffle_with_seed:123 }} {{# [tl! ++] #}}
+```
+
+The shuffle modifier without an argument will continue to work without any modification needed.
+
+### The `modify_date` modifier is now immutable
+**Affects apps using the modify_date modifier.**
+
+In Statamic 4, the `modify_date` modifier would modify date variable which would then be reflected elsewhere in your template.
+
+In Statamic 5, this is fixed, but if you were relying on this incorrect behavior you will need to handle it.
+
+```antlers
+{{ date }} // 1st of may
+{{ date | modify_date('+1 day') }} // 2nd of may
+{{ date }} // 2nd of may {{# [tl! --] #}}
+{{ date }} // 1st of may {{# [tl! ++] #}}
+```
+
+### The `svg` tag sanitizes by default
+**Affects apps that use the `svg` tag.**
+
+The `{{ svg }}` will now sanitize the output by default. This meant things like JavaScript or other valid but potentially insecure elements will be filtered out.
+
+For most people this won't be a problem but if you rely on this advanced SVG features, you may want to disable it.
+
+```antlers
+{{ svg
+   src="foo.svg"
+   sanitize="false" {{# [tl! ++] #}}
+}}
+```
+
+Alternatively, you can opt out of it completely in a service provider:
+
+```php
+public function boot()
+{
+    \Statamic\Tags\Svg::disableSanitization(); // [tl! ++]
+}
+```
+
+### Bard JS value is now an object
+**Affects apps or addons that are manually targeting Bard's value in JS**
+
+Previously, to prevent issues with how Laravel would trim whitespace on submitted strings, Bard's value would be a JSON stringified version of an object. In Statamic 5, it will just be the object.
+
+```js
+let bardValue = JSON.parse(getBardValue()); // [tl! --]
+let bardValue = getBardValue(); // [tl! ++]
+```
+
+### User roles inherit from groups
+**Affects apps or addons using the `roles`/`hasRole` methods on the `User` class, or the `user:is`/`is` tags.**
+
+In v4, the `User` class's `roles` method would only return roles defined explicitly on the user. It would not return roles inherited through any assigned groups.
+
+This affected calling the `roles` method directly, the `hasRole` method, or the `user:is` and `is` tags.
+
+This was a common point of confusion. So in v5, including the inherited roles is the more "default" behavior.
+
+```php
+// To get explicit roles...
+$user->roles(); // [tl! --]
+$user->explicitRoles(); // [tl! ++]
+
+// To check if a user has a role explicitly defined...
+$user->hasRole($role); // [tl! --]
+$user->explicitRoles()->has($role->handle()); // [tl! ++]
+
+// To set explicit roles...
+$user->roles($roles); // [tl! --]
+$user->explicitRoles($roles); // [tl! ++]
+
+// To get all roles, including ones through user groups...
+getAllRoles($user); // (It was complicated) [tl! --]
+$user->roles(); // [tl! ++]
+
+// To check if a user has a role, including ones through user groups...
+getAllRoles($user)->has($role->handle()); // (It was complicated) [tl! --]
+$user->hasRole($role); // [tl! ++]
+```
+
+
+### Misc class method changes
+The following methods have been removed:
+- `Statamic\Entries\Collection::revisions()` removed. Use `revisionsEnabled()`.
+
+The following interfaces have added `findOrFail()` methods:
+- `Statamic\Contracts\Assets\AssetContainerRepository`
+- `Statamic\Contracts\Assets\AssetRepository`
+- `Statamic\Contracts\Auth\UserRepository`
+- `Statamic\Contracts\Entries\CollectionRepository`
+- `Statamic\Contracts\Entries\EntryRepository`
+- `Statamic\Contracts\Globals\GlobalVariablesRepository`
+- `Statamic\Contracts\Structures\NavigationRepository`
+- `Statamic\Contracts\Taxonomies\TermRepository`
+
+The following methods have changed:
+- `Statamic\StaticCaching\Cacher::getCachedPage()` now returns a `Statamic\StaticCaching\Page`.
+
+### Glide filename parameter has been removed
+
+This was an undocumented relic of a feature that let you add a "fake" or "vanity" filename to the end of Glide URLs to be able to improve SEO. This now  happening automatically based on the original filename, rendering this feature unnecessary (this feature was broken in certain situations and as mentioned before — undocumented).
+
+If you use this `{{ glide filename="" }}` parameter, you'll need to remove it, otherwise nothing will be output.
+
+If you are hot-linking to any images rendered with manually set filenames in this way, you'll also need to correct those links.
+
+### Entries may now only be queried by a single status
+**Affects any apps or addons filtering entries by `status`.**
+
+Previously, when querying entries, you could use *any* condition to filter entries.
+
+However, in v5, as part of improvements to how statuses work behind the scenes, statuses can now only be filtered using the `is` / `equals` conditions, and the `whereStatus` query method. Some examples:
+
+Collection tag:
+```antlers
+{{ collection:blog status:in="published" }} {{# [tl! --] #}}
+{{ collection:blog status:is="published" }} {{# [tl! ++] #}}
+```
+
+PHP:
+```php
+Entry::query()
+    ->where('collection', 'blog')
+    ->where('status', 'published') // [tl! --]
+    ->whereStatus('published') // [tl! ++]
+    ->get();
+```
+
+REST API:
+```php
+/api/collections/blog/entries?filter[status:in]=published // [tl! --]
+/api/collections/blog/entries?filter[status]=published // [tl! ++]
+```
+
+GraphQL API:
+```graphql
+{
+    entries(
+        collection: "blog"
+        filter: {
+            status: { in: "published" }         #[tl! --]
+            status: "published"                 #[tl! ++]
+        }
+    ) {
+        data {
+            title
+        }
+    }
+}
+```
+
+If you need to query entries regardless of status, you can pass `any`.
+
+## Zero impact changes
+
+These are items that you can completely ignore. They are suggestions on how to improve your code using newly added features.
+
+### JS Slug generation
+
+The `$slugify` JS API has been deprecated. This could be a good time to use the new slug helpers.
+
+If you are generating simple slug/handles, you can use the global helper:
+
+```js
+let slug = this.$slugify('Foo Bar'); // foo-bar [tl! --]
+let slug = str_slug('Foo Bar'); // foo-bar [tl! ++]
+
+let handle = this.$slugify('Foo Bar', '_'); // foo_bar [tl! --]
+let handle = snake_case('Foo Bar'); // foo_bar [tl! ++]
+```
+
+If your slugs need to factor in language logic (like an entry's slug would), then you can use the new server side feature:
+
+```js
+let slug = getSlug('Foo Bar'); // [tl! --:start]
+
+function getSlug(value) {
+    return this.$slugify(value);
+} // [tl! --:end]
+
+let slug = await getSlug('Foo Bar'); // [tl! ++:start]
+
+async function getSlug(value) {
+  return this.$slug.async().create('Foo Bar');
+} // [tl! ++:end]
+```
+
+
+### Addon test case
+
+If you have an addon, there's a good chance your `TestCase` is a bit complicated.
+
+You should be able to extend the new `AddonTestCase` and specify your service provider in favor of manually wiring up all the Testbench bits.
+
+```php
+use Orchestra\Testbench\TestCase as OrchestraTestCase; // [tl! --]
+use Statamic\Testing\AddonTestCase; // [tl! ++]
+
+abstract class TestCase extends OrchestraTestCase // [tl! --]
+abstract class TestCase extends AddonTestCase // [tl! ++]
+{
+    protected string $addonServiceProvider = YourServiceProvider::class; // [tl! ++]
+
+    protected function getPackageProviders($app) // [tl! --:start]
+    {
+        return [
+            GraphQLServiceProvider::class,
+            StatamicServiceProvider::class,
+            YourServiceProvider::class,
+        ];
+    }
+
+     // etc... [tl! --:end]
+}
+```
diff --git a/content/collections/docs/addons.md b/content/collections/docs/addons.md
index bedba604d..b49387712 100644
--- a/content/collections/docs/addons.md
+++ b/content/collections/docs/addons.md
@@ -5,22 +5,31 @@ title: 'Addons Overview'
 intro: 'Developers can easily build new features that are compatible with everyone’s Statamic installations. Addons can then be easily shared or sold to others to let them extend their Statamic installation.'
 updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
 updated_at: 1632424769
+breadcrumb_title: Overview
 ---
-## Finding Addons
+## Finding addons
 
 You can browse the [Statamic Marketplace](https://statamic.com/addons) to find addons, or use the "Addons" section inside your Statamic Control Panel.
 
-## Installing Addons
+## Installing addons
 
-Within the Control Panel, you can install addons by browsing to the one you want and clicking install. Behind the scenes, the addon will be installed using Composer.
-
-If you want to do it yourself, you can use Composer directly on the command line:
+You can use Composer to install any addon:
 
 ``` shell
 composer require vendor/package
 ```
 
-## Creating Addons
+The command can be found on the addon's page in the Control Panel or the Statamic Marketplace.
+
+:::tip
+Some first party addons – such as the Static Site Generator or Eloquent Driver - have their own dedicated commands which will be noted on the same pages.
+
+```shell
+php please install:ssg 
+```
+:::
+
+## Creating addons
 
 To learn how to create your own addon, as well as publishing it to the Statamic Marketplace, head over to the [Extending Statamic](/extending/addons) area.
 
@@ -28,6 +37,8 @@ To learn how to create your own addon, as well as publishing it to the Statamic
 
 Addons may require a license, which you can purchase at the [Marketplace](https://statamic.com/marketplace). Licenses may be attached to a site in your [account area](https://statamic.com/account/sites). Make sure that you have your site key entered into your Statamic project.
 
+You can try out commercial addons locally for free. Be sure to purchase a license before deploying to production.
+
 ## Editions
 
 An addon may have multiple editions, which may cost different amounts and provide different sets of features.
@@ -40,4 +51,4 @@ You can choose which edition is installed by entering it into your `config/stata
 ]
 ```
 
-Or, by choosing it from an addon's details view in the Control Panel.
+Or, by choosing it from an addon's details view in the Control Panel.
\ No newline at end of file
diff --git a/content/collections/docs/amp.md b/content/collections/docs/amp.md
deleted file mode 100644
index 99937700b..000000000
--- a/content/collections/docs/amp.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: AMP
-template: page
-intro: |
-    [AMP](https://amp.dev) (Accelerated Mobile Pages) is a web component framework by Google to serve fast, content-optimized versions of your websites. It's kinda dead now though.
-blueprint: page
-id: a66f3e5f-5a60-44c4-8c1d-a9d9692366c0
----
-## Overview
-
-Statamic supports [AMP](https://amp.dev) by providing a "pivot" route which serves an alternate set of views and layouts conforming to AMP requirements.
-
-:::best-practice
-Google gave AMP pages a preferential rank in their search algorithm for a few years, but [that stopped in June 2021](https://plausible.io/blog/google-amp). So, even though Statamic _supports_ AMP, you probably shouldn't be using it anymore. Make your site as quick as you can and you'll do just fine (honestly, much better) without it.
-:::
-
-## Turn it On
-
-Enable AMP globally as an option in `config/statamic/amp.php`. Any entry with a URL will then have its AMP version available at ` /amp/{url}`.
-
-``` php
-'enabled' => true,
-```
-
-### Collections
-Once enabled, you will have the ability to enable AMP on your individual collections.
-
-``` yaml
-#content/collections/blog.yaml
-amp: true
-```
-
-### Routes
-You can use the `Route::amp()` method to create the AMP version of a regular Statamic route.
-
-``` php
-Route::amp('blog/{slug}', 'blog.index');
-```
-
-## AMP Views
-
-Whenever you visit `/amp/{url}` it will attempt to load whatever entry would be found at {url}, and swap out the regular view for a magical AMP one ✨.
-
-AMP views follow the same exact file locations as regular views, except in an `/amp` subdirectory.
-
-``` files theme:serendipity-light
-resources/views/
-amp/
-    blog/
-        index.antlers.html
-        show.antlers.html
-blog/
-    index.antlers.html
-    show.antlers.html
-```
-
-For example, if an entry loaded a `blog/show` view by default, its AMP view would be `amp/blog/show`. You will need to create these alternate views yourself.
-
-## Variables
-
-If an entry has an AMP URL, it will a corresponding `amp_url` variable. You can use this to point to your AMP document from the original.
-
-```
-<link rel="amphtml" href="{{ amp_url }}" />
-```
-
-Similarly, you can use the permalink on the AMP view to link back to the canonical original.
-
-```
-<link rel="canonical" href="{{ permalink }}" />
-```
-
-## Live Preview
-
-When enabled, the [Live Preview](/live-preview) feature has the ability to preview the AMP versions of your entries.
diff --git a/content/collections/docs/antlers-legacy.md b/content/collections/docs/antlers-legacy.md
deleted file mode 100644
index f5b3982d5..000000000
--- a/content/collections/docs/antlers-legacy.md
+++ /dev/null
@@ -1,426 +0,0 @@
----
-id: dcf80ee6-209e-45aa-af42-46bbe01996e2
-blueprint: page
-title: 'Antlers Templates (Legacy Regex)'
-intro: |-
-  Antlers is a simple and powerful templating engine provided with Statamic.  It can fetch and filter content, display and modify data, tap into core features like user authentication and search, and handle complex logic.
-  :::warning This parser has been retired
-     We have a [brand new, completely rewritten Antlers Parser](/antlers) jam packed with new features, performance improvements, and bug fixes. Make sure to use it if you're on Statamic 3.3 or higher.
-  :::
-template: page
-nav_title: 'Antlers Templates (Legacy)'
----
-## Overview
-
-Antlers view files are often called templates. Any files in your `resources/views` directory using an `.antlers.html` file extension will be parsed with the Antlers engine.
-
-:::tip
-The `.antlers.html` extension is important. Without it, your template will be rendered as **unparsed, static HTML**.
-:::
-
-## Antlers Syntax
-
-Antlers adds capabilities on top of HTML through the use of curly brace expressions. Those curly braces – often called double mustaches or squiggly gigglies – look a whole lot like _antlers_ to us, hence the name.
-
-```antlers
-{{ hello_world }}
-```
-
-Before getting into listing all the things that happen _inside_ an Antlers expression, lets take a moment to establish the rules for properly formatting one.
-
-### Formatting Rules
-
-1. Each set of curly braces **must** stay together always, like Kenan & Kel or Wayne & Garth.
-2. Expressions are **case sensitive**.
-3. Hyphens and underscores are **not** interchangeable.
-4. Whitespace between the curly braces and inner text is **recommended**, but optional.
-5. You **can** break up an expression onto multiple lines.
-
-Consistency is important. We recommend using single spaces between braces, lowercase variable names, and underscores as word separators. Picking your style and stick to it. Future you will thank you, but don't expect a postcard.
-
-``` antlers
-This is great!
-{{ perfectenschlag }}
-
-This is allowed.
-{{squished}}
-
-This can make sense when you have lots of parameters.
-{{
-  testimonials
-  limit="5"
-  order="username"
-}}
-
-This is terrible in every possible way.
-{{play-sad_Trombone            }}
-```
-
-## Displaying Data
-
-You can display data passed into your Antlers views by wrapping the variable in double curly braces. For example, given the following data:
-
-``` yaml
----
-title: DJ Jazzy Jeff & The Fresh Prince
-songs:
-  - Boom! Shake the Room
-  - Summertime
-  - Just Cruisin'
----
-```
-
-You can display the contents of the `title` variable like this:
-
-``` antlers
-<h1>{{ title }}</h1>
-```
-
-``` html
-<h1>DJ Jazzy Jeff & The Fresh Prince</h1>
-```
-
-### Arrays
-Arrays are a collection of elements (values or variables). You can loop through the elements of the array using the `{{ value }}` variable, or reach in and pluck out specific elements by their index.
-
-#### Looping
-
-``` antlers
-<ul>
-{{ songs }}
-  <li>{{ value }}</li>
-{{ /songs }}
-</ul>
-```
-
-``` html
-<ul>
-  <li>Boom! Shake the Room</li>
-  <li>Summertime</li>
-  <li>Just Cruisin'</li>
-</ul>
-```
-
-#### Plucking
-
-``` antlers
-<p>Time to {{ songs:0 }} cuz we're {{ songs:2 }}.</p>
-```
-
-``` html
-<p>Time to Boom! Shake the Room cuz we're Just Crusin'.</p>
-```
-
-### Dictionaries
-Dictionaries are represented in YAML by nested key:value pairs, _inside_ another variable name. These are sometimes called element maps, or associative arrays.
-
-``` yaml
-mailing_address:
-  address: 123 Foo Ave
-  city: Barville
-  province: West Exampleton
-  country: Docsylvania
-```
-
-#### Accessing Data
-You can access the keys inside the dictionary by "gluing" the parent/child keys together you want to traverse through, much like breadcrumbs.
-
-``` antlers
-I live in {{ mailing_address:city }}.
-```
-
-### Multi-Dimensional Arrays
-More complex data is stored in objects or arrays inside arrays. This is usually called a multi-dimensional array.
-
-``` yaml
-skaters:
-  -
-    name: Tony Hawk
-    style: Vert
-  -
-    name: Rodney Mullen
-    style: Street
-```
-
-If you know the names of the variables inside the array, you can loop through the items and access their variables.
-
-``` antlers
-{{ skaters }}
-<div class="card">
-  <h2>{{ name }}</h2>
-  <p>{{ style }}</p>
-</div>
-{{ /skaters }}
-```
-
-``` html
-<div class="card">
-  <h2>Tony Hawk</h2>
-  <p>Vert</p>
-</div>
-<div class="card">
-  <h2>Rodney Mullen</h2>
-  <p>Street</p>
-</div>
-```
-
-### Dynamic Access
-If you don't know the names of the keys inside the array – which can happen when working with dynamic or user submitted data – you can access the elements dynamically using variables for the key names.
-
-Using the mailing list example, we could use a `field` variable to pluck out specific keys.
-
-``` md
----
-field: country
-mailing_address:
-  address: 123 Scary Mansion Lane
-  country: Docsylvania
-  city: Arteefem
-  postal_code: RU 7337
----
-{{ mailing_address[field] }}
-
-// Output
-Docsylvania
-```
-
-You can use this same syntax with literal key names as well.
-
-```
-// These are equivalent
-{{ mailing_address:city }}
-{{ mailing_address['city'] }}
-```
-
-You can combine literal and dynamic keys and get real fancy if you need to.
-
-```
-{{ complex_data:3[field]['title'] }}
-```
-
-## Modifying Data
-
-The way data is stored is not always the way you want it presented. The simplest way of modifying data is through the use of variable modifiers.
-
-### Variable Modifiers
-
-Each variable modifier is a function that accepts the value of a variable, manipulates it in some way, and returns it. Modifiers can be chained and are executed in sequence, from left to right inside the Antlers statement.
-
-Let's look at an example.
-
-```
----
-title: Nickelodeon Studios
----
-
-// NICKELODEON STUDIOS rocks!
-<h1>{{ title | upper | ensure_right:rocks! }}</h1>
-
-// NICKELODEON STUDIOS ROCKS! (order matters)
-<h1>{{ title | ensure_right:rocks! | upper }}</h1>
-```
-
-There are over 130 built in [modifiers][modifiers] that do everything from find and replace to automatically write HTML for you.
-
-Modifiers can be written in two styles in order to support different use cases and improve readability.
-
-### String/Shorthand Style
-
-Modifiers are separated by `|` pipe delimiters. Parameters are delimited by `:` colons. This is usually the recommended style while working with string variables, conditions, and when you don't need to pass multi-word arguments in a parameter.
-
-```
-{{ string_var | modifier_1 | modifier_2:param1:param2 }}
-```
-
-If you use this string/shorthand style on arrays, you need to make sure the closing tag matches the opening one **exactly**. You may notice this looks terrible and is quite annoying. That's why we also have the...
-
-### Array/Tag Parameter Style
-
-Modifiers on array variables are formatted like Tag parameters. Parameters are separated with `|` pipes. You can’t use modifiers in conditions when you format them this way.
-
-```
-{{ array_var modifier="param1|param2" }}
-  // Magic goes here
-{{ /array_var }}
-```
-
-:::warning
-You **cannot** mix and match modifier styles.
-ie. This totally won't work: `{{ var | foo | bar="baz" }}`
-:::
-
-### Escaping Data
-
-By default, Antlers `{{ }}` statements are _not_ automatically escaped. Because content is often stored along with HTML markup, this is the most logical default behavior. **But remember: never render user-submitted data without escaping it first!**
-
-The simplest way to escape data is by using the [sanitize](/modifiers/sanitize) modifier. This will run the data through PHP's `htmlspecialchars()` function and prevent XSS attacks and other potential nastiness.
-
-```
-{{ user_submitted_content | sanitize }}
-```
-
-## Logic & Conditions {#conditions}
-
-Antlers can handle logic and conditional statements, just like native PHP. You can use logic to check settings, variables, or even user data and alter the output of your page.
-
-You may construct conditional statements using the `if`, `else`, `elseif`, `unless` keywords, and use any of PHP's [comparison](https://www.php.net/manual/en/language.operators.comparison.php) and [logical](https://www.php.net/manual/en/language.operators.logical.php) operators.
-
-```
-{{ if songs === 1 }}
-  <p>There is a song!</p>
-{{ elseif songs > 100 }}
-  <p>There are lots of songs!</p>
-{{ elseif songs }}
-  <p>There are songs.
-{{ else }}
-  <p>There are no songs.</p>
-{{ /if }}
-```
-
-
-<blockquote class="tip"><strong>Antlers variables are null by default.</strong> Keep your logic statements simple and skip checking for existence altogether.</blockquote>
-
-### Shorthand Conditions (Ternary) {#ternary}
-
-Basic ternary operators will let you write a simple if/else statement all in one line.
-
-```
-// Basic: verbose
-This item is {{ if is_sold }}sold{{ else }}available{{ /if }}.
-
-// Ternary: nice and short
-This item is {{ is_sold ? "sold" : "available" }}.
-```
-
-Learn more about [ternary operators][ternary] in PHP.
-
-### Modifiers Inside Conditions
-
-If you want to manipulate a variable with [modifiers](/modifiers) before evaluating a condition, wrap the expression in (parenthesis).
-
-```
-{{ if (number_of_bedrooms | count) > 10 }}
-  <p>Who are you, Dwayne Johnson?</p>
-{{ /if }}
-```
-
-### Variable Fallbacks (Null Coalescence) {#null-coalescence}
-
-When all you need to do is display a variable and set a fallback when it’s null, use the null coalescence operator (`??`).
-
-```
-{{ meta_title ?? title ?? "No Title Set" }}
-```
-
-### Conditional Variable Fallbacks
-
-What if you want to combine an `is set` check with a ternary operator? No problem.
-
-```
-// Short and sweet
-{{ show_title ?= title }}
-
-// Longer and bitterer
-{{ if show_title }}{{ title }}{{ /if }}
-```
-
-### Using Tags in Conditions
-
-Yes, you can even use tags in conditions. When working with [tags][tags] instead of variables, you **must** wrap the tag in a pair of additional single braces to tell the parser to run that logic first.
-
-```
-{{ if {session:some_var} == "Statamic is rad!" }}
-  ...
-{{ /if }}
-```
-
-## Code Comments {#comments}
-
-Antlers also allows you to define comments in your views. However, unlike HTML comments, Antlers are not included in the rendered HTML. You can use these comments to "turn off" chunks of code, document your work, or leave notes for yourself and other developers.
-
-```
-{{# Remember to replace the lorem ipsum this time. #}}
-```
-
-## Tags
-
-[Tags][tags] are the primary method for implementing most of Statamic's dynamic features, like search, forms, nav building, pagination, collection listing, filtering, image resizing, and so on.
-
-Tags often look quite similar to variables, so it pays to learn the list of available [Tags][tags] so you don't mix them up or create conflicts.
-
-### Variables Inside Tag Parameters
-
-There are two ways to use variables _inside_ a Tag's parameters.
-
-You can use **dynamic binding** to pass the value of a variable via its name.
-
-```
-{{ nav :from="segment_1" }}
-```
-
-Alternatively, you can use **string interpolation** and reference any variables with _single braces_. This method lets you concatenate a string giving you the ability assemble arguments out of various parts. Like Frankenstein's monster.
-
-```
-{{ nav from="{segment_1}/{segment_2}" }}
-```
-
-### Modifiers Inside Parameters
-
-If using a variable inside of a Tag is nice, using a variable with a modifier inside of a Tag is better. Or more complicated. Either way, it works exactly as you’d expect with one small caveat: When using a modifier inside of a Tag, no whitespace is allowed between variables, pipes, and modifiers. Collapse that stuff.
-
-```
-// Totally fine.
-{{ partially:broken src="{featured_image|url}" }}
-
-// Totally not.
-{{ partially:broken src="{ featured_image | url }" }}
-```
-
-## Prevent Parsing
-
-You may find you need to prevent Antlers statements from being parsed. This is common if you're using a JavaScript library like [Vue.js][vue], or perhaps you want to display code examples (like we do in these docs). In either case, you have a few options.
-
-First, you may use an `@` symbol to tell Antlers to leave it alone like a jellyfish on the beach. The `@` symbol will be stripped out automatically leaving nothing but your expression behind.
-
-```
-Hey, look at that @{{ noun }}!
-```
-
-### The `noparse` Tag
-
-Use this method if you need to prevent entire code blocks from being parsed.
-
-```
-{{ noparse }}
-  Welcome to {{ fast_food_chain }},
-  home of the {{ fast_food_chain_specialty_item }},
-  can I take your order?
-{{ /noparse }}
-```
-
-## Using Antlers in Content
-
-By default, Antlers expressions and tags are **not** parsed inside your content. This is for performance and security reasons.
-
-For example, a guest author with limited access to the control panel could conceivably write some template code to fetch and display published/private content from a collection they don't have access to.
-
-If this isn't a concern of yours, you can enable Antlers parsing on a per-field basis by setting `antlers: true` in your blueprint.
-
-## Using PHP in Antlers
-
-PHP is disabled by default, but if you change your view's file extension from `.antlers.html` to `.antlers.php`, you can write all the PHP you want in that template.
-
-## IDEs & Syntax Highlighters
-
-Syntax highlighting packages are available for most of the popular IDEs. Make life sweeter, like they do with tea in the south.
-
-- [Antlers Toolbox for VS Code](https://antlers.dev/) 
-- [Antlers Language Support for PHP Storm](https://plugins.jetbrains.com/plugin/19203-antlers-language-support)
-- [Antlers for Atom](https://github.com/addisonhall/language-antlers)
-- [Antlers for Sublime](https://github.com/addisonhall/antlers-statamic-sublime-syntax)
-
-
-[ternary]: https://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary
-[vue]: https://vuejs.org
-[modifiers]: /modifiers
-[tags]: /tags
\ No newline at end of file
diff --git a/content/collections/docs/antlers.md b/content/collections/docs/antlers.md
index e9b9cb556..611d5b464 100644
--- a/content/collections/docs/antlers.md
+++ b/content/collections/docs/antlers.md
@@ -3,15 +3,12 @@ id: d37b2af2-f2bf-493a-9345-7087fb5929ce
 blueprint: page
 title: 'Antlers Templates'
 intro: |-
-  Antlers is a simple and powerful templating engine provided with Statamic.  It can fetch and filter content, display, modify, and set variables, tap into core features like user authentication and search, and handle complex logic.
-  :::tip Hot Tip
-    For sites running Statamic 3.2 and older you'll need to use the [legacy Antlers parser](/antlers-legacy). For all other projects, keep reading. You're in the right place.
-  :::
+  Antlers is a simple and powerful templating engine provided with Statamic.  It can fetch and filter content, display, modify, and set variables, tap into core features like user authentication and search, and handle complex logic. Coming from Laravel and want to stick to Blade? [We got you covered](/blade).
 template: page
 ---
 ## Overview
 
-Antlers is one Statamic's foundational features. It consists of a tightly coupled template language, runtime engine, and library of [Tags](#tags) that can be used to fetch and manipulate data, handle logic, and help you write easier to maintain HTML.
+Antlers is one of Statamic's foundational features. It consists of a tightly coupled template language, runtime engine, and library of [Tags](#tags) that can be used to fetch and manipulate data, handle logic, and help you write easier to maintain HTML.
 
 Antlers templates are also called views. Any files in the `resources/views` directory with an `.antlers.html` file extension is an "Antlers Template", and will be parsed with the Antlers Engine.
 
@@ -20,7 +17,7 @@ The `.antlers.html` extension is important. Without it, your template will be re
 :::
 
 
-### Basic Example
+### Basic example
 
 Antlers adds dynamic features to HTML in the form of "tags" – expressions contained inside a pair of curly braces: `{{` and `}}` Those curly braces (often called double mustaches or squiggly gigglies) look a whole lot like _antlers_ to us, hence the name.
 
@@ -32,18 +29,30 @@ This is a very simple Antlers tag:
 
 ### Configuring
 
-You can configure advanced settings (or switch to the [legacy Antlers parser](/antlers-legacy) in `config/statamic/antlers.php`. The `runtime` version is the fresh new default parser as of Statamic 3.4, as documented on this very page.
+You can configure advanced settings, like guarded variables, tags & modifiers in `config/statamic/antlers.php`.
 
 ```php
 // config/statamic/antlers.php
 return [
-    'version' => 'runtime',
-    // ...
+    'guardedVariables' => [
+        'config.app.key',
+    ],
+
+    'guardedTags' => [
+        //
+    ],
+
+    'guardedModifiers' => [
+        //
+    ],
 ];
 ```
 
+## The book
+If you want to go beyond these docs and really dive into Antler's advanced capabilities, check out [Antlers: Building Beautiful Websites with Statamic](https://stillat.com/books/antlers-building-beautiful-websites-with-statamic), the official companion book by the great John Koster.
 
-## The Basics
+
+## The basics
 
 ### Delimiters
 
@@ -53,7 +62,7 @@ There are three kinds of delimiters.
 - `{{? ?}}` and `{{$ $}}` Allow you to write, execute, and echo PHP.
 - `{{# #}}` Are for code comments.
 
-### Formatting Rules
+### Formatting rules
 
 1. Each set of curly braces **must** stay together always, like Kenan & Kel or Wayne & Garth. There must be a left pair and a right pair, just like HTML's `<` and `>` angle braces.
 1. Expressions are **case sensitive**.
@@ -85,12 +94,13 @@ This is terrible in every possible way.
 We recommend indenting the markup in your HTML for **human readability and maintainability**, not for final rendered output. Anyone still caring about that this day and age probably needs a long vacation and strong Mai Tai or two. 🍹🍹
 :::
 
-### IDE Integrations
+### IDE integrations
 
 Syntax highlighting and auto-completion packages are available for many of the popular IDEs:
 - [Antlers Toolbox for VS Code](https://antlers.dev) (We recommend this one!)
 - [Antlers for Sublime Text](https://github.com/addisonhall/antlers-statamic-sublime-syntax)
 - [Antlers for Atom](https://github.com/addisonhall/language-antlers)
+- [Antlers for Panic Nova](https://extensions.panic.com/extensions/teriyaki/teriyaki.antlers/)
 
 ## Variables
 
@@ -112,9 +122,9 @@ The `title` variable can be rendered like this:
 <h1>DJ Jazzy Jeff & The Fresh Prince</h1>
 ```
 
-### Valid Characters
+### Valid characters
 
-Variable must start with an alpha character or underscore (`a-zA-Z_`), followed by any number of additional uppercase or lowercase alphanumeric characters, hyphens, or underscores (`a-zA-Z_0-9`). Spaces or other special characters are not allowed.
+Variables must start with an alpha character or underscore, followed by any number of additional uppercase or lowercase alphanumeric characters, hyphens, or underscores, but must not end with a hyphen. Spaces or other special characters are not allowed. A valid variable name matches this regex `[_A-Za-z][-_0-9A-Za-z]*[_A-Za-z0-9]`.
 
 Don't be weird and mix-and-match them like a serial killer though:
 
@@ -171,7 +181,7 @@ songs:
 </ul>
 ```
 
-#### Next / Previous
+#### Next / previous
 
 While in a loop, you can get the respective iterations using the `next` or `prev` variables.
 
@@ -228,7 +238,8 @@ You can access the keys inside the dictionary "colon", "dot", or "bracket" notat
 I live in {{ mailing_address:city }}. It's in {{ mailing_address:province }}.
 ```
 
-#### Multi-Dimensional Arrays
+#### Multi-dimensional arrays
+
 More complex data is stored in objects or arrays inside arrays. This is usually called a multi-dimensional array.
 
 ``` yaml
@@ -283,7 +294,7 @@ Tony Hawk<br>
 Rodney Mullen<br>
 Bob Burnquist
 ```
-#### Dynamic Access
+#### Dynamic access
 
 If you don't know the names of the keys inside the array – which can happen when working with dynamic or user submitted data – you can access the elements dynamically using variables for the key names.
 
@@ -312,12 +323,16 @@ You can combine literal and dynamic keys and get real fancy if you need to.
 
 ### Disambiguation {#disambiguating-variables}
 
-As your templates grow and increase in complexity, you _may_ find yourself unsure if you're working with a variable or a [tag](#tags). You may optionally disambiguate your variables by prefixing them with a `$` dollar sign, just like PHP.
+As your templates grow and increase in complexity, you _may_ find yourself unsure if you're working with a variable or a [Tag](#tags). You may optionally disambiguate your variables by prefixing them with a `$` dollar sign, just like PHP.
 
 ```
 {{ $content }}
 ```
 
+:::tip
+This includes variables that Statamic creates for you. For example on taxonomy pages, [the terms are available in a variable named after the taxonomy](/taxonomies#outputting-terms). If you've named the taxonomy the same as a tag (like "section") then you will need to be clear you mean the variable and not the tag.
+:::
+
 ### Modifiers
 
 Modifiers change the output of an Antlers variable. They are used inside any expression and are separated by a pipe character `|`.
@@ -371,11 +386,7 @@ There are more than 150 built-in [modifiers](/reference/modifiers) that can do a
 
 You can even create [Macros](/modifiers/macro) to combine sets of often used modifiers into one, new reusable one.
 
-#### Legacy Syntax
-
-The New Antlers Parser still supports what we're now calling the "[Legacy Syntax](/antlers#stringshorthand-style)" styles, and will continue to do so until Statamic 4.0.
-
-### Creating Variables
+### Creating variables
 
 You can now set variables by using the assignment operator, `=`.
 
@@ -406,7 +417,7 @@ You can also create arrays, if you find the need. Keep in mind that more complex
 </ul>
 ```
 
-#### Sub-Expressions
+#### Sub-expressions
 
 You can assign sub-expressions or interpolated statements to variables too. In this example, you can use `{{ items }}` as if it were the actual Collection Tag. Because it is.
 
@@ -421,11 +432,11 @@ You can assign sub-expressions or interpolated statements to variables too. In t
 </ul>
 ```
 
-### Truthy and Falsy
+### Truthy and falsy
 
 All variables are considered "truthy" if they exist _and_ contain a value. Variables that _don't_ exist, contain an empty string, or are structured and empty (e.g. an empty array or object) are considered "falsy".
 
-This is a powerful pattern that can help keep template logic simple and uncluttered. For instance, you can set a series of "fallback" variables all in one expression, allowing you to have default values and optionally override them instead of having to a bunch of `if`/`else` checks.
+This is a powerful pattern that can help keep template logic simple and uncluttered. For instance, you can set a series of "fallback" variables all in one expression, allowing you to have default values and optionally override them instead of having to do a bunch of `if`/`else` checks.
 
 ```
 <!-- Which one is better? -->
@@ -468,9 +479,9 @@ Just remember: **never render user-submitted data without escaping it first!**
 
 ## Operators
 
-An operator is a special symbol or phrase that you use to check, change, or combine values. For example, the addition operator (`+`) adds numbers, as in `1 + 2`. Statamic supports many of the operators you may already know from PHP, and adds a few new ones to make your life as developer easier.
+An operator is a special symbol or phrase that you use to check, change, or combine values. For example, the addition operator (`+`) adds numbers, as in `1 + 2`. Statamic supports many of the operators you may already know from PHP, and adds a few new ones to make your life as a developer easier.
 
-### Control Flow
+### Control flow
 
 Statamic provides a variety of control flow statements. These include `if`, `else`, `or`, `unless`, and `switch` statements to run different branches of template code based on defined conditions.
 
@@ -539,14 +550,14 @@ Comparison operators, as their name implies, allow you to compare two values or
 | Name | Example {.w-32} | Description |
 |------|----------------|-------------|
 | Equal | `$a == $b` | `true` if `$a` is equal to `$b` after type juggling. |
-| Identical | `$a === $b` | `true` if `$a` is equal to `$b`, and are of the same type |
+| Identical | `$a === $b` | `true` if `$a` is equal to `$b`, and are of the same type. |
 | Greater than | `$a > $b` | `true` if `$a` is greater than `$b`. |
 | Greater than or equal to | `$a >= $b` | `true` if `$a` is greater than or equal to `$b`. |
-| Less than | `$a < $b` | `true` `$a` is less than the `$b`. |
-| Less than or equal to | `$a <= $b` | `true` if `$a` is less than or equal `$b`. |
+| Less than | `$a < $b` | `true` if `$a` is less than `$b`. |
+| Less than or equal to | `$a <= $b` | `true` if `$a` is less than or equal to `$b`. |
 | Not equal | `$a != $b` |  `true` if `$a` is not equal to `$b` after type juggling. |
 | Not identical | `$a !== $b` | `true` if `$a` is not equal to `$b`, only if they are of the same type. |
-| Spaceship | `$a <=> $b` | Returns -1, 0 or 1 when `$a` is less than, equal to, or greater than `$b`, respectively. |
+| Spaceship | `$a <=> $b` | Returns -1, 0, or 1 when `$a` is less than, equal to, or greater than `$b`, respectively. |
 
 #### Examples
 
@@ -584,9 +595,9 @@ Logical operators join two or more expressions to create compound conditions.
 | Xor | `$a xor $b` | `true` if either `$a` or `$b` is `true`, but not both. |
 
 
-### Ternary Statements {#ternary}
+### Ternary statements {#ternary}
 
-Ternary statements let you write a simple condition and return one value if `true` and another if `false`, all one one expression.
+Ternary statements let you write a simple condition and return one value if `true` and another if `false`, all in one expression.
 
 ```
 This item is {{ is_sold ? "sold" : "for sale" }}.
@@ -609,7 +620,7 @@ The null coalescing operator (`$a ?? $b`) considers each variable in a statement
 {{ meta_title ?? title ?? "Someone Forgot the Title" }}
 ```
 
-### The Gatekeeper (Truthy Assignment) {#gatekeeper}
+### The Gatekeeper (Truthy assignment) {#gatekeeper}
 
 The Gatekeeper operator (`a ?= b`) will execute an expression **if and only if** it passes a "truthy" check. It doesn't exist in any programming language — we invented this one. Enjoy!
 
@@ -674,7 +685,7 @@ Math is all the rage. Teenagers have been found in back rooms and back alleys do
 
 ### Assignment
 
-The basic assignment operator is `=`. You might immediately think that means "equal to", but stop right there. Do not pass go and do not receive $200. This means left operand gets set to the value of the expression on the right.
+The basic assignment operator is `=`. You might immediately think that means "equal to", but stop right there. Do not pass go and do not collect $200. This means left operand gets set to the value of the expression on the right.
 
 This is how you create variables as well as increment, decrement, or otherwise manipulate numerical variables.
 
@@ -685,9 +696,9 @@ This is how you create variables as well as increment, decrement, or otherwise m
 | Subtraction | `$a -= $b` | Assigns the difference of `$a` and `$b` to `$a`. |
 | Multiplication | `$a *= $b` | Assigns the product of `$a` and `$b` to `$a`. |
 | Division | `$a /= $b` | Assigns the quotient of `$a` and `$b` to `$a`. |
-| Modulus | `$a %= $b` | Assigns the remainder of `$a` divided by `$a` to `var`. |
+| Modulus | `$a %= $b` | Assigns the remainder of `$a` divided by `$b` to `$a`. |
 
-### Self-Iterating Assignments
+### Self-iterating assignments
 
 The left assignment operator has a super power not shared by the others. If the value of the **right-hand** expression returns a value that can be iterated (arrays, objects, etc.), the captured variable name can be used as a tag pair to iterate the returned value immediately.
 
@@ -697,11 +708,11 @@ The left assignment operator has a super power not shared by the others. If the
 {{ /pages }}
 ```
 
-## Advanced Operators
+## Advanced operators
 
 These operators are here for the edge cases, the wild ideas, and the unexpected client requests at midnight the night before a site launch. **These are the data wangjanglers.**
 
-Much of what they do is already handled by Modifiers or Tag Parameters (and you should use those if and whenever you can), but these operators become very useful as part of **assignment expressions** — when you've left the safety of a Tag or simplicity of a primitive variable in the dust behind you.
+Much of what they do is already handled by Modifiers or Tag Parameters (and you should use those if ever and whenever you can), but these operators become very useful as part of **assignment expressions** — when you've left the safety of a Tag or simplicity of a primitive variable in the dust behind you.
 
 ### Merge
 
@@ -763,7 +774,7 @@ The `groupby` operator can be applied to any array or tag output as part of an a
 
 Arguments are passed into a pair of parenthesis `()`. Each argument accepts the name of a field to group by and an optional alias, with additional arguments for additional fields separated by commas `,`.  If you don't set an alias, it will match the name of the field you pass in.
 
-Additionally you may set the name of the per-group `values` array with `as 'anything_you_want` at the end of the expression.
+Additionally you may set the name of the per-group `values` array with `as 'anything_you_want'` at the end of the expression.
 
 ```
 groupby (FIELD 'KEY1', FIELD2 'KEY2') as 'things'
@@ -845,7 +856,7 @@ players:
   <li>Terry Mills</li>
 </ul>
 ```
-#### Group Collection Entries by Year
+#### Group collection entries by year
 
 ```
 {{ blog = {collection:blog} groupby (date|format('Y') 'year') as 'entries' }}
@@ -936,7 +947,7 @@ Multiple expressions or statements can be performed inside a single Antlers tag
 19 years
 ```
 
-## Expressions and Statements
+## Expressions and statements
 
 If you want the computer science answer, an "expression" is a combination of values and functions that are combined and interpreted to create new values, whereas a "statement" is a standalone unit of execution that doesn't return anything. 🥱
 
@@ -945,7 +956,7 @@ Simply put, expressions show things and statements do things. Even more simply p
 Let's just go through the list of valid "in between braces stuff" so you can  accomplish your goals and hopefully win a trophy of some kind. 🏆
 
 ```
-{{ "This is a single expression that renders this very text. nothing more and nothing oesseiuhdieuhd " }}
+{{ "This is a single expression that renders this very text. Nothing more and nothing less." }}
 
 {{# This statement fetches Entries and begins iterating through them #}}
 {{ collection:blog limit="5" }}
@@ -1014,7 +1025,7 @@ You may optionally disambiguate your tags by prefixing them with a `%` percent s
 {{ %collection:blog }}
 ```
 
-### Tag Parameters
+### Tag parameters
 
 Most Tags can be configured through the use of Parameters, which accepts arguments — much like an HTML attribute. In following example, the [SVG Tag](/tags/svg) is accepting a filename and string of classes to apply while rendering an inline `<svg>` element.
 
@@ -1047,7 +1058,44 @@ You can "void" a parameter using the `void` keyword. A voided parameter will act
 {{ svg src="hamburger" class="{wide ? 'w-full' : void}" }} {{# [tl! ++] #}}
 ```
 
-## Working With Templates
+### Shorthand parameter syntax
+
+When passing variables into tags where the parameter and variable have the **same name**, the standard syntax:
+
+```
+{{ collection:blog :id="id" }}
+```
+
+Can be simplified to this:
+
+```
+{{ collection:blog :$id }}
+```
+
+The parser will internally expand this to the longer form and continue as normal. This syntax can be mixed with normal parameters:
+
+```
+{{ collection:blog limit="5" :$class offset="1" }}
+```
+
+
+### Self-closing tags
+
+Some Tags can function as single or paired expressions. For example, the [Partial Tag](/tags/partial) can be used to include a partial template, or it can be used to wrap a portion of your template and inject it as a slot into a partial.
+
+In the below example, you can **self-close** the first partial tag much like an HTML element to ensure the second tag is paired properly.
+
+```
+{{ partial :src="hero_panel" /}}
+{{ partial :src="sidebar" }}
+  <nav>
+    <a href="/">Home</a>
+    <a href="/about">About</a>
+  </nav>
+{{ /partial }}
+```
+
+## Working with templates
 
 ### Layouts
 
@@ -1122,7 +1170,7 @@ We can now pass whatever we want into the slot by injecting content into the par
 {{ /partial:modal }}
 ```
 
-#### Named Slots
+#### Named slots
 
 Sometimes you might want to render multiple different slots in different locations inside a partial. Let's modify our example to allow of the injection of a "title" slot:
 
@@ -1202,7 +1250,7 @@ The `{{ once }}` tag allows you to define a portion of the template that will on
 ```
 ### Section & Yield
 
-You may find that you wish you to define areas of a layout that may need to change depending on which template is being rendered.
+You may find that you wish to define areas of a layout that may need to change depending on which template is being rendered.
 
 Let's peek at this basic layout as an example:
 
@@ -1235,7 +1283,7 @@ Notice the [`yield`](/tags/yield) tag. The contents of that tag will be rendered
 {{ /section:footer }}
 ```
 
-## Prevent Parsing
+## Prevent parsing
 
 You may find you need to prevent Antlers statements from being parsed. This is common when working with a JavaScript library like [Vue.js](https://vuejs.org), writing code examples, like we do in these docs. In either case, you have a few options.
 
@@ -1263,6 +1311,14 @@ The `@` can also be used to escape individual braces within tag parameters or st
 // "string {foo} bar"
 ```
 
+### Ignoring Tag parameters
+
+You may ignore the contents of tag parameters by prefixing the parameter with a backslash. This could be useful allow you to avoid having to escape each curly brace like the example above if you are providing some JS/JSON in a parameter:
+
+```
+{{ form:create \x-data="{ submittable: false }" }}
+```
+
 ### The `noparse` Tag
 
 Use this method if you need to prevent entire code blocks from being parsed.
@@ -1275,13 +1331,13 @@ Use this method if you need to prevent entire code blocks from being parsed.
 {{ /noparse }}
 ```
 
-## Using Antlers in Content
+## Using Antlers in content
 
 Antlers template code inside your content **is not** parsed automatically for security and performance reasons.
 
 You may **enable** Antlers parsing on a per-field basis by setting `antlers: true` in a given field's blueprint config.
 
-## Code Comments {#comments}
+## Code comments {#comments}
 
 Antlers code comments are not rendered in HTML (unlike HTML comments), which allows you to use them to "turn off" chunks of code, document your work, or leave notes and inside jokes for yourself and other developers.
 
@@ -1299,9 +1355,9 @@ Antlers code comments are not rendered in HTML (unlike HTML comments), which all
 
 You can write PHP inside special delimiters. You may use `{{?...?}}` to write raw PHP and manipulate the current context (variables that exist in a given request), and `{{$...$}}` to `echo` the result of a PHP expression and render HTML.
 
-### Examples
+### Syntax
 
-The following two examples are functionally equivalent, but each uses a different approach based on the delimiter.
+The following two syntax examples are functionally equivalent, but each uses a different approach based on the delimiter.
 
 ```antlers
 {{? $register = route('account.register'); ?}}
@@ -1313,6 +1369,16 @@ The following two examples are functionally equivalent, but each uses a differen
 <a href="{{$ route('account.register') $}}">Register for a new account</a>
 ```
 
+### Accessing Data in PHP
+
+Data in the [Cascade](/data-inheritance) can be accessed in much of the same way it is inside of a regular Antlers expression.
+
+```antlers
+
+<h1>{{? $page->title ?}}</h1>
+<p>{{? $globals->get('company_address') ?}}</p>
+```
+
 ### PHP File Extension
 
 You can also change your view's file extension from `.antlers.html` to `.antlers.php` and you can write all the raw PHP you want using native PHP tags.
@@ -1323,10 +1389,66 @@ You can also change your view's file extension from `.antlers.html` to `.antlers
 ?>
 ```
 
+## Debugbar profiler 🎊 {#debugbar-profiler}
+
+Antlers has an experimental new Profiler tab in the [Debugbar](/debugging#debug-bar) that helps you see the performance impact of all of your template code.
+
+<figure>
+    <img src="/img/antlers-profiler.png" alt="Antlers Profiler">
+    <figcaption>Profiling some Antlers code.</figcaption>
+</figure>
+
+Inside this Profiler there are 3 separate views that give you different glimpses into your site.
+
+### View graph
+
+This view groups your Antlers expressions by the view files (templates, layouts, and partials) they exist in, allowing you to more easily tease out the location of any potential slowdowns or redundant calls.
+
+Each parsed expression in this view gets its own row in the table that shows various metrics and details that may prove to be useful.
+
+### Expression graph
+
+This view shows all parsed expressions in a given request, listing them in **execution order**.
+
+Each parsed expression in this view gets its own row in the table that shows various metrics and details that may prove to be useful.
+
+### Source view
+
+The Source View shows the final rendered template and highlights any content rendered by Antlers with a color corresponding to how fast it was executed. Green is fast, Yellow is a little slow, and Red is very slow.
+
+
+### Profiler columns
+
+| Column | Explanation |
+|--|--|
+| Time | Starting from 00:00, exactly when on the timer this expression was run. This helps to see the order your code is executed in. |
+| Type | Shows whether the expression is an imported view, a variable, or a [Tag](/tags). |
+| View Path | When using the **Expression Graph**, shows the path to the view file the expression exists in. |
+| Line | Shows what line the expression is in. If you have configured the debugbar by publishing its config and have specified which code editor you use, you can click the line and open your editor straight to this bit of template code. |
+| Memory Usage | How much memory was used to execute this expression. |
+| Execution | The number of separate times the expression was executed. |
+| Tag Time | The amount of time it took to run the expression |
+| Total Time | The amount of time it took to run the expression along with any child expressions (e.g. a tag pair) |
+| % | The percentage of total load time dedicated to run this expression. |
+
+### How to use the profiler
+
+If you have some pages in your site that are running slow, the Profiler can help you narrow down and find bottlenecks in your template code. Look for anything colored — yellow, orange, and red all _may_ point to some logic that is performing extra slow.
+
+Slow expressions don't necessarily mean that _Antlers_ is slow at parsing them, but rather Statamic is doing a lot of work in order to fetch, filter, and/or manipulate your data to render your view.
+
+With this information you can look for opportunities to cache bits of your template, open support requests and get clarification, ask questions in Discord, or pop the hood on your custom code to see what the hold up is.
+
+:::tip
+This feature is new and experimental! It's recommendations and "slow code" thresholds may need to be updated after getting more real world data.
+:::
+
+## Even more advanced stuff
+
+[John Koster's blog](https://stillat.com/blog) is full of really useful tips and tricks covering some really advanced features not documented here. Be sure to check it out!
 
 ## Thank you to John Koster 👏
 
 This Antlers parser was a huge rewrite by the incomparable [John Koster](https://github.com/JohnathonKoster), who apparently found it a relaxing break from his day job. You can see the effort involved in this [massive PR](https://github.com/statamic/cms/pull/4257).
 
 We owe him a debt of gratitude for this amazing gift.
-:::
diff --git a/content/collections/docs/assets.md b/content/collections/docs/assets.md
index a8dda1332..288c7069b 100644
--- a/content/collections/docs/assets.md
+++ b/content/collections/docs/assets.md
@@ -2,7 +2,7 @@
 id: 7277432d-bb25-458a-a3a2-a72976b44ad5
 blueprint: page
 title: Assets
-intro: 'Assets are files managed by Statamic and made available to your writers and developers with tags and fieldtypes. They can be images, videos, PDFs, or any other type of file. Asset can have fields and content attached to them, just like entries, making them very powerful.'
+intro: 'Assets are files managed by Statamic and made available to your writers and developers with tags and fieldtypes. They can be images, videos, PDFs, or any other type of file. Assets can have fields and content attached to them, just like entries, making them very powerful.'
 template: page
 related_entries:
   - 5b748a3f-be0e-41c1-8877-73f6b7ee1d0a
@@ -12,25 +12,106 @@ related_entries:
   - b50310b0-64ae-4ae4-b219-a637ed89e4d7
   - 458b8203-e330-4d78-9bf5-82aaec8d458b
   - d0c65546-74f1-4a15-89d5-1562a95ee2c6
+  - 420f083d-99be-4d54-9f81-3c09cb1f97b7
 updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
 updated_at: 1633025886
 ---
 ## Overview
 
-Assets live in directories on your local server, in an [Amazon S3 bucket](https://aws.amazon.com/s3), or other cloud storage services. Each defined location is called a **container**..
+Assets live in directories on your local server, in an [Amazon S3 bucket](https://aws.amazon.com/s3), or other cloud storage services. Each defined location is called a **container**.
+
 
 Statamic scans the files in each container and caches [meta information](#metadata) (like `width` and `height` for images) on them. This cache is used to speed up interactions and response times when working with them on the [frontend](/frontend) of your site.
 
-## Asset Browser
+## Asset browser
 
-You can explore these files in the Control Panel's asset browser. You can file, sort, search, move, rename, preview, and — if working with images — even set focal crop points to make dynamically resized images look their best.
+You can explore these files in the Control Panel's asset browser. You can edit, sort, search, move, rename, replace, reupload, preview, and — if working with images — even set focal crop points to make dynamically resized images look their best.
 
 <figure>
-    <img src="/img/assets.png" alt="Assets browser">
+    <img src="/img/asset-browser-v4.png" alt="Assets browser">
     <figcaption>Browsing some assets.</figcaption>
 </figure>
 
-## Asset Fields
+## Asset actions
+
+There are a number of actions that can be taken on assets while in the asset browser. Some can be run in bulk (on multiple assets at once), while others are only available on individual assets.
+
+Single asset actions are available by clicking the options menu (three-dot icon) associated with the asset, and picking the desired action from the dropdown list.
+
+Bulk asset actions are available at the top of the asset browser whenever you have one or more assets selected.
+
+<figure>
+    <img src="/img/asset-actions.png" alt="Assets actions">
+    <figcaption>Check out those sweet actions.</figcaption>
+</figure>
+
+### Edit
+Editing an asset opens a new modal window with a number of additional options, as well as any blueprint fields, like title, alt text, description, or other meta data defined on your asset container.
+
+Most of the asset actions are also available inside the editor, along with the ability to set a Focal Point for images.
+
+<figure>
+    <img src="/img/asset-editor-v4.png" alt="The Statamic Asset Editor">
+    <figcaption>The asset editor is pretty slick, if we say so ourselves.</figcaption>
+</figure>
+
+### Copy URL
+Running this action allows you to copy the URL of an asset. You can use the copied URL to share or reference the asset in other places, such as in emails, documents, or on other websites.
+
+Bulk
+: No
+
+### Download
+With this action, you can download an asset to your local device. It allows you to save a copy of the asset on your computer, making it accessible even when you're offline or outside Statamic.
+
+Bulk
+: Yes
+
+### Duplicate
+The duplicate action creates a copy of an asset. It's useful when you want to have multiple copies of the same asset, either for organizational purposes or to make variations or modifications to the duplicated version without affecting the original asset.
+
+When duplicated, the new filename will be appended with `-{numberOfDuplicates}`. If you duplicate a file 3 times, you will have new copies named `yourFile-1.ext`, `yourFile-2.ext`, `yourFile-3.ext`. Feel free to rename these. In fact, we encourage it.
+
+Bulk
+: Yes
+
+### Move
+Moving an asset involves changing its location within the folder structure of your Statamic assets. This action is handy when you want to reorganize your assets or place them in a different folder for better categorization and management.
+
+Assets moved with the move action will update any references to it throughout your content wherever the [Assets field](/fieldtypes/assets) is used.
+
+Bulk
+: Yes
+
+### Rename
+As the name suggests, the rename action allows you to change the name of an asset. It's useful when you want to give a more descriptive or meaningful name to an asset or when you need to update the name to match changes in its content.
+
+Assets renamed with the rename action will update any references to it throughout your content wherever the [Assets field](/fieldtypes/assets) is used.
+
+Bulk
+: Yes*
+
+_*Each rename action only accepts one new filename, so this is only useful in bulk for renaming files of different extensions._
+
+### Replace
+The replace action lets you replace an existing asset with a new version with a new filename. This helps to ensure that your visitors don't run into browser-cached, old versions of your assets. Replaced assets with the replace action will update any references to it throughout your content wherever the [Assets field](/fieldtypes/assets) is used.
+
+Bulk
+: No
+
+### Reupload
+Reuploading an asset involves uploading a new version of an existing asset, effectively replacing the previous version with the **same exact filename**. Keep in mind that by not changing the filename, your visitors may encounter browser-cached, old versions of the asset.
+
+Bulk
+: No
+
+### Delete
+The delete action removes an asset from your site and server, permanently. Exercise caution when using this action, as deleted assets cannot always be easily restored.
+
+Bulk
+: Yes
+
+## Asset fields
 
 Asset fields are configured like a [blueprint](/blueprints) and attached to the [container](#containers). Whenever you edit an asset in the Control Panel, you'll see the fields from the configured blueprint.
 
@@ -88,9 +169,9 @@ Each container implements a "disk", also known as a [Laravel Filesystem](https:/
 ]
 ```
 
-Filesystems are defined in `config/filesystems.php`  They can point to the local filesystem, S3, or any [Flysystem adapter](https://flysystem.thephpleague.com/v2/docs/).
+Filesystems are defined in `config/filesystems.php`.  They can point to the local filesystem, S3, or any [Flysystem adapter](https://flysystem.thephpleague.com/v2/docs/).
 
-### Private Containers
+### Private containers
 
 Sometimes it’s handy to store assets that shouldn’t be publicly visible through a direct URL or browser.
 
@@ -116,12 +197,12 @@ Private containers should be located above webroot. If you leave the disk within
 Make sure to also set the [visibility](#container-visibility) to `private`.
 
 
-### Container Visibility
+### Container visibility
 
-Your filesystem's disk can have a `visibility` which is an abstraction of file permissions. You can set it to `public` or `private`,
+Your filesystem's disk can have a `visibility`, which is an abstraction of file permissions. You can set it to `public` or `private`,
 which essentially controls whether they're accessible or not.
 
-Be sure to set `'visibility' => 'public',` if you want to be able to see, interact with, and manipulate files in your container.
+Be sure to set `'visibility' => 'public'` if you want to be able to see, interact with, and manipulate files in your container.
 
 :::tip
 If you're using a service based driver like Amazon S3, and you want the files to be accessible by URL, make sure you set the [visibility](#container-visibility) to `public`.
@@ -137,7 +218,7 @@ If you want to edit the blueprint file directly, you can do so in `resources/blu
 
 ## Ordering
 
-### Default Sort Order in Listings
+### Default sort order in listings
 
 You can choose which field and direction to sort the list of assets in the Control Panel by setting the `sort_by` and `sort_dir` variables in your container.yaml. By default the file name will be used.
 
@@ -148,11 +229,11 @@ Statamic uses Flysystem and includes the core `local` driver. S3, SFTP, and othe
 Flysystem is not limited to these three, however. There are adapters for many other storage systems. You can [create a custom driver](https://laravel.com/docs/filesystem#custom-filesystems) if you want to use one of these additional adapters in your Laravel application.
 
 
-## Frontend Templating {#templating}
+## Frontend templating {#templating}
 
 There are two main methods for working with Asset data on the frontend. The Assets Fieldtype, and the Assets Tag.
 
-### Assets Fieldtype
+### Assets fieldtype
 
 The [Assets Fieldtype](/fieldtypes/assets) can be used in your content Blueprints to attach assets to your entries, taxonomy terms, globals, or user accounts. It can be used to create image galleries, video players, zip downloads, or anything else you can think of.
 
@@ -162,33 +243,159 @@ All of the data stored on your Assets will be available on the frontend without
 
 If you had a `slideshow` field with a whole bunch of images selected, you can render them by looping through them.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <div class="slideshow">
     {{ slideshow }}
         <img src="{{ url }}" alt="{{ alt }}">
     {{ /slideshow }}
 </div>
 ```
+::tab blade
+```blade
+<div class="slideshow">
+  @foreach($slideshow as $image)
+      <img src="{{ $image->url }}" alt="{{ $image->alt }}">
+  @endforeach
+</div>
+```
+::
 
 Learn more about the [Assets Fieldtype](/fieldtypes/assets).
 
-### Assets Tag
+### Assets tag
 
 If you ever find yourself needing to loop over all of the assets in a container (or folder inside a container) instead of selecting them manually with the Assets Fieldtype, this is the way.
 
 #### Example
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ assets container="photoshoots" limit="10" sort="rating" }}
     <img src="{{ url }}" alt="{{ alt }}" />
 {{ /assets }}
 ```
+::tab blade
+```blade
+<statamic:assets
+  container="photoshoots"
+  limit="10"
+  sort="rating"
+>
+  <img src="{{ $url }}" alt="{{ $alt }}" />
+</statamic:assets>
+```
+::
 
 Learn more about the [Assets Tag](/tags/assets) and what you can do with it.
 
-### Manipulating Images
+### Manipulating images
 
 Statamic uses the [Glide library](https://glide.thephpleague.com/) to dynamically resize, crop, and manipulate images. It's really easy to use and has [its own tag](/tags/glide).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide:image width="120" height="500" filter="sepia" }}
 ```
+::tab blade
+```blade
+{{-- Using Statamic Tags --}}
+<statamic:glide
+  :src="$img"
+  width="120"
+  height="500"
+  filter="sepia"
+/>
+
+{{-- Using Fluent Tags --}}
+
+{{
+  Statamic::tag('glide')
+    ->src($img)
+    ->width(120)
+    ->height(500)
+    ->filter('sepia')
+    ->fetch()
+}}
+```
+::
+
+## Search indexes
+
+You can configure search indexes for your collections to improve the efficiency and relevancy of your users searches. Learn [how to connect indexes](search#connecting-indexes).
+
+## Allowed file extensions
+
+For security reasons, Statamic restricts the file extensions that can be uploaded via the Control Panel and the Assets field on [Forms](/forms).
+
+Common extensions like `.jpg`, `.csv` and `.txt` are permitted by default. To upload additional file extensions, specify them in `config/statamic/assets.php`:
+
+```php
+/*
+|--------------------------------------------------------------------------
+| Additional Uploadable Extensions
+|--------------------------------------------------------------------------
+|
+| Statamic will only allow uploads of certain approved file extensions.
+| If you need to allow more file extensions, you may add them here.
+|
+*/
+
+'additional_uploadable_extensions' => [
+    'gpx', 'vcf', // ...
+],
+```
+
+## SVG sanitization
+
+For security reasons, Statamic automatically sanitizes uploaded SVG files. 
+
+However, if you **trust your users** and need to upload SVG files without them being sanitization, you may disable it:
+
+```php
+/*
+|--------------------------------------------------------------------------
+| SVG Sanitization
+|--------------------------------------------------------------------------
+|
+| Statamic will automatically sanitize SVG files when uploaded to avoid
+| potential security issues. However, if you have a valid reason for
+| disabling this, and you trust your users, you may do so here.
+|
+*/
+
+'svg_sanitization_on_upload' => false,
+```
+
+## Custom cache stores
+
+Statamic leverages [Laravel's application cache](https://laravel.com/docs/cache) to cache asset metadata and folders. However, this means that whenever you run `php artisan cache:clear`, the cached asset information will be cleared.
+
+If you have a lot of assets and/or folders, you might want to specify a custom cache store so the cached assets are persisted when you clear your application cache.
+
+The cache store can be customized in `config/cache.php`.
+
+```php
+'asset_meta' => [
+    'driver' => 'file',
+    'path' => storage_path('statamic/asset-meta'),
+],
+'asset_container_contents' => [
+    'driver' => 'file',
+    'path' => storage_path('statamic/asset-container-contents'),
+],
+```
+
+To clear these caches, run `php please assets:clear-cache`.
+
+## Performance
+
+If you're using [custom asset cache stores](#custom-cache-stores) and you're experiencing performance issues with Assets, like slow queries or a slow asset browser, it might be worth moving your assets to the database using the Eloquent Driver. It takes a different approach to caching asset metadata, which sometimes works better for sites with more assets.
+
+You can find out more about [moving assets to the database here](https://statamic.dev/tips/storing-content-in-a-database#moving-content-to-the-database).
diff --git a/content/collections/docs/augmentation.md b/content/collections/docs/augmentation.md
index 607c9b93e..7282c3d06 100644
--- a/content/collections/docs/augmentation.md
+++ b/content/collections/docs/augmentation.md
@@ -19,11 +19,11 @@ Variables created "on the fly" with Front Matter won't be augmented.
 Let's look at an example with and without augmentation using the following `content`:
 
 ``` md
-## How to Jump Higher
+## How to jump higher
 Bend your knees more and then spring upwards a _lot_ faster.
 ```
 
-### With Augmentation
+### With augmentation
 
 If you're using a [Markdown field](/fieldtypes/markdown), the output will be as follows:
 
@@ -32,15 +32,15 @@ If you're using a [Markdown field](/fieldtypes/markdown), the output will be as
 <p>Bend your knees more and then spring upwards a <em>lot</em> faster.</p>
 ```
 
-### Without Augmentation
+### Without augmentation
 
-While using a [Textarea field](/fieldtypes/textarea) — which _is not_ augmented — the output will be exactly the same as the as input:
+While using a [Textarea field](/fieldtypes/textarea) — which _is not_ augmented — the output will be exactly the same as the input:
 
 ```text
   ## How to Jump Higher
   Bend your knees more and then spring upwards a _lot_ faster.
 ```
 
-## Digging Deeper
+## Digging deeper
 
 [Learn the inner workings of Augmentation](/extending/augmentation) and how to take advantage of it in your own addons and extensions.
diff --git a/content/collections/docs/blade-form-fields.md b/content/collections/docs/blade-form-fields.md
new file mode 100644
index 000000000..6a087b8ce
--- /dev/null
+++ b/content/collections/docs/blade-form-fields.md
@@ -0,0 +1,270 @@
+---
+id: e8504150-db55-4986-b567-19c046cc03de
+blueprint: page
+title: 'Blade Form Field Templates'
+intro: 'By default, [Pre-rendered Field](tags/form-create#prerendered-field-html) templates are implemented in Antlers. If you prefer to use Blade, you may use the following snippets as a starting point in your project.'
+---
+
+## Publishing Existing Templates
+
+You can publish the existing field templates by running `php artisan vendor:publish --tag=statamic-forms`. It will expose editable templates snippets in your `views/vendor/statamic/forms/fields` directory that will be used by each fieldtype.
+
+These templates are used when rendering the pre-rendered `field` variable inside a [form](/forms):
+
+```blade
+@foreach ($fields as $field)
+  <div class="mb-2">
+    <label class="block">{{ $field['display'] }}</label>
+    {!! $field['field'] !!}
+  </div>
+@endforeach
+```
+
+## Assets
+
+`resources/views/vendor/statamic/forms/fields/assets.blade.php`
+
+```blade
+@php
+  $isMultiple = ! isset($max_files) || $max_files !== 1;
+  $fieldName = $handle;
+
+  if ($isMultiple) {
+    $fieldName .= '[]';
+  }
+@endphp
+
+<input
+  type="file"
+  name="{{ $fieldName }}"
+  @if (isset($js_driver)) {!! $js_attributes !!} @endif
+  @if ($isMultiple) multiple @endif
+  @required(in_array('required', $validate ?? []))
+>
+```
+
+## Checkboxes
+
+`resources/views/vendor/statamic/forms/fields/checkboxes.blade.php`
+
+```blade
+@php
+  $inline = isset($inline) && $inline === true;
+@endphp
+
+<input type="hidden" name="{{ $handle }}[]">
+@foreach ($options as $option => $label)
+  <label>
+    <input
+      type="checkbox"
+      name="{{ $handle }}[]"
+      value="{{ $option }}"
+      @if (isset($js_driver)) {!! $js_attributes !!} @endif
+      @checked(in_array($option, $value ?? []))
+      @required(in_array('required', $validate ?? []))
+    >
+    {{ $label === null ? $option : $label }}
+  </label>
+  @unless ($inline) <br> @endunless
+@endforeach
+```
+
+## Default
+
+`resources/views/vendor/statamic/forms/fields/default.blade.php`
+
+```blade
+<input
+   type="{{ $input_type ?? 'text' }}"
+   name="{{ $handle }}"
+   value="{{ $value ?? '' }}"
+   @if (isset($placeholder)) placeholder="{{ $placeholder }}" @endif
+   @if (isset($character_limit)) maxlength="{{ $character_limit }}" @endif
+   @if (isset($js_driver)) {!! $js_attributes !!} @endif
+   @required(in_array('required', $validate ?? []))
+>
+```
+
+## Dictionary
+
+`resources/views/vendor/statamic/forms/fields/dictionary.blade.php`
+
+```blade
+@php
+  $isMultiple = ! isset($max_items) || $max_items !== 1;
+  $inline = isset($inline) && $inline === true;
+  $placeholderText = $placeholder ?? __('Please select...');
+
+  $fieldName = $handle;
+
+  if ($isMultiple) {
+    $fieldName .= '[]';
+  }
+@endphp
+
+<select
+  name="{{ $fieldName }}"
+>
+  @unless ($isMultiple)
+    <option value>{{ $placeholderText }}</option>
+  @endunless
+  @foreach ($options as $option => $label)
+    @php
+      $selected = false;
+
+      if ($isMultiple) {
+        $selected = in_array($option, $value ?? []);
+      } else {
+        $selected = $option == $value;
+      }
+    @endphp
+    <option
+      value="{{ $option }}"
+      @selected($selected)
+    >{{ $label === null ? $option : $label }}</option>
+  @endforeach
+</select>
+```
+
+## Files
+
+`resources/views/vendor/statamic/forms/fields/files.blade.php`
+
+```blade
+@php
+  $isMultiple = ! isset($max_files) || $max_files !== 1;
+  $fieldName = $handle;
+
+  if ($isMultiple) {
+    $fieldName .= '[]';
+  }
+@endphp
+
+<input
+  type="file"
+  name="{{ $fieldName }}"
+  @if (isset($js_driver)) {!! $js_attributes !!} @endif
+  @if ($isMultiple) multiple @endif
+  @required(in_array('required', $validate ?? []))
+>
+```
+
+## Radio
+
+`resources/views/vendor/statamic/forms/fields/radio.blade.php`
+
+```blade
+@php
+  $inline = isset($inline) && $inline === true;
+@endphp
+
+@foreach ($options as $option => $label)
+  <label>
+    <input
+      type="radio"
+      name="{{ $handle }}"
+      value="{{ $option }}"
+      @if (isset($js_driver)) {!! $js_attributes !!} @endif
+      @checked($value == $option)
+      @required(in_array('required', $validate ?? []))
+    >
+    {{ $label === null ? $option : $label }}
+  </label>
+  @unless ($inline) <br> @endunless
+@endforeach
+```
+
+## Select
+
+`resources/views/vendor/statamic/forms/fields/select.blade.php`
+
+```blade
+@php
+  $isMultiple = isset($multiple) && $multiple == true;
+  $inline = isset($inline) && $inline === true;
+  $placeholderText = $placeholder ?? __('Please select...');
+
+  $fieldName = $handle;
+
+  if ($isMultiple) {
+    $fieldName .= '[]';
+  }
+@endphp
+
+<select
+  name="{{ $fieldName }}"
+  @if (isset($js_driver)) {!! $js_attributes !!} @endif
+  @if ($isMultiple) multiple @endif
+  @required(in_array('required', $validate ?? []))
+>
+  @unless ($isMultiple)
+    <option value>{{ $placeholderText  }}</option>
+  @endunless
+  @foreach ($options as $option => $label)
+    @php
+      $selected = false;
+
+      if ($isMultiple) {
+        $selected = in_array($option, $value ?? []);
+      } else {
+        $selected = $option == $value;
+      }
+    @endphp
+    <option
+            value="{{ $option }}"
+            @selected($selected)
+    >{{ $label === null ? $option : $label }}</option>
+  @endforeach
+</select>
+```
+
+## Text
+
+`resources/views/vendor/statamic/forms/fields/text.blade.php`
+
+```blade
+<input
+  type="{{ $input_type ?? 'text' }}"
+  name="{{ $handle }}"
+  value="{{ $value ?? '' }}"
+  @if (isset($placeholder)) placeholder="{{ $placeholder }}" @endif
+  @if (isset($character_limit)) maxlength="{{ $character_limit }}" @endif
+  @if (isset($autocomplete)) autocomplete="{{ $autocomplete }}" @endif
+  @if (isset($js_driver)) {!! $js_attributes !!} @endif
+  @required(in_array('required', $validate ?? []))
+>
+```
+
+## Textarea
+
+`resources/views/vendor/statamic/forms/fields/textarea.blade.php`
+
+```blade
+<textarea
+  name="{{ $handle }}"
+  rows="5"
+  @if (isset($placeholder)) placeholder="{{ $placeholder }}" @endif
+  @if (isset($character_limit)) maxlength="{{ $character_limit }}" @endif
+  @if (isset($js_driver)) {!! $js_attributes !!} @endif
+  @required(in_array('required', $validate ?? []))
+>{{ $value }}</textarea>
+```
+
+## Toggle
+
+`resources/views/vendor/statamic/forms/fields/toggle.blade.php`
+
+```blade
+<label>
+  <input type="hidden" name="{{ $handle }}" value="0">
+  <input
+    type="checkbox"
+    name="{{ $handle }}"
+    value="1"
+    @if (isset($js_driver)) {!! $js_attributes !!} @endif
+    @checked($value && $value !== '0')
+    @required(in_array('required', $validate ?? []))
+  >
+  @if (isset($inline_label)) {{ $inline_label }} @endif
+</label>
+```
\ No newline at end of file
diff --git a/content/collections/docs/blade.md b/content/collections/docs/blade.md
index 7a75d02c5..897439062 100644
--- a/content/collections/docs/blade.md
+++ b/content/collections/docs/blade.md
@@ -8,18 +8,17 @@ intro: '[Antlers](/antlers) is not _always_ the best template engine for the job
 
 While Statamic's [Antlers](/antlers) template language is powerful, tightly integrated, and simple to learn, it's not the only way to build your frontend views.
 
-Antlers combines the responsibilities of Blade Templates _and_ [Controllers](/controllers) all at once. If you choose to **not** use Antlers, you _may_ need to create controllers and routes to fetch content and map them to templates depending on what you're doing.
+Antlers combines the responsibilities of Blade Templates _and_ [Controllers](/controllers) all at once. If you choose to **not** use Antlers, you _may_ need to create controllers and routes to fetch content and map them to templates depending on what you're doing. Want to write Antlers in your Blade templates? That's also possible by using the [@antlers](#writing-pure-antlers-in-blade) Blade directive.
 
-## How to Render a Template with Blade
+## How to render a template with Blade
 
-Instead of naming your views `myview.antlers.html` use `myview.blade.php` extension.
+Instead of naming your views `myview.antlers.html`, use `myview.blade.php` extension.
 
-
-## View Data
+## View data
 
 You will have access to the same data as you would in Antlers views.
 
-### Current Page
+### Current page
 
 The current page's data will be available in a `$page` variable, and you can access its values using a syntax similar to Eloquent models.
 
@@ -52,6 +51,10 @@ and it was sick.</p>
 Antlers outputs **unescaped** values by default, while `{{ $content }}` in Blade will be escaped. If you need to output unescaped HTML, use `{!! $content !!}`
 :::
 
+:::tip
+When on a custom route, the `$page` variable **won't** be available in your view. 
+:::
+
 ### Globals
 
 There is a variable for each global set, and its fields can be accessed using the same Eloquent style syntax.
@@ -66,7 +69,7 @@ data:
 {{ $settings->site_name }}
 ```
 
-### System Variables
+### System variables
 
 Top level [system variables](/variables#system-variables) like, `environment`, `logged_in`, etc will be available as dedicated variables.
 
@@ -95,8 +98,101 @@ If you use a method, it will give you a query builder and allow you to chain cla
 @endforeach
 ```
 
+### Cascade directive
+
+When using blade components or rendering views loaded by non-Statamic routes/controllers, the cascade data will be not available by default. In these situations you can use the `@cascade` directive to populate the current scope with cascade data.
+
+It works in exactly the same way as the `@props` directive used in blade components, with the ability to require certain values and provide default fallback values:
+
+```blade
+@cascade([
+    'site', // Will throw an exception if missing from the cascade
+    'my_global',
+    'page' => null, // Will use fallback if missing from the cascade
+    'live_preview' => false,
+])
+
+{{ $site->locale }}
+{{ $page?->title }}
+```
+
+It is also possible to populate the current scope with all cascade data if needed:
+
+```blade
+@cascade
+```
+
+## Writing pure Antlers in Blade 🆕
+
+By using the `@antlers` and `@endantlers` Blade directive pair you can write pure Antlers in your Blade templates.
+
+```antlers
+@antlers
+    {{ collection:articles }}
+        {{ title }}
+    {{ /collection:articles }}
+@endantlers
+```
+
+Under the hood, this is syntactic sugar for creating an Antlers partial and does an on-the-fly `@include('antlers_file_name_here')` for you. This means that variables created _inside_ the Antlers will not be available _outside_ of the `@antlers` directive.
 
-## Using Tags with Blade 🆕
+## Using Antlers Blade components
+
+Despite the name, Antlers Blade Components are a Blade-only feature that allows you to use existing tags inside your Blade templates using a custom tag syntax. For example, you can gather all entries from a "pages" collection using the [collection](/tags/collection) tag like so:
+
+```blade
+<s:collection:pages>
+  {{ $title }}
+</s:collection:pages>
+```
+
+In the previous example, you may have noticed the `s:` prefix. To use Antlers Blade Components we must prefix the tag name with either `s:` or `statamic:` (`s-` and `statamic-` also work).
+
+We can pass multiple parameters to the tag like so:
+
+```blade
+<s:collection
+  from="pages"
+  limit="2"
+  sort="title:desc"
+>
+  {{ $title }}
+</s:collection>
+```
+
+We can also pass dynamic values to parameters:
+
+```blade
+@php
+  $collection = 'pages';
+@endphp
+
+<s:collection
+  :from="$collection"
+  limit="2"
+  sort="title:desc"
+>
+  {{ $title }}
+</s:collection>
+```
+
+### Antlers Blade components and partials
+
+Partials also work with Antlers Blade components, and are intended to be used when you'd like to include an Antlers partial inside your Blade template:
+
+```blade
+<s:partial/the-partial-name>
+  <s:slot:header>The header content.</s:slot:header>
+
+  Default slot content.
+</s:partial/the-partial-name>
+```
+
+:::tip
+If you are going all-in on Blade for a new project, you should consider sticking to Blade features such as `@include` or Blade components instead of reaching for the `partial` tag.
+:::
+
+## Using fluent tags with Blade
 
 You can use [Tags](/tags) in Blade templates with a Laravel-style fluent syntax. Instantiate your tag with the `Statamic::tag()` method and chain parameters as needed.
 
@@ -116,7 +212,7 @@ You can use [Tags](/tags) in Blade templates with a Laravel-style fluent syntax.
 When using multi-word parameters, like `query_scope`, you must use the camelCased version (`queryScope`).
 :::
 
-### Using Explicit Parameter Setters
+### Using explicit parameter setters
 
 If you need to set a parameter containing a colon (ie. a [filter](/tags/collection#filtering) param), you can use the dedicated `param()` setter method:
 
@@ -133,7 +229,7 @@ Statamic::tag('collection:pages')->params([
 ])
 ```
 
-### Passing Contextual Data
+### Passing contextual data
 
 You can pass in contextual data to the tag using the `context($data)` method:
 
@@ -163,8 +259,42 @@ For tags that provide pagination, you can `fetch` the tag's output in a variable
 {{ $tag['paginate']['auto_links'] }}
 ```
 
+### Directive {#tag-directive}
+
+You may prefer to use an alternate syntax, available via a `@tags` Blade directive.
+
+Passing a string will give you the camelCased version of the tag as a variable:
+
+```blade
+@tags('collection:blog')
+
+@foreach($collectionBlog as $post) ... @endforeach
+```
+
+Passing an array of tags can provide multiple variables:
+
+```blade
+@tags(['collection:blog', 'collection:items'])
+
+@foreach($collectionBlog as $post) ... @endforeach
+
+@foreach($collectionItems as $item) ... @endforeach
+```
+
+You may also pass an array of tags, and parameters, with variable names as the keys:
+
+```blade
+@tags([
+    'posts' => ['collection:blog' => ['limit' => 5]], 
+    'items' => ['collection:items' => ['limit' => 5]],
+])
 
-## Using Modifiers with Blade 🆕
+@foreach($posts as $post) ... @endforeach
+
+@foreach($items as $item) ... @endforeach
+```
+
+## Using modifiers with Blade
 
 You can also use [Modifiers](/modifiers) in Blade templates with a Laravel-style fluent syntax. Wrap your value with the `Statamic::modify()` method and chain modifiers as needed. The value will get passed along in sequence like it does in Antlers. Any parameters should be specified like regular PHP parameters. If you use a modifier that can take more than one parameter, pass those in as an array.
 
@@ -182,6 +312,39 @@ I wanted to say more but got cut off...
 When using multi-word modifiers, like `ensure_right`, you must use the camelCased version (`ensureRight`).
 :::
 
+If you're using a lot of modifiers in your Blade template, you can also include the `modify` helper function in your template:
+
+```blade
+@php
+  use function Statamic\View\Blade\{modify};
+@endphp
+
+{{ modify('test')->stripTags()->backspace(1)->ensureRight('!!!') }}
+{{ modify('test')->stripTags()->safeTruncate([42, '...']) }}
+```
+
+## Conditional logic and values
+
+Depending on where you got a value from, it may be wrapped in a class like `Value`. These can lead to unexpected results in conditional logic if they are not handled correctly (i.e., calling `->value()` in the condition).
+
+If you'd prefer to not think about that, you can include the `value` helper function into your template, which will take care of this for you:
+
+```blade
+@php
+  use function Statamic\View\Blade\{value};
+@endphp
+
+@if (value($theVariableName))
+  ...
+@endif
+```
+
+The `value` helper function will handle the following scenarios for you:
+
+* `Statamic\Fields\Value` objects (calls `->value()`)
+* `Statamic\Fields\Values` objects (calls `->all()`)
+* `Statamic\Tags\FluentTag` objects (calls `->fetch()`)
+* `Statamic\Modifiers\Modify` objects (calls `->fetch()`)
 
 ## Layouts
 
@@ -239,7 +402,7 @@ The template contents
 </html>
 ```
 
-### Passing Context into Components
+### Passing context into components
 
 If you are using Blade components for your layout rather than Blade directives, you might want to pass the view context into your layout for access by child components. You can do so with the special `$__data` variable in the layout root, and the `@aware` directive in the child. Here's how:
 
@@ -310,11 +473,11 @@ Last, use the `@aware` directive in any child component of your layout to access
 </div>
 ```
 
-## Routes and Controllers
+## Routes and controllers
 
 If you choose to take a more "traditional" Laravel application approach to building your Statamic site, you can use routes and controllers much the same way you might with Eloquent models instead of Statamic's native collection routing and data cascade. Here's an example:
 
-**The Routes**
+### The routes
 
 ```php
 use App\Http\Controllers\BlogController;
@@ -323,7 +486,8 @@ Route::get('/blog', [BlogController::class, 'index']);
 Route::get('/blog/{slug}', [BlogController::class, 'show']);
 ```
 
-**The Controller**
+### The controller
+
 ```php
 <?php
 namespace App\Http\Controllers;
@@ -355,7 +519,8 @@ class BlogController extends Controller
 }
 ```
 
-**The Index View**
+### The index view
+
 ```blade
 <h1>The Blog</h1>
 
@@ -370,7 +535,8 @@ class BlogController extends Controller
 </div>
 ```
 
-**The Show View**
+### The show view
+
 ```blade
 <header>
     <h1>{!! $title !!}</h1>
diff --git a/content/collections/docs/blueprints.md b/content/collections/docs/blueprints.md
index fbf548bbd..790fe846a 100644
--- a/content/collections/docs/blueprints.md
+++ b/content/collections/docs/blueprints.md
@@ -19,7 +19,7 @@ Each blueprint belongs to an item:
 - Users all share a Blueprint.
 
 <figure>
-    <img src="/img/blueprints.png" alt="The Statamic 3 blueprint configuration screen">
+    <img src="/img/blueprints.png" alt="The Statamic blueprint configuration screen">
     <figcaption>A glimpse at configuring a blueprint.</figcaption>
 </figure>
 
@@ -79,7 +79,7 @@ It’s possible to have fields be displayed only under certain conditions. For e
     <figcaption>The conditional field rule builder</figcaption>
 </figure>
 
-To learn what's possible and how implement the various rules, head over to the article on [conditional fields](/conditional-fields).
+To learn what's possible and how to implement the various rules, head over to the article on [conditional fields](/conditional-fields).
 
 ## YAML Structure
 
@@ -158,7 +158,7 @@ Here, the `display` and `validate` would replace whatever was defined in the fie
 
 ### Importing Fieldsets
 
-Fieldsets still exist in Statamic 3! They serve to create reusable sets of fields, just like v2. You may import an entire fieldset at any point by using the `import` key, for example:
+Fieldsets serve to create reusable sets of fields. You may import an entire fieldset at any point by using the `import` key, for example:
 
 ``` yaml
 # blueprint
@@ -215,20 +215,20 @@ If you omit the `prefix` you won't be able to import them more than once at the
 
 Fields can have various validation rules applied to them, enforcing the need for content creators to fill them out in a specific way before saving or publishing.
 
-While configuring a field, switch to the **Validation** tab where you can choose from [any built in Laravel rule](https://laravel.com/docs/8.x/validation#available-validation-rules).
+While configuring a field, switch to the **Validation** tab where you can choose from [any built in Laravel rule](https://laravel.com/docs/12.x/validation#available-validation-rules).
 
 On top of any Laravel validation rules, there are some Statamic-specific goodies (like usage with conditional fields, Grids, Bards, or Replicators) that are explained on our [dedicated validation documentation](/validation).
 
-## Grid Fieldtype
+## Grid fieldtype
 
 The [Grid fieldtype](/fieldtypes/grid) lets you define a set of sub-fields, which it will allow you to repeat as many times as you like.
 
 You should define its fields using the blueprint field syntax. This will allow you to reference other fields and/or import entire fieldsets.
 
-<div class="screenshot">
+<figure>
     <img src="/img/grid.png" alt="An example grid field" />
-    <div class="caption">This is an example Grid field.</div>
-</div>
+    <figcaption>This is an example Grid field.</figcaption>
+</figure>
 
 ``` yaml
 links:
@@ -246,7 +246,7 @@ links:
 ```
 
 
-## Unlisted Fields
+## Unlisted fields
 
 While [conditional fields](#conditional-fields) allow you to control field visibility on the publish form, you may also customize column visibility on **entry listings** in the control panel.
 
diff --git a/content/collections/docs/caching.md b/content/collections/docs/caching.md
index c6b33e79b..579a58898 100644
--- a/content/collections/docs/caching.md
+++ b/content/collections/docs/caching.md
@@ -25,13 +25,13 @@ php please stache:warm
 php please stache:refresh
 ```
 
-The are settings you can configure to improve the performance of the stache, just like with a relational database. [Learn more about the Stache](/stache) and it's various settings.
+There are settings you can configure to improve the performance of the stache, just like with a relational database. [Learn more about the Stache](/stache) and its various settings.
 
 :::tip
 **You cannot disable the stache** &mdash; it is critical architecture.
 :::
 
-## Application Cache
+## Application cache
 
 **Purpose:** _Make site faster_
 
@@ -51,7 +51,7 @@ php artisan cache:clear
 The Stache is stored **inside** the application cache, so if you clear it, you don't need to _also_ clear the Stache.
 :::
 
-## View Fragments
+## View fragments
 
 **Purpose:** _Make a view faster_
 
@@ -59,13 +59,23 @@ There are times when you may want to simply cache a section of an Antlers templa
 
 Wrap your markup in `{{ cache }}` tags, specify a duration, and your site is zippy and, one might say, quite delicious once again.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cache for="1 hour" }}
   something impressive but slow here
 {{ /cache }}
 ```
+::tab blade
+```blade
+<s:cache for="1 hour">
+  something impressive but slow here
+</s:cache>
+```
+::
 
-## Static Caching
+## Static caching
 
 **Purpose:** _Ultimate speed at the cost of dynamic features_
 
diff --git a/content/collections/docs/cli.md b/content/collections/docs/cli.md
index 431edc8bd..f791ff195 100644
--- a/content/collections/docs/cli.md
+++ b/content/collections/docs/cli.md
@@ -35,32 +35,44 @@ Every command also includes a help screen which displays and describes the comma
 php please help make:user
 ```
 
-## Available Commands {#commands}
+## Available commands {#commands}
 
 You can see the list of available commands in your terminal by running `php please list`. But for those who don't feel like it, haven't installed yet, or are scared of the command line, here they are also.
 
 | Command | Description |
 |---------|-------------|
+| `install`          | Install Statamic |
+| `list`             | List all the Statamic commands |
+| `multisite`        | Converts from a single to multisite installation |
 | `addons:discover`  | Rebuild the cached addon package manifest |
+| `assets:clear-cache` | Clear the `asset_meta` and `asset_container_contents` cache stores |
 | `assets:generate-presets` | Generate asset preset manipulations |
 | `assets:meta`      | Generate asset metadata files |
 | `auth:migration`   | Generate Auth Migrations |
+| `eloquent:import-groups` | Imports file based groups into the database. |
+| `eloquent:import-roles` | Imports file based roles into the database. |
+| `eloquent:import-users` | Imports file based users into the database. |
+| `flat:camp` | Flat Camp ⛺ |
 | `glide:clear`      | Clear the Glide image cache |
-| `install`          | Install Statamic |
-| `list`             | List all the Statamic commands |
-| `make:action`      | Create a new action addon |
+| `install:collaboration` | Installs the Statamic Collaboration addon and enables broadcasting in Laravel. |
+| `install:eloquent-driver` | Install & configure Statamic's Eloquent Driver package |
+| `install:ssg` | Install & configure Statamic's Static Site Generator package |
+| `license:set` | Set Statamic license key in .env |
+| `make:action`      | Create a new action |
 | `make:addon`       | Create a new addon |
-| `make:filter`      | Create a new filter addon |
-| `make:fieldtype`   | Create a new fieldtype addon |
-| `make:modifier`    | Create a new modifier addon |
-| `make:scope`       | Create a new query scope addon |
-| `make:tag`         | Create a new tag addon |
+| `make:dictionary`  | Create a new dictionary |
+| `make:fieldtype`   | Create a new fieldtype |
+| `make:filter`      | Create a new filter |
+| `make:modifier`    | Create a new modifier |
+| `make:scope`       | Create a new query scope |
+| `make:tag`         | Create a new tag |
 | `make:user`        | Create a new user account |
-| `make:widget`      | Create a new widget addon |
-| `multisite`        | Converts from a single to multisite installation |
-| `site:clear`       | Start a fresh site, wiping away all content |
+| `make:widget`      | Create a new widget |
+| `nocache:migration` | Generate Nocache Migrations |
+| `pro:enable`      | Enable Statamic Pro in .env |
 | `search:insert`    | Insert an item into its search indexes |
 | `search:update`    | Update a search index |
+| `site:clear`       | Start a fresh site, wiping away all content |
 | `stache:clear`     | Clear the "Stache" cache |
 | `stache:doctor`    | Diagnose any problems with the Stache. |
 | `stache:refresh`   | Clear and rebuild the "Stache" cache |
@@ -73,7 +85,7 @@ You can see the list of available commands in your terminal by running `php plea
 | `support:zip-blueprint`  | Create a zip file with a blueprint and all fieldset imports |
 | `updates:run`      | Run update scripts from a specific version |
 
-## Additional Reading
+## Additional reading
 
 Read more about [Artisan][artisan] at Laravel.com.
 
diff --git a/content/collections/docs/code-of-conduct.md b/content/collections/docs/code-of-conduct.md
index 07eeb4985..bf8202ce2 100644
--- a/content/collections/docs/code-of-conduct.md
+++ b/content/collections/docs/code-of-conduct.md
@@ -5,7 +5,7 @@ title: 'Code of Conduct'
 updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
 updated_at: 1632425727
 ---
-This is the Statamic Code of Conduct. By participating here, you are expected to uphold this code like a knight of old. This code of conduct applies to all spaces used by the Statamic community for communication. This includes the Statamic Discord, forums, GitHub, Twitter, Facebook, meetups, conferences, and any other relevant forums. If you believe someone is voilating the code of conduct, we ask that you report it by contacting us at [statamic.com/support](https://statamic.com/support). Your identity will remain confidential.
+This is the Statamic Code of Conduct. By participating here, you are expected to uphold this code like a knight of old. This code of conduct applies to all spaces used by the Statamic community for communication. This includes the Statamic Discord, forums, GitHub, Twitter, Facebook, meetups, conferences, and any other relevant forums. If you believe someone is violating the code of conduct, we ask that you report it by contacting us at [statamic.com/support](https://statamic.com/support). Your identity will remain confidential.
 
 - **Treat others in the way you want to be treated.** Respect each other, we’re all on the same team here so let’s have fun, share what we know, and hopefully learn something new! No bullying, harassment, foul language, racism, sexism, or other negative "isms". Generally, just be awesome to each other.
 
@@ -13,4 +13,4 @@ This is the Statamic Code of Conduct. By participating here, you are expected to
 
 - **Don’t be afraid to ask.** There is no such thing as a dumb question. We’re all here to learn and we encourage people to ask questions about anything Statamic-related.
 
-- **Don't bash other platforms** (e.g. WordPress, Craft, ExpressionEngine, etc). They all serve their purposes, markets, and provide livelihoods for thousands of developers. Please be welcoming to those coming from those communities to check out Statamic. Hopefully they'll find something they love, but it won't happen every time. :blush:
\ No newline at end of file
+- **Don't bash other platforms** (e.g. WordPress, Craft, ExpressionEngine, etc). They all serve their purposes, markets, and provide livelihoods for thousands of developers. Please be welcoming to those coming from those communities to check out Statamic. Hopefully they'll find something they love, but it won't happen every time. :blush:
diff --git a/content/collections/docs/collections.md b/content/collections/docs/collections.md
index 4b5a19c13..dcf51f21d 100644
--- a/content/collections/docs/collections.md
+++ b/content/collections/docs/collections.md
@@ -12,6 +12,7 @@ related_entries:
   - a6a956fd-647d-4503-9a4a-3b24198e6e73
   - 54548616-fd6d-44a3-a379-bdf71c492c63
   - cb21fabb-65ba-4869-9acd-f6aa2fb58a01
+  - 420f083d-99be-4d54-9f81-3c09cb1f97b7
 ---
 ## Overview
 
@@ -43,7 +44,7 @@ We're going to pretend it's currently the summer of '99 and we are journalists c
 Here's an entry we might write about the event.
 
 <figure>
-    <img src="/img/entry-tony-hawk.png" alt="An entry being edited in the Statamic 3 control panel">
+    <img src="/img/entry-tony-hawk.png" alt="An entry being edited in the Statamic control panel">
     <figcaption>Entry publishing with only the default content fields.</figcaption>
 </figure>
 
@@ -58,9 +59,9 @@ id: 3a28f050-f8d2-4a56-ba8a-314a9d46bf38
 It took skateboarding legend Tony Hawk 11 tries, but he finally landed a 900 at the 1999 Summer X Games in a moment that launched the sport into popular consciousness in a new way.
 ```
 
-You can create, edit, and delete entries in the control panel _or_ filesystem, it's up to you and your preference in the heat of moment. Let your passion carry you away.
+You can create, edit, and delete entries in the control panel _or_ filesystem, it's up to you and your preference in the heat of the moment. Let your passion carry you away.
 
-### View Data
+### View data
 
 Each entry has its own unique URL. When you're on it, all of the entry's data will be available in your views as variables. If an entry is _missing_ data, intentionally or not, it will fall back to a series of defaults. We call this fallback logic [the cascade](/cascade).
 
@@ -70,8 +71,7 @@ If a value doesn't exist in one place, it'll check the next place, then the next
 2. The origin entry (if using localization)
 3. The collection
 
-
-### Setting Default Data {#inject}
+### Setting default data {#inject}
 
 **Injecting** data into your collection allows you to provide default values for your entries. If entries have these variables set, they will override the collection _defaults_, but not any data set on the entries themselves.
 
@@ -124,6 +124,16 @@ title_format:
   fr: '{stars} étoiles par {author:name}'
 ```
 
+It's worth noting that changes to a collection's title format won't change the titles of existing entries. For it to take effect, you will need to re-save your existing entries.
+
+:::tip
+To use modifiers in title formats, make sure to use the `{{` Antlers syntax, like this:
+
+```antlers
+{{ headline | ucfirst }}
+```
+:::
+
 ## Slugs
 
 Slugs are what you would typically use in entry URLs. For an entry named `My Entry`, the slug might be `my-entry`.
@@ -144,7 +154,6 @@ This will prevent collections from automatically adding a slug field.
 Since Statamic stores entries as files, it uses the slug for the filename. If you disable slugs, it will use the ID instead. (e.g. `my-entry.md` vs. `123.md`)
 :::
 
-
 ## Dates
 
 If your collection requires a date, as they often do, you can decide how Statamic uses it to control default visibility. For example, you can choose to have dates set in the future to be private (404), which effectively allows you to schedule their publish date.
@@ -156,7 +165,7 @@ Alternatively, you could have _past_ dates be private which would make entries a
     <figcaption>Just imagine! This could be you, configuring date behaviors.</figcaption>
 </figure>
 
-### Available Date Behaviors
+### Available date behaviors
 
 Each of these behaviors is available for future and past dates.
 
@@ -168,7 +177,7 @@ Each of these behaviors is available for future and past dates.
 Date behaviors are _defaults_. They can be overridden at the [tag level](/tags/collection) in your templates.
 :::
 
-### Date Behavior and Published Status
+### Date behavior and published status
 
 You can override [date behavior visibility settings](#available-date-behaviors) on an entry-by-entry basis by setting `published: false` on your entry.
 
@@ -188,20 +197,26 @@ We recommend [filtering](/tags/collection#published-status) and [querying](/repo
     <figcaption>Filter by entry status in your collection listings.</figcaption>
 </figure>
 
-
 ## Time
 
-To get more granular and introduce _time_, add a [date field](/fieldtypes/date) named `date` to your blueprint and Statamic will respect however you configure it. You can use this approach to have entries publish at a **specific times**, e.g. `11:45am`.
+To get more granular and introduce _time_, add a [date field](/fieldtypes/date) named `date` to your blueprint and Statamic will respect however you configure it. You can use this approach to have entries publish at a **specific time**, e.g. `11:45am`.
 
 :::tip
 If you don't enable the time, all entries on a given day will assume a default time of midnight, or `00:00`. If you want to make sure that multiple entries on the same day are ordered in the order you published them, turn the time on.
 :::
 
+## Scheduling
+
+If you've added a date and/or time to your entries in order to "schedule" them, you may need to set up the scheduler in order for Statamic to properly invalidate things.
+
+For example, you might need things to happen exactly when an entry is scheduled, like refreshing a cached blog listing, or sending a notification.
+
+[Learn how to use the scheduler](/scheduling)
+
 ## Ordering
 
 Flick on the "Orderable" switch in a collection's settings and you'll have a drag and drop UI in the control panel to order the entries. The collection is now "structured". Learn more about [structures](/structures).
 
-
 <figure>
     <img src="/img/collection-structure.png" alt="An orderable collection">
     <figcaption>You can tell these entries are orderable because of the way they are.</figcaption>
@@ -220,13 +235,19 @@ A structured collection will **not** have a maximum depth unless you set one, al
     <figcaption>These reorderable entries have a max depth of 1.</figcaption>
 </figure>
 
-### Default Sort Order in Listings
+### Default sort order in listings
+
+For non-structured collections, you can choose which field and direction to sort the list of entries in the Control Panel by setting the `sort_by` and `sort_dir` variables in your collection.yaml. By default, the Title field will be used.
 
-For non-structured collections, you can choose which field and direction to sort the list of entries in the Control Panel by setting the `sort_by` and `sort_dir` variables in your collection.yaml. By default the Title field will be used.
+### Root page
+
+If you specify that your collection should "expect a root page", the first item in the tree UI will be considered the root. This entry will _not_ use a slug in its URI.
+
+The most common usage for this is to define a home page in a pages' collection. In this example, the root page's url would be `/` instead of `/home`.
 
 ## Routing
 
-Entries receive their URLs from their collection's route setting. You can use standard meta variables in addition to the variables from the collection's blueprint to define your route rule.
+Entries receive their URLs from their collection's route setting. You can use standard meta variables in addition to the variables from the collection's blueprint to define your route rule. You can even use [computed values](/computed-values) or Antlers to do advanced things.
 
 ``` yaml
 route: /blog/{slug}
@@ -260,31 +281,56 @@ Statamic does not automatically define route rules. If you want entries in your
 
 Here are a few examples of possible route rules for inspiration. 💡
 
-#### Wordpress Style
+#### Wordpress style
+
 ``` yaml
 route: /news/{year}/{month}/{day}/{slug}
 # example: /news/2019/01/01/happy-new-year
 ```
 
 #### For when you don't care about SEO
+
 ``` yaml
 route: /{id}
 # example: /12345-1234-321-12345
 ```
 
 #### For when you care _too much_ about SEO
+
 ``` yaml
 route: /{parent_uri}/{slug}.html
 # example: /details/project.html
 ```
 
 #### Organizing sports brackets with structures
+
+Here's how we use the `depth` variable, along with the `team_name` field from the entry's blueprint.
+
 ``` yaml
-route: /tournament/round-{depth}/{team}
+route: /tournament/round-{depth}/{team_name}
 # example: /tournament/round-4/chicago-bulls
 ```
 
-#### Organizing gaming articles
+#### Using fields from related entries
+
+For example, if you have a `category` field in your Products collection and you'd like for your product URLs to depend on it, you can configure a [computed value](/computed-values) to return the category URL, then use that computed value in your collection's route:
+
+``` php
+// app/Providers/AppServiceProvider.php
+
+use Statamic\Facades\Collection;
+
+Collection::computed('products', 'category_url', function ($entry, $value) {
+    return $entry->category?->url();
+});
+```
+
+``` yaml
+route: '{{ category_url }}/{{ slug }}'
+# example: /categories/wooden-toys/steam-locomotive
+```
+
+#### Using Antlers to organize gaming articles
 
 You can even use Antlers to get more complicated. Here we'll include the [mounted](#mounting) entry at the top level.
 
@@ -322,16 +368,24 @@ The following redirects are supported:
 - external links (starting with `http`)
 - internal links (starting with `/`)
 - other entries or terms (eg. `entry::id-of-entry` or `term::id-of-term`)
-- it's first child page (`@child`) - If there are no child pages you will get a 404
+- its first child page (`@child`) - If there are no child pages you will get a 404
 - a `404` response
 
-Any other strings will be assumed to be a relative link. (eg. if the page URL is `/my/page` and you have `redirect: is/here`, you will be redirected to `/my/page/is/here`)
+Any other strings will be assumed to be a relative link. For example: if the page URL is `/my/page` and you have `redirect: is/here` in your entry, you will be redirected to `/my/page/is/here`.
+
+By default, Statamic will return a 302 status code when redirecting. To return a different status code, make the `redirect` an array with a `status` key:
+
+```yaml
+redirect:
+    url: http://booking.mysite.com
+    status: 301
+```
 
 :::tip
 Entries with redirects will get filtered out of the [collection](/tags/collection) tag by default. You can include them by adding a `redirects="true"` parameter.
 :::
 
-### Entry Link Blueprint
+### Entry link blueprint
 
 When a Collection is structured and you have set `Entries in this collection may contain links (redirects) to other entries or URLs.` on in the collection settings, you will be presented with the option to create "Links" along with any other available blueprints when you try to create an entry.
 
@@ -339,11 +393,11 @@ This will load a behind-the-scenes blueprint containing `title` and `redirect` f
 
 ## Taxonomies
 
-In Statamic 3, [taxonomies](/taxonomies) are defined on the _collection level_, not the blueprint-level. This enforces a tighter content-model, and reduces complexity when configuring blueprints.
+[Taxonomies](/taxonomies) are defined on the _collection level_, not the blueprint-level. This enforces a tighter content-model, and reduces complexity when configuring blueprints.
 
 Let's imagine you have a **product** collection. Each entry is a product, and each product _has one or more_ categories. Thus set, no matter what blueprints you configure, each will have a **categories** field in the sidebar. You'll be able to access any categories on your entries with a `{{ categories }}` variable loop.
 
-### Taxonomies Setting
+### Taxonomies setting
 
 ``` yaml
 taxonomies:
@@ -363,9 +417,9 @@ You may mount a collection onto an entry as a way of saying "all these entries b
     <figcaption>Look at those add and edit links!</figcaption>
 </figure>
 
-### Mount Setting
+### Mount setting
 
-You can mount a collection to an entry in the collection configure page (or by specifying the ID of the desired entry in the collection's YAML config file). For example, you might mount a **tropical fish** collection to a **aquarium** entry page.
+You can mount a collection to an entry in the collection configure page (or by specifying the ID of the desired entry in the collection's YAML config file). For example, you might mount a **tropical fish** collection to an **aquarium** entry page.
 
 Now you can use `mount` variable in the route to automatically prepend the mounted entry's URL. So for example, if you mounted a collection to `/aquarium` with `/{mount}/{slug}`, all your fish URLs will follow the `/aquarium/entry-url` pattern. If you later move `/aquarium` to `/house-of-fishies`, all your entries will automatically update with `/house-of-fishies/entry-url`.
 
@@ -375,6 +429,38 @@ mount: id-of-the-aquarium-entry
 route: '/{mount}/{slug}'
 ```
 
+### Looping through mounted entries
+
+You can loop through all entries in the mounted collection easily by using the `{{ collection }}` tag and setting the `from` value to bind to the mounted collection using `mount`, like so.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ collection :from="mount" }}
+    {{ title }}
+{{ /collection}}
+```
+
+::tab blade
+```blade
+<statamic:collection
+  :from="$mount"
+>
+  {{ $title }}
+</statamic:collection>
+```
+
+::
+
+:::tip
+If you are coming from Statamic 2, you might have used the `{{ entries }}` tag pair to loop through mounted collections. That tag is no longer available, and instead, you should use the above approach.
+:::
+
+## Search indexes
+
+You can configure search indexes for your collections to improve the efficiency and relevancy of your users' searches. Learn [how to connect indexes](search#connecting-indexes).
+
 ## Revisions
 
 Revisions allow you to see the history of any given entry over time. Revisions need to be enabled on the site level ([read those docs](/revisions)), and then you can enable them for any collection.
diff --git a/content/collections/docs/computed-values.md b/content/collections/docs/computed-values.md
index 0afbe7fb0..a514a9c9a 100644
--- a/content/collections/docs/computed-values.md
+++ b/content/collections/docs/computed-values.md
@@ -8,11 +8,11 @@ id: 0327afd5-469b-4119-a75e-2bfe9389eb05
 
 Think of computed values as virtual fields that can be composed from any source. You could be grabbing a value from a secondary local database, a 3rd party API, or even by composing a dynamic value from other fields on the entry itself.
 
-## Setting Computed Values
+## Setting computed values
 
 Inside a service provider's `boot` method, you can configure dynamic computed field data on [Collections](/collections) and [Users](/users) using the provided `computed()` helper on the relevant Facade.
 
-### On User Instances
+### On user instances
 
 For example, maybe you wish to return a user's `balance` using a 3rd party invoicing API:
 
@@ -24,19 +24,42 @@ User::computed('balance', function ($user, $value) {
 });
 ```
 
-### On Entry Instances
+### On entry instances
 
-Or maybe you wish to return a `shares` count on entries within your `articles` collection using 3rd party social media API:
+Or maybe you wish to return a `shares` count on entries within your `articles` collection using a 3rd party social media API:
 
 ```php
 use Statamic\Facades\Collection;
 
 Collection::computed('articles', 'shares', function ($entry, $value) {
-    return TweeterService::shareCount($entry->permalink);
+    return TooterService::shareCount($entry->permalink);
 });
 ```
 
-### Overriding Using Stored Values
+If you want to use the same computed value across multiple collections, you may provide an array of collections instead:
+
+```php
+use Statamic\Facades\Collection;
+
+Collection::computed(['articles', 'pages'], 'shares', function ($entry, $value) {
+    return TooterService::shareCount($entry->permalink);
+});
+```
+
+You can also provide multiple computed values for the same collection using an associative array:
+
+```php
+Collection::computed('articles', [
+    'shares' => function ($entry, $value) {
+        return TooterService::shareCount($entry->permalink);
+    },
+    'likes' => function ($entry, $value) {
+        return TooterService::likeCount($entry->permalink);
+    },
+]);
+```
+
+### Overriding using stored values
 
 The second `$value` parameter in the `computed()` callback function will return a _stored_ value under the same handle, if one exists, allowing you to override computed values if necessary.
 
@@ -59,27 +82,31 @@ If you plan on accessing data through a 3rd party API, or even computing values
 You can use Laravel's [Cache](https://laravel.com/docs/cache#cache-usage) facade to store and retrieve cached values within your computed callback function.
 :::
 
-## Getting Computed Values
+## Getting computed values
 
 Once configured, you can simply access your computed values as properties on your instances (ie. `$user->balance` or `$entry->shares`).
 
-### Showing Computed Values in the Control Panel
+:::tip
+Computed values are only available for **top-level** fields. You can't use them inside Replicator or Grid fields. Likewise, computed values can't be queried as they're only evaluated after the query has been executed.
+:::
+
+### Showing computed values in the control panel
 
 Or view your computed values in the control panel if you configure your blueprint to allow for it. The first step is to add a field with your computed value's `handle`:
 
-<figure class="mt-0 mb-8">
+<figure>
     <img src="/img/computed-field-handle.png" alt="Computed field handle">
 </figure>
 
 Next, set your field `Visibility` to `Computed`. This will ensure your field is displayed on your Publish Form as a read-only field [that will not store any data on save](/fields#field-data-flow):
 
-<figure class="mt-0 mb-8">
+<figure>
     <img src="/img/computed-field-visibility.png" alt="Computed field visibility config">
 </figure>
 
 You may also show this field as a column on your listings using the `Listable` setting, as shown above:
 
-<figure class="mt-0 mb-8">
+<figure>
     <img src="/img/computed-field-listing.png" alt="Computed field visibility config">
     <figcaption>One of us never has credit card debt, but who's complaining?</figcaption>
 </figure>
diff --git a/content/collections/docs/conditional-fields.md b/content/collections/docs/conditional-fields.md
index a10beb601..8ae11a03f 100644
--- a/content/collections/docs/conditional-fields.md
+++ b/content/collections/docs/conditional-fields.md
@@ -4,6 +4,9 @@ intro: Show and hide fields in your publish forms based on conditions and trigge
 template: page
 id: dd52c1f6-661b-4408-83c6-691fa341aaa7
 blueprint: page
+related_entries:
+  - aa96fcf1-510c-404b-9b63-cea8942e1bf8
+  - 54548616-fd6d-44a3-a379-bdf71c492c63
 ---
 ## Overview
 
@@ -16,10 +19,12 @@ Field conditions are set on individual field settings in [blueprints](/blueprint
 
 You may specify various rules for showing a field under either the `if` / `show_when` keys, or hiding a field under the `unless` / `hide_when` keys.
 
-### Data Flow
+### Data flow
 
 Only visible fields are submitted with your form data. This allows you to control data flow, and [conditionally apply validation](#validation) to visible fields when needed.
 
+If you require conditionally hidden fields to be saved with your data, you may use the `always_save` config option (read more about [field data flow](/fields#field-data-flow)).
+
 :::tip
 If you want to cosmetically hide a larger set of fields to get them out of the user's way, you can use the [Revealer](/fieldtypes/revealer) fieldtype to hide them until the user needs them without disrupting data flow on form submission.
 :::
@@ -132,7 +137,7 @@ If you are dealing with a string value, `contains` and `contains_any` will perfo
       favorite_food: 'contains_any pizza, lasagna'
 ```
 
-## Advanced Comparisons
+## Advanced comparisons
 
 For more advanced comparisons, several operators and right-hand-side literals/options are available to you.  For example, we could show an `email` field if age is greater than or equal to `16`:
 
@@ -173,7 +178,7 @@ Available right-hand-side literals/options include:
 | `true` | Will be evaluated as a **literal** `true`. |
 | `false` | Will be evaluated as a **literal** `false`. |
 
-## Multiple Conditions
+## Multiple conditions
 
 If you define multiple field conditions, all conditions need to pass for the field to be shown (or hidden if you use the `unless` / `hide_when` parent key).  For example, the following will show the field when `this_field` is `bacon` *__AND__* `that_field` is `cheeseburger`:
 
@@ -191,7 +196,7 @@ if_any:
   that_field: cheeseburger
 ```
 
-## Nested Fields
+## Nested fields
 
 You may use dot notation to access nested values when necessary.  For example, maybe you would like to show a field when an `array` fieldtype's `country` value is `Canada`:
 
@@ -200,16 +205,23 @@ if:
   address.country: Canada
 ```
 
-## Field Context
+## Field context
+
+By default, conditions are performed against values in the current level of `fields` in your blueprint.  If you need access to values outside of this context (eg. if you are in a replicator, trying to compare against fields outside of the replicator), you can access parent field values by prepending your field with `$parent`:
+
+```yaml
+if:
+  $parent.favorite_foods: includes bacon
+```
 
-By default, conditions are performed against values in current level of `fields` in your blueprint.  If you need access to values outside of this context (eg. if you are in a replicator, trying to compare against fields outside of the replicator), you can access root VueX store values by prepending your field with `root`:
+You can also access values at the top-level of your blueprint with `$root`:
 
 ```yaml
 if:
-  root.favorite_foods: includes bacon
+  $root.favorite_foods: includes bacon
 ```
 
-## Custom Logic
+## Custom logic
 
 If you need something more complex than the YAML syntax provides, you may write your own logic.  In a [JS script](/extending/control-panel) or addon, you can define custom functions using the `$conditions` JS API:
 
@@ -224,6 +236,10 @@ Statamic.$conditions.add('isCanadian', ({ target }) => {
 });
 ```
 
+:::warning
+It's worth noting that custom conditions only work in the Control Panel, not in the context of frontend forms.
+:::
+
 ### Parameters
 
 You may also pass parameters to your custom functions:
@@ -255,7 +271,7 @@ Statamic.$conditions.add('reallyLovesFood', ({ values }) => {
 
 ```
 
-### Field Context
+### Field context
 
 Furthermore, if you need access to values outside of the current [field context](#field-context), we also provide a `root` values parameter, as well as access to the VueX store via `store` and `storeName`:
 
@@ -269,7 +285,7 @@ Statamic.$conditions.add('...', ({ root, store, storeName }) => {
 
 If you wish to conditionally apply validation to conditionally shown fields, we recommend using the `sometimes` [Laravel validation rule](https://laravel.com/docs/validation#validating-when-present).
 
-```
+```yaml
 -
   handle: online_event
   field:
@@ -290,3 +306,7 @@ The above example will only _sometimes_ apply the `required` rule to the `venue`
 :::tip
 For more advanced conditional validation, take a look at Laravel's `required_if`, `required_with`, etc. [validation rules](https://laravel.com/docs/validation#rule-required-if).
 :::
+
+## Templating
+
+You can take advantage of Conditional Fields on your front-end Forms to automatically generate dynamic forms and logic. [Learn more about it](https://statamic.dev/tags/form-create#conditional-fields).
diff --git a/content/collections/docs/conditions.md b/content/collections/docs/conditions.md
index d22e38f50..4177cca91 100644
--- a/content/collections/docs/conditions.md
+++ b/content/collections/docs/conditions.md
@@ -8,7 +8,7 @@ updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
 updated_at: 1632512130
 ---
 :::tip
-Are you looking "if/else" conditions? You probably want this page: [Antler's Logic & Conditions](/antlers#conditions)
+Are you looking for "if/else" conditions? You probably want this page: [Antler's Logic & Conditions](/antlers#conditions)
 :::
 
 ## Overview
@@ -23,10 +23,15 @@ _Note: These conditions currently apply to the [collections](/tags/collection),
 
 The conditions syntax has 3 parts: the field name, the condition name, and the value.
 
-<div class="font-mono bg-grey-300 text-purple rounded inline-block p-2 mb-6 text-sm">
-<span class="bg-pink text-white p-1 rounded-sm">{field_name}</span>:<span class="bg-purple text-white p-1 rounded-sm">{condition}</span><span class="p-1">=</span>"<span class="bg-teal text-white p-1 rounded-sm">{value}</span>"
+<div class="c-syntax-explainer">
+<span class="c-syntax-explainer__1">{field_name}</span>:<span class="c-syntax-explainer__2">{condition}</span><span>=</span>"<span class="c-syntax-explainer__3">{value}</span>"
 </div>
 
+### Field name
+The field name is the name of the field you're filtering on.
+
+
+
 ### Using a variable reference
 If you prefix the field name with a colon, it will use the value of a variable in your view
 
@@ -46,53 +51,154 @@ taxonomy:category="happy|radical"
 
 For conditions where you're matching or comparing a value `is` or `starts_with`, you'd do:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection:blog title:starts_with="Once upon a time..." }}
 ```
+::tab blade
+```blade
+<s:collection:blog
+  title:starts_with="Once upon a time..."
+>
+
+</s:collection:blog>
+```
+::
 
 ### Boolean
 
 For boolean conditions like `exists` or `null`, specify a value of `true`:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection:blog hero_image:exists="true" }}
 ```
+::tab blade
+```blade
+<s:collection:blog
+  hero_image:exists="true"
+>
+
+</s:collection:blog>
+```
+::
 
 For _negative_ boolean conditions, _don't_ use `="false"`. Instead, pick the inverse condition, like `:exists` instead of `:doesnt_exist`.
 
-```
+::tabs
+::tab antlers
+```antlers
  // Nope
 {{ collection:articles related_articles:exists="false" }}
 
 // Yup
 {{ collection:articles related_articles:doesnt_exist="true" }}
 ```
+::tab blade
+```blade
+// Nope
+<s:collection:articles
+  related_articles:exists="false"
+>
+</s:collection:articles>
+
+// Yup
+<s:collection:articles
+  related_articles:doesnt_exist="true"
+>
+</s:collection:articles>
+```
+::
 
 ### Multiple Conditions
 
 Need multiple conditions? Yeah, we support that.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection:drinks type:is="tiki" ingredients:in="Orgeat" }}
     <a href="{{ url }}">
         {{ title }}
     </a>
 {{ /collection:drinks }}
 ```
+::tab blade
+```blade
+<s:collection:drinks
+  type:is="tiki"
+  ingredients:in="Orgeat"
+>
+  <a href="{{ $url }}">
+    {{ $title }}
+  </a>
+<s:/collection:drinks>
+```
+::
 
 ### Passing multiple values
 
 To pass multiple _values_ in a condition, separate them with `|` pipes.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection:drinks ingredients:in="rum|falernum" }}
     <a href="{{ url }}">
         {{ title }}
     </a>
 {{ /collection:drinks }}
 ```
+::tab blade
+```blade
+<s:collection:drinks
+  ingredients:in="rum|falernum"
+>
+  <a href="{{ $url }}">
+    {{ $title }}
+  </a>
+</s:collection:drinks>
+```
+::
+
+### Sub fields
+
+You can apply conditions to "sub fields", like date ranges:
+
+```yaml
+event_date:
+  start: 2023-12-01
+  end: 2023-12-03
+```
 
-## String Conditions
+::tabs
+
+::tab antlers
+```antlers
+{{ collection:events :event_date.start="today" }}
+{{ collection:events :event_date.end="today" }}
+```
+::tab blade
+```blade
+<s:collection:events
+  :event_date.start="$today"
+>
+</s:collection:events>
+
+<s:collection:events
+  :event_date.end="$today"
+>
+</s:collection:events>
+```
+::
+
+## String conditions
 
 The following conditions apply to fields with data stored as strings.
 
@@ -126,16 +232,16 @@ The following conditions apply to fields with data stored as strings.
 | `is_before` | Include if field **is before** date. |
 | `is_numberwang` | Include if field **is numberwang**. |
 
-## Taxonomy Conditions
+## Taxonomy conditions
 
 [Taxonomy](/taxonomies) conditions are a little bit different. They start with `taxonomy:`, followed by the taxonomy name, an optional modifier argument, and finally the term you're seeking.
 
 <div class="font-mono bg-grey-300 text-purple rounded inline-block p-2 mb-6 text-sm"><span class="bg-pink text-white p-1 rounded-sm">taxonomy</span>:<span class="bg-purple text-white p-1 rounded-sm">{handle}</span>:<span class="bg-black text-white p-1 rounded-sm">{modifier}</span><span class="p-1">=</span>"<span class="bg-teal text-white p-1 rounded-sm">{term}</span>"
 </div>
 
-### Query Modifiers {#taxonomy-query-modifiers}
+### Query modifiers {#taxonomy-query-modifiers}
 
-You may optionally control the behavior of the condition filter by passing the desired the modifier into the tag method call. If you don't set a modifier, it will use `any` by default.
+You may optionally control the behavior of the condition filter by passing the desired modifier into the tag method call. If you don't set a modifier, it will use `any` by default.
 
 #### Any (default) {#taxonomy-any}
 
@@ -145,13 +251,16 @@ Fetch all entries that have _any_ of one or more taxonomy terms.
 
 Fetch all entries that _don't_ have one or more taxonomy terms.
 
-#### All {#taxonomy-not}
+#### All {#taxonomy-all}
 
 Fetch all entries that contain _each_ of one or more taxonomy terms.
 
 ### Examples {#taxonomy-examples}
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <!-- Get all featured articles -->
 {{ collection:articles taxonomy:tags:any="featured" }}
 {{ collection:articles taxonomy:tags="featured" }} (shorthand)
@@ -159,15 +268,36 @@ Fetch all entries that contain _each_ of one or more taxonomy terms.
 <!-- Get all but sports-related articles -->
 {{ collection:articles taxonomy:tags:not="sports" }}
 
-<!-- Get all "featured" articles about gaming
+<!-- Get all "featured" articles about gaming -->
 {{ collection:articles taxonomy:tags:all="gaming|featured" }}
 ```
+::tab blade
+```blade
+<!-- Get all featured articles -->
+<s:collection:articles taxonomy:tags:any="featured">
+</s:collection:articles>
+
+<s:collection:articles taxonomy:tags="featured"> (shorthand)
+</s:collection:articles>
+
+
+<!-- Get all but sports-related articles -->
+<s:collection:articles taxonomy:tags:not="sports">
+</s:collection:articles>
+
+
+<!-- Get all "featured" articles about gaming -->
+<s:collection:articles taxonomy:tags:all="gaming|featured">
+</s:collection:articles>
+
+```
+::
 
 ## Arguments
 
 | Argument | Description |
 | :--- | :--- |
-| `{handle}` | Handle of the Taxonomy you wish you query. |
+| `{handle}` | Handle of the Taxonomy you wish to query. |
 | `{modifier}` | Control the behavior of the condition filtering. Available options: `all`, `not`, and `any`. Default: `any`.  |
 | `{term}` | Term(s) to query. You may pass multiple terms by separating them with `\|` pipe delimiters. |
 
diff --git a/content/collections/docs/configuration.md b/content/collections/docs/configuration.md
index 9d9c5f12a..e749f99df 100644
--- a/content/collections/docs/configuration.md
+++ b/content/collections/docs/configuration.md
@@ -5,7 +5,7 @@ template: page
 blueprint: page
 id: 10d236ff-a80b-4d88-afa8-fe882b0f37a2
 ---
-## Config Files
+## Config files
 
 Statamic's config files are located in `config/statamic/`. They are PHP files named by area of responsibility.
 
@@ -30,9 +30,9 @@ config/statamic/
     users.php
 ```
 
-## Environment Variables
+## Environment variables
 
-It is often helpful to have different configuration setting based on the environment where the site is running. For example, you may wish to enable debug mode on your local server but not your production server
+It is often helpful to have different configuration settings based on the environment where the site is running. For example, you may wish to enable debug mode on your local server but not your production server
 
 :::warning
 **Never enable Debug Mode or DebugBar on production.** The error messages — as beautiful as they are — will reveal much about the way your site is configured, where important files are, and possibly even leak data from your `.env` file depending on how you use those variables.
@@ -40,7 +40,7 @@ It is often helpful to have different configuration setting based on the environ
 
 In a fresh Statamic installation you'll find an `.env.example` file in the root directory of your site. Rename or copy it to `.env` to enable it. If you install Statamic via Composer or the [CLI tool](https://github.com/statamic/cli), this will be done automatically for you.
 
-### Environment Variable Types
+### Environment variable types
 
 Variables in your `.env` files are parsed as strings. In order to handle a wider range of types, some specific values are reserved.
 
@@ -61,7 +61,7 @@ If you need to define an environment variable with a value containing a space, y
 APP_NAME="Gluten Free Potato Canons"
 ```
 
-### Retrieving Environment Variables
+### Retrieving environment variables
 
 All environment variables are available in your config files by using the `env()` helper function. An optional second argument allows you to pass a default value.
 
@@ -70,6 +70,10 @@ All environment variables are available in your config files by using the `env()
 'awesome' => env('ENABLE_AWESOME', true),
 ```
 
+::tabs
+
+::tab antlers
+
 Once passed into a config file, the variable can be used in your views with the `{{ config }}` tag.
 
 ``` antlers
@@ -77,13 +81,23 @@ Once passed into a config file, the variable can be used in your views with the
 {{ config:app:awesome }}
 ```
 
+::tab blade
+
+Once passed into a config file, the variable can be used in your views with the `config()` helper function.
+
+```blade
+// To retrieve the above 'awesome' value...
+{{ config('app.awesome') }}
+```
+::
+
 :::warning
 **Your `.env` file should never be committed to version control**.
 
 Each developer or server running your application may require a different configuration, not to mention it can be a security risk in the event your version control repository is ever made public. Any sensitive credentials — like API keys and secret tokens — would be visible.
 :::
 
-### Hiding Environment Variables from Debug Pages
+### Hiding environment variables from debug pages
 
 When an exception is uncaught and the `APP_DEBUG` environment variable is `true`, the debug page will show all environment variables and their contents. You may obscure variables by updating the `debug_blacklist` option in your `config/app.php` config file.
 
diff --git a/content/collections/docs/content-managers-guide.md b/content/collections/docs/content-managers-guide.md
new file mode 100644
index 000000000..4abff05e4
--- /dev/null
+++ b/content/collections/docs/content-managers-guide.md
@@ -0,0 +1,132 @@
+---
+id: e947dc19-9a8a-44c2-911c-171d1f196c91
+blueprint: page
+title: 'Content Manager’s Guide to Statamic'
+nav_title: 'Content Manager’s Guide'
+breadcrumb_title: "Content Manager's Guide"
+intro: |-
+  So you've got yourself a brand new Statamic site, inherited an older one, or joined a team that's already using Statamic. Great! Welcome to the wonderful world of Statamic. Perhaps you're wondering what to do next, how to add a tracking code to a landing page, get technical support, or reset your password and get back into the Control Panel.
+
+  You've come to the right place. We'll try to answer the most common end-user questions and topics people have when encountering Statamic for the first time.
+---
+## Four things you need to know.
+
+### We can’t get into your site.
+
+This is important information, so please read this whole section. All Statamic sites are **self-hosted**. This means that each Statamic site is a unique _copy_ of the Statamic application, and is running on a server that you, your company, or web design/development agency owns or has access to.
+
+And since your Statamic site is running on a server that isn't ours, it means we **do not have access to it**. We can't sign in to your control panel and reset a password for you, give a user more permissions or access, make changes to the site, read the code, or kick out annoying users with bad grammar.
+
+It might seem like that's a big downside if you're running into a problem that you feel our support team should be able to fix from our floating cloud desks — and maybe in a few cases that might be true — but overall this is a very good thing for you and your organization. Nothing we can do can take your site away. **Your site is yours forever**.
+
+Too many people have put their hard work and money building websites, blogs, and companies futures on platforms that end up getting shut down, bought out, or change their mind about who their audience should be — resulting in prices skyrocketing, or sites just disappearing forever with no way to get data out. Things change so fast in the tech world — your site **should not** be subject to these external (and often desperate) forces. Own your site. Own your content. Own your audience.
+
+::: Did you know?
+Servers are just computers that run websites and applications accessible to the internet. And **"the cloud"** is just another term for "a bunch of servers out there somewhere". They might as well be floating around in the sky as far as most people are concerned or care.
+:::
+
+### Every site is unique.
+
+Each Statamic site starts like a bit of a blank slate. We take a "start simple and add things as needed" approach to features and settings, in contrast to other platforms that take a "everything is included and rip out what you don't want" approach.
+
+This means that Statamic doesn't do everything automatically, and generally requires a developer to enable, configure, or hook up different features you might assume are part of every site. A few examples of this in practice: blog posts don't automatically have "tags" or "categories" — in fact there is no  "blog" by default, and there is no built-in "snippet manager" to paste analytics or tracking codes into.
+
+Each of these things can be "built" in a matter of minutes (or even seconds) with Statamic's building-block approach to custom fields and features.
+
+This might feel like it's backwards if you're used to working in a platform like WordPress or Drupal, but we have found (and our customers agree emphatically!) that it's much better in the long run to _turn on_ the things you need, enable features you plan to use, and name things _the way you want for clarity_, than to spend precious time clicking about the control panel disabling all the things you'll never need, or worse — just leaving behind features, buttons, or sections that simply don't do anything.
+
+You may find that your site is missing the ability to edit something you consider to be fundamental in a content management system. It might frustrate you. You might feel stuck. But before reaching for WordPress to rebuild your whole site from scratch (please don't do that), just have a quick chat with whoever built your site, because...
+
+### Statamic sites are _very_ easy to change.
+
+**This is Statamic's secret power.** This is why developers use Statamic over the ubiquitous WordPress. **Do not be afraid** to ask the developer or team who built your Statamic site to make a change, make some bit of content editable, or add a new feature. Most often, it will be a very small amount of work.
+
+<blockquote class="font-medium pl-8 border-l-4 border-black italic mt-8"><p>God, do I love working with Statamic. It feels like implementing anything only takes a fraction of the time compared to other content management systems...</p><p>&mdash; Martin Keck, Developer</p></blockquote>
+
+
+### Every Statamic site needs a developer.
+
+Because of these three facts, it's important to note that every Statamic site needs — at least at one point or another — a web developer. Someone who can write some code and get it up on a server.
+
+Statamic is pretty easy to learn for anyone who knows HTML and has run other PHP applications (like WordPress, for example) before. But if this isn't your skill set, it's okay. Just know that most people who build websites have the skills necessary to work on a Statamic site (assuming they're willing to read some of this documentation).
+
+Once your site is set up and launched, it's possible you may not need another developer again, or at least for a long time. But, in order to run updates to make sure you're running the fastest and most secure version of Statamic, you'll need that developer every now and then to do that.
+
+Statamic updates aren't a "click the button and wait" kind of process. There are too many potential problems with that approach to web software, and in order to protect you and your website from going down, all Statamic updates must be run from the command line — a level of access a regular user doesn't have.
+
+## FAQs
+
+### Where do I login to my Statamic site's Control Panel?
+
+<mark>Most sites have their login screen set up on `example.com/cp`</mark> (where example.com is the URL of your website). This URL is customizable, and some people like to change it to `example.com/admin` or something else entirely for security purposes.
+
+Someone with access to your site's Statamic Control Panel will need to create your account and invite you first. As part of that process you will _most likely_ have received an email with a link to activate your account. This link will get you to your Control Panel.
+
+We say _most likely_ because these defaults can be changed. Instead of an email, they could have sent you a link into Slack or Teams, etc.
+
+:::tip
+Your [statamic.com](https://statamic.com) account (if you have one) has nothing to do with the login for your site's control panel. It's just used to buy licenses, addons, and request support. This is because [we can't get into your site](#we-cant-get-into-your-site).
+:::
+
+### How do I reset my password?
+
+No worries, it happens to the best of us! Assuming you know your login URL (see [Where do I login to my Statamic site's Control Panel?](#where-do-i-login-to-my-statamic-sites-control-panel)), you should have a link to **Reset Your Password** right there on that screen.
+
+<figure>
+    <img src="/img/password-reset-link.png" width="423" alt="Statamic Password Reset Link">
+    <figcaption>👆 See that Forgot password link?</figcaption>
+</figure>
+
+After clicking that link and entering your email address, you should receive an email with a link to reset your password and get back into the Control Panel.
+
+If you don't receive that email, it's possible that whoever built your site (your developer) didn't set up email sending for your site and/or server. In this circumstance, you have three options.
+
+1. Ask your developer to finish setting up your site properly and/or [reset your password manually](/tips/manually-resetting-a-user-password) for you. **This is the best option** because it prevents this problem from happening again.
+2. Ask someone else with permissions to manage users in Control Panel to reset your password for you. They can do that by going to the Users section, then opening the dropdown next to your account and clicking "Copy Password Reset Link" and sending that to you in your preferred communication tool of choice.
+
+3. Ask someone else with permissions to manage users in Control Panel to simply change your password for you. They can do that by going to the Users section, then clicking on your user account, and then the "Change Password" button next to your name, and following the form that pops up.
+
+### What do I do if my site is broken?
+
+There are a few reasons a site might "randomly" break, but in almost all of those cases you'll need to contact your developer to fix your site and bring it back online. They _should_ know to check the error logs to see what happened, but feel free to suggest that to them. Also mention the exact error code, if there is one, that you see when visiting your site. A 404 error is very different from a 501, for example.
+
+We'll explain a few of the most common (though this kind of thing is anything but common) scenarios when this might happen.
+
+#### DNS settings are wrong
+It's possible that there's nothing wrong with your site, but rather with your DNS settings. DNS settings are usually managed with your Domain Registrar — the place you bought your .com, .co.uk, or other domain name. These settings tell browsers where to go when visiting your domain.
+
+This is most likely the problem if your site is showing the _wrong_ site, wrong page, or displays an error that mentions DNS, redirects, or something similar.
+
+If someone has recently been making changes to your DNS (maybe setting up a subdomain or changing email providers), it's possible they changed the wrong thing and your DNS is no longer pointing at your server properly.
+
+If this happens, contact your developer or whoever manages your DNS to have them undo whatever mess they made.
+
+#### Surprise server upgrade
+It's possible your server had an upgrade that significantly changed the version of PHP or some other bit of software that your version of Statamic doesn't support. This is similar to when you upgrade a Mac or Windows computer — sometimes you need to upgrade your software to compatible with the latest versions of your operating system.
+
+This is rare, but can happen with cheap "shared hosting" services, like GoDaddy, HostGator, BlueHost, and other similar companies that have crazy low prices. You get what you pay for with hosting.
+
+If this happens, you'll need to have a developer update Statamic to the latest version, and if that doesn't fix it, open a support ticket with your host. And if that doesn't fix it, it might be time to get a better host.
+
+#### Server ran out of storage
+If your website has lots and lots of images (or really big images) and files, it's possible your server may have run out of storage space while Statamic was creating all thumbnails and any other image sizes needed to render your design.
+
+If this happens, you'll need to have your developer clear out any image caches and upgrade the storage capacity of your server so it doesn't happen again.
+
+Alternately, your developer can move your images to AWS (Amazon's file management service) or an equivalent, as it can be more cost effective than upgrading your server.
+
+#### Bad code
+Nobody's perfect. It's possible your developer had some custom code in your site that has a performance problem and uses up all your memory, thereby crashing the server — or something like that.
+
+If this happens, you guessed it — talk to your developer. They'll figure it out. And if they don't, [get a better developer](https://statamic.com/partners).
+
+### How do I find a new Statamic developer?
+If a developer or agency is no longer available to work on your site, or you feel their quality of work is not up to your standards, it may be time to find a new Statamic developer.
+
+If you start Googling "where to hire a Statamic developer" you _may_ not find a ton out there, at least when compared to WordPress developers, but let us assure you, there are lots of talented and professional Statamic folks out there.
+
+The best place to find one is on our [Partners](https://statamic.com/partners) directory. There you can find a list of freelancers and agencies who have a proven track record of building Statamic sites and addons. Furthermore, the **Certified Partners** have gone through reference vetting and code reviews with our Core Team to make sure they're technically proficient and have good relationships with their clients. We highly recommend working with a Certified Partner.
+
+If you'd like us to match you with a Partner, we'd be happy to do so. Head on over to our [Matchmaking Service](https://statamic.com/partners/matchmaking).
+
+You could also post a job or project on [workwithstatamic.com](https://workwithstatamic.com), or jump into our live [Discord Chat](https://statamic.com/discord) and visit the `#jobs` channel to see who might be interested in helping you out.
\ No newline at end of file
diff --git a/content/collections/docs/content-queries.md b/content/collections/docs/content-queries.md
index b186a46cb..474628df8 100644
--- a/content/collections/docs/content-queries.md
+++ b/content/collections/docs/content-queries.md
@@ -8,23 +8,17 @@ intro: 'Statamic provides a fluent query builder interacting with your content a
 
 Each of the core Statamic data types has its own Facade used to access an underlying repository class so you can query, create, modify, and delete content. Working with data in this manner is usually done in a [Controller](/controllers), with any retrieved data being passed into a view.
 
-:::callout /extending/repositories
-Learn how Statamic can use different storage methods!
-:::
-
 These methods will work no matter which driver you're using — flat files, Eloquent/MySQL, or any other custom repo driver.
 
+[Learn how Statamic can use different storage methods!](/extending/repositories)
+
 :::tip
-While Statamic's Query builder is very similar to [Laravel's Query Builder](https://laravel.com/docs/8.x/queries), they are **completely separate implementations**.
+While Statamic's Query builder is very similar to [Laravel's Query Builder](https://laravel.com/docs/12.x/queries), they are **completely separate implementations**.
 
 What follows is complete documentation on all available methods. If you need a method available in Laravel that we don't currently support, feel free to open a [feature request](https://github.com/statamic/ideas) or better yet, a [Pull Request](https://github.com/statamic/cms)!
 :::
 
-
-
-
-
-## Retrieving Data
+## Retrieving data
 
 There are two different types of classes you'll interact with while querying content: Repositories and Query Builders.
 
@@ -40,7 +34,8 @@ Entry::find('abc123');
 GlobalSet::findByHandle('footer')->inDefaultSite()->get('copyright');
 ```
 
-### Query Builders
+### Query builders
+
 Some Facades also have a **Query Builders** that allows you to query, filter, and narrow down the results you desire. The `Entry` Facade's Query Builder allows you to find all the entries in a collection, by a specific author, and so on.
 
 :::tip
@@ -82,17 +77,12 @@ Entry::query()
     ->get(['title', 'hero_image', 'content']);
 ```
 
-
-
-
-
-
-## Basic Where Clauses
+## Basic where clauses
 
 ### Where
 You may use the query builder's `where` method to add "where" clauses to the query. The most basic call to the `where` method requires three arguments. The first argument is the name of the field. The second argument is an operator, which can be any of the supported operators. The third argument is the value to compare against the field's value.
 
-For example, the following query gets entries where the value of a `featured` field is `true`.
+For example, the following query gets entries where the value of a `status` field is `featured`.
 
 ```php
 Entry::query()
@@ -241,7 +231,7 @@ Note: `orWhereNull` and `orWhereNotNull` are also both supported.
 
 
 
-## Complex Where Clauses
+## Complex where clauses
 Complex queries can be made by using closure-based wheres containing any of the [basic where clauses](#basic-where-clauses):
 
 ```php
@@ -258,7 +248,7 @@ Entry::query()
 ```
 
 
-## Conditional Clauses
+## Conditional clauses
 Conditional clauses can be applied based on another condition, for example the value for an input on the HTTP request. 
 
 ```php
@@ -295,7 +285,7 @@ Entry::query()
     ->get();
 ```
 
-## JSON Where Clauses
+## JSON where clauses
 JSON values can be queries using the '->' selector:
 
 ```php
@@ -366,7 +356,7 @@ The following operators are available in [basic where clauses](#basic-where-clau
 
 ### Like & Not Like
 
-The `like` operator is used in `where` clause to search for a specified pattern in a field. `not like` is the inverse, ensuring that the results **do not* match a pattern.
+The `like` operator is used in `where` clause to search for a specified pattern in a field. `not like` is the inverse, ensuring that the results **do not** match a pattern.
 
 There are two wildcards used in conjunction with the `like` operator:
 
@@ -427,7 +417,7 @@ Entry::query()
     ->where('title', 'not regexp', '/m | [tn]|b/')
     ->get();
 // [tl! collapse:start]
-// Okay so this regex doesn't work on any of the Star Wars
+// Okay, so this regex doesn't work on any of the Star Wars
 // movies after Rogue One but let's not split hairs here.
 // This is a good example and you know it.
 
@@ -444,7 +434,7 @@ Entry::query()
 
 The `greater than` operator is used to compare two values. If the first is greater than the second, the match will be included. The `greater than or equals` operator will include exact matches.
 
-The `less than` operator is used to compare two values. If the first is less than the second, the match will be included. The `greater than or equals` operator will include exact matches.
+The `less than` operator is used to compare two values. If the first is less than the second, the match will be included. The `less than or equals` operator will include exact matches.
 
 #### Examples {.popout}
 
@@ -470,8 +460,8 @@ Entry::query()
 The `orderBy` method allows you to sort by a given field, or in random order:
 
 ```php
-Entry::query()->orderBy('title', 'desc')->get();
 Entry::query()->orderBy('date', 'asc')->get();
+Entry::query()->orderByDesc('title')->get(); // the same as ->orderBy('title', 'desc')
 Entry::query()->inRandomOrder()->get();
 ```
 
@@ -481,10 +471,6 @@ You may limit and/or skip results by using the `limit` and `offset` methods:
 Entry::query()->offset(5)->limit(5)->get();
 ```
 
-
-
-
-
 ## Count
 
 The query builder also provides the `count` method for retrieving the number of records returned.
@@ -493,25 +479,50 @@ The query builder also provides the `count` method for retrieving the number of
 Entry::query()->count();
 ```
 
+## Paginating
+
+Paginate results by invoking the `paginate` method on a query instead of `get`, and specifying the desired number of results per page.
 
+```php
+Entry::query()->paginate(15);
+```
 
+This will return an instance of `Illuminate\Pagination\LengthAwarePaginator` that you can use to assemble the pagination style of your choice.
 
+:::tip
+You can [learn more about the LengthAwarePaginator](https://laravel.com/docs/12.x/pagination#paginator-instance-methods)in the Laravel docs.
+:::
 
+## Chunking
 
-## Paginating
+By chunking down the results of a query you receive a small chunk of results that you can each pass into a closure for further processing or manipulation.
 
-Paginate results by invoking the `paginate` method on a query instead of `get`, and specifying the desired number of results per page.
+Expects both a `$count` and `$callback` argument.
 
 ```php
-Entry::query()->paginate(15);
+Entry::query()->chunk(25, function($entries) {
+    // do something with each chunk
+});
 ```
 
-This will return an instance of `Illuminate\Pagination\LengthAwarePaginator` that you can use to assemble the pagination style of your choice.
+:::tip
+You can [learn more about chunking query results](https://laravel.com/docs/12.x/queries#chunking-results) in the Laravel docs.
+:::
+
+## Lazy streaming
+
+Lazily streaming query results allows you to define a number of results to be returned from the query, similar to [chunking](#chunking). The difference is that instead of being able to pass each chunk into a callback, you receive a `LazyCollection`. This can help in situations where you're working with large datasets while keeping the memory usage low.
+
+The chunk size for the lazy query should be at least `1` and defaults to `1000`.
+
+```php
+Entry::query()->lazy(100)
+```
 
 :::tip
-You can [learn more about the LengthAwarePaginator](https://laravel.com/docs/8.x/pagination#paginator-instance-methods)in the Laravel docs.
+You can learn more about [lazily streaming query results](https://laravel.com/docs/12.x/queries#streaming-results-lazily) and [LazyCollections](https://laravel.com/docs/12.x/collections#lazy-collections) in the Laravel docs.
 :::
 
-## Repository Classes
+## Repository classes
 
 Head to the [Repositories Reference](reference/repositories) area for the complete list of classes and methods.
diff --git a/content/collections/docs/contributing.md b/content/collections/docs/contributing.md
index 18047db70..d8b0dc51e 100644
--- a/content/collections/docs/contributing.md
+++ b/content/collections/docs/contributing.md
@@ -7,33 +7,33 @@ overview: |
 ---
 ✨Thank you for taking the time to consider a contribution!✨
 
-## What You Should Know Before Contributing
+## What you should know before contributing
 
 ### Statamic isn’t FOSS
 
 Statamic is not "Free Open Source Software". It is **proprietary** open source software. The code is open, you can use it for free, but there are limitations to how you can modify or redistribute it. Everything in this and our other repos on Github — including community-contributed code — is the property of Statamic. Here are the limitations:
 
-- You **cannot** redistribute or use Statamic as a dependency in another distributable project — open source or otherwise — without prior permission or licensing. You **can** us it in your **own** commercial or personal projects.
+- You **cannot** redistribute or use Statamic as a dependency in another distributable project — open source or otherwise — without prior permission or licensing. You **can** use it in your **own** commercial or personal projects.
 - You **cannot** alter code or behavior related to licensing, updating, version/edition checking, or anything else that would circumvent the enforcement of our Statamic Pro business model. We want to stay in business so we can support _you_ better.
 - You **cannot** publicly maintain a long-term fork of Statamic. You **can** maintain a private one for your own needs, if you have them.
 
-### How to Get Support
+### How to get support
 
 For official developer support (and you own an active license), please go to [statamic.com/support](https://statamic.com/support) and we will always do our best to reply in a timely manner. **Github issues are intended for reporting and resolving bugs.**
 
 You can chat and collaborate with other developers in the community — [Discord](https://statamic.com/discord) and the [discussions area](https://github.com/statamic/cms/discussions) on GitHub are the best places to go. You will likely find many helpful folks who may be willing to help.
 
-## How You Can Contribute
+## How you can contribute
 
-### Which Repo?
+### Which repo?
 
-Statamic 3 is split into a few Github repositories. Here's a quick summary of each.
+Statamic is split into a few Github repositories. Here's a quick summary of each.
 
 - [`statamic/cms`](https://github.com/statamic/cms) is the core package. It doesn't run by itself but is instead a dependency consumed by Laravel apps. **99% of the work goes on here.**
 - [`statamic/statamic`](https://github.com/statamic/statamic) is the starter Laravel app used to build a new site. It's an empty shell.
-- [`statamic/docs`](https://github.com/statamic/docs) is the Statamic 3 documentation site that is curently running on [statamic.dev](https://statamic.dev).
+- [`statamic/docs`](https://github.com/statamic/docs) is the Statamic documentation site that is currently running on [statamic.dev](https://statamic.dev).
 
-### Bug Reports
+### Bug reports
 
 First things first. If the bug is security related refer to our [security disclosures](#security-disclosures) procedures instead of opening an issue.
 
@@ -47,35 +47,39 @@ If no one has filed the issue yet, feel free to [submit a new one](https://githu
 If you are able to create a repo demonstrating an issue, we can fix it **5x faster** than if you share a code example, and **1000x faster** than if you say "it's broken plz fix it k thx byeeeeee" without even telling us the error message.
 :::
 
-### Feature Requests
+### Feature requests
 
 Feature requests should be created in the [statamic/ideas](https://github.com/statamic/ideas) repository. **Please** (pretty pretty please) search through the [open issues](https://github.com/statamic/cms/issues) to see if the feature request has already been opened.
 
 If you _do_ find a similar request, **upvote it** by adding a 👍 [reaction](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments). If you have relevant information to add, do so in a comment. Please don't add a `+1` comment.
 
-### Security Disclosures
+### Security disclosures
 
-If you discover a security vulnerability, please review our [Security Policy](https://github.com/statamic/cms/security/policy), then report the issue directly to us from [statamic.com/support](https://statamic.com/support). We will review and respond privately via email. We do not respond to cold "do pay bounties?" emails.
+If you discover a security vulnerability, please review our [security policy](https://github.com/statamic/cms/security/policy), then report the issue directly to us from [statamic.com/support](https://statamic.com/support). We will review and respond privately via email. We do not respond to cold "do you pay bounties?" emails.
 
-### Documentation Edits
+### Documentation edits
 
 Statamic's documentation lives in the [https://github.com/statamic/docs](https://github.com/statamic/docs) repository. Improvements or corrections to them can be submitted as a pull request. These usually get merged very quickly unless your grammar is bad.
 
-### Core Enhancements
+### Core enhancements
 
 If you would like to work on a new feature, consider opening an issue first in [the ideas repo](https://github.com/statamic/ideas) so we can discuss it before you spend time on it. While we appreciate community contributions, we do remain selective about what features make it into Statamic itself, so don’t take it the wrong way if we recommend that you pursue the idea as an addon instead.
 
 If you're ready to start working on your feature, bug fix, or improvement, we have a [more in-depth guide to walk you through the whole thing](/contribution-guide).
 
-### Compiled Assets
+### Compiled assets
 
 If you are submitting a change that will affect a compiled file, such as most of the files in `resources/sass` or `resources/js`, do not commit the compiled files. Due to their large size, they cannot realistically be reviewed by our team. This could be exploited as a way to inject malicious code into Statamic. In order to defensively prevent this, all compiled files will be generated and committed by the core Statamic team.
 
-### Control Panel Translations
+### Code style
+
+We use [Laravel Pint](https://laravel.com/docs/master/pint#main-content) to enforce a consistent code style across the codebase. You can run it locally with `./vendor/bin/pint`.
+
+### Control Panel translations
 
 We welcome new translations and updates! Please follow [these instructions](https://statamic.dev/cp-translations#contributing-a-new-translation) on how to contribute to Statamic's translation files.
 
-### Pull Requests
+### Pull requests
 
 Pull requests should clearly describe the problem and solution. Include the relevant issue number if there is one. If the pull request fixes a bug, it should include a new test case that demonstrates the issue, if possible.
 
diff --git a/content/collections/docs/contribution-guide.md b/content/collections/docs/contribution-guide.md
index 5f5fdcfdc..2e11ec19e 100644
--- a/content/collections/docs/contribution-guide.md
+++ b/content/collections/docs/contribution-guide.md
@@ -11,7 +11,7 @@ First, you need to create a fork of the repo. A fork is a copy of the repo where
 Head to the [cms repo][cms-repo] and click the "Fork" button at the top right.
 
 ## Clone it
-Once you have a fork, you can clone it on your local machine with git. It can go anywhere - you probably already have a folder where your projects live. Most people use `~/Sites/` or ~/Code`.
+Once you have a fork, you can clone it on your local machine with git. It can go anywhere - you probably already have a folder where your projects live. Most people use `~/Sites/` or `~/Code`.
 
 ```shell
 cd Code # [tl! **]
@@ -46,51 +46,38 @@ In your app's `composer.json`, add a `repositories` array with a "path" reposito
 ```json
 {
     "name": "statamic/statamic",
+    "type": "project",
     "description": "Statamic",
     "keywords": ["statamic", "cms", "flat file", "laravel"],
-    "type": "project",
-    "require": {  // [tl! collapse:start]
-        "php": "^7.3 || ^8.0",
-        "fideloper/proxy": "^4.2",
-        "fruitcake/laravel-cors": "^2.0",
-        "guzzlehttp/guzzle": "^7.0.1",
-        "laravel/framework": "^8.0",
-        "laravel/tinker": "^2.0",
-        "statamic/cms": "3.2.*"
-    },  // [tl! collapse:end]
-    "require-dev": {  // [tl! collapse:start]
-        "barryvdh/laravel-debugbar": "^3.5",
-        "facade/ignition": "^2.3.6",
-        "fakerphp/faker": "^1.9.1",
-        "mockery/mockery": "^1.3.1",
-        "nunomaduro/collision": "^5.0",
-        "phpunit/phpunit": "^9.3"
-    },  // [tl! collapse:end]
-    "config": {  // [tl! collapse:start]
-        "optimize-autoloader": true,
-        "preferred-install": "dist",
-        "sort-packages": true
-    },  // [tl! collapse:end]
-    "extra": {  // [tl! collapse:start]
-        "laravel": {
-            "dont-discover": []
-        }
-    },  // [tl! collapse:end]
-    "autoload": {  // [tl! collapse:start]
+    "require": { // [tl! collapse:start]
+        "php": "^8.2",
+        "laravel/framework": "^11",
+        "laravel/tinker": "^2.9",
+        "statamic/cms": "^5.0"
+    }, // [tl! collapse:end]
+    "require-dev": { // [tl! collapse:start]
+        "barryvdh/laravel-debugbar": "^3.8.1",
+        "fakerphp/faker": "^1.23",
+        "laravel/pint": "^1.13",
+        "laravel/sail": "^1.26",
+        "mockery/mockery": "^1.6",
+        "nunomaduro/collision": "^8.0",
+        "phpunit/phpunit": "^11.0",
+        "spatie/laravel-ignition": "^2.4"
+    }, // [tl! collapse:end]
+    "autoload": { // [tl! collapse:start]
         "psr-4": {
             "App\\": "app/",
             "Database\\Factories\\": "database/factories/",
             "Database\\Seeders\\": "database/seeders/"
         }
-    },  // [tl! collapse:end]
-    "autoload-dev": {   // [tl! collapse:start]
+    }, // [tl! collapse:end]
+    "autoload-dev": { // [tl! collapse:start]
         "psr-4": {
             "Tests\\": "tests/"
         }
-    },  // [tl! collapse:end]
-    "minimum-stability": "dev",
-    "prefer-stable": true,
-    "scripts": {   // [tl! collapse:start]
+    }, // [tl! collapse:end]
+    "scripts": { // [tl! collapse:start]
         "pre-update-cmd": [
             "Statamic\\Console\\Composer\\Scripts::preUpdateCmd"
         ],
@@ -103,9 +90,30 @@ In your app's `composer.json`, add a `repositories` array with a "path" reposito
             "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
         ],
         "post-create-project-cmd": [
-            "@php artisan key:generate --ansi"
+            "@php artisan key:generate --ansi",
+            "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\""
+        ],
+        "post-update-cmd": [
+            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
         ]
-    },  // [tl! collapse:end]
+    }, // [tl! collapse:end]
+    "extra": { // [tl! collapse:start]
+        "laravel": {
+            "dont-discover": []
+        }
+    }, // [tl! collapse:end]
+    "config": { // [tl! collapse:start]
+        "optimize-autoloader": true,
+        "preferred-install": "dist",
+        "sort-packages": true,
+        "allow-plugins": {
+            "pestphp/pest-plugin": true,
+            "php-http/discovery": true,
+            "pixelfear/composer-dist-plugin": true
+        }
+    }, // [tl! collapse:end]
+    "minimum-stability": "dev",
+    "prefer-stable": true,
     "repositories": [ // [tl! focus:start]
         {
             "type": "path",
@@ -118,7 +126,7 @@ In your app's `composer.json`, add a `repositories` array with a "path" reposito
 Next, require the branch of `cms` you checked out:
 
 ```shell
-composer require "statamic/cms 3.2.x-dev"
+composer require "statamic/cms 5.x-dev"
 ```
 
 (We'll go into more detail in a moment on what constraint should be used there.)
@@ -132,41 +140,37 @@ Running composer update statamic/cms
 Loading composer repositories with package information
 Updating dependencies
 Lock file operations: 0 installs, 1 update, 0 removals
-  - Upgrading statamic/cms (v3.2.17 => 3.2.x-dev) # [tl! focus]
+  - Upgrading statamic/cms (v5.7.3 => 5.x-dev) # [tl! focus]
 Writing lock file
 Installing dependencies from lock file (including require-dev)
 Package operations: 0 installs, 1 update, 0 removals
-  - Removing statamic/cms (v3.2.17)
-  - Installing statamic/cms (3.2.x-dev): Symlinking from /path/to/cms  # [tl! focus]
+  - Removing statamic/cms (v5.7.3)
+  - Installing statamic/cms (5.x-dev): Symlinking from /path/to/cms  # [tl! focus]
   - Downloading statamic/cms (dist)
     Failed to download
 Generating optimized autoload files
-composer/package-versions-deprecated: Generating version class...
-composer/package-versions-deprecated: ...done generating version class
 > Illuminate\Foundation\ComposerScripts::postAutoloadDump
 > @php artisan package:discover --ansi
 Discovered Package: ajthinking/archetype
 Discovered Package: barryvdh/laravel-debugbar
-Discovered Package: facade/ignition
-Discovered Package: fideloper/proxy
-Discovered Package: fruitcake/laravel-cors
 Discovered Package: intervention/image
+Discovered Package: laravel/sail
 Discovered Package: laravel/tinker
 Discovered Package: nesbot/carbon
 Discovered Package: nunomaduro/collision
+Discovered Package: nunomaduro/termwind
 Discovered Package: rebing/graphql-laravel
+Discovered Package: spatie/laravel-ignition
 Discovered Package: statamic/cms
 Discovered Package: wilderborn/partyline
-Package manifest generated successfully.
 > @php artisan statamic:install --ansi
-Addon manifest generated successfully.
-Copied Directory [/users/jason/code/cms/resources/users] To [/resources/users]
-Publishing complete.
-Copied Directory [/users/jason/code/cms/resources/dist] To [/public/vendor/statamic/cp]
-Publishing complete.
-Compiled views cleared!
-Application cache cleared!
-101 packages you are using are looking for funding.
+Discovering addons.
+Publishing [statamic] assets.
+Publishing [statamic-cp] assets.
+Publishing [statamic-frontend] assets.
+Compiled views cleared successfully.
+Application cache cleared successfully.
+97 packages you are using are looking for funding.
 Use the `composer fund` command to find out more!
 ```
 
@@ -190,7 +194,7 @@ git checkout -b fix/issue-9999
 When requiring the `cms` package, it's important to require the appropriate constraint. If you don't use the right one, Composer may decide to use the _real_ `cms` package, and you'll be left wondering why your code changes aren't appearing.
 :::
 
-If the branch is numeric then you need to require `BRANCH.x-dev` (e.g. a branch named `3.2` should use a constraint of `3.2.x-dev`).
+If the branch is numeric then you need to require `BRANCH.x-dev` (e.g. a branch named `5.x` should use a constraint of `5.x-dev`).
 
 Otherwise, you'll need to use `dev-BRANCH` (e.g. a branch named `feature/mybranch` should use a constraint of `dev-feature/mybranch`).
 
@@ -208,7 +212,7 @@ Compile the assets within the `cms` repo.
 ```shell
 cd cms
 npm ci
-npm run dev  # or npm run watch
+npm run dev  # or npm run build
 ```
 
 The assets will be compiled into `cms/resources/dist`. You can now symlink them into your sandbox:
@@ -243,14 +247,19 @@ Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
 remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
 remote:
 remote: Create a pull request for 'feature/new-thing' on GitHub by visiting:  # [tl! **]
-remote:      https://github.com/jasonvarga/cms/pull/new/feature/new-thing # [tl! **]
+remote:      https://github.com/your-username/cms/pull/new/feature/new-thing # [tl! **]
 remote:
-To https://github.com/jasonvarga/cms.git
+To https://github.com/your-username/cms.git
  * [new branch]          HEAD -> feature/new-thing
 Branch 'feature/new-thing' set up to track remote branch 'feature/new-thing' from 'origin'.
 ```
 
 ## Create the Pull Request
+
+:::best-practice
+When creating a pull request that introduces a **new feature or changes current behavior**, please open an issue referencing your PR on the [statamic/docs](https://github.com/statamic/docs/issues/new) repo. No need to write the docs yourself. We'll take care of that for you. Any hints or bullet points are appreciated though!
+:::
+
 In the output from pushing your branch above, it'll give you a link to create the pull request. If you missed it, no problem. Just head over to `statamic/cms` and you should see a banner waiting for you.
 
 ![](/img/guides/contribution-guide/pull-request-banner.png)
diff --git a/content/collections/docs/controllers.md b/content/collections/docs/controllers.md
index c05af3c72..40f0a83d5 100644
--- a/content/collections/docs/controllers.md
+++ b/content/collections/docs/controllers.md
@@ -18,7 +18,7 @@ Anything you can do in Laravel you can do here. Because you're using Laravel. Yo
 These explicitly defined routes will take precedence over Statamic routes and URL patterns. Keep this in mind.
 :::
 
-For example, you can map a `GET` request to `yoursite.com/example` to the `index` method in the `app\Http\Controllers\ExampleController.php` file like this:
+For example, you can map a `GET` request to `yoursite.com/example` to the `index` method in the `app/Http/Controllers/ExampleController.php` file like this:
 
 ``` php
 use App\Http\Controllers\ExampleController;
@@ -26,7 +26,7 @@ use App\Http\Controllers\ExampleController;
 Route::get('example', [ExampleController::class, 'index']);
 ```
 
-## Basic Controller
+## Basic controller
 
 In your controller, render views like you would in a regular Laravel app:
 
@@ -57,7 +57,7 @@ php artisan make:controller ExampleController
 ```
 :::
 
-## Antlers Views
+## Antlers views
 
 Returning `view('myview')` _will_ render the `myview.antlers.html` view. To take advantage of Statamic's standard template-injected-into-a-layout behavior, return a `Statamic\View\View` instance instead of a regular Laravel one.
 
@@ -74,10 +74,29 @@ public function index()
 Now, `myview` will be injected into `mylayout`'s `template_content` variable.
 Anything provided to `with` (eg. `title`) will be available in both views.
 
-## Related Reading
+If you want to make an entry's content available in your view, you can use the `cascadeContent` method:
 
-- [Laravel Controllers][laravel-controllers]
-- [Laravel Routes][laravel-routes]
+``` php
+// app/Http/Controllers/MySpecialController.php
+
+public function index()
+{
+    $entry = Entry::whereCollection('pages')
+        ->where('slug', 'special-page')
+        ->where('published', true)
+        ->first();
+
+    return (new \Statamic\View\View)
+        ->template('myview')
+        ->layout('mylayout')
+        ->cascadeContent($entry);
+}
+```
+
+## Related reading
+
+- [Laravel controllers][laravel-controllers]
+- [Laravel routes][laravel-routes]
 - [Antlers](/antlers)
 
 [laravel-controllers]: https://laravel.com/docs/controllers
diff --git a/content/collections/docs/core-concepts.md b/content/collections/docs/core-concepts.md
index f129a4bae..ad0e03489 100644
--- a/content/collections/docs/core-concepts.md
+++ b/content/collections/docs/core-concepts.md
@@ -4,8 +4,9 @@ blueprint: page
 title: 'Core Concepts'
 intro: 'Statamic is opinionated software. Understanding the principles we follow and apply to the way we build features will help you learn Statamic faster.'
 template: page
+breadcrumb_title: Overview
 ---
-## Statamic is Opinionated But Configurable
+## Statamic is opinionated but configurable
 
 Statamic is an opinionated platform. We like defaults to match the most common use cases. We implement patterns that help speed up your workflow, enforce consistency, and make it easy to share code between projects.
 
@@ -17,16 +18,16 @@ Sometimes these conventions don't fit your project, or maybe you're perfectly ha
 **But don't break convention unless you have a really, really good reason.** Like integrating Statamic with an existing Laravel app or when porting a site from another platform.
 :::
 
-A good example of this is the decision on whether to use [Blade](/blade) as the template language over [Antlers](/antlers). Antlers is deeply integrated with Statamic and can handle the responsibilities of both Blade _and_ Controllers right in your template. If you choose to not use Antlers, you'll have to do more work to fetch and prep content some other way.
+A good example of this is the decision on whether to use [Blade](/blade) as the template language over [Antlers](/antlers). Antlers is deeply integrated with Statamic and can handle the responsibilities of both Blade _and_ Controllers right in your template. If you choose to use Blade templates, you will also have access to our Antlers Blade components, or you can use controllers and fetch data more of the traditional MVC way.
 
 :::best-practice
-Do your best to maintain a project README with anything you do to override Statamic's default behavior just in case you hand the site off to someone else.
+Do your best to maintain a project `README.md` with anything you do to override Statamic's default behavior just in case you hand the site off to someone else.
 :::
 
 
-## Statamic is Flat First
+## Statamic is flat first
 
-Statamic 3 has the ability to adapt to any data storage mechanism, from relational databases like MySQL and Postgres, to NoSQL solutions like MongoDB and Redis, and more. This feature is called [Repositories](/extending/repositories).
+Statamic has the ability to adapt to any data storage mechanism, from relational databases like MySQL and Postgres, to NoSQL solutions like MongoDB and Redis, and more. This feature is called [Repositories](/extending/repositories).
 
 However, these solutions **add complexity** and should only be used when necessary, most often for scaling for large amounts of data (tens of thousands of records) or high volume traffic.
 
@@ -44,7 +45,7 @@ As your site scales, you can choose to move from the flat file driver to one bes
     <figcaption>Let's be honest. We've all done this.</figcaption>
 </figure>
 
-## The Content Schema Is Up To You
+## The content schema is up to you
 
 It's completely up to you how to organize your content. You pick the field names, you pick how to organize entries into different collections. You pick what to name your taxonomies, what the URL patterns should be, and so on.
 
@@ -54,7 +55,7 @@ If you like the "one big field" approach with all your content and markup in one
 
 Or if you prefer to break everything up into small, discrete, optional fields, showing and hiding things as needed, you can do that too (you should check out [conditional fields](/conditional-fields)).
 
-## You Bring the HTML
+## You bring the HTML
 
 Statamic doesn't start with a design or HTML you're expected to use or hack around. It doesn't include any CSS or JavaScript either. All of that is up to you (or a [Starter Kit](/starter-kits)) to provide.
 
@@ -62,7 +63,7 @@ Every Statamic site &mdash; just like every fingerprint and person in the world
 
 Because of this, most Statamic projects need to involve a developer. It's not very "no-code" friendly to assemble. But once the site is built and all the collections and blueprints configured, just about anyone can handle maintaining the site.
 
-## Keep it Simple
+## Keep it simple
 
 Statamic does its best to take a "start simple and add things as needed" approach to features and settings, in contrast to other platforms that take a "everything is included and rip out what you don't want" approach.
 
@@ -72,7 +73,7 @@ This means that Statamic doesn't do everything right out the box. We find it's m
 If many of the sites you build share a common set of features, collections, blueprints, and/or templates, consider turning them into a [Starter Kit](/starter-kits) and make it your boilerplate to kickstart new projects.
 :::
 
-## Statamic is a Box of Lego Bricks
+## Statamic is a box of Lego bricks
 
 You **may** be used to content management systems and platforms that have a long list of explicit pre-built features, or plugins that provide these features, like photo galleries, hero images, and so on.
 
@@ -80,14 +81,16 @@ Statamic takes a different approach, that when combined with our "Bring Your Own
 
 **Want to build a photo gallery?** Add an Assets field that lets you select multiple images, and then loop through the selected images and render thumbnails on the fly with the Glide tag, and link to the full resolution image.
 
-**Need an image slider?** Add an Assets field, select multiple image, and pass the list of images into any number of open source image slider components available on Github.
+**Need an image slider?** Add an Assets field, select multiple images, and pass the list of images into any number of open source image slider components available on Github.
 
 **Got a Hero Image?** Use an Assets and text field and render the text on top of the `background-image` of your choosing.
 
+And just like with Lego bricks, it hurts really bad to step on Statamic barefooted.
+
 Hopefully you get the idea and see how you can solve almost any challenge with core fieldtypes and some HTML.
 
-## The Control Panel Can Be Optional
+## The Control Panel can be optional
 
 You should be able to do everything (and more) without ever logging into the Control Panel. Granted, it _does_ tend to make some of the more complicated things easier (like creating relationships, discovering all possible options for a given setting, and so on), but we love efficiency and your editor is a great place to find it.
 
-Project-wide find & replace is incredibly powerful.
+Project-wide find & replace is incredibly powerful.
\ No newline at end of file
diff --git a/content/collections/docs/cp-translations.md b/content/collections/docs/cp-translations.md
index 7c268eba6..ad4b093f3 100644
--- a/content/collections/docs/cp-translations.md
+++ b/content/collections/docs/cp-translations.md
@@ -1,7 +1,7 @@
 ---
 title: 'Control Panel Translations'
 nav_title: Translations
-intro: "Statamic's Control Panel is currently available in 18 languages. We always welcome new translations!"
+intro: "Statamic's Control Panel is currently available in 28 languages. We always welcome new translations!"
 blueprint: page
 id: 79129d32-3f7c-4215-b6b1-21a2fccafa8d
 ---
@@ -14,7 +14,7 @@ Set which language you want to use by default in `config/app.php`. You may also
 'fallback_locale' => 'en',
 ```
 
-### Per-User Override
+### Per-user override
 
 You can override the translation locale on a per-user basis by setting `locale: {code}` in a given user's preferences (their YAML record).
 
@@ -28,31 +28,49 @@ preferences:
 
 ### Available Translations
 
-| Language | Code |
-|----------|------|
-| Czech | `cs` |
-| Danish | `da` |
-| German | `de` or `de_CH` |
-| English | `en` |
-| Spanish | `es` |
-| French | `fr` |
-| Hungarian | `hu` |
-| Indonesia | `id` |
-| Italian | `it` |
-| Malaysia | `ms` |
-| Norwegian | `nb` |
-| Dutch | `nl` |
-| Polish | `pl` |
-| Portuguese | `pt` |
-| Russia | `ru` |
-| Slovene | `sl` |
-| Swedish | `sv` |
-| Taiwan | `zh_TW` |
-| Turkish | `tr` |
-
-_Translations are community contributed so may you find them to be incomplete shortly after an update._
-
-## Contributing a New Translation
+| Language            | Code    |
+|---------------------|---------|
+| Arabic              | `ar`    |
+| Azerbaijani         | `az`    |
+| Czech               | `cs`    |
+| Danish              | `da`    |
+| German              | `de`    |
+| German (Swiss)      | `de_CH` |
+| English             | `en`    |
+| Spanish             | `es`    |
+| Estonian            | `et`    |
+| Persian             | `fa`    |
+| French              | `fr`    |
+| Hungarian           | `hu`    |
+| Indonesian          | `id`    |
+| Italian             | `it`    |
+| Japanese            | `ja`    |
+| Malay               | `ms`    |
+| Norwegian           | `nb`    |
+| Dutch               | `nl`    |
+| Polish              | `pl`    |
+| Portuguese          | `pt`    |
+| Portuguese (Brazil) | `pt_BR` |
+| Russian             | `ru`    |
+| Slovene             | `sl`    |
+| Swedish             | `sv`    |
+| Turkish             | `tr`    |
+| Ukrainian           | `uk`    |
+| Vietnamese          | `vi`    |
+| Chinese             | `zh_CN` |
+| Chinese (Taiwan)    | `zh_TW` |
+
+_Translations are community contributed so you may find them to be incomplete shortly after an update._
+
+## Translations not covered by Statamic
+
+Although Statamic's translations cover *most* of the strings in the Control Panel, there are a couple of places where Statamic will fallback to your application's translations.
+
+One example of this is on Statamic's authentication pages. Since it's using Laravel's built-in authentication under the hood, translations for any validation errors will be pulled from your app's `lang` or `resources/lang` directory.
+
+To save you manually translating Laravel's strings yourself, you can copy the necessary translations from the community-driven [Laravel-lang](https://github.com/Laravel-Lang/lang/tree/main/locales) repository into your application.
+
+## Contributing a new translation
 
 There are 4 steps.
 
@@ -60,13 +78,14 @@ There are 4 steps.
 2. Run `composer install`
 3. Generate a new translation from source files
 4. Translate new message files in `resources/lang`
-5. Commit changes and submit a PR
+5. Add the language to the [array in CorePreferences](https://github.com/statamic/cms/blob/cce7045e3f0ff418ee6e0a982a3830d604c6b64c/src/Preferences/CorePreferences.php#L56-L82) so it's selectable
+6. Commit changes and submit a PR
 
-### Generating Translation Files
+### Generating translation files
 
 Run the `translator generate` command in the `statamic/cms` project, along with the new language code as an argument. This will generate empty JSON and PHP files in `resources/lang` ready to be translated into the locale of your choice.
 
-You can specify a short 2 character language code (`es`) or the full 4 character regional code (`es_MX`). 
+You can specify a short 2 character language code (`es`) or the full 4 character regional code (`es_MX`).
 
 _It is recommended that you comply to the [`language code standard`](https://www.science.co.il/language/Codes.php)._
 
@@ -89,7 +108,11 @@ resources/lang/
 |-- eo.json
 ```
 
-#### Using Google Translate
+:::tip
+This command will also update existing files with any changes from recent Statamic releases.
+:::
+
+#### Using Google translate
 
 You can get a translation kickstarted with the Google API by passing your API key.
 
@@ -97,7 +120,7 @@ You can get a translation kickstarted with the Google API by passing your API ke
 php translator generate eo --key=abc123
 ```
 
-### Using the Reviewer
+### Using the reviewer
 
 Running the `translator review` command will loop through all the translations showing you the key, the English phrase, and new translated phrase for proofreading. You can enter new translations during this process. You can also use this command to gather new or changed translatable strings after a Statamic update.
 
diff --git a/content/collections/docs/creating-a-starter-kit.md b/content/collections/docs/creating-a-starter-kit.md
index 39226c426..d986da210 100644
--- a/content/collections/docs/creating-a-starter-kit.md
+++ b/content/collections/docs/creating-a-starter-kit.md
@@ -8,37 +8,100 @@ nav_title: Creating
 ---
 ## Overview
 
-Starter kit development happens within a real instance of Statamic, just like developing any other Statamic site using your normal, preferred workflows.
+Starter Kit development happens within a real instance of Statamic, just like developing any other Statamic site using your normal, preferred workflows.
 
-A released Starter Kit package contains **only** the files relevant to the kit itself, and not a full Statamic/Laravel instance. Our Import/Export tools will allow you to maintain **only those relevant files**, without having to worry about maintaining the Statamic and underlying Laravel instances as they get updated over time.
+A released Starter Kit package contains **only** the files relevant to the Kit itself, and not a full Statamic/Laravel instance. Our Import/Export tools will allow you to maintain **only those relevant files**, without having to worry about maintaining the Statamic and underlying Laravel instances as they get updated over time.
 
 The **Export** command will export all the files and directories you've created or configured to a new location. It's this directory that becomes the package, and is the thing you should version control, not the sandbox instance.
 
 For example, maybe you are creating a pre-built, theme-style Starter Kit, the high-level workflow might look like this:
 
 1. Create a new Statamic project.
+2. Initialize it as a Starter Kit:
+   ```shell
+   php please starter-kit:init
+   ```
 
-2. Develop the theme as you normally would.
+3. Develop the theme as you normally would.
 
-3. Export the theme to a separate repo for redistribution.
+4. Export the theme to a separate repo for redistribution.
     ``` shell
     php please starter-kit:export ../kung-fury-theme
     ```
 
-4. Publish to [Github](https://github.com/), [Gitlab](https://gitlab.com/), or [Bitbucket](https://bitbucket.org/).
+5. Publish to [Github](https://github.com/), [Gitlab](https://gitlab.com/), or [Bitbucket](https://bitbucket.org/).
 
-5. Install into new Statamic projects.
+6. Install into new Statamic projects.
     ``` shell
     php please starter-kit:install the-hoff/kung-fury-theme
     ```
 
 
-## Creating the Starter Kit Project
+## Creating the Starter Kit project
 
-The first step is to [create a new Statamic project](/installing#creating-a-new-statamic-project). This is essentially a throwaway sandbox that you will use to develop and test your starter kit.
+The first step is to [create a new Statamic project](/installing#creating-a-new-statamic-project). This is essentially a throwaway sandbox that you will use to develop and test your Starter Kit.
 
+Run the `init` command to generate the appropriate files.
 
-## Exporting Files
+```shell
+php please starter-kit:init
+```
+
+This command will create and wire up a `package` directory, which represents the eventual Starter Kit repository's root directory.
+
+## The Starter Kit package
+
+Starter Kits are installed via Composer. You can control the package's contents via the `package` directory, which will be the exported repository's root directory.
+
+At a minimum, your `package` directory needs a `starter-kit.yaml` and a `composer.json` file.
+
+``` files theme:serendipity-light
+app/
+content/
+config/
+package/ #[tl! ++]
+    composer.json #[tl! ++]
+    starter-kit.yaml #[tl! ++]
+public/
+resources/
+composer.json
+```
+
+You can also include other files like a `README.md`, etc. as well. Everything you put into this `/package` folder will be exported to your repository's root directory.
+
+``` files theme:serendipity-light
+package/
+    composer.json
+    starter-kit.yaml
+    README.md #[tl! ++]
+```
+
+:::tip
+If you want a separate `README.md` to be installed when the end user installs your Starter Kit into their app, you can export the `README.md` at the root of your development sandbox by adding it to [export_paths](http://docs.test/starter-kits/creating-a-starter-kit#exporting-paths).
+:::
+
+Finally, if you plan to [make your Starter Kit updatable](#making-starter-kits-updatable), you should require this as a path repository.
+
+```json
+{
+    "name": "statamic/statamic",
+    "require": [
+        "the-hoff/kung-fury-theme": "dev-master" // [tl! ++]
+    ],
+    "repositories": [ // [tl! ++:start]
+        {
+            "type": "path",
+            "url": "package"
+        }
+    ] // [tl! ++:end]
+}
+```
+
+:::tip
+This `package` folder can be automatically scaffolded and wired up in your composer `repositories` by [running the init command](#creating-the-starter-kit-project) to create your Starter Kit project.
+:::
+
+## Exporting
 
 When ready to export your Starter Kit, run the following command:
 
@@ -46,7 +109,15 @@ When ready to export your Starter Kit, run the following command:
 php please starter-kit:export {export_repo_path}
 ```
 
-If you are exporting for the first time, a new `starter-kit.yaml` config file will be created in your app's root, and you will be instructed to configure which `export_paths` you would like to export.
+This will copy and arrange the appropriate files into the given directory that will be used as a distributable on GitHub, GitLab, Bitbucket, Composer, etc.
+
+:::tip
+Think of the exported directory similar to a compiled assets directory when using a build tool like Vite. You generate files into this directory and shouldn't touch it manually.
+:::
+
+### Exporting Paths
+
+Any files that you modify on your site that you intend to be installed into a Statamic project should be marked as `export_paths` in your `starter-kit.yaml` file.
 
 For example, the following config would tell Statamic to export sample content, along with related assets, config, blueprints, css, views, and front-end build config out for distribution on the Statamic Marketplace.
 
@@ -69,39 +140,196 @@ Anything not configured in your `starter-kit.yaml` **will not be exported**. Thi
 
 Once your export paths are configured, re-run the above `starter-kit:export` command. Your files should now be available at your new export repo path.
 
-### Avoiding Path Conflicts
 
-If you have a filename conflict between your sandbox and your starter kit repo, you can use `export_as` to customize its export path.
+### Exporting dependencies
 
-For example, you may wish to export a `README.md` for installation into new sites that is separate from the `README.md` in your starter kit repo.
+If you wish to bundle any of your installed Composer dependencies with your Starter Kit, just `composer require` them in your sandbox project as you would into any app, then add them under a `dependencies` array in your `starter-kit.yaml` config file:
 
 ``` yaml
-export_as:
-  file-in-sandbox.md: file-in-exported-repo.md
-  README.md: README-for-new-site.md
+dependencies:
+  - statamic/ssg
 ```
 
-This will instruct `starter-kit:export` to rename each of those paths on export, and in reverse on `starter-kit:install` to match where you had them in your sandbox app.
+The exporter will automatically detect the installed versions and whether or not they are installed as dev dependencies, and export accordingly.
 
+When [installing the Starter Kit](#installing-a-starter-kit), composer will install with the same version constraints as you had installed in your sandbox project during development.
 
-## Exporting Dependencies
 
-If you wish to bundle any of your installed Composer dependencies with your starter-kit, just `composer require` them in your sandbox project as you would into any app, then add them under a `dependencies` array in your `starter-kit.yaml` config file:
+## Optional modules
 
-``` yaml
-dependencies:
-  - statamic/ssg
+You may also present an optional set of Starter Kit files, nested under `modules` in your `starter-kit.yaml` config file.
+
+For example, here we'll configure an opt-in `seo` module.
+
+```yaml
+modules:
+  seo:
+    dependencies:
+      - statamic/seo-pro
 ```
 
-The exporter will automatically detect the installed versions and whether or not they are installed as dev dependencies, and export accordingly.
+This presents a choice to the user, to confirm whether or not to install this module.
+
+<figure>
+    <img src="/img/starter-kit-module-confirmation.png" alt="The user can confirm whether or not to install the `seo` module">
+</figure>
 
-When [installing the starter kit](#installing-a-starter-kit), composer will install with the same version constraints as you had installed in your sandbox project during development.
+These modules are compatible with the same config options that you use at the top level of your config file (ie. `export_paths`, `dependencies`, etc.).
 
-## Post-Install Hooks
+```yaml
+modules:
+  seo:
+    export_paths:
+      - resources/css/seo.css
+    dependencies:
+      - statamic/seo-pro
+```
 
-You may run additional logic after the starter kit is installed. For example, maybe you want to output some information.
+### Customizing Prompt Text
 
-To do so, you can create a `StarterKitPostInstall.php` file in the root of your starter kit. It should be a simple non-namespaced class with a `handle` method. You will be provided with an instance of the command so you can output lines, get input, and so on.
+If you don't like the default prompt text, you can customize it with custom `prompt` config.
+
+```yaml
+modules:
+  seo:
+    prompt: 'Would you like some awesome SEO with that!?'
+    dependencies:
+      - statamic/seo-pro
+```
+
+<figure>
+    <img src="/img/starter-kit-module-custom-prompt.png" alt="Starter Kit custom prompt text">
+    <figcaption>Would you also like fries with that?</figcaption>
+</figure>
+
+### Customizing prompt default value
+
+Setting `default: true` will ensure the module is installed by default if the user spams the enter key through the prompt, or the Starter Kit is installed non-interactively.
+
+```yaml
+modules:
+  seo:
+    default: true
+    dependencies:
+      - statamic/seo-pro
+```
+
+### Skipping confirmation
+
+Or maybe you wish to skip the user prompt and always install a given module, using modules to better organize larger Starter Kit configs. To do this, simply set `prompt` to false.
+
+```yaml
+modules:
+  seo:
+    prompt: false
+```
+
+### Selecting between modules
+
+You may find yourself in a situation where you want the user to select only one of multiple module options. To do this, you may nest multiple module configs under an `options` object.
+
+```yaml
+modules:
+  js:
+    options:
+      vue:
+        export_paths:
+          - resources/js/vue.js
+      react:
+        export_paths:
+          - resources/js/react.js
+      mootools:
+        export_paths:
+          - resources/js/mootools.js
+```
+
+<figure>
+    <img src="/img/starter-kit-select-module.png" alt="Starter Kit select module">
+</figure>
+
+### Customizing select module prompt text
+
+Of course, you can also customize `prompt` text, the first 'No' `skip_option` text, as well as each option `label`, as you see fit.
+
+```yaml
+modules:
+  js:
+    prompt: 'Would you care for some JS?'
+    skip_option: 'No, thank you!'
+    options:
+      vue:
+        label: 'VueJS'
+        export_paths:
+          - resources/js/vue.js
+      react:
+        label: 'ReactJS'
+        export_paths:
+          - resources/js/react.js
+      mootools:
+        label: 'MooTools (will never die!)'
+        export_paths:
+          - resources/js/mootools.js
+```
+
+<figure>
+    <img src="/img/starter-kit-select-module-customization.png" alt="Customizing Starter Kit select module">
+    <figcaption>🐮🐮🐮</figcaption>
+</figure>
+
+### Customizing select module default value
+
+Setting a `default` value will ensure a specific module option is installed by default if the user spams the enter key through the prompt, or the Starter Kit is installed non-interactively.
+
+```yaml
+modules:
+  js:
+    prompt: 'Would you care for some JS?'
+    default: vue
+    # ...
+```
+
+### Disabling select module skip option
+
+If you want to force the user to select a module option, you can set `skip_option: false` to disable the 'No' skip option.
+
+```yaml
+modules:
+  js:
+    prompt: 'Would you care for some JS?'
+    skip_option: false
+    # ...
+```
+
+<figure>
+    <img src="/img/starter-kit-select-module-disable-skip-option.png" alt="Starter kit disable skip option">
+</figure>
+
+
+### Nesting modules
+
+Finally, you can also nest modules where it makes sense to do so. Simply nest a `modules` object within any module.
+
+```yaml
+modules:
+  seo:
+    prompt: 'Would you like some awesome SEO with that!?'
+    dependencies:
+      - statamic/seo-pro
+    modules:
+      sitemap:
+        prompt: 'Would you like additional SEO sitemap features as well?'
+        dependencies:
+          - statamic/seo-pro-sitemap
+```
+
+In this example, the second `sitemap` module prompt will only be presented to the user, if they agree to installing the parent `seo` module.
+
+
+## Post-install hooks
+
+You may run additional logic after the Starter Kit is installed. For example, maybe you want to output some information.
+
+To do so, you can create a `StarterKitPostInstall.php` file in the root of your Starter Kit. It should be a simple non-namespaced class with a `handle` method. You will be provided with an instance of the command so you can output lines, get input, and so on.
 
 ```php
 <?php
@@ -130,7 +358,7 @@ Once exported, you will need to update the `name` property in the `composer.json
     "extra": {
         "statamic": {
             "name": "Kung Fury Theme",
-            "description": "Kung Fury Theme starter kit"
+            "description": "Kung Fury Theme Starter Kit"
         }
     }
 }
@@ -142,7 +370,7 @@ Now create a `README.md` file and push to [Github](https://github.com/), [Gitlab
 Unlike addons, you are not required to register on [Packagist](https://packagist.org/).
 :::
 
-If you would like to share your kit, receive more exposure, or would like to charge for your Starter Kit, you should [publish it to the Statamic Marketplace](#publishing-to-the-marketplace).
+If you would like to share your Starter Kit, receive more exposure, or would like to charge for your Kit, you should [publish it to the Statamic Marketplace](#publishing-to-the-marketplace).
 
 
 ## Publishing to the Marketplace
@@ -161,7 +389,7 @@ Products will be marked as drafts that you can preview and tweak until you're re
 Once published, you'll be able to see your Starter Kit on the Marketplace and within the Starter Kits area of the Statamic Control Panel.
 
 
-## Installing from a Local Repo
+## Installing from a local repo
 
 To test install your Starter Kit from your local exported repo, you can add the repo's local path to your global Composer `config.json` file as a repository:
 
@@ -189,7 +417,7 @@ statamic new kung-fury-dev the-hoff/kung-fury-theme --local
 
 ## Maintaining a Starter Kit
 
-When making changes to your Starter Kit, just [re-export](#exporting-files) from your development repo and push your changes from your exported repo.
+When making changes to your Starter Kit, just [re-export](#exporting) from your development repo and push your changes from your exported repo.
 
 ### Keeping up-to-date with Statamic and Laravel
 
@@ -201,6 +429,30 @@ statamic new kung-fury-dev the-hoff/kung-fury-theme --with-config
 
 This will install your Starter Kit into a brand new Statamic project, along with your `starter-kit.yaml` config file for future exports.
 
+## Making starter kits updatable
+
+As their name implies, starter kits were originally intended to be a way to "start" a site. Once installed, the user is on their own and can customize as they see fit.
+
+The Kit would get installed via Composer, files would get copied to their respective locations, and then the Kit gets removed.
+
+However, you may choose to construct your Kit in a way that it can be updated by the end user. To do that, you should instruct Statamic to leave the Kit required as a Composer dependency by adding `updatable: true` in your `starter-kit.yaml` file:
+
+```yaml
+updatable: true #[tl! ++]
+export_paths: ...
+```
+
+Now that the Kit package stays around after installation, it can be updated like any other Composer package:
+
+```shell
+composer update
+```
+
+This means that you could do things like:
+- Add a service provider to wire up Laravel or Statamic behavior.
+- Make the service provider extend AddonServiceProvider to make your Starter Kit _also_ an addon to get behavior for free like autoload tags, modifiers, etc.
+- Rather than exporting views, CSS, JS, PHP classes, etc. into the project, you can keep them in the package itself.
+
 
 ## Addons vs. Starter Kits
 
@@ -217,18 +469,18 @@ Both addons and Starter Kits can be used to extend the Statamic experience, but
 An example use case is a custom fieldtype maintained by a third party vendor. Though you would install and use the addon within your app, you would still rely on the vendor to maintain and update the addon over time.
 :::
 
-### Starters Kits
+### Starter Kits
 
-- Starter kits are installed via `php please starter-kit:install`
-- Starter kits install pre-configured files and settings into your site
-- Starter kits do not live as updatable packages within your apps
-- Starter kit licenses are not tied to a specific site, and expire after a successful install
+- Starter Kits are installed via `statamic new` or `php please starter-kit:install`
+- Starter Kits install pre-configured files and settings into your site
+- Starter Kits do not live as updatable packages within your apps (by default)
+- Starter Kit licenses are not tied to a specific site, and expire after a successful install
 
 :::tip
 An example use case is a frontend theme with sample content. This is the kind of thing you would install into your app once and modify to fit your own style. You would essentially own and maintain the installed files yourself.
 :::
 
-## Related Reading
+## Related reading
 
 - [Starter Kit Overview](/starter-kits)
 - [How to Install a Starter Kit](/starter-kits/installing-a-starter-kit)
diff --git a/content/collections/docs/dashboard.md b/content/collections/docs/dashboard.md
index bde728280..a88858469 100644
--- a/content/collections/docs/dashboard.md
+++ b/content/collections/docs/dashboard.md
@@ -9,10 +9,10 @@ id: 249e046f-a9b4-494b-9e4d-084c28e01028
 
 When you log into the control panel, you will be taken to the dashboard &mdash; a customizable screen containing widgets. Widgets!
 
-<div class="screenshot">
+<figure>
     <img src="/img/dashboard.png" alt="Statamic Global Set Example">
-    <div class="caption">The dashboard and the Getting Started widget</div>
-</div>
+    <figcaption>The dashboard and the Getting Started widget</figcaption>
+</figure>
 
 ## Widgets
 
diff --git a/content/collections/docs/data-inheritance.md b/content/collections/docs/data-inheritance.md
index 6539bc90d..c01238699 100644
--- a/content/collections/docs/data-inheritance.md
+++ b/content/collections/docs/data-inheritance.md
@@ -9,21 +9,27 @@ template: page
 
 Statamic provides a unique approach to data inheritance. The value of any given variable in your views can depend on the URL you're on. If a value of a variable doesn't exist on an entry URL, Statamic will check for a fallback value. If that fallback doesn't exist, it will fall back further, and so on. If it never finds anything, the value is `null`.
 
-We call this fallback logic "the cascade", because the value of any given variable "cascades" down from the "top" until it finds where its defined.
+We call this fallback logic "the cascade", because the value of any given variable "cascades" down from the "top" until it finds where it's defined.
 
 This approach allows you to create views that are less repetitive and are easier to read because a "missing" variable will never throw an error, it will only ever be null.
 
 :::tip
 You can easily set variable fallbacks and "catch" the first value that exists without having to write a series of ugly `if/else` conditions.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <h1>{{ nav_title ?? breadcrumb_title ?? title }}</h1>
 ```
+::tab blade
+```blade
+<h1>{{ $nav_title ?? $breadcrumb_title ?? $title }}</h1>
+```
+::
 :::
 
-
-
-## Cascade Order
+## Cascade order
 
 Here's the cascading order in which Statamic will look for the value of a given variable:
 
diff --git a/content/collections/docs/debugging.md b/content/collections/docs/debugging.md
index e9d86dae1..090cc882c 100644
--- a/content/collections/docs/debugging.md
+++ b/content/collections/docs/debugging.md
@@ -5,7 +5,7 @@ template: page
 id: 7fb5f2df-de3e-480f-a613-f38a9109e8d8
 blueprint: page
 ---
-## Ignition Debug Screens
+## Ignition debug screens
 
 [Ignition][ignition] is an included Laravel package for debugging exceptions. It provides a clean and organized stack trace, code snippets, information about the request, and even the ability to share the error message with others.
 
@@ -16,11 +16,24 @@ To enable Ignition, set `APP_DEBUG=true` in your [.env](/configuration#environme
     <figcaption>This is Ignition. Isn't it pretty for an error screen?</figcaption>
 </figure>
 
-Statamic will try to detect why you're receiving a specific exception and provide a **solution** for the problem along with a link to the most relevant documentation if possible. It's like <a href="" x-on:click.prevent="showEasterEgg = true">Clippy</a>, but 80% less annoying.
+<div x-data="{ showClippy: false }">
+    <p>Statamic will try to detect why you're receiving a specific exception and provide a **solution** for the problem along with a link to the most relevant documentation if possible. It's like <a href="" x-on:click.prevent="showClippy = true">Clippy</a>, but 80% less annoying.</p>
+    <img src="/img/clippy-docs.gif" class="clippy" x-bind:class="{ 'visible': showClippy }">
+</div>
 
-<img src="/img/clippy-docs.gif" class="fixed z-10 cursor-pointer bottom-0 right-0 m-8" x-show.transition="showEasterEgg" x-on:click="showEasterEgg = false">
 
-## Debug Bar
+## Fake SQL queries
+
+By default, Statamic doesn't use a database, so our query builders don't actually execute SQL queries. However, we "fake" the queries so that they appear in your preferred debugging tools like [Ray](https://myray.app) or Debugbar (more on that below).
+
+They are enabled when you're in debug mode, but if you'd like to disable them you can do so in `config/statamic/system.php`:
+
+```php
+'fake_sql_queries' => false,
+```
+
+
+## Debug bar
 
 The debug bar is a convenient way to explore many of the things happening in any given page request. You can see data Statamic is fetching, which views are being rendered, information on the current route, available variables, user's session, request data, and more.
 
@@ -29,7 +42,7 @@ The debug bar is a convenient way to explore many of the things happening in any
     <figcaption>The debug bar is like X-Ray vision into many of Statamic's inner workings.</figcaption>
 </figure>
 
-### Benchmarking Response Times
+### Benchmarking response times
 
 You can see all of the major operations performed on a given page request in the **Timeline** tab, which can help with fine-tuning and performance optimization.
 
@@ -38,11 +51,11 @@ You can see all of the major operations performed on a given page request in the
     <figcaption>Slow tags or operations are candidates for caching or indexing tweaks.</figcaption>
 </figure>
 
-### Exploring Data
+### Exploring data
 
 Any variables defined in a [blueprint](/blueprints) will be shown as a `Value` object in the Variables tab. They can be expanded to see their "raw" original data, as well what fieldtype they're managed by, and their [augmented](/augmentation) value.
 
-### How to Enable the Debug Bar
+### How to enable the debug bar
 
 You need to require the package with [Composer][composer].
 
@@ -61,7 +74,7 @@ DEBUGBAR_ENABLED=true
 The debug bar injects JavaScript into the page and adds significant overhead server-side work to each request. **Make sure to turn it off when you're testing your site's performance!**
 :::
 
-## Dump Modifier
+## Dump modifier
 
 When working in [Antlers](/antlers) templates, you can slap the [dump modifier](/modifiers/dump) onto any variable to explore its contents. Here's an example.
 
@@ -77,9 +90,17 @@ bands:
     - The Offspring
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ bands | dump }}
 ```
+::tab blade
+```blade
+@dd($bands)
+```
+::
 
 ``` php
 // Dumped output
@@ -95,6 +116,29 @@ Statamic uses Laravel's logging handling system to log messages and errors to fi
 
 Learn more about [configuring other logging channels](https://laravel.com/docs/logging#configuration) on the Laravel docs.
 
+### Viewing logs in the debug bar
+
+You can enable logs in the Debug Bar in its config file. If you haven't already published the config, you can do so from the command line:
+
+```cli
+php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"
+```
+
+And then enable the "Logs" collector in your new `config/debugbar.php` config file.
+
+```php
+'collectors' => [
+        ...
+        'laravel'         => true, // Laravel version and environment
+        'events'          => true, // All events fired
+        'default_request' => true, // Regular or special Symfony request logger
+        'logs'            => true, // Add the latest log messages [tl! **]
+        'files'           => false, // Show the included files
+        'config'          => false, // Display config settings
+        ...
+    ],
+```
+
 ## Laravel Telescope
 
 Statamic supports [Laravel Telescope][telescope], an elegant debug assistant for the Laravel framework. It's most useful when you're building addons or doing custom Laravel things outside the normal Statamic site scope.
diff --git a/content/collections/docs/deploying.md b/content/collections/docs/deploying.md
index 67144ecb5..69762ba6e 100644
--- a/content/collections/docs/deploying.md
+++ b/content/collections/docs/deploying.md
@@ -1,6 +1,6 @@
 ---
 title: 'Deploying'
-intro: Statamic is a modern PHP application, built as a [Laravel](https://laravel.com) package, and can be deployed like any standard Laravel application or as a static site. Here are a some common deployment solutions and workflow recommendations.
+intro: Statamic is a modern PHP application, built as a [Laravel](https://laravel.com) package, and can be deployed like any standard Laravel application or as a static site. Here are some common deployment solutions and workflow recommendations.
 template: deploying
 blueprint: page
 content_width: max-w-4xl
@@ -10,7 +10,7 @@ id: c4f17d05-78bd-41bf-8e06-8dd52f6ec154
 
 Deployments are the process of moving the Statamic site you've built — whether on your local computer or distributed across a team — to the production (aka "live") server for the whole world (wide web) to see.
 
-At its most simple level, it's just the act moving files from your computer to another computer — the web server. There are many ways to do it, from a slow and painfully manual FTP upload (please don't), to a lightning quick git push with auto-deployment.
+At its most simple level, it's just the act of moving files from your computer to another computer — the web server. There are many ways to do it, from a slow and painfully manual FTP upload (please don't), to a lightning quick git push with auto-deployment.
 
 The deployment options available to you will depend on the type of hosting scenario you're using.
 
diff --git a/content/collections/docs/digitalocean-app-platform.md b/content/collections/docs/digitalocean-app-platform.md
deleted file mode 100644
index 47b177f32..000000000
--- a/content/collections/docs/digitalocean-app-platform.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-id: 4b468a3a-08c2-4114-9daa-47cf99125d27
-blueprint: page
-title: 'Deploying Statamic to DigitalOcean App Platform'
-parent: c4f17d05-78bd-41bf-8e06-8dd52f6ec154
-intro: 'DigitalOcean''s [App Platform](https://www.digitalocean.com/products/app-platform) allows you to deploy and scale apps without having to manage servers. You''re billed per-project, depending on the resources you need.'
----
-## Overview
-
-The best part of the serverless approach is that your site's resources and can scale up and down on demand, which can save you money and provide your users a better experience in the long run.
-
-## Prepare your dependencies
-
-App Platform uses [`heroku-php-apache2`](https://devcenter.heroku.com/articles/php-support) to run PHP applications. The default modules don't quite cover everything you might need while using Statamic, so we'll need to tell DigitalOcean to install them.
-
-Add the following dependencies to your `composer.json` file's `require` block.
-
-```json
-{
-    "require": {
-        "ext-bcmath": "*",
-        "ext-exif": "*",
-        "ext-gd": "*",
-        "ext-mbstring": "*",
-    }
-}
-```
-
-Be sure to run `composer update` and commit those changes (`composer.json` and `composer.lock`) to your repo before you continue, or you'll have to traverse a painful platform-level cache clearing adventure later on.
-
-:::tip
-Learn more about [customizing your PHP extensions](https://devcenter.heroku.com/articles/php-support#extensions) with Heroku PHP Apache2.
-:::
-
-## Creating a New App
-
-Assuming you have a [DigitalOcean](https://m.do.co/c/6469827e2269) account, let's get started by logging in. The first thing to do is to create a new application by going to **Apps** and clicking **Create App**.
-
-<figure>
-    <img src="/img/deploying/digital-ocean-app-platform/new-app-button.png" alt="Creating a new site with Digital Ocean's App Platform">
-</figure>
-
-Next, you'll need to connect your Github (or other Source Code provider) account and authorize DigitalOcean access to the desired repo or repos.
-
-<figure>
-    <img src="/img/deploying/digital-ocean-app-platform/creating-new-app.png" alt="Creating a new site with Digital Ocean's App Platform">
-</figure>
-
-Click on **Manage Access** and follow the steps to authorize the proper organization and repository.
-
-<figure>
-    <img src="/img/deploying/digital-ocean-app-platform/authorize-github.png" alt="Authorizing Github">
-</figure>
-
-Next, specify which branch you wish to deploy. This is usually `main` or `master`. If you want updates to this branch to be autodeployed, check the corresponding box.
-
-<figure>
-    <img src="/img/deploying/digital-ocean-app-platform/repo-and-branch.png" alt="Authorizing Github">
-</figure>
-
-## Edit Your Plan
-
-Next, you'll want to edit your plan to make sure you're configuring the right resources and not over-paying for power you don't need. Click **Edit Plan**.
-
-<figure>
-    <img src="/img/deploying/digital-ocean-app-platform/resources.png" alt="App Resources">
-</figure>
-
-You'll need to be on **Pro** to run Statamic as an application (Static sites are free) and choose the appropriate size and number containers. For a new site without any high traffic needs the basic $12/mo size and a single container should do just fine.
-
-<figure>
-    <img src="/img/deploying/digital-ocean-app-platform/edit-plan.png" alt="Authorizing Github">
-</figure>
-
-## Environment
-
-Click **Back**, then **Next** and let's set up your environment variables. Click **Edit** next to your repo and add `APP_KEY` and either generate a new key with `php artisan key:generate` or paste in the app key from your dev site.
-
-<figure>
-    <img src="/img/deploying/digital-ocean-app-platform/env-vars.png" alt="Authorizing Github">
-</figure>
-
-Click **Save** and then **Next**.
-
-## Name your app and choose your Region
-
-Here's where you can choose a better name than the randomly generated one (might we suggest `forbidden-crt-dreams`?). Then choose the most appropriate region for your audience in the next screen, and click **Next**.
-
-<figure>
-    <img src="/img/deploying/digital-ocean-app-platform/info-region.png" alt="Authorizing Github">
-</figure>
-
-## The Finish Line
-
-The last screen will show you a review of everything you've configured. If you're happy with it, click **Create Resources**.
-
-Congrats, that's it! You should now see your app's management screen where your first deploy is in progress. If everything goes smoothly, you should be able to see your site on the private URL DigitalOcean provides you (it would be something like `your-product-32rbu.ondigitalocean.com`).
-
-## Customizing Your Build Script
-
-You'll probably want to update your build script to add a `composer install` , cache clear, and any other front-end commands.
-
-Navigate to the Settings tab of your application and add your commands to the Build Command field.
-
-<figure>
-    <img src="/img/deploying/digital-ocean-app-platform/build-command.png" alt="Authorizing Github">
-</figure>
-
-## Wrap-up
-
-That should get you going! There's much more to learn and configure though, so be sure to check out the  [App Platform How-Tos](https://docs.digitalocean.com/products/app-platform/how-to/) section of the DigitalOcean docs!
diff --git a/content/collections/docs/docker.md b/content/collections/docs/docker.md
index e0b36e6b5..9e7970e51 100644
--- a/content/collections/docs/docker.md
+++ b/content/collections/docs/docker.md
@@ -7,7 +7,7 @@ intro: Docker is an open source project that streamlines the deployment of an ap
 parent: ab08f409-8bbe-4ede-b421-d05777d292f7
 ---
 ## Overview
-[Laravel Sail](https://laravel.com/docs/9.x/sail) is a light-weight command-line interface for interacting with Laravel's default Docker development environment. Sail provides a great starting point for building Laravel applications without requiring prior Docker experience, and is a perfect fit for Statamic with a few tweaks.
+[Laravel Sail](https://laravel.com/docs/12.x/sail) is a light-weight command-line interface for interacting with Laravel's default Docker development environment. Sail provides a great starting point for building Laravel applications without requiring prior Docker experience, and is a perfect fit for Statamic with a few tweaks.
 
 At its heart, Sail is a `docker-compose.yml` file and script that is stored at the root of your project. The sail script provides a CLI with convenient methods for interacting with the Docker containers defined by the `docker-compose.yml` file.
 
@@ -23,45 +23,13 @@ If you don't already have Docker installed, head to [docker.com/get-started](htt
 
 ## Installing Laravel
 
-Follow the install instructions for creating a fresh Laravel app from [their documentation](https://laravel.com/docs/9.x#your-first-laravel-project).
+Follow the install instructions for creating a fresh Laravel app from [their documentation](https://laravel.com/docs/12.x#creating-a-laravel-project).
 
-On MacOS, run the following command, changing `example-app` to anything you want.
+Install Laravel Sail into your new Laravel app with no additional services, unless you want to get fancy and use MySQL with Statamic (yes, you can do that).
 
-```shell
-curl -s "https://laravel.build/example-app" | bash
-```
-
-## Statamic Docker-Composer File
-
-Unless you plan to get fancy and use MySQL with Statamic (yes, you can do that), replace the default `docker-compose.yml` file with this one to keep your overhead low.
-
-``` yaml
-# For more information: https://laravel.com/docs/sail
-version: '3'
-services:
-    laravel.test:
-        build:
-            context: ./vendor/laravel/sail/runtimes/8.2
-            dockerfile: Dockerfile
-            args:
-                WWWGROUP: '${WWWGROUP}'
-        image: sail-8.2/app
-        extra_hosts:
-            - 'host.docker.internal:host-gateway'
-        ports:
-            - '${APP_PORT:-80}:80'
-        environment:
-            WWWUSER: '${WWWUSER}'
-            LARAVEL_SAIL: 1
-            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
-            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
-        volumes:
-            - '.:/var/www/html'
-        networks:
-            - sail
-networks:
-    sail:
-        driver: bridge
+``` shell
+composer require laravel/sail --dev
+php artisan sail:install --with=none
 ```
 
 ## Starting and Stopping Sail
@@ -107,4 +75,4 @@ Keep in mind that  commands need to be run inside Sail.
 
 ## Learn more about Laravel Sail
 
-The [Laravel Sail docs](https://laravel.com/docs/9.x/sail) cover a lot more of what you can do with Sail. Check them out!
+The [Laravel Sail docs](https://laravel.com/docs/12.x/sail) cover a lot more of what you can do with Sail. Check them out!
diff --git a/content/collections/docs/email.md b/content/collections/docs/email.md
index d67fe3034..1f660d81a 100644
--- a/content/collections/docs/email.md
+++ b/content/collections/docs/email.md
@@ -7,7 +7,7 @@ blueprint: page
 ---
 ## Overview
 
-Statamic taps into Laravel's clean, simple API over the popular [SwiftMailer][swiftmailer] library (don't worry, the library is better than the neglected webpage) with drivers for SMTP, Mailgun, Postmark, Amazon SES, and `sendmail`, allowing you to quickly get started sending mail through a local or cloud based service of your choice.
+Statamic taps into Laravel's clean, simple mail API with drivers for SMTP, Mailgun, Postmark, Amazon SES, and `sendmail`, allowing you to quickly get started sending mail through a local or cloud based service of your choice.
 
 ## Configuring
 
@@ -40,8 +40,3 @@ You can modify the HTML and plain-text template used by mail notifications by pu
 ``` shell
 php artisan vendor:publish --tag=laravel-notifications
 ```
-
-
-
-
-[swiftmailer]: https://swiftmailer.symfony.com
diff --git a/content/collections/docs/fields.md b/content/collections/docs/fields.md
index 535462c24..cf9e74842 100644
--- a/content/collections/docs/fields.md
+++ b/content/collections/docs/fields.md
@@ -13,14 +13,15 @@ related_entries:
 ---
 ## Configuration
 
-### Common Settings
+### Common settings
 
 All fields share the following settings regardless of type:
 
-- **Display** – The field's label shown throughout the control panel
+- **Display** – The field's label shown throughout the Control Panel
 - **Handle** – The field's variable name used in templates
 - **Instructions** – Help text shown to your authors
-- **Listable** – Whether to show the field as a column in the control panel's entry list
+- **Listable** – Whether to show the field as a column in the Control Panel's listing table
+- **Sortable** – Whether the field should be sortable in the Control Panel's listing table
 - **Visibility** – Allows you to control [field visibility](#field-visibility) on publish forms
 - **Always Save** – Allows you to override [field data flow](#field-data-flow) on save
 - **Localizable** – Whether the field can be translated in [other sites](#localization)
@@ -30,7 +31,7 @@ All fields share the following settings regardless of type:
     <figcaption>A textarea field's settings screen.</figcaption>
 </figure>
 
-### Field Visibility
+### Field visibility
 
 Fields are always visible by default, but you can configure custom visibility to any of the following options:
 
@@ -45,7 +46,7 @@ You can also dynamically show and hide your fields using [Conditional Fields](/c
 **Note:** Unless you are using a Revealer, hiding a field using conditions will generally prevent its value from being submitted on save. Learn more about [Field Data Flow](#field-data-flow) to get the most out of this feature!
 :::
 
-### Field Data Flow
+### Field data flow
 
 Fields are always submitted on save, except for in the following situations:
 
@@ -58,11 +59,11 @@ If you want to override the above-mentioned field condition data flow behaviour,
     <img src="/img/field-always-save.png" alt="Always save field setting">
 </figure>
 
-## Blueprints & Fieldsets
+## Blueprints & fieldsets
 
 [Blueprints](/blueprints) determine what fields are shown in your publish forms. You can configure the fields order, each field's width, and group them into sections and tabs.
 
-Blueprints are attached to collections, taxonomies, global sets, assets, users, and even forms, all which help to determine their content schema.
+Blueprints are attached to collections, taxonomies, global sets, assets, users, and even forms, all of which help to determine their content schema.
 
 [Fieldsets](/fieldsets) are used to store and organize **reusable fields**. Blueprints can reference fields or entire fieldsets, helping you keep your configurations nice and [DRY][dry].
 
@@ -92,7 +93,7 @@ Each fieldtype has the ability to _augment_ this data when accessed from the fro
 
 ## Localization
 
-Fields can be localized, allowing you to translate or modify content in a multi-site project.
+Fields can be marked as "localizable", allowing you to translate or modify the field's content in a multi-site project.
 
 For example, you could build the website for a multi-national company with headquarters in the United States and branches in the UK, and Germany.
 
@@ -106,7 +107,58 @@ To accomplish this you can configure your Statamic install as a multi-site insta
 
 Learn more about configuring Statamic for [multi-site](/multi-site) projects.
 
-
-
+## Translating UI
+
+You may provide translations for the field UI (such as the display text, instructions, select option labels, etc). This allows content editors to display the Control Panel in their preferred language, regardless of whether it's used in a multi-site setup.
+
+Field UI strings are run through [Laravel's translations](https://laravel.com/docs/12.x/localization) feature.
+
+For example, you may have a field defined like this:
+
+```yaml
+fields:
+  -
+    handle: favorite_food
+    field:
+      type: text
+      display: Favorite Food # [tl!**]
+      instructions: Please provide your food preference. # [tl!**]
+```
+
+To define the French translations, you can create a `lang/fr.json`:
+
+```json
+{
+    "Favorite Food": "Nourriture favorite",
+    "Please provide your food preference.": "Veuillez indiquer votre préférence alimentaire."
+}
+```
+
+Alternatively, you can use translation keys. The keys can be whatever you want. The first part denotes the filename, and everything else is the array key. If you do this, you'll need to provide the Default/English strings too.
+
+```yaml
+fields:
+  -
+    handle: favorite_food
+    field:
+      type: text
+      display: fields.favorite_food.display # [tl!**]
+      instructions: fields.favorite_food.instructions # [tl!**]
+```
+
+```php
+// lang/en/fields.php
+return [
+    'favorite_food.display' => 'Favorite Food',
+    'favorite_food.instructions' => 'Please provide your food preference.',
+];
+```
+```php
+// lang/fr/fields.php
+return [
+    'favorite_food.display' => 'Nourriture favorite',
+    'favorite_food.instructions' => 'Veuillez indiquer votre préférence alimentaire.',
+];
+```
 
 [dry]: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself
diff --git a/content/collections/docs/fieldsets.md b/content/collections/docs/fieldsets.md
index 83daca9d5..3eb53184e 100644
--- a/content/collections/docs/fieldsets.md
+++ b/content/collections/docs/fieldsets.md
@@ -19,7 +19,7 @@ Fieldsets contain [fields](/fields), just like Blueprints, but the benefit of us
 Fieldsets can only have fields. They don't have sections like Blueprints can.
 
 
-## Creating Fieldsets
+## Creating fieldsets
 
 There are 2 ways to create fieldsets:
 
@@ -28,7 +28,7 @@ There are 2 ways to create fieldsets:
 
 Once created, you can begin to define its fields.
 
-## Directory Structure
+## Directory structure
 
 Whether you manually create your fieldsets's YAML file, or use the control panel, they will all end up as YAML files in the `resources/fieldsets` directory.
 
@@ -40,7 +40,7 @@ resources/
     common.yaml
 ```
 
-## YAML Structure
+## YAML structure
 
 At its most basic, a fieldset has an array of fields.
 
@@ -54,7 +54,7 @@ fields:
     type: toggle
 ```
 
-## Using Fields
+## Using fields
 
 As mentioned earlier, a Fieldset is not inherently attached to anything. In order to use a field (or fields) in a fieldset, you'll need to approach it from the Blueprint side.
 
diff --git a/content/collections/docs/fieldtypes.md b/content/collections/docs/fieldtypes.md
index c26904199..98b7237c9 100644
--- a/content/collections/docs/fieldtypes.md
+++ b/content/collections/docs/fieldtypes.md
@@ -57,7 +57,7 @@ updated_at: 1632748812
 ---
 ## Overview
 
-Fieldtypes are essentially different types of form inputs you can choose from when building a [blueprint](/blueprints). They range from simple text text fields and select boxes, to more complex WYSIWYG-style editors like Bard.
+Fieldtypes are essentially different types of form inputs you can choose from when building a [blueprint](/blueprints). They range from simple text fields and select boxes, to more complex WYSIWYG-style editors like Bard.
 
 :::watch https://www.youtube.com/embed/cs_jL6fCaA8
 Watch how to add fields to a blueprint.
diff --git a/content/collections/docs/forms.md b/content/collections/docs/forms.md
index 9d04d6e25..94b01429a 100644
--- a/content/collections/docs/forms.md
+++ b/content/collections/docs/forms.md
@@ -11,9 +11,9 @@ related_entries:
 
 Statamic forms collect submissions, provide reports on them on aggregate, and display user submitted data on the [frontend](/frontend). The end-to-end solution includes tags, settings, and a dedicated area of the Control Panel.
 
-## Your First Form
+## Your first form
 
-Let's pretend you're are a famous celebrity with a large following of dedicated fans. If this is true, why are you building your own website? Who's going to sail your yacht?
+Let's pretend you're a famous celebrity with a large following of dedicated fans. If this is true, why are you building your own website? Who's going to sail your yacht?
 
 Okay, let's just pretend you're a famous celebrity's _web developer_. You've been tasked with collecting electronic fan mail (we'll call it EF-Mail). You want to collect the following bits of info from <del>crazed</del> enthusiastic fans:
 
@@ -33,7 +33,7 @@ title: Super Fans
 email: []
 ```
 
-### The Blueprint
+### The blueprint
 
 The [blueprint](blueprints) is where you define your form's `fields` and validation rules to be used on form submission.
 
@@ -80,13 +80,22 @@ If you'd like to include more fieldtypes, you can opt into each one by calling `
 Statamic\Fieldtypes\Section::makeSelectableInForms();
 ```
 
-### The Template
+You can also do the opposite and prevent a fieldtype from being used in forms by calling `makeUnselectableInForms` on the respective class within a service provider:
+
+```php
+Statamic\Fieldtypes\Dictionary::makeUnselectableInForms();
+```
+
+### The template
 
 Several [tags](tags/form) are provided to help you manage your form. You can explore these at your leisure, but for now here's a look at a basic form template.
 
 This example dynamically renders each input's HTML. You could alternatively write the HTML yourself, perform conditions on the field's `type`, or even [customize the automatic HTML](/tags/form-create#dynamic-rendering).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ form:super_fans }}
 
     // First let's check if this is after a submission, and if so, was it successful.
@@ -115,7 +124,7 @@ This example dynamically renders each input's HTML. You could alternatively writ
                 {{ /if }}
             </div>
         {{ /fields }}
-        
+
         // Add the honeypot field
         <input type="text" class="hidden" name="{{ honeypot ?? 'honeypot' }}">
 
@@ -125,8 +134,48 @@ This example dynamically renders each input's HTML. You could alternatively writ
 
 {{ /form:super_fans }}
 ```
-
-## Viewing Submissions
+::tab blade
+```blade
+<s:form:super_fans>
+
+  // First let's check if this is after a submission, and if so, was it successful.
+  // If it was, just show the success message. After all, we don't want them submitting again once they've gotten in touch!
+  @if ($success)
+    <div class="bg-green-300 text-white p-2">
+      {{ $success }}
+    </div>
+  @else
+    // If we weren't successful, show any errors. If a fresh page load, there's no errors, so do nothing.
+    @if (count($errors) > 0)
+      <div class="bg-red-300 text-white p-2">
+        @foreach ($errors as $error)
+          {{ $error }}<br>
+        @endforeach
+      </div>
+    @endif
+
+    // Loop through and render the form inputs
+    @foreach ($fields as $field)
+      <div class="p-2">
+        <label>{{ $field['display'] }}</label>
+        <div class="p-1">{!! $field['field'] !!}</div>
+        @if ($field['error'])
+          <p class="text-gray-500">{{ $field['error'] }}</p>
+        @endif
+      </div>
+    @endforeach
+
+    // Add the honeypot field
+    <input type="text" class="hidden" name="{{ isset($honeypot) ? $honeypot : 'honeypot' }}" />
+
+    // This is just a submit button.
+    <button type="submit">Submit</button>
+  @endif
+</s:form:super_fans>
+```
+::
+
+## Viewing submissions
 
 In the Forms area of the control panel you can explore the collected responses, configure dashboards and export the data to CSV or JSON formats.
 
@@ -139,17 +188,130 @@ In the Forms area of the control panel you can explore the collected responses,
 
 You can display any or all of the submissions of your forms on the front-end of your site using the [form submissions][submissions] Tag.
 
-```
-<h2>My fans have said some things you can't forget...<h2>
+::tabs
+
+::tab antlers
+```antlers
+<h2>My fans have said some things you can't forget...</h2>
 {{ form:submissions in="superfans" }}
   {{ message | markdown }}
 {{ /form:submissions }}
 ```
+::tab blade
+```blade
+<h2>My fans have said some things you can't forget...</h2>
+<s:form:submissions in="superfans">
+  {!! Statamic::modify($message)->markdown() !!}
+</s:form:submissions>
+```
+::
 
 ## Exporting your data
 
 Exporting your data is just a click of the **Export** button away. You have the choice between CSV and JSON. Choose wisely, or choose both, it doesn't matter to us.
 
+### Configuring exporters
+
+Out of the box, Statamic gives you two exporters: a CSV exporter and a JSON exporter.
+
+```php
+// config/statamic/forms.php
+
+'exporters' => [
+    'csv' => [
+        'class' => Statamic\Forms\Exporters\CsvExporter::class,
+    ],
+    'json' => [
+        'class' => Statamic\Forms\Exporters\JsonExporter::class,
+    ],
+],
+```
+
+If you want to customize the labels of the exporters, you may add a `title` key to the exporter's config. You can also add a `forms` key to the exporter config to limit it to certain forms:
+
+```php
+// config/statamic/forms.php
+
+'exporters' => [
+    'csv' => [
+        'class' => Statamic\Forms\Exporters\CsvExporter::class,
+        'title' => 'CSV (Works in Excel)',
+        'forms' => ['contact_form', 'event_registrations'],
+    ],
+],
+```
+
+### CSV Exporter
+
+The CSV exporter supports two configuration options:
+
+#### `csv_delimiter`
+
+This allows you to configure the delimiter used for CSV exports. This defaults to `,`.
+
+```php
+// config/statamic/forms.php
+
+'csv_delimiter' => ',',
+```
+
+#### `csv_headers`
+
+This allows you to configure whether the field handle or the field display text is used for the CSV's heading row. This defaults to `handle`.
+
+```php
+// config/statamic/forms.php
+
+'csv_headers' => 'handle',
+```
+
+### Custom exporter
+
+If you need to export form submissions in a different file format or need more flexibility around how the CSV/JSON files are created, you may build your own custom exporter.
+
+To build a custom exporter, simply create a class which extends Statamic's `Exporter` class and implement the `export` and `extension` methods:
+
+```php
+<?php
+
+namespace App\Forms\Exporters;
+
+use Statamic\Forms\Exporters\Exporter;
+
+class SpecialExporter extends Exporter
+{
+    public function export(): string
+    {
+        return '';
+    }
+
+    public function extension(): string
+    {
+        return 'csv';
+    }
+}
+```
+
+The `export` method should return the file contents and the `extension` method should return the file extension.
+
+Then, to make the exporter available on your forms, simply add it to your forms config:
+
+```php
+// config/statamic/forms.php
+
+'exporters' => [
+    'csv' => [
+        'class' => Statamic\Forms\Exporters\CsvExporter::class,
+    ],
+    'json' => [
+        'class' => Statamic\Forms\Exporters\JsonExporter::class,
+    ],
+    'special_exporter' => [ // [tl! focus]
+        'class' => App\Forms\Exporters\SpecialExporter::class, // [tl! focus]
+    ], // [tl! focus]
+],
+```
+
 ## Emails
 
 Allowing your fans to send their comments is all well and good, but at this point you will only know about it when you head back into the Control Panel to view the submissions. Wouldn't it be better to get notified? Let's hook that up next.
@@ -178,36 +340,56 @@ Inside your email view, you have a number of variables available:
 - `date`, `now`, `today` - The current date/time
 - `site_url` - The site home page.
 - `site`, `locale` - The handle of the site
-- `config` - Any configuration values
+- `config` - Any app configuration values
+- `email_config` - The form's config
 - Any data from [Global Sets](/globals#global-sets)
 - All of the submitted form values
 - A `fields` array
 
 The submitted form values will be augmented for you. For instance, if you have an `assets` field, you will get a collection of Asset objects rather than just an array of paths. Or, a `select` field will be an array with `label` and `value` rather than just the value.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <b>Name:</b> {{ name }}
 <b>Email:</b> {{ email }}
 ```
+::tab blade
+```blade
+<b>Name:</b> {{ $name }}
+<b>Email:</b> {{ $email }}
+```
+::
 
 The `fields` variable is an array available for you for if you'd rather loop over your values in a dynamic way:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ fields }}
     <b>{{ display }}</b> {{ value }}
 {{ /fields }}
 ```
+::tab blade
+```blade
+@foreach ($fields as $field)
+  <b>{{ $field['display'] }}</b> {{ $field['value'] }}
+@endforeach
+```
+::
 
 In each iteration of the `fields` array, you have access to:
 
 - `display` - The display name of the field. (e.g. "Name")
 - `handle` - The handle of the field (e.g. "name")
 - `value` - The augmented value (same as explained above)
-- `type` - The handle of the fieldtype (e.g. "assets")
+- `fieldtype` - The handle of the fieldtype (e.g. "assets")
 - `config` - The configuration of the blueprint field
 
 
-### Setting the From and Reply-To Name
+### Setting the from and reply-to name
 
 You can set a full "From" and "Reply-To" name in addition to the email address using the following syntax:
 
@@ -217,7 +399,7 @@ reply_to: 'Jack Black <jack@jackblack.com>'
 ```
 
 
-### Setting the Recipient Dynamically
+### Setting the recipient dynamically
 
 You can set the recipient to an address submitted in the form by using the variable in your config block. Assuming you have a form input with `name="email"`:
 
@@ -228,7 +410,7 @@ email:
     # other settings here
 ```
 
-### Setting the "Reply To" Dynamically
+### Setting the "Reply to" dynamically
 
 You can set the "reply to" to an address submitted in the form by using the variable in your config block. Assuming you have a form input with `name="email"`:
 
@@ -239,9 +421,9 @@ email:
     # other settings here
 ```
 
-### Setting the "Subject" Dynamically
+### Setting the "Subject" dynamically
 
-You can set the set the email "subject" to a value in your form by using the variable in your config block. Assuming you have a form input with `name="subject"`:
+You can set the email "subject" to a value in your form by using the variable in your config block. Assuming you have a form input with `name="subject"`:
 
 ```yaml
 email:
@@ -263,20 +445,65 @@ email:
     # other settings here
 ```
 
+If you don't want the attachments to be kept around on your server, you should pick the `files` fieldtype option explained in the [File Uploads](#file-uploads) section.
 
-## File Uploads
+### Using Markdown Mailable Templates
 
-Sometimes your fans want to show you things they've created, like scissor-cut love letters and innocent selfies with cats. No problem! File input types to the rescue. Inform Statamic you intend to collect files, specify where you'd like the uploads to go, and whether you'd like them to simply be placed in a directory somewhere, or become reusable Assets.
+Laravel allows you to create email templates [using Markdown](https://laravel.com/docs/mail#markdown-mailables). It's pretty simple to wire these up with your form emails:
 
-First up, add `files="true"` to  your form tag. (This will add `enctype="multipart/form-data"` to the generated `<form>` tag. That's always so difficult to remember.)
+1. Enable Markdown parsing in your email config:
 
+```yaml
+email:
+  -
+    # other settings here
+    markdown: true # [tl! add]
 ```
-{{ form:create formset="contact" files="true" }}
-...
-{{ /form:create }}
+
+2. Next, create a **Blade** view for your email template and start using Laravel's Markdown Mailable components:
+
+```yaml
+email:
+  -
+    # other settings here
+    markdown: true
+    html: 'contact-us' # [tl! add]
 ```
 
-Then add an `assets` field to your blueprint, with a `max_files` setting of `1`:
+```blade
+{{-- contact-us.blade.php --}}
+<x-mail::message>
+# New form submission
+
+Someone has taken the time to fill out a form on your website. Here are the details:
+
+<x-mail::panel>
+@foreach ($fields as $item)
+<strong>{{ $item['display'] }}:</strong> {{ $item['value'] }}<br>
+@endforeach
+</x-mail::panel>
+</x-mail::message>
+```
+
+:::warning
+Make sure you don't use indentation in your Markdown view. Laravel's markdown parser will render it as code.
+:::
+
+You can customize the components further by reviewing the [Laravel documentation](https://laravel.com/docs/12.x/mail#customizing-the-components).
+
+## File uploads
+
+Sometimes your fans want to show you things they've created, like scissor-cut love letters and innocent selfies with cats. No problem! File input types to the rescue. Inform Statamic you intend to collect files, specify where you'd like the uploads to go, and whether you'd like them to simply be placed in a directory somewhere, or become reusable Assets.
+
+First, add a file upload field to your blueprint:
+- Add an `assets` field if you want the uploaded files to be stored in one of your asset containers.
+- Add a `files` field if you're only wanting to attach the uploads to the email. Anything uploaded using this fieldtype will be attached and then deleted after the emails are sent.
+
+Then decide if you need single or multiple files to be uploaded.
+
+### Single files
+
+On your field, add a `max_files` setting of `1`:
 
 ```
 <input type="file" name="cat_selfie" />
@@ -296,9 +523,9 @@ fields:
 
 You have two methods available to you:
 
-First, You can create separate fields for each upload. This is useful if each has a separate purpose, like Resume, Cover Letter, and Headshot. You'll need to explicitly create each and every one in your formset.
+First, you can create separate fields for each upload. This is useful if each has a separate purpose, like Resume, Cover Letter, and Headshot. You'll need to explicitly create each and every one in your formset.
 
-Or, you can enable multiple files on one field by dropping the `max_files` setting on your assets field, and using array syntax on your input by adding a set of square brackets to the `name` attribute:
+Or, you can enable multiple files on one field by dropping the `max_files` setting on your field, and using array syntax on your input by adding a set of square brackets to the `name` attribute:
 
 ```
 <input type="file" name="selfies[]" multiple />
@@ -318,16 +545,28 @@ fields:
 Simple and effective spam prevention.
 
 The honeypot technique is simple. Add a field to your forms, that when filled in will cause the submission to fail, but appear successful. Nothing will be saved and no emails are sent.
-Hide this field a method of your choosing (ie. CSS), so your users won't see it but spam bots will just think it’s another field.
+
+Hide this field by a method of your choosing (ie. CSS), so your users won't see it but spam bots will just think it’s another field.
 
 For example:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ form:create }}
     ...
     <input type="text" name="honeypot" class="honeypot" />
 {{ /form:create }}
 ```
+::tab blade
+```blade
+<s:form:create>
+  ...
+  <input type="text" name="honeypot" class="honeypot" />
+</s:form:create>
+```
+::
 
 ```css
 .honeypot { display: none; }
@@ -349,15 +588,27 @@ If you are static caching the URL containing a form, return responses like 'succ
 
 **Wrapping the form in {{ nocache }}**
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ nocache }}
     {{ form:create formset="contact" }}
         ...
-    {{ /form:create }}    
+    {{ /form:create }}
 {{ /nocache }}
 ```
+::tab blade
+```blade
+<s:nocache>
+  <s:form:create formset="contact">
+    ...
+  </s:form:create>
+</s:nocache>
+```
+::
 
-### Axios Example
+### Axios example
 
 ``` javascript
 window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
@@ -370,5 +621,185 @@ axios.post(form.action, new FormData(form))
   });
 ```
 
+## Precognition
+
+Statamic supports using [Laravel Precognition](https://laravel.com/docs/12.x/precognition) in forms.
+
+Here is a basic example that uses Alpine.js for the Precognition validation, and a regular form submission. This is a starting point that you may customize as needed. For instance, you might prefer to use AJAX to submit the form.
+
+Some things to note here:
+- We give the form a `x-ref` attribute so it can be targeted in Alpine easily.
+- We use a nested `div` since the `{{ form }}` tag will already be outputting a `x-data` attribute.
+- Precognition's `$form` helper expects a URL to submit. We grab that from the `action` attribute on the `<form>` tag that would be generated by `{{ form }}`.
+- It also expects the initial form state. We grab that from the `x-data` attribute on the `<form>` tag. This data will use `old()` data appropriately.
+- Any errors that come back from the full page submission get passed into Precognition's `$form` helper via `setErrors()`. We use the same Alpine templating to output the inline Precognition errors and the full page submission's errors.
+- We need to override the [fieldtype's views](/tags/form-create#prerendered-field-html) so that `x-model` and `@change` are bound to the inputs as per the Precognition docs. The example below shows edits to the text field, but you would need to do it for all fieldtypes you plan to use.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ form:contact attr:x-ref="form" js="alpine" }}
+    <div x-data='{
+        form: $form(
+            "post",
+            $refs.form.getAttribute("action"),
+            JSON.parse($refs.form.getAttribute("x-data"))
+        ).setErrors({{ error | json }}),
+    }'>
+
+        {{ if success }}
+            Success!
+        {{ /if }}
+
+        <template x-if="form.hasErrors">
+            <div>
+                Errors!
+                <ul>
+                    <template x-for="error in form.errors">
+                        <li x-text="error"></li>
+                    </template>
+                </ul>
+            </div>
+        </template>
+
+        {{ fields }}
+            <label>{{ display }}</label>
+            {{ field }}
+            <small x-show="form.invalid('{{ handle }}')" x-text="form.errors.{{ handle }}"></small>
+        {{ /fields }}
+
+        <button :disabled="form.processing">Submit</button>
+
+    </div>
+{{ /form:contact }}
+```
+
+```antlers
+<!-- resources/views/vendor/statamic/forms/fields/text.antlers.html [tl! **]-->
+<input
+    type="{{ input_type ?? 'text' }}"
+    name="{{ handle }}"
+    value="{{ value }}"
+    {{ if placeholder }}placeholder="{{ placeholder }}"{{ /if }}
+    {{ if character_limit }}maxlength="{{ character_limit }}"{{ /if }}
+    {{ if autocomplete }}autocomplete="{{ autocomplete }}"{{ /if }}
+    {{ if js_driver }}{{ js_attributes }}{{ /if }} <!-- [tl! -- **] -->
+    x-model="form.{{ handle }}"  <!-- [tl! ++ **] -->
+    @change="form.validate('{{ handle }}')"  <!-- [tl! ++ **] -->
+    {{ if validate|contains:required }}required{{ /if }}
+>
+```
+::tab blade
+```blade
+<s:form:contact attr:x-ref="form" js="alpine">
+  <div
+    x-data="{
+      form: $form(
+        'post',
+        $refs.form.getAttribute('action'),
+        JSON.parse($refs.form.getAttribute('x-data'))
+      ).setErrors(@json($error)),
+    }"
+  >
+    @if ($success) Success! @endif
+
+    <template x-if="form.hasErrors">
+      <div>
+        Errors!
+        <ul>
+          <template x-for="error in form.errors">
+            <li x-text="error"></li>
+          </template>
+        </ul>
+      </div>
+    </template>
+
+    @foreach ($fields as $field)
+      <label>{{ $field['display'] }}</label>
+      {!! $field['field'] !!}
+
+      <small
+        x-show="form.invalid('{{ $field['handle'] }}')"
+        x-text="form.errors.{{ $field['handle'] }}"
+      ></small>
+    @endforeach
+
+    <button :disabled="form.processing">Submit</button>
+  </div>
+</s:form:contact>
+```
+
+:::tip
+By default, form input templates will be implemented in Antlers. The following template has been converted to Blade for your convenience.
+:::
+
+```blade
+<!-- resources/views/vendor/statamic/forms/fields/text.blade.php [tl! **]-->
+<input
+  type="{{ $input_type ?? 'text' }}"
+  name="{{ $handle }}"
+  value="{{ $value ?? '' }}"
+  @if (isset($placeholder)) placeholder="{{ $placeholder }}" @endif
+  @if (isset($character_limit)) maxlength="{{ $character_limit }}" @endif
+  @if (isset($autocomplete)) autocomplete="{{ $autocomplete }}" @endif
+  @if (isset($js_driver)) {!! $js_attributes !!} @endif {{-- [tl! -- **] --}}
+  x-model="form.{{ $handle }}" {{-- [tl! ++ **] --}}
+  @change="form.validate('{{ $handle }}')" {{-- [tl! ++ **] --}}
+  @required(in_array('required', $validate ?? []))
+>
+```
+::
+
+To build on the regular form submission example above, here's an example for AJAX submission:
+
+::tabs
+
+::tab antlers
+```antlers
+<div x-data='{
+    form: $form(
+        "post",
+        $refs.form.getAttribute("action"),
+        JSON.parse($refs.form.getAttribute("x-data"))
+    ).setErrors({{ error | json }}), {{# [tl! --] #}}
+    ), {{# [tl! ++:start] #}}
+    init() {
+        $refs.form.addEventListener("submit", evt => {
+            evt.preventDefault();
+            this.form.submit().then(response => {
+                this.form.reset();
+                console.log("Success")
+            }).catch(error => {
+                console.log(error);
+            });
+        });
+    } {{# [tl! ++:end] #}}
+}'>
+```
+::tab blade
+```blade
+<div x-data='{
+    form: $form(
+        "post",
+        $refs.form.getAttribute("action"),
+        JSON.parse($refs.form.getAttribute("x-data"))
+    ).setErrors(@json($error)), {{-- [tl! --] --}}
+    ), {{-- [tl! ++:start] --}}
+    init() {
+        $refs.form.addEventListener("submit", evt => {
+            evt.preventDefault();
+            this.form.submit().then(response => {
+                this.form.reset();
+                console.log("Success")
+            }).catch(error => {
+                console.log(error);
+            });
+        });
+    } {{-- [tl! ++:end] --}}
+}'>
+```
+::
+
 [tags]: /tags/form
 [submissions]: /tags/form-submissions
diff --git a/content/collections/docs/fortrabbit.md b/content/collections/docs/fortrabbit.md
new file mode 100644
index 000000000..dc5034065
--- /dev/null
+++ b/content/collections/docs/fortrabbit.md
@@ -0,0 +1,87 @@
+---
+id: 94c521e3-bacb-45e3-b385-00bad3cac401
+blueprint: page
+title: Deploying Statamic with fortrabbit
+intro: fortrabbit is a managed PHP app hosting solution running on AWS. Well known since 2012.
+parent: c4f17d05-78bd-41bf-8e06-8dd52f6ec154
+---
+
+[fortrabbit](https://www.fortrabbit.com) is a full service provider, no account with another hosting provider required. Just sign up at fortrabbit.
+
+## Creating a New App
+
+fortrabbit has a 'try before buy' model. Create your first free trial App with the fortrabbit Dashboard. The free trial is limited in time, but you can ask friendly human support to extend the trial time.
+
+While creating an App, choose Laravel as the framework for pre-configuration. Note that this will not install software. It is anticipated that you have a local development environment running Statamic ([see here](/installing)) to be deployed to the fortrabbit platform.
+
+## Choosing a Deployment Method
+
+The fortrabbit hosting platform offers integrated Git deployment as well as classical SSH/SFTP access. Depending on your use case and skills pick what fit's you the most. In the following the most popular workflow is shown. Replace variables in curly braces with your settings as provided with the fortrabbit Dashboard:
+
+## Deploying Statamic with Git + rsync
+
+* Content changes are synced up and down via rsync
+* Template and theme code is deployed via Git
+* Composer dependencies are automatically installed during Git deployment
+
+### Configuring
+
+Exclude contents from Git in your `.gitignore` file:
+
+```.gitignore
+# Exclude stuff you are creating from Git in .gitignore
+/content
+/users
+/resources/blueprints
+/resources/fieldsets
+/resources/forms
+/resources/users
+/storage/forms
+/public/assets
+```
+
+### Deploying Code with Git
+
+In your local terminal, with the root folder of your Statamic project execute:
+
+```shell
+# 1. Initialize Git
+git init
+
+# 2. Add your Apps Git remote to your local repo
+git remote add fortrabbit {{appname}}@deploy.{{region}}.frbit.com:{{appname}}.git
+
+# 4. Add changes to Git
+git add -A
+
+# 5. Commit changes
+git commit -m 'My first commit'
+
+# 6. Initial push and upstream
+git push -u fortrabbit main
+
+# From there on only
+git push
+```
+
+### Deploying Content with rsync
+
+Again, in your local terminal, with the root folder of your Statamic project execute:
+
+```shell
+# SYNC UP: from local to remote
+$ rsync -avR ./content ./users ./resources/blueprints ./resources/fieldsets ./resources/forms ./resources/users ./storage/forms ./public/build ./storage/app  ./public/assets {{appname}}@deploy.{{region}}.frbit.com:~/
+```
+
+It also works down and for specific folders only as shown here:
+
+```shell
+# SYNC DOWN: from remote to local one by one examples
+rsync -av {{appname}}@deploy.{{region}}.frbit.com:~/content ./
+rsync -av {{appname}}@deploy.{{region}}.frbit.com:~/users ./
+…
+```
+
+## Advanced
+
+fortrabbit also offers MySQL resources, so you can run Statamic in database mode. The fortrabbit team really cares about Statamic. See [their extensive Statamic guides section](https://help.fortrabbit.com/#statamic) with multiple deployment articles or contact human support if you are hanging somewhere.
diff --git a/content/collections/docs/from-wordpress-to-statamic.md b/content/collections/docs/from-wordpress-to-statamic.md
new file mode 100644
index 000000000..8d5fbc42c
--- /dev/null
+++ b/content/collections/docs/from-wordpress-to-statamic.md
@@ -0,0 +1,195 @@
+---
+id: 550e7bf1-de6e-40ba-9b06-b32d9119e436
+blueprint: page
+title: 'Switching From WordPress to Statamic'
+nav_title: 'WordPress to Statamic'
+intro: |-
+  Thinking about moving from WordPress to Statamic? You wouldn't be the first. If you’ve been in the WordPress world for a while, you’re pretty familiar with one of its biggest strengths — the massive plugin ecosystem. If you're evaluating Statamic against this catalogue you might think our community's few hundred addons aren't nearly enough.
+
+  Hopefully this guide will open your eyes to a different approach to building sites. One that doesn't require so many addons and taps into a more flexible way of building bigger features out of smaller ones. And we'll show you Statamic's answers to WordPress plugins you're probably most familiar with.
+---
+
+## ACF and Custom Fields
+
+Arguably one of the best ways to build modern content-driven WordPress sites — especially those with a proper separation of content and style — is with Advanced Custom Fields (ACF) or Pods Framework.
+
+Instead of this custom field approach being an afterthought, Statamic was built from the ground up with this approach with 40 different [fieldtypes](/reference/fieldtypes) that you can organize into [blueprints](/blueprints) and reusable fieldsets.
+
+<figure>
+    <img src="/img/blueprints.png" alt="The Statamic blueprint configuration screen">
+    <figcaption>A glimpse at configuring a blueprint.</figcaption>
+</figure>
+
+Your fields are organized into Blueprints, which support sections and tabs for better organization. You have control over field order and width, validation rules, and can even configure conditions that show and hide fields based on your content, making your authoring experience as streamlined and uncluttered as possible for your content team.
+
+If you have groups of fields you want to use in multiple Blueprints, you can create a reusable Fieldset that can be imported into any Blueprint, saving you time duplicating configs.
+
+It’s super intuitive to manage through the control panel. It feels like ACF, but it’s baked right into the core CMS.
+
+## Gutenberg and block/page builders
+
+If you've been working with a Gutenberg or Page Builder approach, take a look at the [Bard](/fieldtypes/bard) and [Replicator](/replicator) fieldtypes — they allow you to create blocks (we call them "sets") out of any _other_ native fieldtypes, giving you virtually unlimited ways to configure your content.
+
+These can be used to create numerous components that can be combined as a "page builder" allowing your content team to create and rearrange pages without ever worrying about what it looks like.
+
+<figure>
+    <img src="/img/fieldtypes/screenshots/v4/bard-with-sets.png" width="597" alt="Bard Fieldtype UI">
+    <figcaption>The Bard Fieldtype in action.</figcaption>
+</figure>
+
+### Block to set examples
+
+Here is how you could create some common "blocks" with Bard and Replicator sets using our native fieldtypes.
+
+#### Hero
+
+- [Assets](/fieldtypes/assets) field for a background image
+- [Color](/fieldtypes/color) field to control a background or overlay color
+- [Text](/fieldtypes/text) field to edit the `<h1>` text
+- [Group](/fieldtypes/group) field with a Text and [Link](/fieldtypes/link) field to create a call to action button with a destination URL
+
+#### Slideshow
+
+A single [Assets](/fieldtypes/assets) field is all you need, as Assets themselves can have their own custom fields for alt text, description, caption, credit, etc.
+
+#### Blockquote
+
+A [Markdown](/fieldtypes/markdown) or [Bard](/fieldtypes/bard) field to hold the quote, and a [Text](/fieldtypes/text) field for the author `<cite>`.
+
+#### Newsletter signup
+
+An empty set works, or a single [HTML](/fieldtypes/html) field letting you insert a display message in your editor saying "Newsletter shown here", and then on the frontend have it render whatever [partial](/tags/partial) you need for the form.
+
+#### Video embed
+
+A single [video](/fieldtypes/video) fieldtype to paste in the URL of a YouTube or Vimeo video would be enough, but you could add a [Select](/fieldtypes/select) or [Button Group](fieldtypes/button_group) field with some options to control the size of the embed (inline vs oversized, for example).
+
+::: tip
+These fields store **structured content**, but don't explicitly give control over your _layout_ because they don't write their own HTML. You always have full control of your markup, which in the end makes for a better long-term experience, allowing you to redesign sites without ever having to clean up or rewrite content again.
+:::
+
+## Themes
+
+Statamic uses [Starter Kits](https://statamic.dev/starter-kits) instead of traditional themes. These kits go beyond just styling – they can include plugins, custom code, and entire workflows. 
+
+You can [get Starter Kits from the Marketplace](https://statamic.com/starter-kits), where there are free and commercially available options. For example, the first-party [Cool Writings](https://statamic.com/starter-kits/statamic/cool-writings) starter kit is an excellent choice to use as the basis for a simple blog.
+
+We've even made it easy for you to [create your own starter kit](https://statamic.dev/starter-kits/creating-a-starter-kit). So once you've migrated your WordPress site, why not submit it to the marketplace?
+
+## SEO
+
+Yoast SEO is probably the biggest go-to SEO plugin for the WordPress world. It's massive and does many things. But it's also pretty complicated and often overkill, especially for smaller sites.
+
+In Statamic, you don’t really _need_ a big plugin to have good SEO. You can get a lot of mileage out of managing all your metadata using our native fields and templates, and then tap into one of the bigger reporting tools like [Moz Seo](https://moz.com/) or [Ahrefs](https://ahrefs.com) to get valuable insight about your site's content.
+
+If you want to take it to the next level, you can check out our first-party addon — [SEO Pro](https://statamic.com/addons/statamic/seo-pro). It includes a number of useful features. It:
+
+- Sets up all your meta data fields for you, including Open Graph and Twitter data, images, and cards.
+- Provides a reporting tool to scan your site and make sure all your pages have meta titles, descriptions, and other important SEO factors
+- Generates sitemaps automatically
+- Manages Google and Bing site verifications
+- Generates a [humans.txt](https://humanstxt.org/) file to show who's _behind_ your websites
+
+But SEO Pro isn't the only option in the Statamic Ecosystem. You can explore some of the other popular addons:
+
+- [Advanced SEO](https://statamic.com/addons/aerni/advanced-seo)
+- [Aardvark SEO](https://statamic.com/addons/candour/aardvark-seo)
+- [SEOtamic](https://statamic.com/addons/cnj/seotamic)
+- [SEO Checker](https://statamic.com/addons/luckymedia/seochecker)
+
+
+## E-Commerce
+
+While there is no do-it-all-and-then-some solution like WooCommerce in the Statamic world, there are still quite a few options that provide a lot of flexibility depending on your specific needs.
+
+[Simple Commerce](https://statamic.com/addons/duncanmcclean/simple-commerce) developed by a core team member, provides essential features like product catalogs, shopping carts, and order management. It can handle digital and physical products, tax calculations, and shipping.
+
+The [Shopify addon](https://statamic.com/addons/rad-pack/shopify) helps you integrate with Shopify's powerful platform — controlling the frontend of your site with Statamic and leaving the heavy cart, checkout flow, and product management to Shopify.
+
+[Charge](https://statamic.com/addons/silentz/charge) is perfect for simpler one-time digital payments or recurring billing for memberships.
+
+[Donation Checkout](https://statamic.com/addons/ghijk/donation-checkout) lets you accept Stripe payments of arbitrary amounts via Stripe Checkout.
+
+There are integrations for [Lemon Squeezy](https://statamic.com/addons/rias/lemon-squeezy) and [Snipcart](https://statamic.com/addons/aerni/snipcart) as well.
+
+Additionally, Statamic benefits from Laravel's extensive ecosystem, which includes tools like [Laravel Cashier](https://laravel.com/docs/12.x/billing) for subscription billing, and integrations with payment processors such as Stripe and Paddle. This flexibility allows developers to create fully custom e-commerce solutions tailored to specific needs.
+
+## Forms
+
+In WordPress, forms are usually handled by plugins like Contact Form 7, WooForms, or WPForms.
+
+Statamic has a built-in [forms feature](/forms) that enable you to manage form fields, collect submissions, provide reports on them on aggregate, and even display user submitted data on the frontend.
+
+And if you need more customization, addons like [Flexible Forms](https://statamic.com/addons/addon-foundry/flexible-forms) or [Livewire Forms](https://statamic.com/addons/aerni/livewire-forms) can level it up further.
+
+
+## Security
+
+95.5% of the content-managed websites hacked are running WordPress ([source](https://sucuri.net/reports/2023-hacked-website-report/)). Also, last year there were almost 6000 vulnerabilities found in themes and plugins ([source](https://patchstack.com/whitepaper/state-of-wordpress-security-in-2024/)). It is the most targeted CMS on the market, which makes plugins like Wordfence, Patchstack, or WPScan critical to your security solution. Here are a few reasons Statamic is more secure than WordPress:
+
+- Around 5% of website hacks are done through SQL Injection. Out of the box, Statamic doesn't use a database, thus eliminating most forms of automated attacks.
+- Statamic's developer team maintains all of the fundamental features most websites need. You will not need 30 plugins by 30 authors on different update schedules. This is one of the reasons why WordPress is so vulnerable.
+- Statamic is built on [Laravel](https://laravel.com), widely regarded as the most secure and well-maintained PHP framework today.
+
+## Performance
+
+WordPress is notoriously slow out of the box, which is generally alleviated by plugins like WP Rocket and Redis caching.
+
+We've considered and optimized for performance in every area of Statamic. Built-in smart caching is often enough for most sites to fly <strong>right out of the gate</strong>, and for those more complex sites that have more heavy lifting or higher traffic — [static caching](/static-caching), Redis caching, or even [static site generation](https://github.com/statamic/ssg) are all native tools at your disposal.
+
+## Spam protection
+
+If you’re used to using Akismet to keep spam out of your forms, you can [continue doing so](https://statamic.com/addons/silentz/akismet).
+
+## Redirection
+
+Need to manage redirects? In WordPress, you’d likely use the Redirection plugin. In Statamic, there’s an addon for that — [Redirect](https://statamic.com/addons/rias/redirect). You can redirect legacy urls, manage 301 and 302 redirects right from the control panel without any performance impacts. Super simple.
+
+## Backups
+
+In WordPress, you might use UpdraftPlus to handle backups, but in Statamic — as long as you're running on flat files — git becomes your backup, version controlling all your changes to content, templates, and configs along the way.
+
+If you’re using Statamic Pro, it can even automate your Git commits and pushes. No more worrying about backups, they’re just an invisible part of your workflow.
+
+## Importing content
+
+Statamic has a [native Importer](https://github.com/statamic/importer) with support for WordPress's XML or CSV export formats. It supports importing entries, taxonomy terms, and users, and can handle converting Gutenberg content to Bard sets. It even has hooks you can use to customize the import process at any step of the way.
+
+## Everything else
+
+- **Slider Revolution:** Build custom sliders with Statamic’s [Replicator field](/fieldtypes/replicator) and plug it into frontend libraries like [Slick](https://kenwheeler.github.io/slick/) or [Flickity](https://flickity.metafizzy.co/).
+- **MonsterInsights:** You can drop Google Analytics right into Statamic or use the [Ginsights Analytics](https://statamic.com/addons/vijay-software/ginsights-analytics) addon if you want a more integrated feel.
+- **WPML:** Statamic’s built-in [multi-site](/multi-site) feature helps you  manage different languages.
+- **Mailchimp for WordPress:** Use the [Mailchimp](https://statamic.com/addons/rad-pack/mailchimp) addon to connect directly with your audience.
+- **Smush, Imagify:** Statamic has you covered with [Glide](/tags/glide), an image manipulation tag that compresses and optimizes images on the fly.
+- **Comments:** Check out [Meerkat](https://statamic.com/addons/stillat/meerkat-statamic-3).
+
+## Glossary
+
+When migrating from WordPress to Statamic, one of the initial challenges is adapting to new terminology. While both systems share many similar concepts, they often use different names for comparable features. Hopefully this table helps point you in the right direction.
+
+
+| WordPress Term | Statamic Equivalent | Notes |
+|---------------|-------------------|-------|
+| Post/Page | Entry | Basic content unit in Statamic |
+| Custom Post Type | Collection | Groups of similar entries |
+| Category/Tag | Taxonomy | Both systems use taxonomies for classification |
+| Template | Template/View | Antlers or Blade templates in Statamic |
+| Theme | Starter Kit | Starter Kits are a starting place, but are not generally interchangeable |
+| Plugin | Addon | Extends core functionality |
+| Meta Fields | Fields/Blueprints | Statamic uses YAML for field definitions |
+| Featured Image | Asset | Part of Statamic's Asset system |
+| Menu | Navigation | We call menu structures "Navigations" |
+| Custom Fields/ACF | Fieldtypes | Various content input types and controls |
+| Gutenberg Block | Bard/Replicator | Rich content editing tools |
+| Shortcode | Tag | Template tags for dynamic content |
+| Media Library | Assets | Asset management system |
+| User Role | User Role/Group | Similar permission systems |
+| Options/Settings | Globals | Site-wide variables and settings |
+| Post Status | Status | Published, Draft, etc. |
+| Author | User | Content creators |
+| wp-config.php | `.env` or `config/statamic/` | Site configuration |
+| functions.php | ServiceProvider | For adding functionality |
+| hooks/filters | Events/Listeners | For modifying core behavior |
+| Child Theme | - | Statamic uses bespoke themes |
+| Featured Image | Asset | Hero/main images |
diff --git a/content/collections/docs/frontend.md b/content/collections/docs/frontend.md
index 97e5fd5e4..085c4fc07 100644
--- a/content/collections/docs/frontend.md
+++ b/content/collections/docs/frontend.md
@@ -20,13 +20,13 @@ The **backend** of a Statamic site is all of the PHP and Laravel code that you _
 
 Statamic's **Control Panel** sits _outside_ both the frontend and backend as a tool used to publish and manage content, users, and assets.
 
-## The Frontend is Yours
+## The frontend is yours
 
 In today's tech-driven ecosystem there are countless ways to build a website. Some might say _too_ many. You could...
 
 - Write a Single Page Application (SPA) with [Vue.js](https://vuejs.org) or [React](https://reactjs.org) to run your entire site without the need for page refreshes
 - Use HTML and Statamic's [Antlers](/antlers) template language to build a dynamic site with smart caching
-- Use [Webpack](https://webpack.js.org), [Laravel Mix][mix], or [Gulp](https://gulpjs.com) to compile your JavaScript and SCSS/LESS
+- Use [Vite][vite], [Webpack](https://webpack.js.org), [Laravel Mix][mix], or [Gulp](https://gulpjs.com) to compile your JavaScript and SCSS/LESS
 - Go for the [JAMStack](https://jamstack.org) approach and run a statically generated site without server-side processing
 - Build a standard Statamic site and deploy a static version to [Netlify](https://www.netlify.com)
 - Go skateboarding and stay away from computers and nerdy webmasters
@@ -36,13 +36,13 @@ Just like the [honey badger](https://www.youtube.com/watch?v=4r7wHMg5Yjg), Stata
 
 **It's up to you.** Write or generate HTML somehow and let Statamic get it to the browser.
 
-## Path of Least Resistance
+## Path of least resistance
 
-If you don't have a hard requirement, a strong preference, or just want our advice, we recommend writing your own HTML, use [Antlers](/antlers) in said HTML to pull content in, use [TailwindCSS](https://tailwindcss.com) as your CSS framework, and let [Laravel Mix][mix] compile any JavaScript, SCSS/LESS, or PostCSS as necessary.
+If you don't have a hard requirement, a strong preference, or just want our advice, we recommend writing your own HTML, use [Antlers](/antlers) or [Blade](/blade) in said HTML to pull content in, use [TailwindCSS](https://tailwindcss.com) as your CSS framework, and let [Vite][vite] compile any JavaScript, SCSS/LESS, or PostCSS as necessary.
 
 You'll be able to take advantage of all of our powerful, tightly coupled [tags](/tags) that do most of the heavy lifting — like fetching and displaying content from collections and taxonomies, manipulating, assets, and rendering variables.
 
-## Other Options
+## Other options
 
 You don't have to go Antlers + Tailwind. At all. That's just our preference.
 
@@ -50,11 +50,11 @@ You could do so many different things, like:
 
 - Use our [GraphQL](/graphql) integration and build your frontend with [Gatsby.js](https://www.gatsbyjs.com/)
 - Use our [REST API](/rest-api) and build a single page application with [Vue.js](https://vuejs.org) or [React](https://reactjs.org/)
-- Use [Laravel Blade](https://laravel.com/docs/9.x/blade) and some controllers and write your own routes.
+- Use [Laravel Blade](https://laravel.com/docs/12.x/blade) and some controllers and write your own routes.
 
 It's up to you.
 
-## Request Lifecycle
+## Request lifecycle
 
 Let's take a quick look at what happens during a typical Statamic frontend request:
 
@@ -65,3 +65,4 @@ Let's take a quick look at what happens during a typical Statamic frontend reque
 5. The Contents of the rendered view is sent to the user's browser.
 
 [mix]: https://laravel.com/docs/mix
+[vite]: https://vitejs.dev
diff --git a/content/collections/docs/git-automation.md b/content/collections/docs/git-automation.md
index cc0d42888..163a43e51 100644
--- a/content/collections/docs/git-automation.md
+++ b/content/collections/docs/git-automation.md
@@ -2,10 +2,12 @@
 id: c095fb87-4c02-462c-9e6f-dfe0b6889248
 blueprint: page
 title: 'Git Automation'
-intro: 'Statamic can automate your version control workflow with Git. It can automatically commit and push content as it''s changed, schedule commits, or allow users to commit and push changes from the control panel without having to understand how git works.'
+intro: "Statamic can automate your version control workflow with Git. It can automatically commit and push content as it's changed, schedule commits, or allow users to commit and push changes from the control panel without having to understand how git works."
 pro: true
 updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
 updated_at: 1632512218
+related_entries:
+  - b46adc3b-c4de-4148-a388-c8ff498ae9c9
 ---
 ## Overview
 
@@ -29,7 +31,7 @@ By default, content will be committed automatically as it's changed, but you can
 
 Git workflow can be configured in your `config/statamic/git.php` file, or per environment in your `.env` file.
 
-## Git User
+## Git user
 
 By default, Statamic will attempt to use the authenticated user's name and email when committing changes. If you prefer to always use hardcoded git user info, you can disable this by setting `use_authenticated` to `false` in your [configuration](#configuration):
 
@@ -44,7 +46,7 @@ By default, Statamic will attempt to use the authenticated user's name and email
 
 _Note: Depending on how you configure your commit workflow, an authenticated user may not always be available. In these cases, Statamic will fall back to the above configured user._
 
-## Tracked Paths
+## Tracked paths
 
 You are free to define the tracked paths to be considered when staging and committing changes. Default stache and file locations are already set up for you, but feel free to modify these paths in your [configuration](#configuration) to suit your storage config.
 
@@ -56,6 +58,8 @@ You are free to define the tracked paths to be considered when staging and commi
     resource_path('fieldsets'),
     resource_path('forms'),
     resource_path('users'),
+    resource_path('preferences.yaml'),
+    resource_path('sites.yaml'),
     storage_path('forms'),
     public_path('assets'),
 ],
@@ -65,7 +69,7 @@ You are free to define the tracked paths to be considered when staging and commi
 You may also reference absolute paths to external repositories! If Statamic detects an external repository path, changes will be staged and committed relative to your external repository.
 :::
 
-## Committing Changes
+## Committing changes
 
 By default, Statamic listens to various `Saved` and `Deleted` data events to determine when your content is changed, and will automatically commit your changes. If you prefer users to manually trigger commits using the Git utility interface, you may set this to `false` in your [configuration](#configuration):
 
@@ -87,7 +91,7 @@ Manually trigger commits via the command line with the following command:
 php please git:commit
 ```
 
-## Pushing Changes
+## Pushing changes
 
 Statamic can also `git push` your changes after committing. Enable this behavior in your [configuration](#configuration):
 
@@ -120,7 +124,7 @@ git reset HEAD
 ```
 
 
-## Queueing Commits
+## Queueing commits
 
 When automatic [committing](#committing-changes) is enabled, commits are automatically pushed onto a [queue](https://laravel.com/docs/queues) for processing. By default, your Statamic app is configured to use the `sync` queue driver, which will run the job immediately after your content is saved during the web request.
 
@@ -158,11 +162,22 @@ In this example, we queue a delayed commit to run 10 minutes after a user makes
 Since all tracked paths are committed at once, this can allow for more consolidated commits when you have multiple users making simultaneous content changes to your repository.
 :::
 
-_Note: When commits are run by a queue's background process, there will be no authenticated user. In this case, Statamic will use the hardcoded git user in your [configuration](#configuration)._
+## Scheduling commits
+
+You can also [schedule](https://laravel.com/docs/scheduling) commits to run via cron job at regular intervals within your `routes/console.php` file:
+
+```php
+<?php
+
+use Illuminate\Support\Facades\Schedule;
 
-## Scheduling Commits
+Schedule::command('statamic:git:commit')->everyTenMinutes();
+```
 
-You can also [schedule](https://laravel.com/docs/scheduling) commits to run via cron job at regular intervals within your `app/Console/Kernel.php` file:
+In this example, we schedule a commit to run 10 minutes after a user makes a content change. If at that time the repository status is clean, the commit will be cancelled.
+
+:::hint
+If you're using Laravel 10, or still have a `app/Console/Kernel.php` file in your project, you should schedule Git commits inside your `app/Console/Kernel.php` file instead:
 
 ```php
 protected function schedule(Schedule $schedule)
@@ -172,8 +187,13 @@ protected function schedule(Schedule $schedule)
         ->everyTenMinutes();
 }
 ```
+:::
 
-In this example, we schedule a commit to run 10 minutes after a user makes a content change. If at that time the repository status is clean, the commit will be cancelled.
+_Note: If you have never used Laravel's scheduler, be sure to also [configure a cron job on your server](https://laravel.com/docs/scheduling#running-the-scheduler) to run all scheduled jobs. This only needs to be done once per server._
+
+```
+* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
+```
 
 ### Scheduling for performance
 
@@ -185,7 +205,7 @@ Since all tracked paths are committed at once, this can allow for more consolida
 
 _Note: When commits are scheduled to run via cron, there will be no authenticated user. In this case, Statamic will use the hardcoded git user in your [configuration](#configuration)._
 
-## Customizing Commits
+## Customizing commits
 
 To customize the commit messages themselves, modify the `commands` array in the [configuration](#configuration) file.
 
@@ -194,7 +214,7 @@ For example, you can append `[BOT]` to the commit message so that you can select
 ```php
 'commands' => [
     'git add {{ paths }}',
-    'git commit -m "{{ message }} [BOT]"',
+    'git -c "user.name={{ name }}" -c "user.email={{ email }}" commit -m "{{ message }} [BOT]"',
 ],
 ```
 
@@ -244,7 +264,7 @@ For example, if you're [storing users in a database](/tips/storing-users-in-a-da
 When ignoring events, you may also wish to remove any related [tracked paths](#tracked-paths) from your configuration.
 :::
 
-## Addon Events
+## Addon events
 
 When building an addon that provides its own content saved events, you should register those events with our git listener in your addon service provider:
 
@@ -280,4 +300,4 @@ class PunSaved extends Event implements ProvidesCommitMessage
         return __('Pun saved');
     }
 }
-```
+```
\ No newline at end of file
diff --git a/content/collections/docs/globals.md b/content/collections/docs/globals.md
index e88e1eac8..1a08d9468 100644
--- a/content/collections/docs/globals.md
+++ b/content/collections/docs/globals.md
@@ -15,15 +15,14 @@ Globals are intended to be used for **reusable content** or content that **belon
 - Site settings (e.g. on/off toggles for various features)
 - Success and error message text
 
-## Global Sets
+## Global sets
 
 Globals are organized into "sets", each containing [fields](/fields). This convention helps you keep groups of globals together and stay organized. Each set also acts as a "scope" for templating purposes.
 
-<div class="screenshot">
+<figure>
     <img src="/img/global-set-footer.png" alt="Statamic Global Set Example">
-    <div class="caption">Global Set</div>
-</div>
-
+    <figcaption>Global Set</figcaption>
+</figure>
 
 ## Storage
 
@@ -44,20 +43,35 @@ data:
 ```
 
 
-## Frontend Templating
+## Frontend templating
+
+::tabs
+
+::tab antlers
 
 In this example all of the variables inside a `footer` global set will be accessed through `footer:<var_name>`.
 
-```
+```antlers
 <footer class="site-footer">
     <p>{{ footer:copyright }}</p>
     <p class="text-sm">{{ footer:flair }}</p>
 </footer>
 ```
+::tab blade
+
+In this example all of the variables inside a `footer` global set will be accessed through `$footer->{$var_name}`.
+
+```blade
+<footer class="site-footer">
+	<p>{{ $footer->copyright }}</p>
+	<p class="text-sm">{{ $footer->flair }}</p>
+</footer>
+```
+::
 
 If you only have one default global set (which we named "Globals" because it cannot get any simpler), _the scope is optional_. You can access them with either `{{ var_name }}` or `{{ global:var_name }}`.
 
-## Blueprints are Optional
+## Blueprints are optional
 
 If you don't explicitly create a [Blueprint](/blueprints) for your global set, Statamic will treat each key in the YAML file as a text variable. Blueprints only become necessary when you need more control over which fieldtype you want used, wish to create fields before you have the content to put in them, or want to work with [GraphQL](/graphql)
 
@@ -71,7 +85,7 @@ When running a [multi-site](/multi-site) installation, you can have globals exis
 
 [Read about localizing globals](/tips/localizing-globals)
 
-## Ideas on How to Use Globals
+## Ideas on how to use globals
 
 Here are a few more ideas what you can use globals for:
 
diff --git a/content/collections/docs/graphql.md b/content/collections/docs/graphql.md
index 79649ad44..e0daab877 100644
--- a/content/collections/docs/graphql.md
+++ b/content/collections/docs/graphql.md
@@ -9,33 +9,57 @@ id: fc564ddf-80c1-4d87-8675-4a41f13c7774
 
 ## Enable GraphQL
 
-Enable the GraphQL API in your config or with an environment variable.
+To enable the GraphQL API, add the following to your `.env` file:
+
+```env
+STATAMIC_GRAPHQL_ENABLED=true
+```
+
+Or you can enable it for all environments in `config/statamic/graphql.php`:
 
 ```php
-// config/statamic/graphql.php
 'enabled' => true,
 ```
 
-```env
-STATAMIC_GRAPHQL_ENABLED=true
-```
+You will also need to [enable the resources](#enable-resources) you want to be available. For security, they're all disabled by default.
 
 :::tip
+When GraphQL is enabled, [GraphiQL](https://github.com/graphql/graphiql) is available in the Control Panel. This allows you to explore and test available queries and fields.
+:::
+
+:::tip Heads up
 If you publish the underlying [package's](#laravel-package) config, the query routes will be enabled regardless of whether you've disabled it in the Statamic config.
 :::
 
-You will also need to enable the resources you want to be available. For security, they're all disabled by default.
+### Enable resources
+
+You can enable resources (ie. Collections, Taxonomies, etc.) in your `config/statamic/graphql.php` config:
 
 ```php
-// config/statamic/graphql.php
+'resources' => [
+    'collections' => true,
+    'taxonomies' => true,
+    // etc.
+]
+```
+
+### Enable specific sub-resources
+
+If you want more granular control over which sub-resources are enabled within a resource type (ie. enabling specific Collection queries only), you can use array syntax:
 
+```php
 'resources' => [
-  'collections' => true,
-  'taxonomies' => true,
-  // etc
+    'collections' => [
+        'articles' => true,
+        'pages' => true,
+        // 'events' => false, // Sub-resources are disabled by default
+    ],
+    'taxonomies' => true,
+    // etc.
 ]
 ```
 
+
 ## Interfaces
 
 Statamic will provide "interface" types, which describe more generic items. For instance, an `EntryInterface` exists for all
@@ -112,7 +136,7 @@ Note that you can even perform the same query multiple times. If you want to do
 }
 ```
 
-## Available Queries
+## Available queries
 
 - [Ping](#ping-query)
 - [Collections](#collections-query)
@@ -260,7 +284,7 @@ Used for querying a single entry.
 }
 ```
 
-### Asset Containers {#asset-containers-query}
+### Asset containers {#asset-containers-query}
 
 Used for querying asset containers.
 
@@ -282,7 +306,7 @@ Used for querying asset containers.
 }
 ```
 
-### Asset Container {#asset-container-query}
+### Asset container {#asset-container-query}
 
 Used for querying a single asset container.
 
@@ -321,6 +345,7 @@ Returns a [paginated](#pagination) list of [AssetInterface](#asset-interface) ty
 | `container` | `String!` | Specifies which asset container to query.
 | `limit` | `Int` | The number of results to be shown per paginated page.
 | `page` | `Int` | The paginated page to be shown. Defaults to `1`.
+| `filter` | `JsonArgument` | Narrows down the results based on [filters](#filtering).
 | `sort` | `[String]` | [Sorts](#sorting) the results based on one or more fields and directions.
 
 Example query and response:
@@ -484,7 +509,7 @@ Used for querying a single taxonomy term.
 }
 ```
 
-### Global Sets {#global-sets-query}
+### Global sets {#global-sets-query}
 
 Used for querying multiple global sets.
 
@@ -495,7 +520,6 @@ Returns a list of [GlobalSetInterface](#global-set-interface) types.
 | `taxonomy` | `[String]` | Narrows down the results by terms in one or more taxonomies.
 | `limit` | `Int` | The number of results to be shown per paginated page.
 | `page` | `Int` | The paginated page to be shown. Defaults to `1`.
-| `filter` | `JsonArgument` | Narrows down the results based on [filters](#filtering).
 | `sort` | `[String]` | [Sorts](#sorting) the results based on one or more fields and directions.
 
 Example query and response:
@@ -524,7 +548,7 @@ Example query and response:
 }
 ```
 
-### Global Set {#global-set-query}
+### Global set {#global-set-query}
 
 Used for querying a single global set.
 
@@ -550,6 +574,70 @@ Used for querying a single global set.
 }
 ```
 
+### Forms {#forms-query}
+
+Used for querying multiple forms.
+
+```graphql
+{
+    forms {
+        handle
+        title
+        fields {
+            handle
+            display
+        }
+    }
+}
+```
+
+```json
+{
+    "forms": [
+        {
+            "handle": "contact",
+            "title": "Contact",
+            "fields": [
+                { "handle": "name", "display": "Name" },
+                { "handle": "email", "display": "Email" },
+                { "handle": "inquiry", "display": "Inquiry" }
+            ]
+        }
+    ]
+}
+```
+
+### Form {#form-query}
+
+Used for querying a single form.
+
+```graphql
+{
+    form(handle: "contact") {
+        handle
+        title
+        fields {
+            handle
+            display
+        }
+    }
+}
+```
+
+```json
+{
+    "form": {
+        "handle": "contact",
+        "title": "Contact",
+        "fields": [
+            { "handle": "name", "display": "Name" },
+            { "handle": "email", "display": "Email" },
+            { "handle": "inquiry", "display": "Inquiry" }
+        ]
+    }
+}
+```
+
 ### Navs {#navs-query}
 
 Used for querying Navs.
@@ -594,7 +682,73 @@ Used for querying a single Nav.
 }
 ```
 
-## Custom Queries
+### Users {#users-query}
+
+Used for querying multiple users.
+
+| Argument | Type | Description |
+|----------|------|-------------|
+| `limit` | `Int` | The number of results to be shown per paginated page.
+| `page` | `Int` | The paginated page to be shown. Defaults to `1`.
+| `filter` | `JsonArgument` | Narrows down the results based on [filters](#filtering).
+| `sort` | `[String]` | [Sorts](#sorting) the results based on one or more fields and directions.
+
+Example query and response:
+
+```graphql
+{
+    users {
+        current_page
+        data {
+            name
+            email
+        }
+    }
+}
+```
+
+```json
+{
+    "users": {
+        "current_page": 1,
+        "data": [
+            { "name": "David Hasselhoff", "email": "thehoff@statamic.com" },
+            { "name": "Chuck Norris", "email": "norris@statamic.com" },
+        ]
+    }
+}
+```
+
+### User {#user-query}
+
+Used for querying a single user.
+
+```graphql
+{
+    user(email: "thehoff@statamic.com") {
+        name
+        email
+    }
+}
+```
+
+```json
+{
+    "user": {
+        "name": "David Hasselhoff",
+        "email": "thehoff@statamic.com"
+    }
+}
+```
+
+You can query by either `id` or `email`.
+
+| Argument | Type | Description |
+|----------|------|-------------|
+| `id` | `String` | The ID of the user. If you use this, you don't `email`.
+| `email` | `String` | The email address of the user. If you use this, you don't `id`.
+
+## Custom queries
 
 Here's an example of a basic query class. It has the name attribute which is the key the user needs to put in the request, any number of middleware, the type(s) that will be returned, any arguments, and how the data should be resolved.
 
@@ -886,6 +1040,44 @@ The [code fieldtype](/fieldtypes/code) will return this type when `mode_selectab
 
 ## Filtering
 
+### Enabling filters
+
+For security, [filtering](#filtering) is disabled by default. To enable, you'll need to opt in by defining a list of `allowed_filters` for each sub-resource in your `config/statamic/graphql.php` config:
+
+```php
+'resources' => [
+    'collections' => [
+        'articles' => [
+            'allowed_filters' => ['title', 'status'],
+        ],
+        'pages' => [
+            'allowed_filters' => ['title'],
+        ],
+        'events' => true, // Enable this collection without filters
+        'products' => true, // Enable this collection without filters
+    ],
+    'taxonomies' => [
+        'topics' => [
+            'allowed_filters' => ['slug'],
+        ],
+        'tags' => true, // Enable this taxonomy without filters
+    ],
+    // etc.
+],
+```
+
+For queries that don't have sub-resources (ie. users), you can define `allowed_filters` at the top level of that resource config:
+
+```php
+'resources' => [
+    'users' => [
+        'allowed_filters' => ['name', 'email'],
+    ],
+],
+```
+
+### Using filters
+
 You can filter the results of listing queries (like `entries`) using the `filter` argument. This argument accepts a JSON object containing different
 [conditions](/conditions).
 
@@ -936,6 +1128,56 @@ If you need to use the same condition on the same field more than once, you can
     }
 ```
 
+### Advanced filtering config
+
+You can also allow filters on all enabled sub-resources using a `*` wildcard config. For example, here we'll enable only the `articles`, `pages`, and `products` collections, with `title` filtering enabled on each, in addition to `status` filtering on the `articles` collection specifically: 
+
+```php
+'resources' => [
+    'collections' => [
+        '*' => [
+            'allowed_filters' => ['title'], // Enabled for all collections
+        ],
+        'articles' => [
+            'allowed_filters' => ['status'], // Also enable on articles
+        ],
+        'pages' => true,
+        'products' => true,
+    ],
+],
+```
+
+If you've enabled filters using the `*` wildcard config, you can disable filters on a specific sub-resource by setting `allowed_filters` to `false`:
+
+```php
+'resources' => [
+    'collections' => [
+        '*' => [
+            'allowed_filters' => ['title'], // Enabled for all collections
+        ],
+        'articles' => [
+            'allowed_filters' => false, // Disable filters on articles
+        ],
+        'pages' => true,
+        'products' => true,
+    ],
+],
+```
+
+Or you can enable queries and filters on all sub-resources at once by setting both `enabled` and `allowed_filters` within your `*` wildcard config:
+
+```php
+'resources' => [
+    'collections' => [
+        '*' => [
+            'enabled' => true, // All collection queries enabled
+            'allowed_filters' => ['title'], // With filters enabled for all
+        ],
+    ],
+],
+```
+
+
 ## Sorting
 
 You can sort the results of listing queries (like `entries`) on one or multiple fields, in any direction.
@@ -1084,7 +1326,7 @@ Grid fields can be queried with no extra requirements. You can just use the nest
 }
 ```
 
-### Select, Radio, Checkboxes, and Button Group
+### Select, radio, checkboxes, and button group
 
 These fieldtypes provide you with labels and values. You'll need to use a sub selection.
 
@@ -1117,7 +1359,7 @@ The same syntax is used when multiple values are expected. e.g. a select field w
 ]
 ```
 
-## Recursive Tree Branches
+## Recursive tree branches
 
 Often, when dealing with navs, you need to recursively output all the child branches. For example, when using the `nav` tag in Antlers, you might do something like this:
 
@@ -1202,7 +1444,7 @@ fragment RecursiveChildren on NavTreeBranch {
 
 Hat tip to Hash Interactive for their [blog post](https://hashinteractive.com/blog/graphql-recursive-query-with-fragments/) on this technique.
 
-## Custom Fieldtypes
+## Custom fieldtypes
 
 A fieldtype can define what GraphQL type will be used. By default, all fieldtypes will return strings.
 
@@ -1243,12 +1485,11 @@ public function addGqlTypes()
 }
 ```
 
-## Laravel Package
+## Laravel package
 
 Under the hood, Statamic uses the [rebing/graphql-laravel](https://github.com/rebing/graphql-laravel) package.
 
-By default, the integration should feel seamless and you won't even know another package is being used. Statamic will
-perform the following automatic configuration of this package:
+By default, the integration should feel seamless and you won't even know another package is being used. Statamic will perform the following automatic configuration of this package:
 
 - Setting up the `default` schema to Statamic's.
 - Disabling the `/graphiql` route (since we have our own inside the Control Panel)
@@ -1258,13 +1499,12 @@ However, you're free to use this package on its own, as if you've installed it i
 If Statamic detects that you've published the package's config file (located at `config/graphql.php`), it will assume you're trying to use it manually and will
 avoid doing the automatic setup steps mentioned above.
 
-If you'd like to use Statamic's GraphQL schema within the config file (maybe you want a different default, and want Statamic's one at `/graphql/statamic`)
-you can use the `DefaultSchema` class.
+If you'd like to use Statamic's GraphQL schema within the config file (maybe you want a different default, and want Statamic's one at `/graphql/statamic`) you can use the `DefaultSchema` class.
 
 ```php
 [
     'schemas' => [
-        'statamic' => \Statamic\GraphQL\DefaultSchema::config()
+        'statamic' => \Statamic\GraphQL\DefaultSchema::class
     ]
 ]
 ```
@@ -1281,13 +1521,13 @@ EntriesQuery::auth(function () {
 });
 ```
 
-## Custom Fields
+## Custom fields
 
 You can add fields to certain types by using the `addField` method on the facade.
 
-The method expects the [type](#types) name, the field name, and a closure that return a GraphQL field definition array.
+The method expects the [type](#types) name, the field name, and a closure that returns a GraphQL field definition array.
 
-For example, if you wanted to include a thumbnail from an asset, you could do that here. You can even have arguments. In this example, we'll expect the width of the thumbnail to be passed in.
+For example, if you wanted to include a thumbnail from an asset field named `image`, you could do that here. You can even have arguments. In this example, we'll expect the width of the thumbnail to be passed in.
 
 ```php
 use GraphQL\Type\Definition\Type;
@@ -1304,7 +1544,7 @@ GraphQL::addField('EntryInterface', 'thumbnail', function () {
             ]
         ],
         'resolve' => function ($entry, $args) {
-            $asset = $entry->augmentedValue('image')->value();
+            $asset = $entry->image;
             $url = Image::manipulate($asset)->width($args['width'])->build();
             return URL::makeAbsolute($url);
         }
@@ -1349,7 +1589,7 @@ GraphQL uses a basic whole-response cache by default. Each query/variables combi
 ],
 ```
 
-### Cache Invalidation
+### Cache invalidation
 
 Cached responses are automatically invalidated when content is changed. Depending on your GraphQL usage and blueprint schema, you may also wish to ignore specific events when invalidating.
 
@@ -1363,7 +1603,7 @@ Cached responses are automatically invalidated when content is changed. Dependin
 ],
 ```
 
-### Disabling Caching
+### Disabling caching
 
 If you wish to disable caching altogether, set `cache` to `false`.
 
@@ -1371,7 +1611,7 @@ If you wish to disable caching altogether, set `cache` to `false`.
 'cache' => false,
 ```
 
-## Custom Middleware
+## Custom middleware
 
 You may add custom middleware, which are identical to any other Laravel middleware class. They will be executed on all GraphQL requests (unless another middleware, e.g. caching, prevents it).
 
@@ -1410,7 +1650,7 @@ GraphQL::addMiddleware(MyMiddleware::class);
 
 ## Troubleshooting
 
-**"Cannot query field" error"**
+### "Cannot query field" error
 
 If you see an error like `Cannot query field "entries" on type "Query"`, this likely means you haven't enabled that query. See [Enable GraphQL](#enable-graphql).
 After enabling it, you may need to clear your cache as the request would probably have been cached.
diff --git a/content/collections/docs/image-manipulation.md b/content/collections/docs/image-manipulation.md
index 266ac98de..9be565e64 100644
--- a/content/collections/docs/image-manipulation.md
+++ b/content/collections/docs/image-manipulation.md
@@ -5,6 +5,7 @@ title: 'Image Manipulation (Glide)'
 intro: Statamic uses [Glide](https://glide.thephpleague.com) to manipulate images – from resizing and cropping to adjustments (like sharpness and contrast) and image effects (like pixelate and sepia).
 ---
 ## Route
+
 The route controls where your Glide images will be served.
 
 ```php
@@ -16,7 +17,7 @@ The route controls where your Glide images will be served.
 By default your Glide images will be served from `'/img/...'` but you are free to change that. Perhaps if you intend to have some actual images stored in the `img` directory.
 
 :::tip
-This route setting may become irrelevant when using customizing [caching options](#caching) explained further down this page.
+This route setting may become irrelevant when using customized [caching options](#caching) explained further down this page.
 :::
 
 ## Presets
@@ -35,17 +36,31 @@ Presets are pre-configured sets of manipulations that can be referenced at a lat
 All standard [Glide API parameters](https://glide.thephpleague.com/2.0/api/quick-reference/) are available for use in presets.
 
 ### Glide tag
+
 Each named preset can be referenced with the `preset` parameter on the [Glide tag][glide-tag]:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide:thumbnail preset="thumbnail" }}
 <!-- width: 300px, height: 300px, quality: 75% -->
 
 {{ glide:hero_image preset="hero" }}
 <!-- width: 1440px, height: 600px, quality: 90% -->
 ```
+::tab blade
+```blade
+<s:glide:thumbnail preset="thumbnail" />
+<!-- width: 300px, height: 300px, quality: 75% -->
+
+<s:glide:hero_image preset="hero" />
+<!-- width: 1440px, height: 600px, quality: 90% -->
+```
+::
 
 ### Generate on upload
+
 When uploading an image asset, any configured presets will be generated so they're ready when you need to reference them, e.g. in the Glide tag.
 
 By default, all presets are generated, however you can [customize this per-container](#customize-glide-preset-warming).
@@ -60,13 +75,13 @@ You may also choose to disable image generation on upload completely:
 
 ### Generate manually
 
-You may want to generate the presets manually (for example after you changed the config and you already uploaded the images, or if you've disable generation on upload) on the command line:
+You may want to generate the presets manually (for example after you changed the config, and you already uploaded the images, or if you've disabled generation on upload) on the command line:
 
 ```bash
 php please assets:generate-presets
 ```
 
-### Process Source Images
+### Process source images
 
 Sometimes you may wish to process your actual source images on upload. For example, maybe you need to enforce maximum dimensions on extremely large images in order to save on disk space.
 
@@ -90,13 +105,13 @@ Then in your asset container settings, you can configure uploads to use this pre
 The `fit` is the important part for this one. Using `max` will ensure images smaller than those dimensions will not be upscaled - only larger images will be resized.
 :::
 
-### Customize Preset Warming
+### Customize preset warming
 
-As mentioned [above](#presets), Statamic will generate for all of your configured presets on upload. (i.e. "warming" the generated images).
+As mentioned [above](#presets), Statamic will generate images for all of your configured presets on upload. (i.e. "warming" the generated images).
 
 By default, Statamic will do this "intelligently", which means it'll generate all presets except for the one used for source processing:
 
-<figure class="mt-0 mb-8">
+<figure>
     <img src="/img/glide-intelligently-warm.png" alt="Glide Intelligently Warm Presets">
 </figure>
 
@@ -107,12 +122,12 @@ However, you may wish to configure which presets are warmed in your asset contai
 </figure>
 
 :::tip
-If you have a preset that's only going to be used images in one particular container, you should customize which ones are used so your server doesn't have to waste resources on generating and storing images that won't get used.
+If you have a preset that's only going to be used with images in one particular container, you should customize which ones are used so your server doesn't have to waste resources on generating and storing images that won't get used.
 :::
 
 ## Caching
 
-Out of the box, Glide will "just work". However you may want to adjust its caching methods for better performance.
+Out of the box, Glide will "just work". However, you may want to adjust its caching methods for better performance.
 
 In the context of Glide, the "source" is the filesystem where the original images are kept, and the "cache" is the filesystem where it saves the manipulated images.
 
@@ -137,10 +152,10 @@ When using this method, since the Glide tag only needs to generate URLs, the loa
 :::
 
 :::tip
-Be sure to set `STATAMIC_STACHE_WATCHER=false` in your `.env`
+Be sure to set `STATAMIC_STACHE_WATCHER=false` in your `.env`.
 :::
 
-### Custom Path (Static)
+### Custom path (static)
 
 The next level of caching would be to specify a custom, publicly accessible location for the images to be generated.
 
@@ -162,7 +177,7 @@ Since the images are generated to a publicly accessible location, the next time
 When using this method, since the Glide tag has to generate the images, the initial load time of the page will be slower.
 :::
 
-### Custom Disk (CDN)
+### Custom disk (CDN)
 
 You may choose to save your cached Glide images to somewhere CDN based, like Amazon S3 or DigitalOcean Spaces. Instead of specifying `true` as mentioned above, you can point to a filesystem disk.
 
@@ -197,10 +212,10 @@ Make sure that the `visibility` is `public` and that the `url` points to the cor
 :::
 
 :::warning
-Don't use the same disk or bucket as your source images. If you were you to clear your Glide cache (e.g. when using the `glide:clear` command) the whole disk will be emptied.
+Don't use the same disk or bucket as your source images. If you were to clear your Glide cache (e.g. when using the `glide:clear` command) the whole disk will be emptied.
 :::
 
-## Path Cache Store
+## Path cache store
 
 Before Glide tries to generate an image, it will look into the filesystem to determine whether the image has already been generated. This will prevent the need for the image to be needlessly re-generated.
 
@@ -237,6 +252,16 @@ In this example, you would also need to create a Redis database named `glide` in
 ],
 ```
 
+When using the [database driver](https://laravel.com/docs/12.x/cache#prerequisites-database), make sure to specify the connection and table, like so:
+
+```php
+'glide' => [
+    'driver' => 'database',
+    'connection' => 'mysql',
+    'table' => 'cache',
+],
+```
+
 ## Clearing the cache
 
 You may manually clear the Glide cache by running the following command:
diff --git a/content/collections/docs/installing-a-starter-kit.md b/content/collections/docs/installing-a-starter-kit.md
index 6b4f40da6..eeed65bfd 100644
--- a/content/collections/docs/installing-a-starter-kit.md
+++ b/content/collections/docs/installing-a-starter-kit.md
@@ -6,11 +6,11 @@ template: page
 blueprint: page
 nav_title: Installing
 ---
-## Read This First
+## Read this first
 
-Most (but not all) Starter Kits are intended to be used in a brand new, empty site. Be sure to read each kit's documentation before installing into an existing site so you know what to expect and how to get the most out of it.
+Most (but not all) Starter Kits are intended to be used in a brand new, empty site. Be sure to read each Kit's documentation before installing into an existing site so you know what to expect and how to get the most out of it.
 
-## Installing from the Command Line
+## Installing from the command line
 
 You can spin up a **new** install of Statamic along with a Starter Kit at the all in one command by using the [Statamic CLI Tool](https://github.com/statamic/cli):
 
@@ -24,11 +24,11 @@ You can alternatively install a Starter Kit into an _existing site_ by running t
 php please starter-kit:install vendor-name/starter-kit-name
 ```
 
-### Installing a Paid Starter Kit {#paid}
+### Installing a paid starter kit {#paid}
 
-If you are installing a paid Starter Kit, you will be prompted to purchase and/or validate a single-use license. Once successfully installed, this license will be marked as used and cannot be used on future Statamic sites.
+If you are installing a paid starter kit, you will be prompted to purchase and/or validate a single-use license. Once successfully installed, this license will be marked as used and cannot be used on future Statamic sites.
 
-### When To Clear Your Site First
+### When to clear your site first
 
 If you are installing into a fresh Statamic installation (a pre-built site, for example), you may wish to clear your site of any sample or placeholder content first.
 
@@ -36,6 +36,6 @@ If you are installing a more _modular_ or functionality-driven type Starter Kit
 
 The installer will ask you if you wish to clear your site first, but you can also force clear by running with the `--clear-site` install option.
 
-### Installing Without Dependencies
+### Installing without dependencies
 
 If you wish to install without bundled dependencies, you can run with the `--without-dependencies` install option.
diff --git a/content/collections/docs/installing.md b/content/collections/docs/installing.md
index ee43a5bc9..ac78e2db6 100644
--- a/content/collections/docs/installing.md
+++ b/content/collections/docs/installing.md
@@ -1,6 +1,5 @@
 ---
-title: How to Install Statamic
-nav_title: Installing
+title: How to install Statamic
 breadcrumb_title: Install
 intro: Because Statamic is a **self-hosted platform**, there are many different ways to get started. We recommend using whichever approach you're most comfortable with.
 template: installing
diff --git a/content/collections/docs/javascript-frameworks.md b/content/collections/docs/javascript-frameworks.md
index 4f8ee5fb6..e812b467b 100644
--- a/content/collections/docs/javascript-frameworks.md
+++ b/content/collections/docs/javascript-frameworks.md
@@ -13,17 +13,30 @@ The examples below use [Vue.js](https://vuejs.org/) as the framework of choice,
 ## Pass all page data directly to a component
 This is probably the simplest possible method. You can encode all the page data into JSON and inject it directly into your component. The downside is that you'll be exposing all that data to the client-side, if that's a concern for your particular site.
 
-```vue
+::tabs
+
+::tab antlers
+```antlers
 <home-page
   :page-data="{{ page | to_json | entities }}">
 </home-page>
 ```
+::tab blade
+```blade
+<home-page
+  :page-data="{{ Statamic::modify($page)->toJson() }}">
+</home-page>
+```
+::
 
 
-## Assemble selective JSON inside Antlers and pass to components via props
+## Assemble selective JSON inside Antlers/Blade and pass to components via props
 This method is simple, best used for one-off situations. It provides you control over exactly what data you want to pass to your components, but is too messy to be used at a larger scale.
 
-```vue
+::tabs
+
+::tab antlers
+```antlers
 <home-page
   :navigation="[
    {{ nav:main_navigation }}
@@ -36,6 +49,21 @@ This method is simple, best used for one-off situations. It provides you control
  ]"
 ></home-page>
 ```
+::tab blade
+```blade
+<home-page
+  :navigation="[
+   @foreach (Statamic::tag('nav:main_navigation') as $navPage)
+      {
+        title: '{{ $navPage['title'] }}',
+        slug: '{{ $navPage['url'] }}',
+        id: '{{ $navPage['id'] }}'
+      },
+   @endforeach
+ ]"
+></home-page>
+```
+::
 
 ## Fetching data from a collection
 This method is used to fetch _any_ entry-based data, not just that available on the current page.
@@ -76,7 +104,7 @@ Here is a simple example component that fetches data using the asynchronous `cre
       try {
         const res = await fetch('/api/collections/pages/entries/home'); // Get the data from the API
         const { data } = await res.json() // Convert it to JSON
-        this.pageData = data; // Assign the data to the components Data
+        this.pageData = data; // Assign the data to the component Data
       } catch (e) {
         // Handle your errors
       }
@@ -85,5 +113,5 @@ Here is a simple example component that fetches data using the asynchronous `cre
 </script>
 ```
 
-## Custom View Models
+## Custom view models
 It is also possible to create [a view model](/view-models) which will return only the data you require. However, this requires PHP knowledge.
diff --git a/content/collections/docs/laravel-cloud.md b/content/collections/docs/laravel-cloud.md
new file mode 100644
index 000000000..116f99a16
--- /dev/null
+++ b/content/collections/docs/laravel-cloud.md
@@ -0,0 +1,106 @@
+---
+id: 68d936b0-b1b0-431d-bbe0-a8356decf251
+blueprint: page
+title: 'Deploying Statamic with Laravel Cloud'
+intro: |-
+  Laravel Cloud is a fully managed infrastructure platform. It's relentlessly optimized for Laravel and PHP. It's our favorite way to deploy Statamic sites that need to scale.
+parent: c4f17d05-78bd-41bf-8e06-8dd52f6ec154
+---
+
+:::warning
+Currently, Statamic's [Git automation](/git-automation) doesn't work on Laravel Cloud. 
+
+This may change in the future as Laravel Cloud continues to evolve. For now, we recommend moving [content](/tips/storing-content-in-a-database) and [users](https://statamic.dev/tips/storing-users-in-a-database) into the database, and moving assets [onto Laravel Cloud's object storage](#creating-an-object-storage-bucket) service. 
+
+Alternatively, if you prefer to keep everything in flat files, you can disable the Control Panel and manually push any content changes from your local environment.
+:::
+
+
+## Creating your application
+
+Once you've created your [Laravel Cloud](https://app.laravel.cloud) account, click "New application" to get started.
+
+If it's your first application, you'll be asked to connect your Git provider of choice (GitHub, GitLab or Bitbucket).
+
+From there, select the repository you want to deploy, give it a name and pick the region where you want your application deployed.
+
+<figure>
+    <img src="/img/deployment-cloud-new-application.png" alt="New application modal">
+</figure>
+
+Upon creation, you can setup any "resources" needed for your application, like a database or object storage bucket.
+
+<figure>
+    <img src="/img/deployment-cloud-project-overview.png" alt="Application overview">
+</figure>
+
+Make sure to click "Save" after making changes to your application's resources.
+
+
+### Creating a database
+
+If you're storing content and users in the database (which), you'll need to create a database cluster in Laravel Cloud. You can do this from the environment overview page:
+
+<figure>
+    <img src="/img/deployment-cloud-new-database-cluster.png" alt="New database cluster modal">
+</figure>
+
+Once you've created your database cluster, you'll probably need to import data from an existing database you might have, whether that be locally or from a staging server.
+
+You can use a database GUI, like [TablePlus](https://tableplus.com/) to do this.
+
+1. Open your existing database, select all of the tables, and right click "Export". Make sure to save your export as a `.sql` file.
+2. Connect to your new Laravel Cloud database using the "View credentials" button.
+
+	<figure>
+    	<img src="/img/deployment-cloud-db-credentials.png" alt="Database credentials modal">
+	</figure>
+
+	If you're using TablePlus (or another GUI that supports it), you can open the database directly from the "Deeplink" tab.    
+3. Finally, import your database by right-clicking the tables list and selecting "Import -> From SQL File". From here, you can choose the `.sql` file you just exported.
+
+
+### Creating an object storage bucket
+
+Since the [Git Automation](/git-automation) does not work on Laravel Cloud, we recommend moving assets to Laravel Cloud's object storage service.
+
+Laravel Cloud provides an S3-compatible filesystem, so you will need to install the S3 Flysystem driver in your project:
+
+```
+composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies
+```
+
+Then, in Laravel Cloud, you can create a new bucket from the environment overview page:
+
+<figure>
+    <img src="/img/deployment-cloud-new-bucket.png" alt="">
+</figure>
+
+You will then be prompted to select a filesystem disk for the bucket, it should match a disk in your `config/filesystems.php` config. 
+
+Once the bucket is created, you can upload existing assets using a tool like [Transmit](https://panic.com/transmit/), [Cyberduck](https://cyberduck.io/), or any similar app that supports S3-compatible filesystems.
+
+## Deploying your application
+
+Now that you've got everything set up, all thats left to do is trigger your first deployment. 🚀
+
+If you're using Vite to build CSS/JavaScript, make sure to uncomment the `npm` commands in your application's deployment settings.
+
+For more information about Laravel Cloud, please see its [documentation](https://cloud.laravel.com/docs).
+
+
+## Static Caching
+
+You can't use full-measure static caching with Laravel Cloud, as there's no way to edit the underlying Nginx config.
+
+However, you can use [half-measure static caching](/static-caching#application-driver), which stores the cached HTML pages in your application's cache. In order for the static cache to persist between deployments, you should use a persistent cache driver like [`database` or `redis`](https://laravel.com/docs/master/cache#configuration).
+
+## Troubleshooting
+
+### Upstream sent too big header while reading response header from upstream
+
+You may encounter this error when submitting a form on the frontend, or updating content in the Control Panel.
+
+You can fix it by changing your application's session driver from `cookie` to another driver, like `database` or `redis`. 
+
+You can find more information about session drivers on the [Laravel documentation](https://laravel.com/docs/12.x/session#introduction).
\ No newline at end of file
diff --git a/content/collections/docs/laravel-forge-1-click.md b/content/collections/docs/laravel-forge-1-click.md
new file mode 100644
index 000000000..2d6cbe832
--- /dev/null
+++ b/content/collections/docs/laravel-forge-1-click.md
@@ -0,0 +1,45 @@
+---
+id: 48c60d99-04e7-47f6-9576-aee1401fcb50
+blueprint: page
+title: 'How to Install Statamic on Laravel Forge'
+nav_title: 'Laravel Forge'
+intro: "A full tutorial on how to install Statamic with Forge's 1-Click Installer. For this walk-through, we'll assume you have a [Forge](https://forge.laravel.com) account with a server provisioned."
+parent: ab08f409-8bbe-4ede-b421-d05777d292f7
+---
+
+The Laravel team have made this an exceedingly simple process. Follow these 3 steps, and you'll have a Statamic site running that you can log right into.
+
+:::tip
+If you _already have_ a Statamic site built, you should switch over to the [Deploying Statamic on Laravel Forge](/deploying/laravel-forge) guide.
+:::
+
+
+### 1. Create a new site
+
+Set your domain name, use PHP/Laravel/Symfony as the project type.
+
+<figure>
+    <img src="/img/installing-forge-new-site.png" alt="Make a new site with Laravel Forge">
+</figure>
+
+### 2. Pick Statamic
+
+Don't pick those other options. You want Statamic.
+
+<figure>
+    <img src="/img/installing-forge-pick-statamic.png" alt="Pick Statamic">
+</figure>
+
+### 3. Pick a Starter Kit
+
+Now you can pick which Starter Kit you'd like to use. This Forge workflow only works with free/open source Starter Kits, so if you'd prefer one of the paid/commercial kits, you'll need to follow the [local install](/installing/laravel-herd) and [Deploy on Laravel Forge](/deploying/laravel-forge) guides.
+
+Set your email address and super user password, and you're good to go.
+
+<figure>
+    <img src="/img/installing-pick-kit.png" alt="Pick your starter kit">
+</figure>
+
+### 4. Sign into your new Statamic site
+
+Assuming you've pointed your DNS to this server, all that's left is to head to `yourdomain.com/cp` and sign into the Statamic control panel. The site is yours.
diff --git a/content/collections/docs/laravel-forge.md b/content/collections/docs/laravel-forge.md
index 7914656f9..23a11c5c8 100644
--- a/content/collections/docs/laravel-forge.md
+++ b/content/collections/docs/laravel-forge.md
@@ -37,7 +37,7 @@ The next step is to create a new site. This will scaffold out the directory stru
 
 ## Configuring Deployment
 
-Finally, setup your deployment by pointing to your site to your source control repository. Laravel Forge will create a sensible deployment script for you for one-click deployments.
+Finally, set up your deployment by pointing to your site to your source control repository. Laravel Forge will create a sensible deployment script for you for one-click deployments.
 
 <figure>
     <img src="/img/deployment-forge-install-repo.png" alt="Install repo example">
@@ -53,11 +53,21 @@ The Deploy Script area is where you'd add commands to install Composer and NPM d
 
 ``` shell
 cd /home/forge/{example}.{tld}
-git pull origin main
+git pull origin $FORGE_SITE_BRANCH
+
+$FORGE_COMPOSER install --no-dev --no-interaction --prefer-dist --optimize-autoloader
+
+( flock -w 10 9 || exit 1
+    echo 'Reloading PHP FPM...'; sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock
+
 php please cache:clear
 npm ci && npm run production
 ```
 
+Unless you're using the [Eloquent Driver](https://github.com/statamic/eloquent-driver), you may want to comment out the `$FORGE_PHP artisan migrate --force` command from your deployment script.
+
+If you're planning on using the Git integration, you may want to prevent content changes from the Control Panel from triggering "full" deployments in Laravel Forge. Learn more about this on the [Git Automation](/git-automation#customizing-commits) page.
+
 ## Advanced Control
 
 Laravel Forge also offers advanced control of queue workers, cron jobs, SSL certificates, database access, etc.
diff --git a/content/collections/docs/laravel-herd.md b/content/collections/docs/laravel-herd.md
new file mode 100644
index 000000000..069f49722
--- /dev/null
+++ b/content/collections/docs/laravel-herd.md
@@ -0,0 +1,112 @@
+---
+id: 61c8db2d-f7bf-4829-bafd-f8a4db5a9a57
+blueprint: page
+title: 'Install Statamic Locally Using Laravel Herd'
+nav_title: Herd
+intro: 'Using Laravel Herd to run Statamic locally is the **easiest and fastest way** to get started with the best CMS out there. It is also very **beginner-friendly**.'
+parent: ab08f409-8bbe-4ede-b421-d05777d292f7
+---
+## Overview
+
+Laravel Herd offers a straightforward approach to setting up your machine with all the necessary dependencies for PHP development, like a web server and Composer, and of course PHP itself. It's easier compared to using Homebrew, less error-prone, and blazingly fast. It's our preferred and recommended way to get started with Statamic and Laravel development on a Mac and Windows.
+
+:::watch https://www.youtube-nocookie.com/embed/MZZYTXSysrQ?si=7sMSYltGFHLndWcf
+Watch this guide as a video 🐘
+:::
+
+## Prerequisites
+
+To install Herd and run Statamic locally you will need the following:
+
+- A Macintosh running macOS 12.0+
+- A personal computer running Windows 10+
+- That's it.
+
+## Install Laravel Herd
+
+Installing Herd is super easy and the same process as with any other application. Just download the latest version on [herd.laravel.com](https://herd.laravel.com).
+
+<figure>
+    <img src="/img/herd-dmg-finder.jpg" alt="Screenshot showing the macOS finder with the Herd app icon">
+    <figcaption>Drag'n'Drop It Like It's Hot </figcaption>
+</figure>
+
+After you open it for the first time, you will get prompted to type in your admin password so all the necessary files can be put in the right places.
+
+<figure>
+    <img src="/img/herd-password-prompt.jpg" alt="Screenshot showing macOS prompting for the user password to install Laravel Herd">
+</figure>
+
+If you previously used Laravel Valet on Mac you can migrate to Herd and all settings, like linked projects and installed PHP versions, will be synced. Didn't use Valet before? Then you won't see this screen.
+
+<figure>
+    <img src="/img/herd-valet-detected.jpg" alt="Screenshot showing that Laravel Herd detected Valet being used before">
+</figure>
+
+Next, you're presented with a screen saying that you can now use Herd, Composer, and more. The default location to place your projects in is `~/Herd` which you can change in the settings, if you like. You can also choose to automatically launch Herd on startup which we would recommend.
+
+<figure>
+    <img src="/img/herd-installation-success.jpg" alt="Screenshot showing the welcome screen of Herd after a successful installation">
+</figure>
+
+After that's done, Herd has been successfully installed and you now have a local PHP development environment on your machine.
+
+<figure>
+    <img src="/img/herd-menu-bar-item.jpg" alt="Screenshot showing the macOS menubar item of Laravel Herd with Hide the Pain Harold giving thumbs up and several elephant emojis">
+    <figcaption>Harold congratulates you from Hungary 🇭🇺</figcaption>
+</figure>
+
+If you want to install additional PHP versions or make your local sites available through [Expose](http://expose.dev/) via secure tunnels, open the Herd settings to get access to a range of different options.
+
+<figure>
+    <img src="/img/herd-settings-php-versions.jpg" alt="Screenshot showing Herd's settings pane">
+</figure>
+
+## Install Statamic CLI
+
+Next up on your journey to greatness is installing the Statamic CLI. To do this, run the following command in your terminal:
+
+``` shell
+composer global require statamic/cli
+```
+
+Upon installation, you can now use the `statamic new` command to spin up fresh Statamic sites with a CLI setup wizard 🧙‍♂️ to guide you through a variety of settings and options.
+
+Our CLI is essentially a super fancy wrapper around the `composer create-project` command. You can choose to not install it. Though it offers a wide range of really neat features and we recommend it.
+
+## Create a new site
+
+Let's take the last big step toward you enjoying all of Statamic's radness™.
+
+In your terminal, run `statamic new your-project-name` and follow the prompts to create a new site. The command will create the site **in the current directory** you're in. So with Herd on Mac, you should run this command from the `~/Herd` directory.
+
+If you encounter any issues running `statamic new`, like a `Command not found` error, have a look at [our tips on troubleshooting this](/troubleshooting/command-not-found-statamic).
+
+<figure>
+    <img src="/img/herd-statamic-cli.jpg" alt="Screenshot showing the Kitty terminal emulator running the statamic new command with ASCII art">
+    <figcaption>Hot pink and sweet lookin' 💅</figcaption>
+</figure>
+
+## Access the site
+
+Sweet, if you did all the previous steps you should now be able to open your site at  `http://your-project-name.test`.
+
+<figure>
+    <img src="/img/herd-fresh-statamic-site.jpg" alt="Screenshot showing a browser window with the welcome page of a fresh Statamic site">
+</figure>
+
+The Control Panel, Statamic's admin area, can be accessed at `/cp` where you can log in with the user you created during the CLI's setup wizard.
+
+## What's Next
+
+Well done, you have turned your computer into a local PHP development environment, installed the Statamic CLI, and set up your first Statamic site! 🎉
+
+Get creative, explore everything, and build something rad.
+
+Want to learn more about Statamic? Watch [our series on Laracasts](https://laracasts.com/series/learn-statamic-with-jack) or just continue to browse through the docs.
+
+For additional information on Laravel Herd, have a look at its [documentation](https://herd.laravel.com/docs).
+
+:::tip
+Use all of Statamic's Pro features while in development (like unlimited users, permissions, GraphQL, REST API, and more), by setting `'pro' => true` in `config/statamic/editions.php`.
+:::
diff --git a/content/collections/docs/laravel.md b/content/collections/docs/laravel.md
index a8143e289..9d4084090 100644
--- a/content/collections/docs/laravel.md
+++ b/content/collections/docs/laravel.md
@@ -12,13 +12,19 @@ There are many reasons why you might want to install Statamic into an existing L
 
 - handle all the marketing and "logged out" content for a SaaS app
 - add an easy-to-manage blog the whole team can update
-- manage existing data kinda like [Laravel Nova](https://nova.laravel.com/) (yes, [you can do that](/extending/repositories)),
+- manage existing data kinda like [Laravel Nova](https://nova.laravel.com/) (yes, [you can do that](/extending/repositories))
 - run as a headless CMS and provide a REST API to your data
 - be a special comfort package for those tough projects even when you don't need it
 
+:::tip
+If you're starting a brand new project, it's much easier to use the [standard Statamic installation method](/installing/local).
+
+You'll get a bunch of things automatically set up for you, like a pages collection, views, etc. If you install Statamic _into_ Laravel, you're going to have to do those things manually.
+:::
+
 ## Supported Versions of Laravel
 
-**Laravel 8 and Laravel 9 are supported.** It feels like this section needs more than one sentence but it really doesn't. That first one said all that needs saying.
+**Laravel 10, 11 and 12 are supported with Statamic 5.** If you need Laravel 9 support, you can still use Statamic 4.x.
 
 ## Install Statamic
 
@@ -26,29 +32,69 @@ There are 3 steps to follow to install Statamic into your Laravel app.
 
 1. Run `php artisan config:clear` to make sure your config isn't cached.
 
-2. Add the `statamic:install` command to `post-autoload-dump` in `composer.json`.
+2. In `composer.json`, add the following items:
 
     ``` json
-    "scripts": {
-        "post-autoload-dump": [
+    "scripts": { // [tl! **]
+        "pre-update-cmd": [ // [tl! ++ **]
+            "Statamic\\Console\\Composer\\Scripts::preUpdateCmd" // [tl! ++ **]
+        ],  // [tl! ++ **]
+        "post-autoload-dump": [ // [tl! **]
             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
             "@php artisan package:discover --ansi",
-            "@php artisan statamic:install --ansi", // [tl! **]
-            "@php artisan statamic:search:update --all --ansi",
-            "@php artisan statamic:static:clear --ansi"
-        ],
-    }
+            "@php artisan statamic:install --ansi" // [tl! ++ **]
+        ], // [tl! **]
+    } // [tl! **]
     ```
-
+   
 3. Install `statamic/cms` with Composer.
 
     ``` shell
     composer require statamic/cms --with-dependencies
     ```
 
-## Regarding Users
+4. Depending on how you set up users in your app, you might need to run a command to publish Statamic's auth migrations.
+
+   ``` shell
+   php please auth:migration
+   ```
+
+## Adding Content
+
+When you install Statamic into Laravel this way, **no content or views are included**.
+
+You'll probably want to create a collection and some entries, as well as views and a layout in order to see things appear on the front-end of your site.
+
+### Pages
+A common "catch-all" content scenario is to create a Pages collection which allows you to create a home page as well as any other pages in a tree structure. You get this when you install Statamic from scratch, but it's easy to set up yourself.
+
+The easiest way is to copy the `pages.yaml` file and the `pages` directory [from the `statamic/statamic` repository](https://github.com/statamic/statamic/tree/5.x/content/collections).
+
+Or, if you wanted to do it through the Control Panel:
+
+1. Create a collection named `pages`.
+    - Set the route to `{parent_uri}/{slug}`
+    - Enable the "Orderable" toggle
+    - Enabled the "Expect a root page" toggle
+2. Create an entry. The first one will be your home page.
+
+### Views
+
+Statamic routed URLs will expect views named `default` and `layout`. You will need to add those manually too.
+
+[Read more about how Statamic views and layouts work](/views)
+
+## Database
+
+### Content
+
+When you install Statamic into an existing Laravel application, content will be stored as flat files. 
+
+If you'd prefer to store content in a database instead, please follow the ["Storing Content in a Database"](https://statamic.dev/tips/storing-content-in-a-database) guide.
+
+### Users
 
-If you want to continue to keep users in a database, head over to [Storing Users in a Database in an Existing Laravel App](/tips/storing-users-in-a-database#in-an-existing-laravel-app) follow those steps.
+If you want to continue to keep users in a database, head over to [Storing Users in a Database in an Existing Laravel App](/tips/storing-users-in-a-database#in-an-existing-laravel-app) and follow those steps.
 
 Otherwise, the [Storing User Records](/users#storage) page should have instructions for the most common scenarios.
 
diff --git a/content/collections/docs/licensing.md b/content/collections/docs/licensing.md
index 42848c5ef..7be0d459c 100644
--- a/content/collections/docs/licensing.md
+++ b/content/collections/docs/licensing.md
@@ -1,6 +1,6 @@
 ---
 title: Licensing
-intro: 'Statamic 3 is available in two distinct flavors, but one splendid codebase. Statamic Solo is **free and open source** for personal and hobby use, while **Statamic Pro** is powerful commercial software designed for team use.'
+intro: 'Statamic is available in two distinct flavors, but one splendid codebase. Statamic Solo is **free and open source** for personal and hobby use, while **Statamic Pro** is powerful commercial software designed for team use.'
 blueprint: page
 id: 56fadb93-b846-4867-ad73-4f721cc940c2
 ---
@@ -16,7 +16,7 @@ When you install Statamic, it will be configured to use the free Solo edition. Y
 
 Once you've opted into Pro, many additional features will be available.
 
-## Trying Pro Mode {#trial-mode}
+## Trying Pro mode {#trial-mode}
 
 You can use **Statamic Pro** locally without a license key for as long as you'd like. This is called **Trial Mode**.
 
@@ -27,7 +27,7 @@ While in trial mode you are also able to try out any [commercial addons](https:/
 Once it’s time to launch your site on a public domain, there are a few things you need to do:
 
 - [Create a Site](#sites) on statamic.com and enter the appropriate domain(s).
-- Purchase any required licenses (e.g. Statamic 3 Pro and/or any paid addons) and attach them to your Site.
+- Purchase any required licenses (e.g. Statamic Pro and/or any paid addons) and attach them to your Site.
 - Add your Site's license key to your Statamic config or environment file.
 
 ``` php
@@ -49,10 +49,11 @@ In your [statamic.com account](https://statamic.com/account/sites), you can crea
 
 Each Site has one unique license key that any and all commercial products are attached to and validated through. No more juggling a fist full of keys like a bunch of quarters at the arcade.
 
-### Programmatically Creating Sites
-You can programmatically create sites using our [Sites API](/account-api-sites). This is most useful while using our Platform subscription plan (to learn more about this, [contact us](https://statamic.com/support)).
+### Programmatically creating sites
 
-## License Validation
+You can programmatically create sites using our [Sites API](/sites-api). This is most useful while using our Platform subscription plan (to learn more about this, [contact us](https://statamic.com/support)).
+
+## License validation
 
 If you want to know about the legal terms you can [read those here](https://statamic.com/license). The rest of this article covers the more _technical_ aspects of the call-home features, domain restrictions, and so forth.
 
@@ -60,15 +61,18 @@ If you want to know about the legal terms you can [read those here](https://stat
 
 Statamic pings The Outpost (our validation web service) on a regular basis. The Outpost collects the license key, public domain info (domain name, IP address, etc), and PHP version so we can validate them against your account.
 
-This happens once per hour, and only when logged into the control panel. Changing your license key setting will trigger an immediate ping to the The Outpost. Tampering with outgoing API call will cause Statamic to consider your license invalid. If that happens, you'll need to open a [support request][support] to reinstate your license.
+This happens once per hour, and only when logged into the control panel. Changing your license key setting will trigger an immediate ping to The Outpost. Tampering with outgoing API call will cause Statamic to consider your license invalid. If that happens, you'll need to open a [support request][support] to reinstate your license.
+
+If you need to run Statamic in an environment without an internet connection, please [contact support](https://statamic.com/support).
 
-## One License Per Site
+## One license per site
 
-Each license entitles you to run one production installation. You will need to specify the domains you plan to use from the "Sites" area of your Statamic Account. Domain are treated as wildcards so you can use subdomains for locales, testing, and other purposes.
+Each license entitles you to run one production installation. You will need to specify the domains you plan to use from the "Sites" area of your Statamic Account. Domains are treated as wildcards so you can use subdomains for locales, testing, and other purposes.
 
 If you attempt to use the site from a domain not listed in your Site settings, you will get a notification inside the Control Panel informing you thusly to make the necessary changes. You may change the domain associated with a license at any time on [statamic.com](https://statamic.com/account/sites).
 
-## Public Domains
+## Public domains
+
 When Statamic calls home we use a series of rules to determine if the domain it’s running on is considered “public”.
 
 If any of the following rules match, the domain is considered _not public_ (letting you stay in Trial Mode)
@@ -79,7 +83,7 @@ If any of the following rules match, the domain is considered _not public_ (lett
 - Does it have a dev-related subdomain? `test.`, `testing.`, `sandbox.`,  `local.`, `dev.`, `stage.`, `staging.`, or `statamic.`
 - Does it use a dev-related TLD? `.local`, `.localhost`, `.test`, `.invalid`, `.example`, or `.wip`
 
-## Special Circumstances
+## Special circumstances
 
 [Contact us][support] if you have one and we'll see what we can do.
 
diff --git a/content/collections/docs/live-preview.md b/content/collections/docs/live-preview.md
index 5147f0a73..bd335603e 100644
--- a/content/collections/docs/live-preview.md
+++ b/content/collections/docs/live-preview.md
@@ -1,6 +1,6 @@
 ---
 title: 'Live Preview'
-intro: 'Live Preview gives you the ability to see what your entry will look like in real time as you write and edit. You can configure and switch the preview screen size, pop it out into a new window, and even switch to AMP mode if enabled.'
+intro: 'Live Preview gives you the ability to see what your entry will look like in real time as you write and edit. You can configure and switch the preview screen size or pop it out into a new window.'
 template: page
 blueprint: page
 id: cdffd2c9-cf42-495d-a8f1-f416ddfddc29
@@ -11,12 +11,16 @@ The ability to preview what your content looks like in real-time is practically
 
 Live Preview will render your work-in-progress content with whichever template you have currently loaded. You can even switch between templates while previewing.
 
+:::tip
+Keep in mind: Live Preview does not work using the `array` cache driver.
+:::
+
 <figure>
     <img src="/img/live-preview.jpg" alt="Statamic Live Preview">
     <figcaption>And he's still touring, ladies and gentlemen.</figcaption>
 </figure>
 
-## Device Sizes
+## Device sizes
 
 You can customize the list of device sizes in `config/statamic/live_preview.php`.
 
@@ -33,7 +37,7 @@ You can customize the list of device sizes in `config/statamic/live_preview.php`
     <figcaption>This dropdown will obey you better than any puppy will, guaranteed.</figcaption>
 </figure>
 
-## Customizing the Toolbar
+## Customizing the toolbar
 
 You may add extra input fields to Live Preview's header toolbar using custom Vue components. The values of these fields will be available in the data injected into the template.
 
@@ -78,9 +82,9 @@ These values are available in your views, scoped into the `live_preview` array:
 {{ /if }}
 ```
 
-## Preview Targets
+## Preview targets
 
-On a Collection, you may define one or more preview targets which lets you choose which page should viewed in the Live Preview window.
+On a Collection, you may define one or more preview targets which lets you choose which page should be viewed in the Live Preview window.
 
 For example, you may want to preview how an entry looks on the entry's page itself, as well as a listing page.
 
@@ -95,11 +99,11 @@ preview_targets:
     url: /blog
 ```
 
-You may use entry's variables in the URL, just like defining a route.
+You may use the entry's variables in the URL, just like defining a route.
 
 If you don't define any targets, it will use the entry's URL.
 
-## Headless / Front-end Frameworks
+## Headless / front-end frameworks
 
 To use Live Preview with a front-end framework, you may use a [preview target](#preview-targets) that points to a custom URL.
 
@@ -114,7 +118,54 @@ preview_targets:
 
 A `token` query parameter will be appended to the URL automatically, which you can then pass back to Statamic in a GraphQL query, where it will know to replace the entry with the Live Preview version.
 
-## Custom Rendering
+```js
+$http.post('/graphql?token='+params.token, ...);
+```
+
+### Auto-refreshing
+
+On a preview target, you may disable the behavior that causes a full refresh of the iframe when you make changes. By disabling the refresh, [postMessage](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) will be used instead to send a payload to the front-end. You can listen for this event and perform your own live updating behavior.
+
+First, set the preview target refresh setting to `false`:
+
+```yaml
+preview_targets:
+  -
+    label: Entry
+    url: https://your-nuxt-app.com/blog/{slug}?preview=true
+    refresh: false
+```
+
+Then, the `event.data` will be an object containing the event name, reference of what you're editing, and the Live Preview token.
+
+```js
+window.onmessage = function (e) {
+    if (e.data.name === 'statamic.preview.updated') {
+        updatePage(e)
+    }
+}
+
+// A silly example where you update parts of the page by
+// querying the REST API with the provided token.
+const updatePage = function (e) {
+    const id = e.data.reference.split('::')[1];
+    const url = `https://site.com/api/collections/articles/entries/${id}?token=${e.data.token}`;
+
+    fetch(url)
+        .then(response => response.json())
+        .then(response => {
+            document.querySelector('#title').innerText = response.data.title;
+            document.querySelector('#excerpt').innerText = response.data.excerpt;
+        });
+}
+
+// A more realistic example, using a front-end framework like Nuxt.
+const updatePage = function (e) {
+    window.$nuxt.refresh();
+}
+```
+
+## Custom rendering
 
 If you need even more control, you may create your own route that retrieves the Live Preview entry through the token manually. Whatever you return from the route will be displayed within Live Preview.
 
diff --git a/content/collections/docs/local.md b/content/collections/docs/local.md
index e202610a0..7e06a1154 100644
--- a/content/collections/docs/local.md
+++ b/content/collections/docs/local.md
@@ -41,10 +41,10 @@ If you run into any issues or errors, check out this [helpful article](/troubles
 :::
 
 ## Install Statamic
-In your terminal, `cd` to the directory you want to start a new Statamic project in and run the install command.
+In your terminal, `cd` to the parent directory you want to start a new Statamic project in and run the install command.
 
 ``` shell
-statamic new $project_name
+statamic new project_name
 ```
 
 You'll be asked if you want to install a blank site or a [Starter Kit](/starter-kits). If this is your first time, we usually recommend starting with a blank site. Keep it simple.
@@ -74,7 +74,7 @@ Check out the [troubleshooting section](/troubleshooting) to get help about comm
 
 ## What's Next
 
-You're now (probably) running the latest and greatest version of Statamic 3! Well done! 🎉 You can now get on with the fun parts.
+You're now (probably) running the latest and greatest version of Statamic! Well done! 🎉 You can now get on with the fun parts.
 
 The [Quick Start Guide](/quick-start-guide) is a great place to head next if you're just kicking the tires (or tyres — if you're not from our neck of the woods).
 
@@ -85,7 +85,7 @@ You can use Pro features while in development (like users, permissions revisions
 :::tip Another Hot Tip
 The default install and all first-party Starter Kits use [TailwindCSS](https://tailwindcss.com/docs/just-in-time-mode) in Just In Time mode, so anytime you change classes in your HTML you'll need to recompile your CSS.
 
-This is super easy and happens automatically when you run `npm run watch` from the terminal in your project directory (as long as you've run `npm install` first).
+This is super easy and happens automatically when you run `npm run dev` from the terminal in your project directory (as long as you've run `npm install` first).
 :::
 
 [valet]: https://laravel.com/docs/valet
diff --git a/content/collections/docs/modifiers.md b/content/collections/docs/modifiers.md
index 5aaac982a..1e0c4f70d 100644
--- a/content/collections/docs/modifiers.md
+++ b/content/collections/docs/modifiers.md
@@ -13,19 +13,30 @@ Modifiers are available exclusively in [Antlers][antlers] templates. Each modifi
 
 You could take some text, render it as markdown, uppercase it, and ensure there are no widows (lines with only one word on them) like this:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 // This...
 {{ "Ruth, Ruth, Ruth! Baby Ruth!" | markdown | upper | widont }}
 
 // Becomes this!
 <p>RUTH, RUTH, RUTH! BABY&nbsp;RUTH!</p>
 ```
+::tab blade
+```blade
+{!! Statamic::modify("Ruth, Ruth, Ruth! Baby Ruth!")->markdown()->upper()->widont() !!}
+
+// Becomes this!
+<p>RUTH, RUTH, RUTH! BABY&nbsp;RUTH!</p>
+```
+::
 
-## Related Reading
+## Related reading
 
 Eager for more knowledge? Check out [Antler's modifier syntax](/antlers#modifying-data) and discover how to [build your own](/extending/modifiers#creating-a-modifier).
 
-## Core Modifiers
+## Core modifiers
 
 You can find a [full list of modifiers](/reference/modifiers) included with Statamic in the reference section.
 
diff --git a/content/collections/docs/multi-site.md b/content/collections/docs/multi-site.md
index 5f138f5fa..ac98c9c54 100644
--- a/content/collections/docs/multi-site.md
+++ b/content/collections/docs/multi-site.md
@@ -17,141 +17,199 @@ Each site can have different base URLs:
 - subdomains: `example.com` and `fr.example.com`
 - subdirectories: `example.com` and `example.com/fr/`
 
-[More details on how to convert to a multi-site setup](/tips/converting-from-single-to-multi-site)
+::: tip
+Every Statamic install needs at least one site. Building zero sites is a bad way to build a website and clients will probably challenge any invoices.
+:::
+
+### Converting existing content to multi-site
+
+The simplest way to convert existing content to a multi-site friendly structure is to run the automated command:
+
+``` shell
+php please multisite
+```
+
+Read more on [converting to a multi-site setup](/tips/converting-from-single-to-multi-site).
 
 ## Configuration
 
-Let's look at a full site configuration and then we'll explore all of its options.
+### Enabling multi-site
+
+First, enable `multisite` in your `config/statamic/system.php`:
 
 ``` php
-# config/statamic/sites.php
+'multisite' => true,
+```
+
+### Adding new sites
+
+Next, you can add new sites through the control panel:
 
-return [
-    'sites' => [
-        'default' => [
-            'name' => config('app.name'),
-            'locale' => 'en_US',
-            'url' => '/',
-            'text_direction' => 'ltr',
-        ]
-    ]
-];
+<figure>
+    <img src="/img/configure-sites.png" alt="Configure sites page in control panel">
+</figure>
+
+Or directly in your `resources/sites.yaml` file:
+
+``` yaml
+default:
+  name: First Site
+  url: /
+  locale: en_US
+second:
+  name: Second Site
+  url: /second/
+  locale: en_US
 ```
 
-### Sites
-Every Statamic install needs at least one site. Building zero sites is a bad way to build a website and clients will probably challenge any invoices.
+## Available options
 
-### Locale
-Each site has a `locale` used to format region-specific data (like date strings, number formats, etc). This should correspond to a the server's locale. By default Statamic will use English – United States (`en_US`).
+Let's look at a full site configuration, and then we'll explore all of its options.
 
-:::tip
-To see the list of installed locales on your system or server, run the command `locale -a`.
-:::
+``` yaml
+# resources/sites.yaml
+
+en:
+  name: English
+  url: /
+  locale: en_US
+  lang: en
+  attributes:
+    theme: standard
+```
 
-### Language
-Statamic's control panel has been translated into more than a dozen languages. The language translations files live in `resources/lang`.
+### Handle
+
+Each site is keyed by its `handle`, which is important for directory structure, as well as referencing sites in collection configs, etc. throughout your site. Changing this is non-trivial, and you should be careful if you already have established content in this site. Read more about [renaming sites](#renaming-sites).
+
+``` yaml
+en: # <- This is your site handle
+  name: English
+
+```
+### Name
+
+Each site has a `name`, which is a display-friendly representation of your site's name mostly seen within control panel UI. Changing this does not affect content relations.
+
+``` yaml
+en:
+  name: English
+```
 
-You may specify which language translation to be used for each site with the `lang` setting.
+::: tip
+You'll notice the default site dynamically references a [config variable](/variables/config), but feel free to change this!
+
+``` yaml
+default:
+  name: '{{ config:app:name }}'
+```
+:::
 
 ### URL
-URL is required to define the root domain Statamic will serve and generate all URLs relative to. The default `url` is `/`, which is portable and works fine in most typical sites. Statamic uses a little magic to work out what a full URL is be based on the domain the site is running on.
 
-:::best-practice
-It can be a good idea to change this to a **fully qualified, absolute URL**. This ensures that server/environment configurations or external quirks interfere with that "magic". Using an environment variable is an ideal solution here.
+Each site requires a URL to define the root domain Statamic will serve and generate all URLs relative to. The default `url` is `/`, which is portable and works fine in most typical sites. Statamic uses a little magic to work out what a full URL is based on the domain the site is running on.
 
-```php
-'sites' => [
-    'en' => [
-        // ...
-        'url' => env('APP_URL')
-    ],
-    'fr' => [
-        // ...
-        'url' => env('APP_URL').'fr/'
-    ]
-]
+:::best-practice
+It can be a good idea to change this to a **fully qualified, absolute URL**. This ensures that server/environment configurations or external quirks don't interfere with that "magic".
+
+```yaml
+en:
+  # ...
+  url: '{{ config:app:url }}'
+fr:
+  # ...
+  url: '{{ config:app:url }}/fr/'
 ```
 
+By default, this is linked to your `APP_URL` environment variable, which allows you to control the exact URL by environment:
 ```env
 # production
-APP_URL=https://mysite.com/
+APP_URL=https://mysite.com
 
 # development
-APP_URL=http://mysite.test/
+APP_URL=http://mysite.test
 ```
+:::
+
+### Locale
+
+Each site has a `locale` used to format region-specific data (like date strings, number formats, etc). This should correspond to the server's locale. By default, Statamic will fallback to your app's locale.
 
+:::tip
+To see the list of installed locales on your system or server, run the command `locale -a`.
 :::
 
-### Text Direction
+### Language
 
-All sites are Left-To-right (`ltr`) by default, and you may omit the setting entirely. But if any of your sites is in a `rtl` text direction (like Arabic or Hebrew), you may define the direction in the config and use it on your front-end wherever necessary.
+Statamic's control panel has been translated into more than a dozen languages. The language translations files live in `resources/lang`.
 
-```php
-'sites' => [
-    'en' => [
-        'name' => 'English',
-    ],
-    'he' => [
-        'name' => 'Hebrew',
-        'direction' => 'rtl',
-    ]
-]
-```
+You may specify which language translation to be used for each site with the `lang` setting. If you leave it off, it'll use the short version of the `locale`. e.g. If the locale is `en_US`, the lang will be `en`.
 
-```
-<html dir="{{ site:direction }}">
+``` yaml
+de:
+  name: Deutsch
+  locale: de_DE
+  # Lang not needed, as `de` is implied
+de_CH:
+  name: 'Deutsch (Switzerland)'
+  locale: de_CH
+  lang: de_CH # We want the `de_CH` language, not `de`
 ```
 
-:::tip
-Statamic's `direction` is `ltr` by default. You only need to set `direction` when your site is `rtl`.
-:::
+Note that both Statamic and Laravel don't ship with frontend language translations out of the box. You have to provide your own string files for this. There is a great package called [Laravel Lang](https://github.com/Laravel-Lang/lang) containing over 75 languages that can help you out with this.
 
-### Additional Attributes
+### Additional attributes
 
-You may also add an array of arbitrary attributes to your site's config, which can later be accessed with the [site variable](/variables/site) .
+You may also include additional arbitrary `attributes` in your site's config, which can later be accessed with the [site variable](/variables/site).
 
-```php
-'sites' => [
-    'en' => [
-        'name' => 'English',
-        'attributes' => [
-            'theme' => 'standard',
-        ]
-    ],
-]
+``` yaml
+en:
+  # ...
+  attributes:
+    theme: standard
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <body class="theme-{{ site:attributes:theme }}">
 ```
+::tab blade
+```blade
+<body class="theme-{{ $site->attributes['theme'] }}">
+```
+::
 
 :::tip
 Nothing fancy happens here, the values are passed along "as is" to your templates. If you need them to be editable, or store more complex data, you could use [Globals](/globals).
 :::
 
+## Text direction
+
+Text direction is automatically inferred by Statamic, based on the [language](#language) of your configured site.
+
+For example, most sites will be `ltr`, but Statamic will automatically use `rtl` for languages like Arabic or Hebrew.
 
-## Adding a Site
+If you need to reference text direction in your front end, you can make use the [site variable](/variables/site):
 
-To add another site to an existing multi-site installation, add another array to the `$sites` configuration array along with the desired settings.
+::tabs
 
-```php
-'sites' => [
-    'en' => [
-        'name' => 'English',
-        //
-    ],
-    'de' => [
-        'name' => 'German',
-        //
-    ],
-];
+::tab antlers
+```antlers
+<html dir="{{ site:direction }}">
+```
+::tab blade
+```blade
+<html dir="{{ $site->direction }}">
 ```
+::
 
-## Renaming a Site
+## Renaming sites
 
-If you rename a site handle, you'll need to update a few folders and config settings along with it. Replace `{old_handle}` with the new handle in these locations:
+If you rename a site's [handle](#handle), you'll need to update a few folders and config settings along with it. Replace `{old_handle}` with the new handle in these locations:
 
-**Content Folders**
+**Content folders**
 
 - `content/collections/{old_handle}/`
 - `content/globals/{old_handle}/`
@@ -166,19 +224,37 @@ sites:
 - fr
 ```
 
+## Permissions
+
+Within the Control Panel, you will not be able to access items in a particular site if you do not have permission.
+
+You may grant permission for any of your sites by adding an `access {site_handle} site` to the appropriate role.
+
+For example:
+
+```yaml
+permissions:
+  - edit blog entries
+  - access english site # [tl!++]
+  - access french site  # [tl!++]
+```
+
+[Read more about permissions](/users#permissions)
+
+
 ## Per-Site Views {#views}
 
 [Views](/views) can be organized into site directories.
 
-If a requested view exists in a subdirectory with the same name as your site, it will load it instead. This allows you have site-specific views without any extra configuration.
+If a requested view exists in a subdirectory with the same name as your site [handle](#handle), it will load it instead. This allows you to have site-specific views without any extra configuration.
 
-``` php
-# config/statamic/sites.php
+``` yaml
+# resources/sites.yaml
 
-'sites' => [
-    'site_one' => [ /* ... */ ],
-    'site_two' => [ /* ... */ ],
-]
+site_one:
+  # ...
+site_two:
+  # ...
 ```
 
 ``` files theme:serendipity-light
@@ -191,36 +267,56 @@ resources/views/
 
 For example, given `template: home`, Statamic will load `site_one/home` because that view exists in the subdirectory. If you were to have `template: page`, it would load the one in the root directory because there's no site-specific variant.
 
-:::tip
-This feature can be combined with the [AMP](/amp) feature. You can nest an `amp` view subdirectory _inside_ a site subdirectory.
-:::
-
-## Template Snippets
+## Template snippets
 
 Here are a few common features you'll likely need to template while building a multi-site.
 
-### Building a Site Switcher {#site-switcher}
+### Building a site switcher {#site-switcher}
 
 This will loop through your sites and indicate the current site as the active one. Check out all the [available variables inside the `sites` loop](/variables/sites).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ sites }}
   <a class="{{ site:handle === handle ?= 'active' }}" href="{{ url }}">
     {{ handle }}
   </a>
 {{ /sites }}
 ```
+::tab blade
+```blade
+@foreach ($sites as $switcherSite)
+  <a @class([
+      'active' => $switcherSite->handle == $site->handle
+    ])
+    href="{{ $switcherSite->url }}"
+  >{{ $switcherSite->handle }}</a>
+@endforeach
+```
+::
 
-### Declaring the Page Language
+### Declaring the page language
 
 Indicate the current language of the site by setting the `lang` attribute on your `<html>` tag (most likely in your layout view), or the container element around translated content if the page mixes and matches languages.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <html lang="{{ site:short_locale }}">
 ```
+::tab blade
+```blade
+<html lang="{{ $site->short_locale }}">
+```
+::
 
-:::
-
-## Static Caching
+## Static caching
 
 If your multi-site should use static caching, you will also need to add additional config parameters and different server rewrite rules. Please refer to the related section of the [static caching documentation](/static-caching#multisite) for the correct settings.
+
+## Enabling fields
+
+By default, your existing fields won't be enabled for multi-site editing. To enable a field to be editable within another site, navigate to the field and click the globe icon (Localizable).
diff --git a/content/collections/docs/multi-user-collaboration.md b/content/collections/docs/multi-user-collaboration.md
index 542726e40..a3a9a5673 100644
--- a/content/collections/docs/multi-user-collaboration.md
+++ b/content/collections/docs/multi-user-collaboration.md
@@ -17,7 +17,7 @@ id: a3adf32a-37a5-4e96-beee-f107dc1b81a9
 
 <figure>
     <img src="https://statamic.com/storage/products/oMTSYVZJlh4j0Qr8Zm4T5Tl3WM1GQLj5hXRMsnx1.png" alt="Statamic's multi-user collaboration in action">
-    <figcaption>A glimpse multi-user collaboration in action.</figcaption>
+    <figcaption>A glimpse of multi-user collaboration in action.</figcaption>
 </figure>
 
 ## Installation
diff --git a/content/collections/docs/navigation.md b/content/collections/docs/navigation.md
index e5495b40a..dd92f84e4 100644
--- a/content/collections/docs/navigation.md
+++ b/content/collections/docs/navigation.md
@@ -14,7 +14,7 @@ related_entries:
 Each Nav is a [structure](/structures) giving you the ability to rearrange items through the delightful experience of dragging and dropping boxes.
 
 <figure>
-    <img src="/img/structure.png" alt="A Statamic 3 structure page tree" width="535">
+    <img src="/img/structure.png" alt="A Statamic structure page tree" width="535">
 </figure>
 
 
@@ -58,13 +58,23 @@ collections:
 
 You can work with the [nav](/tags/nav) to loop through and render your HTML with access to all the entries and nodes in the navigation.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
 {{ nav:footer }}
     <li><a href="{{ url }}">{{ title }}</a></li>
 {{ /nav:footer }}
 </ul>
 ```
+::tab blade
+```blade
+<statamic:nav:footer>
+  <li><a href="{{ $url }}">{{ $title }}</a></li>
+</statamic:nav:footer>
+```
+::
 
 Within the tag pair, you will have access to any fields defined on that particular nav item - the item itself or the entry. See [blueprints and data](#blueprints-and-data) below for more information.
 
@@ -77,7 +87,7 @@ Your navigation tree _may_ contain references to entries. The control panel's en
     <figcaption>If you want to put pants in your navs, you can.</figcaption>
 </figure>
 
-## Blueprints and Data
+## Blueprints and data
 
 Out of the box, nav items are fairly light. If you create a standard nav item, you can type in the URL and title. For entry reference nav items, you can override the title.
 
@@ -106,4 +116,4 @@ In the case of entry reference nav items, any fields you add to the nav blueprin
 
 ## Localization
 
-When running a [multi-site](/multi-site) installation, you can have a different tree for each nav. Learn more about [localizing navs](/tips/localizing-navigation).
\ No newline at end of file
+When running a [multi-site](/multi-site) installation, you can have a different tree for each nav. Learn more about [localizing navs](/tips/localizing-navigation).
diff --git a/content/collections/docs/netlify.md b/content/collections/docs/netlify.md
index e77637bcb..8c7156aaf 100644
--- a/content/collections/docs/netlify.md
+++ b/content/collections/docs/netlify.md
@@ -15,7 +15,7 @@ Deployments are triggered by committing changes to your Git repository. Alternat
 ## Prerequisites
 
 :::tip
-Netlify **doesn't support PHP 8.2 yet**. Make sure your projects and its dependencies don't require it. It works with PHP **<=8.1**.
+While Netlify supports PHP versions from 7.4 through 8.3, it defaults to PHP 8.0. You can [specify the PHP version](https://docs.netlify.com/configure-builds/manage-dependencies/#php) using the `PHP_VERSION` environment variable.
 :::
 
 - A [Netlify](https://netlify.com) account
@@ -26,7 +26,7 @@ Netlify **doesn't support PHP 8.2 yet**. Make sure your projects and its depende
 ```json
 "scripts": {
     "build": [
-        "npm run production",
+        "npm run build",
         "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
         "@php artisan key:generate",
         "@php please ssg:generate"
@@ -64,6 +64,10 @@ The next step is to configure your site's settings and deployment configuration.
 3. Use `composer build` for the build command if you set up your `composer.json` like mentioned [above](#prerequisites).
     - Otherwise just use `php please ssg:generate`
 4. Set the publish directory to `storage/app/static`
+5. Add `APP_KEY` env variable, by running `php artisan key:generate` locally, and copying from your `.env`
+    - ie. `APP_KEY` `your-app-key-value`
+6. Add `APP_URL` environment variable after your site has a configured domain
+    - ie. `APP_URL` `https://thats-numberwang-47392.netlify.com`
 
 Instead of doing all of this manually, you can also use a `netlify.toml` file at the base of your project. Netlify automatically detects the file and sets everything up for you. Feel free to use [this one](https://gist.github.com/joshuablum/845d6af82c710a9b9d8f1a57618f213d) as a reference or starting point.
 
diff --git a/content/collections/docs/oauth.md b/content/collections/docs/oauth.md
index 687061679..dc8c9a416 100644
--- a/content/collections/docs/oauth.md
+++ b/content/collections/docs/oauth.md
@@ -13,7 +13,7 @@ Statamic supports OAuth authentication via [Laravel Socialite](https://github.co
 
 The [Socialite Providers][socialite-providers] Github organization contains over 100 additional pre-built providers that you can take advantage of as well.
 
-If you require a provider not on the list, (perhaps you need a custom one for your own application) you may [create your own provider](#custom-providers).
+If you require a provider not on the list (perhaps you need a custom one for your own application), you may [create your own provider](#custom-providers).
 
 ## Installing Socialite
 
@@ -51,7 +51,7 @@ If you plan to use a third party provider, follow the steps [below](#third-party
 
 ## Usage
 
-Send your users to the provider’s login URL to begin the OAuth workflow. You may do this with the `oauth` tag:
+Send your users to the provider’s login URL to begin the OAuth workflow. Buttons for each configured provider will be available on the Control Panel's login page, but you may also do this on the front-end with the `oauth` tag:
 
 ```
 <a href="{{ oauth:github }}">Log in with Github</a>
@@ -60,7 +60,7 @@ Send your users to the provider’s login URL to begin the OAuth workflow. You m
 Once they've logged in at their provider's site, they will be redirected back to your site where a Statamic user account will either be retrieved or created.
 They will then be automatically logged into your site with the Statamic account.
 
-You may [customize how the user is created](#customizing-user-data).
+However, you may [customize the user flow](#user-flow).
 
 
 ## Configuration
@@ -81,6 +81,14 @@ You can specify just the name of the provider, or use a name/label pair if you w
 ],
 ```
 
+If a provider requires ["stateless authentication"](https://laravel.com/docs/socialite#stateless-authentication), you may pass an array and specify the `stateless` config option:
+
+``` php
+'providers' => [
+    'saml2' => ['stateless' => true, 'label' => 'Okta'],
+],
+```
+
 ### Routes
 
 There are 2 required routes in order for the OAuth workflow to function:
@@ -98,45 +106,68 @@ You may customize these in `config/statamic/oauth.php`:
 
 When you create your OAuth application, you will need to provide the callback URL.
 
-## Third Party Providers
+### User flow
 
-If you would like to use a provider not natively supported by Socialite, you should use the [SocialiteProviders][socialite-providers] method.
+By default, once a user has logged in at their provider's site, they will be redirected back to your site where a Statamic user account will either be retrieved or created.
+They will then be automatically logged into your site with the Statamic account.
 
-Require the appropriate provider using Composer:
+Additionally, any user data from the provider will be merged into that user's account.
 
-```
-composer require socialiteproviders/dropbox
+You may choose to customize this flow.
+
+```php
+'create_user' => true,
+'merge_user_data' => true,
+'unauthorized_redirect' => null,
 ```
 
-Add the event listener to your EventServiceProvider:
+By setting `'create_user' => false`, if a corresponding Statamic user account doesn't exist, one will not be created for them, and they will be redirected to the unauthorized error page.
 
-``` php
-protected $listen = [
-    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
-        'SocialiteProviders\\Dropbox\\DropboxExtendSocialite@handle',
-    ],
-];
-```
+## Third party providers
 
-Add the service credentials to `config/services.php` config:
+If you would like to use a provider not natively supported by Socialite, you should use the [SocialiteProviders][socialite-providers] method.
 
-``` php
-'dropbox' => [
-    'client_id' => env('DROPBOX_CLIENT_ID'),
-    'client_secret' => env('DROPBOX_CLIENT_SECRET'),
-    'redirect' => 'http://your-site.com/oauth/dropbox/callback',
-],
-```
+1. Require the appropriate provider using Composer:
+    ```
+    composer require socialiteproviders/dropbox
+    ```
 
-Add the provider to the `config/statamic/oauth.php` config:
+1. Next, add an event listener in your `AppServiceProvider`'s `boot` method:
+    ```php
+    // app/Providers/AppServiceProvider.php
 
-``` php
-'providers' => [
-    'dropbox',
-],
-```
+    Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) {
+        $event->extendSocialite('dropbox', \SocialiteProviders\Dropbox\Provider::class);
+    });
+    ```
+
+    Alternatively, if your application has an `EventServiceProvider.php` file, you can register the event listener in there:
+
+    ```php
+    protected $listen = [
+        \SocialiteProviders\Manager\SocialiteWasCalled::class => [
+            'SocialiteProviders\\Dropbox\\DropboxExtendSocialite@handle',
+        ],
+    ];
+    ```
+
+3. Add the service credentials to `config/services.php` config:
+    ``` php
+    'dropbox' => [
+        'client_id' => env('DROPBOX_CLIENT_ID'),
+        'client_secret' => env('DROPBOX_CLIENT_SECRET'),
+        'redirect' => 'http://your-site.com/oauth/dropbox/callback',
+    ],
+    ```
+
+4. Add the provider to the `config/statamic/oauth.php` config:
+    ``` php
+    'providers' => [
+        'dropbox',
+    ],
+    ```
 
-## Custom Providers
+## Custom providers
 
 If your OAuth provider isn’t already available in Socialite or [SocialiteProviders][socialite-providers], you may create your own.
 
@@ -144,25 +175,33 @@ To create your own OAuth provider, you should make your own SocialiteProvider-re
 
 Follow the [third party installation steps](#third-party-providers), but skip the Composer bits. You can just keep the classes somewhere in your project.
 
-## Customizing User Data
+## Customizing user data
 
 After authenticating with the provider, Statamic will try to retrieve the corresponding user, or create one if it doesn't exist. You may customize how it's handled by adding a callback to your `AppServiceProvider`.
 
 ### User data
 
-The only data added to the user will be their `name`. If you would like to customize what gets created, you can return an array from the provider's `withUserData` callback. The closure will be given an instance of `Laravel\Socialite\Contracts\User`.
+The only data added to the user will be their `name`. If you would like to customize what gets added to the user, you can return an array from the provider's `withUserData` callback.
+
+The closure will be given:
+- an instance of `Laravel\Socialite\Contracts\User`
+- the existing `Statamic\Contracts\Auth\User` if one already exists.
 
 ``` php
 use Statamic\Facades\OAuth;
 
-OAuth::provider('github')->withUserData(function ($user) {
-    return [
-        'name' => $user->getName(),
-        'created_at' => now()->format('Y-m-d'),
-    ];
-});
+OAuth::provider('github')
+     ->withUserData(fn ($socialiteUser, $statamicUser) => [
+        'name' => $socialiteUser->getName(),
+        'created_at' => optional($statamicUser)->created_at
+                        ?? now()->format('Y-m-d'),
+    ]);
 ```
 
+:::warning
+This user data will get merged into the user every time they log in using OAuth. This includes if they had an existing non-OAuth user account.
+:::
+
 ### Customize entire user creation
 
 If you want more control over the actual user object being created, you can return a user from the provider's `withUser` callback. The closure will be given an instance of `Laravel\Socialite\Contracts\User`.
@@ -178,4 +217,28 @@ OAuth::provider('github')->withUser(function ($user) {
 });
 ```
 
-[socialite-providers]: https://socialiteproviders.com/
\ No newline at end of file
+:::warning
+This will only be used when the user is initially created. If you'd like to also update the data on every login, you should combine this with the `withUserData` option above.
+
+```php
+public function boot()
+{
+    OAuth::provider('github')
+        ->withUserData(fn ($user) => $this->userData($user))
+        ->withUser(function ($user) {
+            return User::make()
+                ->email($user->getEmail())
+                ->data($this->userData($user));
+        });
+}
+
+private function userData($user)
+{
+    return [
+        'name' => $user->getName(),
+    ];
+}
+```
+:::
+
+[socialite-providers]: https://socialiteproviders.com/
diff --git a/content/collections/docs/ploi.md b/content/collections/docs/ploi.md
index 89019edda..9f20df75b 100644
--- a/content/collections/docs/ploi.md
+++ b/content/collections/docs/ploi.md
@@ -7,6 +7,11 @@ intro: |-
   Linode, Vultr, Amazon, Hetzner and other hosting platforms. It's a piece of 🍰 to deploy a Statamic site with it.
 parent: c4f17d05-78bd-41bf-8e06-8dd52f6ec154
 ---
+
+:::tip
+Use the coupon `RAD-DEPLOIMENT` to get 25% off your Ploi subscription. Can be used once per account and only works with the manual renewal and a duration of up to five months.
+:::
+
 Assuming you have a [Ploi](https://ploi.io) account, the first thing to do is authorize your hosting provider of choice. In this walk-through we'll use [Hetzner](https://www.hetzner.com) as the example. This is a one-time step and will allow you to easily spin up and provision new server stacks anytime.
 
 Go to your [Hetzner Cloud Console](https://console.hetzner.cloud) (or other cloud provider of choice) and create an API token. Check out the [Hetzner docs on generating API tokens](https://docs.hetzner.com/cloud/api/getting-started/generating-api-token/) if you need it. Make sure the token has **read and write** access.
@@ -53,20 +58,22 @@ After doing this, you'll be able to customize the deployment script if needed. Y
     <img src="/img/deployment-ploi-script-example.jpg" alt="Deployment script example">
 </figure>
 
-The "Deploy script" area is where you'd add commands to install Composer and NPM dependencies, compile CSS and JavaScript if you need to, and clear Statamic's cache. Most deploy scripts look like something like this:
+The "Deploy script" area is where you'd add commands to install Composer and NPM dependencies, compile CSS and JavaScript if you need to, and clear Statamic's cache. Most deploy scripts look something like this:
 
 ``` shell
 cd /home/ploi/{example}.{tld}
 git pull origin main
-composer install--no-interaction--prefer-dist--optimize-autoloader
+composer install --no-interaction --prefer-dist --optimize-autoloader
 echo ... sudo-S service php8.1-fpm reload
 php please cache:clear
 npm ci && npm run production
 ```
 
+If you're planning on using the Git integration, you may want to prevent content changes from the Control Panel from triggering "full" deployments in Ploi. Learn more about this on the [Git Automation](/git-automation#customizing-commits) page.
+
 ## Statamic specific features
 
-Ploi let's you interact with your Statamic installation without you having to connect to your server via SSH. This includes clearing the (static) cache, warming the stache, generating meta data for assets etc.
+Ploi lets you interact with your Statamic installation without you having to connect to your server via SSH. This includes clearing the (static) cache, warming the stache, generating meta data for assets etc.
 
 <figure>
     <img src="/img/deployment-ploi-statamic-features.jpg" alt="Ploi's Statamic specific features">
diff --git a/content/collections/docs/preferences.md b/content/collections/docs/preferences.md
index e4c8f2a27..05e74f5bb 100644
--- a/content/collections/docs/preferences.md
+++ b/content/collections/docs/preferences.md
@@ -6,7 +6,7 @@ intro: Preferences are easy to manage settings available from and generally affe
 ---
 Where application configuration lives in PHP config files, preferences can be accessed from the control panel where they can be edited by clients or users. The actual preferences themselves are stored in YAML files, whether on the user, role, or [default preferences file](#storage).
 
-## Accessing Preferences
+## Accessing preferences
 
 Users can access preferences through the cog icon in the upper right hand corner of the CP.
 
@@ -15,7 +15,7 @@ Users can access preferences through the cog icon in the upper right hand corner
     <figcaption>Manage your own preferences!</figcaption>
 </figure>
 
-## Customizing Preferences For Other Users
+## Customizing preferences for other users
 
 In order to customize preferences for other users, you must first enable [Statamic Pro](/tips/how-to-enable-statamic-pro), and you must either be a super user or have permissions to manage preferences.
 
@@ -46,7 +46,7 @@ Since a user may have multiple roles, they will inherit the preferences of their
 
 ## Storage
 
-Default preferences are stored in `resources/preferences.yaml` as simple array.
+Default preferences are stored in `resources/preferences.yaml` as a simple array.
 
 ```yaml
 locale: en
@@ -56,7 +56,7 @@ start_page: collections/articles
 Role and user preferences are stored in their existing respective locations as the same array in a `preferences` key.
 
 
-## Adding Fields
+## Adding fields
 
 You may add additional preference fields from within a service provider.
 
@@ -83,8 +83,8 @@ public function boot()
                     ],
                 ],
             ]
-        ]);
-    });
+        ]
+    ]);
 }
 ```
 
diff --git a/content/collections/docs/protecting-content.md b/content/collections/docs/protecting-content.md
index 2ab93ef65..c1803ab0c 100644
--- a/content/collections/docs/protecting-content.md
+++ b/content/collections/docs/protecting-content.md
@@ -19,9 +19,11 @@ You can also [create your own drivers](#custom-drivers).
 
 Whichever approach you choose, know that it's designed to help you out. We’ve tried to keep the syntax as simple as possible while allowing for flexibility. Because of this, if Statamic sees you’ve set `protect`, but the scheme has been configured incorrectly, _all users will be denied_.
 
-:::tip
-This feature only applies to the frontend of your site on pages routed through Statamic (like entry URLs). Custom PHP/Laravel-defined routes and the Control Panel will be unaffected.
-:::
+## Caveats
+
+* Protection only applies to the frontend of your site routed through Statamic (like entry URLs). Custom routes defined in your `routes/web.php` file and the Control Panel will be unaffected.
+* Protected pages are automatically excluded from the [static cache](https://statamic.dev/static-caching#important-preface).
+
 
 ## Protecting an entry
 
@@ -38,7 +40,7 @@ When visiting this entry's URL, logged in users will see it,
 but logged out users will be redirected to a login page.
 ```
 
-## Protecting a Collection
+## Protecting a collection
 
 To protect an entire collection, inject a `protect` variable into your collection. To do this, add the following to your collection's YAML config file. This cannot be done in the control panel.
 
@@ -49,14 +51,14 @@ inject:
 ```
 
 
-## Configuring Schemes
+## Configuring schemes
 
 The configuration file is located at `config/statamic/protect.php`. In this file you may specify a number of different schemes which you can reference throughout your content files.
 
 You are free to use the same driver in multiple schemes, configured in different ways. Check below for details on how to configure each driver.
 
 
-## IP Address
+## IP address
 
 Add the IP address(es) you wish to allow to the aptly named `allowed` array.
 
@@ -99,19 +101,45 @@ This is perfect for times when you want to password-protect one or more files bu
 ]
 ```
 
-### Password Form
+You can also define the password for a protected entry on the entries themselves. This might be helpful if each has a different password.
+
+```yaml
+# content/collections/pages/secret-page.md
+
+protect: password
+password: local-password
+```
+
+``` php
+// config/statamic/protection.php
+
+'password' => [
+    'driver' => 'password',
+    'allowed' => ['secret', 'confidential'],
+    'form_url' => null,
+    'field' => 'password', // [tl! add]
+]
+```
+
+
+### Password form
 
 <figure>
-    <img src="/img/password-protected.png" alt="A Statamic 3 password protected page">
+    <img src="/img/password-protected.png" alt="A Statamic password protected page">
     <figcaption>The default password protected login screen.</figcaption>
 </figure>
 
 You’ll need to provide a way for people to enter passwords for URLs. Statamic has a built-in generic password entry form. If you want to customize it, you have two options:
 
 #### Override the view
+
+::tabs
+
+::tab antlers
+
 Override the view by creating `vendor/statamic/auth/protect/password.antlers.html` in your `views` directory, and use the  [protect:password_form](/tags/protect-password_form) tag to build a form. No config change required. For example:
 
-```
+```antlers
 {{ protect:password_form }}
     {{ if no_token }}
         No token has been provided.
@@ -132,12 +160,38 @@ Override the view by creating `vendor/statamic/auth/protect/password.antlers.htm
     {{ /if }}
 {{ /protect:password_form }}
 ```
+::tab blade
+
+Override the view by creating `vendor/statamic/auth/protect/password.blade.php` in your `views` directory, and use the [protect:password_form](/tags/protect-password_form) tag to build a form. No config change required. For example:
+
+```blade
+<s:protect:password_form>
+  @if ($no_token)
+    No token has been provided.
+  @else
+    @if ($error)
+      <div class="error">{{ $error }}</div>
+    @endif
+
+    <input type="password" name="password" />
+
+    @if (isset($errors['password']))
+      @foreach ($errors['password'] as $error)
+        <div class="inline-error">{{ $error }}</div>
+      @endforeach
+    @endif
+
+    <button>Submit</button>
+  @endif
+</s:protect:password_form>
+```
+::
 
 The `protect:password_form` tag is going to wrap everything between the tags in an HTML form tag pointing to the appropriate place.
 
 The HTML of the form itself is up to you. The only requirement is to name the password input `password`. You can do anything else you want.
 
-#### Custom Form URL
+#### Custom form URL
 
 If you would like more control over the location of the password form, you may change `form_url` in the scheme's config:
 
@@ -147,7 +201,7 @@ If you would like more control over the location of the password form, you may c
 
 You can create a page or a route for this. In the corresponding view, you can build a form as described above.
 
-### Validation Errors
+### Validation errors
 When a validation error is encountered, `error` and `errors` variables will be available to you.
 
 The `error` variable will be a string with the first error, useful if you want to display an error at the top of your form.
@@ -157,10 +211,10 @@ The `errors` variable will be an array keyed by field names, each containing an
 ### Token
 When visiting a password protected page, Statamic will generate a token and append it to the form’s URL. Without a token, the form cannot function correctly. In the example above, you can see the `no_token` boolean will be populated for you. This may happen if you visit the form URL directly.
 
-### Invalid Passwords
+### Invalid passwords
 If someone submits a password and it isn’t valid, Statamic will redirect back with the appropriate validation error. Valid passwords can vary from piece of content to piece of content. This one form is smart enough to handle all password management between password-protected URLs.
 
-### Valid Passwords
+### Valid passwords
 A valid password is anything matching one of the passwords in the allowed list as configured on the scheme. This means that you can send three people three different passwords to access the same URL, each having their own way in. Additionally, you could also set just one password and send that to 100 people and they can all use the same password.
 
 As always with online security, be careful with who you share passwords with or you'll find yourself changing them often.
@@ -169,18 +223,18 @@ As always with online security, be careful with who you share passwords with or
 This protection method is meant for short-term access control. For example, showing a client your progress without the public or to prevent Google from indexing a staging site. It's about as secure as curtain over an open window: just good enough for passer-bys.
 :::
 
-### Password Expiration
+### Password expiration
 Each user’s passwords will expire along with their session. To manually invalidate a password, remove it from the list of allowed passwords on the page. The next time a user with that password visits this page they’ll be redirected to the password form just like everyone else.
 
 
-## Endgame Protection
+## Endgame protection
 
 If you want to protect a page from anyone - regardless of authentication status, IP address, time of day, weather, or beverage preference - you can simply add `protect: true` to the entry's front-matter.
 
 One may find this useful to quickly disable something.
 
 
-## Site-wide Protection
+## Site-wide protection
 
 To protect your whole site at once, add a scheme name to `default` in your `protect.php` configuration file.
 
@@ -198,9 +252,9 @@ For example, to make sure your whole site is only accessible to a single IP addr
 ```
 
 
-## Custom Drivers
+## Custom drivers
 
-### Writing the Driver
+### Writing the driver
 
 To create your custom protection driver, you should extend the `Statamic\Auth\Protect\Protector` class and add a `protect` method.
 
@@ -237,7 +291,7 @@ $this->url;    // The URL the protection was triggered on.
 $this->data;   // The data object (eg. the Entry) being protected.
 ```
 
-### Registering the Driver
+### Registering the driver
 
 Inside a service provider's `boot` method, you can use the `extend` method on the protector manager class.
 
diff --git a/content/collections/docs/quick-start-guide.md b/content/collections/docs/quick-start-guide.md
index 284a6fd5f..7f9332d1d 100644
--- a/content/collections/docs/quick-start-guide.md
+++ b/content/collections/docs/quick-start-guide.md
@@ -1,12 +1,12 @@
 ---
-title: 'Quick Start Guide'
-intro: "A step-by-step guide to installing and building your first Statamic 3 site."
+title: 'Quick start guide'
+intro: "A step-by-step guide to installing and building your first Statamic site."
 video: https://www.youtube.com/playlist?list=PLVZTm2PNrzMwYLGotkQvTvjsXAkANJIkc
 id: 1d1920fb-604c-4ac1-8c99-f0de44abc06b
 ---
 ## Overview
 
-Much of the documentation is intended to be used as a reference sheet for various features, explaining how they work and what options and settings they provide. But not this guide. This is for glueing it all together, assuming you know very little about how Statamic works. We'll only make a couple of assumptions here before we get started.
+Much of the documentation is intended to be used as a reference sheet for various features, explaining how they work and what options and settings they provide. But not this guide. This is for gluing it all together, assuming you know very little about how Statamic works. We'll only make a couple of assumptions here before we get started.
 
 1. You are comfortable working with HTML.
 2. You have a local dev environment with [composer](https://getcomposer.org/) installed.
@@ -15,14 +15,16 @@ Much of the documentation is intended to be used as a reference sheet for variou
 
 ### What we're building
 
-We're going to build a simple personal website for a fictitious young aspiring programmer named Kurt Logan. Kurt always has and always will live in the 1980s and is very excited at the prospect of having his very own place in <span class="uppercase font-bold tracking-widest text-green font-display">Cyberspace</span>.
+We're going to build a simple personal website for a fictitious young aspiring programmer named Kurt Logan. Kurt always has and always will live in the 1980s and is very excited at the prospect of having his very own place in <span class="c-spaced">Cyberspace</span>.
+
+**This is not a "5 minute quick install guide" – we're going to be building a simple yet full site from scratch so you can see how everything comes together. It will likely take around 20-30 minutes.**
 
 ## High level approach
 
 A high level approach to building a site in Statamic often looks like this.
 
 1. Start with a static HTML site or series of different layouts
-2. Break static files up into the appropriate [Antlers views](/antlers) (layouts, templates, and partials)
+2. Break static files up into the appropriate [views](/antlers) (layouts, templates, and partials)
 3. Create applicable [collections](/collections) to hold content and set up [routes](/routing) to determine your URL patterns
 4. Stub out top level pages and map them to the proper templates
 5. Configure [blueprints](/blueprints) to hold fields that match your HTML (like title, author, date, content) and move static content out of your markup and into entries using the beautiful UI
@@ -38,52 +40,54 @@ We want this quick start guide to be just that — quick. Rather than stop after
 
 Let's start right at the very beginning. Installing Statamic.
 
-There are a [few ways to do it](/installing), but we'll just go with the simplest, most copy & pasteable method – using [Composer's](https://getcomposer.org) `create-project` command.
+There are a [few ways to do it](/installing), but we recommend using our CLI installer. So let's get that installed to your local machine.
 
-The command you're about to run clones (makes a copy of) our [empty starter site](https://github.com/statamic/statamic) and then runs a few automated scripts to get your new blank site ready.
+``` shell
+composer global require statamic/cli
+```
 
-You should run this command from your Terminal application of choice (we like [iTerm2](https://iterm2.com/index.html) inside your `~/Sites` directory or wherever you prefer putting your sites.
+Now you can run the `statamic new` command wherever you prefer to keep your site projects (we use `~/Sites` but you do you) to get a fresh site up and running.
 
 ``` shell
-composer create-project --prefer-dist statamic/statamic cyberspace-place
+cd ~/Sites && statamic new cyberspace-place
 ```
 
-If everything worked as expected, you should be able to visit [http://cyberspace-place.test](http://cyberspace-place.test) and see the Statamic 3 welcome screen.
+You'll be asked a couple of questions, like whether you want to install a blank site or a [Starter Kit](/starter-kits) (to keep it really simple, start with a blank site), create your first user, or initialize a Git repository.
 
-If you encounter a 404 error, make sure your `APP_URL` is set correctly in the `.env` file. If you encounter a Composer error, try running `composer global update` and trying again.
+Once the installer is done and if everything worked as expected, you should be able to visit [http://cyberspace-place.test](http://cyberspace-place.test) and see the Statamic welcome screen.
 
-If you encounter any other errors, Google them frantically and try anything and everything suggested until it magically begins working.
+If you encounter any errors, Google them frantically and try anything and everything suggested until it magically begins working.
 
 **Just kidding**, that's a terrible idea. Please don't do that. You should check our [troubleshooting](/troubleshooting) guide and [GitHub discussions](https://github.com/statamic/cms/discussions) to look for a validated solution before resorting to such measures. We try our best to have answers to all the most common things you might encounter. Modern web development is amazing when everything is up to date, and can be pretty frustrating when it isn't. We feel this pain too.
 
 <figure>
-    <img src="/img/quick-start/installed-3.3.png" alt="Statamic 3 Welcome Screen">
-    <figcaption><a class="no-underline hover:text-pink-hot font-bold text-blue-darkest">If you see this you are right on track.</a></figcaption>
+    <img src="/img/quick-start/installed-3.3.png" alt="Statamic Welcome Screen">
+    <figcaption>If you see this you are right on track.</figcaption>
 </figure>
 
 Next, in your command line navigate into the new site (`cd cyberspace-place`) and open the project directory in your code editor. We like [VS Code](https://code.visualstudio.com/) but there are a ton of great editors and IDEs out there.
 
-## Create your first user
+## Signing Into the Control Panel
 
-Now we can create a new **super user**, sign into the control panel, and start creating content to display on the frontend.
+As part of the install process you should have created yourself a super user, but if you said no on accident, we've got your back.
 
-Run `php please make:user` from the command line and follow along with the prompts (name, email, etc). Be sure to say `yes` when asked if the user should be a **super user** otherwise you'll just have to do it again. And again. And again until you finally say `yes`. Never be afraid of committing to success.
+At any time you can run `php please make:user` from the command line and follow along with the prompts (name, email, etc). For the purpose of this walkthrough, be sure to say `yes` when asked if the user should be a **super user** otherwise you'll just have to do it again. And again. And again until you finally say `yes`. Never be afraid of committing to success.
 
 <figure>
-    <img src="/img/quick-start/make-user.png" alt="Statamic 3 Make:User Command" width="453">
+    <img src="/img/quick-start/make-user.png" alt="Statamic Make:User Command">
     <figcaption>You can customize user fields later.</figcaption>
 </figure>
 
 Now you can sign in. Head to [http://cyberspace-place.test/cp](http://cyberspace-place.test/cp) and use your email address and password to sign into the control panel.
 
 <figure>
-    <img src="/img/quick-start/login.png" alt="Statamic 3 Login Screen">
+    <img src="/img/quick-start/login.png" alt="Statamic Login Screen">
     <figcaption>If you see this screen at <code>/cp</code> you've just earned 200 XP!</figcaption>
 </figure>
 
 ## Make a home page
 
-Next, let's get some content of _our_ choosing to show on the homepage. Head to `Collections → Pages` in the control panel and you'll see an empty home page entry waiting for you. Click on the entry's title to edit it. Type anything you want in the `content` field and then click **Save & Publish**.
+Next, let's get some content of _our_ choosing to show on the homepage. Head to `Collections → Pages` in the control panel, and you'll see an empty home page entry waiting for you. Click on the entry's title to edit it. Type anything you want in the `content` field and then click **Save & Publish**.
 
 <figure>
     <img src="/img/quick-start/editing-home.png" alt="Editing the home page">
@@ -95,7 +99,7 @@ Note that the entry is using the `home` template (you can see it there in the `t
 In your code editor, open the file `resources/views/home.antlers.html`. This is the home template. The "name" of a template is the filename _up until the file extension_. Any view ending in `.antlers.html` will be parsed with Statamic's [Antlers](/antlers) template parser.
 
 :::tip
-If a view file ends with `.blade.php` it will use Laravel's [Blade language](/blade). This same pattern applies for other template engines that could be installed in the future.
+If a view file ends with `.blade.php` it will use Laravel's [Blade templates](/blade). This same pattern applies for any other template engine you may wish to install in the future, like Twig or something that hasn't been invented yet.
 :::
 
 Delete all the placeholder HTML from the template and replace it with the following:
@@ -120,7 +124,9 @@ You probably noticed that there is some _very_ basic styling going on. That's co
 <html>
 <head>
     <title>{{ title }}</title>
-    <link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet">
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <script src="https://cdn.tailwindcss.com"></script>
 </head>
 <body class="bg-gray-900 text-white text-lg font-mono">
     <div class="container max-w-lg mx-auto py-8">
@@ -141,21 +147,13 @@ Think of layouts like a **picture frame**, and everything that changes from sect
     <figcaption>If copy & pasted properly you should see this 👆</figcaption>
 </figure>
 
-:::tip
-There's really no perfect place to mention this, but here is as good as any.
-
-The default install uses [TailwindCSS](https://tailwindcss.com/docs/just-in-time-mode) in Just In Time mode, so anytime you change classes in your HTML you'll need to recompile your CSS.
-
-This is super easy and happens automatically when you run `npm run watch` from the terminal in your project directory (as long as you've run `npm install` first).
-:::
-
 ## Now let's build a blog
 
 You might have known it was coming next – it's the staple of every CMS walkthrough. How easy is it to build a blog? You're about to find out.
 
 But first, let's talk about what a blog is. A "blog" is a collection of posts that shares common traits or attributes. A typical blog post might contain a title, featured image, an author, a few tags, and the article content.
 
-There also always a list (sometimes called an "archive") of blog posts linking to each post's unique URL, and sometimes the homepage has a short list of the most recent posts as well. Let's detail exactly what we're going to build, and then build it.
+There is always a list (sometimes called an "archive") of blog posts linking to each post's unique URL, and sometimes the homepage has a short list of the most recent posts as well. Let's detail exactly what we're going to build, and then build it.
 
 Here's our todo list:
 
@@ -164,7 +162,7 @@ Here's our todo list:
 - Create a blog detail page (`/blog/why-i-love-mustard`)
 - Add a list of the most recent 5 blog entries to the homepage
 
-### Create a new Collection
+### Create a new collection
 
 Head back to the Control Panel and click on the Collections link in the sidebar. Click the blue **Create Collection** button and then call your new collection "Blog".
 
@@ -205,7 +203,7 @@ Next, let's configure the collection to behave the way a typical blog should. Cl
 
 
 :::tip
-Statamic does its best to take a "start simple and add things as needed" approach to features and settings, in contrast to other platforms that take a "everything is included and rip it what you don't want" approach.
+Statamic does its best to take a "start simple and add things as needed" approach to features and settings, in contrast to other platforms that take a "everything is included and rip out what you don't want" approach.
 
 This means that Statamic doesn't do everything right out the box, but is much simpler to customize how you want everything to work.
 :::
@@ -327,11 +325,10 @@ A few cool things to note here in this code example:
 
 <figure>
     <img src="/img/quick-start/blog-show.jpg" alt="A blog post" width="600">
-    <figcaption>How close does your look?</figcaption>
+    <figcaption>How close does yours look?</figcaption>
 </figure>
 
-
-## Blog Index
+## Blog index
 
 Next, let's make that blog index page. Head back to the control panel and go to the **Pages** collection. Create a new entry and call it "Blog", "My Blog", or even "My CyberBlog" — just make sure the slug is `blog`. Set the template to `blog/index`.
 
@@ -353,7 +350,7 @@ Back to your code editor — open up the `resources/views/blog/index.antlers.htm
 </section>
 ```
 
-And stop right there. We've now duplicated a whole chunk of code save for one little tiny bit — `limit="5'`. Let's DRY this up (reduce code duplication).
+And stop right there. We've now duplicated a whole chunk of code for one tiny little bit — `limit="5'`. Let's DRY this up (reduce code duplication).
 
 :::tip
 It's totally fine to duplicate code sometimes, especially if you have to make some code significantly more complex to reuse it. Just keep that in mind. We'll keep this simple.
@@ -363,13 +360,13 @@ It's totally fine to duplicate code sometimes, especially if you have to make so
 
 Partials are reusable template chunks. Create a new file named `_listing.antlers.html` in the `resources/views/blog/` directory. Prefixing a template with an underscore is a common convention to indicate that it's a reusable partial and not a full layout. You could also create a subdirectory named `partials` — it's up to you. Just be consistent.
 
-Inside that new template file, copy and paste the entire `<section>` chunk that includes the Collection tag pair from either the homepage, the blog index, or this guide. We can create a variable on the fly here so when you use your partial you can specify your desired limit. Replace that second line with this:
+Inside that new template file, copy and paste the entire `<section>` chunk that includes the Collection tag pair from either the homepage, the blog index, or this guide. We can create a variable on the fly here so you can pass a desired limit into your partial. Replace that second line with this:
 
 ```
 {{ collection:blog :limit="limit" }}
 ```
 
-By prefixing the `limit` parameter with a colon we're telling Statamic to look for a variable named "limit" as the argument. If there isn't one it will be null, and not add a limit — just how we want it on the blog index template.
+Prefixing the `limit` parameter with a colon tells Statamic to look for a variable named "limit" as the argument. If there isn't one it will be `null`, which will not set a limit which is how we want it on the blog index template.
 
 Your blog index template can now look like as simple as this:
 
@@ -412,7 +409,7 @@ Here's your entire home template:
 
 We're almost done, but before we head back to the control panel to add a few more fields to your blog blueprint, let's add a nav.
 
-Your `home` and `blog` entries are both in an "ordered" Pages collection. If you look at this default collection's config you'll see that it has the **Orderable** setting on and that the root page is considered the home page. This let's you have a page with a slug of `/`.
+Your `home` and `blog` entries are both in an "ordered" Pages collection. If you look at this default collection's config you'll see that it has the **Orderable** setting on and that the root page is considered the home page. This lets you have a page with a slug of `/`.
 
 We can use the [Nav tag](/tags/nav) to fetch the entries in the Pages collection in the order you have them arranged.
 
@@ -422,10 +419,10 @@ Open up your layout file and drop in this nav snippet, right after the open body
 // resources/views/layout.antlers.html
 // ...
 
-<nav class="bg-black text-xs uppercase text-green text-center flex items-center justify-center space-x-4">
-    {{ nav from="pages" include_home="true" }}
+<nav class="bg-black text-xs uppercase text-green-500 text-center flex items-center justify-center space-x-4">
+    {{ nav:collection:pages include_home="true" }}
         <a href="{{ url }}" class="p-2 block hover:text-yellow-200">{{ title }}</a>
-    {{ /nav  }}
+    {{ /nav:collection:pages  }}
 </nav>
 ```
 
@@ -500,7 +497,6 @@ Refresh the page and there you have it — a basic but fully functional website
 
 And make sure to not miss the list of [Tags](/tags) and [Modifiers](/modifiers) that do all sorts of powerful things in your templates.
 
-## Going Deeper
+## Going deeper
 
 We have a screencast series that covers getting started but goes much further and deeper. Feel free to [check that out here](https://www.youtube.com/playlist?list=PLVZTm2PNrzMwYLGotkQvTvjsXAkANJIkc). Good luck!
-
diff --git a/content/collections/docs/relationships.md b/content/collections/docs/relationships.md
index 24e342345..cbe3f6e62 100644
--- a/content/collections/docs/relationships.md
+++ b/content/collections/docs/relationships.md
@@ -3,7 +3,7 @@ id: 8ed04215-9f46-4000-bd67-c71b21b67d85
 blueprint: page
 title: Relationships
 template: page
-intro: 'Content is often related to other content and bits of data. A blog post may have an author and 3 other recommended posts. A product may have a brand and a category. A hot dog may have a bun and some mustard. This pages covers ways to create and take advantage of these types relationships.'
+intro: 'Content is often related to other content and bits of data. A blog post may have an author and 3 other recommended posts. A product may have a brand and a category. A hot dog may have a bun and some mustard. This page covers ways to create and take advantage of these types of relationships.'
 related_entries:
   - d0c65546-74f1-4a15-89d5-1562a95ee2c6
   - acee879a-c832-449d-a714-c57ea5862717
@@ -49,7 +49,7 @@ related_products:
   - abc-1234-bc-4eba
 ```
 
-### Field Breakdown
+### Field breakdown
 - `id` is the unique identifier given to this particular entry
 - `photo` is a reference to an asset image of the product (why didn't they clean up the filename?)
 - `author` is the id of the user who created this entry
@@ -59,7 +59,10 @@ related_products:
 
 In this following template example you can see how easy it is to use the data from related entries, assets, and users. You don't need to write queries, request data filter results, or anything complicated. As long as you've used the appropriate [fieldtypes](#fieldtypes) in your [blueprint](/blueprints), the data will be ready and waiting for you to use in your view template.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <!-- resources/views/products/show.antlers.html -->
 
 <div class="product">
@@ -84,12 +87,42 @@ In this following template example you can see how easy it is to use the data fr
   </div>
 </div>
 ```
+::tab blade
+```blade
+<!-- resources/views/products/show.blade.php -->
+
+<div class="product">
+  <div class="flex justify-between">
+    <h1>{{ $title }}</h1>
+    <h2 class="text-green">${{ $price }}</h2>
+  </div>
+  <img src="{{ $photo->url }}" alt="{{ $photo->alt }}">
+  <p>Listed by: {{ $author->name }}</p>
+</div>
+
+<div class="mt-8">
+  <h3>Related Products</h3>
+  <div class="flex flex-wrap -mx-2">
+    @foreach ($related_products as $product)
+    <div class="w-1/2 p-4 border m-2">
+      <div class="font-bold">{{ $product->title }}</div>
+      <div class="text-green">{{ $product->price }}</div>
+      <img src="{{ $product->photo->url }}" alt="{{ $product->photo->alt }}">
+    </div>
+    @endforeach
+  </div>
+</div>
+```
+::
 
-## Manual Fetching
+## Manual fetching
 
 If you _aren't_ using a relationship fieldtype but _do_ have an `id` or `handle` to fetch data from you can use the [get_content tag](/tags/get_content).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <!-- You can hardcode the ID -->
 {{ get_content from="123-1234-12-4321" }}
   <a href="{{ url }}">{{ title }}</a>
@@ -100,3 +133,16 @@ If you _aren't_ using a relationship fieldtype but _do_ have an `id` or `handle`
   <a href="{{ url }}">{{ title }}</a>
 {{ /get_content }}
 ```
+::tab blade
+```blade
+<!-- You can hardcode the ID -->
+<s:get_content from="123-1234-12-4321">
+  <a href="{{ $url }}">{{ $title }}</a>
+</s:get_content>
+
+<!-- Or pass the variable holding it -->
+<s:get_content :from="related_id">
+  <a href="{{ $url }}">{{ $title }}</a>
+</s:get_content>
+```
+::
diff --git a/content/collections/docs/release-schedule-support-policy.md b/content/collections/docs/release-schedule-support-policy.md
new file mode 100644
index 000000000..1248f81f9
--- /dev/null
+++ b/content/collections/docs/release-schedule-support-policy.md
@@ -0,0 +1,72 @@
+---
+id: c9ee871c-002b-48d7-b845-1abac58de337
+blueprint: page
+title: 'Release Schedule & Support Policy'
+nav_title: 'Release Schedule'
+intro: 'For all Statamic releases, bug fixes are provided for 1 year and security fixes are provided for 18 months.  For all first party addons, only the latest major release receives bug fixes. In addition, please review the [Laravel Support Policy](https://laravel.com/docs/master/releases#support-policy).'
+---
+
+## Versioning scheme
+
+Statamic and its other first-party packages follow [Semantic Versioning](https://semver.org/). Major releases are released every year (~Q1), following Laravel's major releases by roughly a month. Minor and patch releases may be released as often as every few days. Minor and patch releases should never contain breaking changes.
+
+## Support policy
+
+<table>
+   <thead>
+      <tr>
+         <th>Statamic</th>
+         <th>Laravel</th>
+         <th>PHP</th>
+         <th>Release</th>
+         <th>Bug Fixes Until</th>
+         <th>Security Fixes Until</th>
+      </tr>
+   </thead>
+   <tbody>
+      <tr>
+         <td>3.3*</td>
+         <td>8-9</td>
+         <td>7.4-8.1</td>
+         <td>Mar 2022</td>
+         <td>Mar 2023</td>
+         <td>Sep 2023</td>
+      </tr>
+      <tr>
+         <td>3.4*</td>
+         <td>8-9</td>
+         <td>7.4-8.1</td>
+         <td>Jan 2023</td>
+         <td>Jan 2023</td>
+         <td>Jul 2024</td>
+      </tr>
+      <tr>
+         <td>4</td>
+         <td>9-10</td>
+         <td>8.0-8.3</td>
+         <td>Mar 2023</td>
+         <td>May 2024</td>
+         <td>Sep 2024</td>
+      </tr>
+      <tr>
+         <td>5</td>
+         <td>10-12</td>
+         <td>8.2-8.4</td>
+         <td>May 2024</td>
+         <td>Q3 2025</td>
+         <td>Nov 2025</td>
+      </tr>
+       <tr>
+         <td>6</td>
+         <td>11-12</td>
+         <td>8.3-8.4</td>
+         <td>Q3 2025</td>
+         <td>TBD</td>
+         <td>TBD</td>
+      </tr>
+   </tbody>
+</table>
+
+_*Prior to Semantic Versioning_
+
+These dates are subject to changes based on factors outside of our control, such as the release schedule and required versions of Laravel and major Laravel packages we depend upon.
diff --git a/content/collections/docs/requirements.md b/content/collections/docs/requirements.md
index 1f74e021c..97b7939b3 100644
--- a/content/collections/docs/requirements.md
+++ b/content/collections/docs/requirements.md
@@ -1,15 +1,15 @@
 ---
 title: Requirements
-intro: Statamic is a modern PHP application built as a [Laravel](https://laravel.com) package, which carries with it the same [server requirements](https://laravel.com/docs/9.x/deployment#server-requirements) as Laravel itself. To manipulate images (resize, crop, etc), you will also need the GD Library or ImageMagick installed on your server.
+intro: Statamic is a modern PHP application built as a [Laravel](https://laravel.com) package, which carries with it the same [server requirements](https://laravel.com/docs/12.x/deployment#server-requirements) as Laravel itself. To manipulate images (resize, crop, etc), you will also need the GD Library or ImageMagick installed on your server.
 template: page
 id: 792644d2-8bd2-421d-a080-e0be7fca125c
 blueprint: page
 ---
-## Server Requirements
+## Server requirements
 
 To run Statamic you'll need a server meeting the following requirements. These are standard defaults (at minimum) for most modern hosting platforms.
 
-- PHP `>= 7.4.x` (8.0+ recommended)
+- PHP 8.1 or above
 - BCMath PHP Extension
 - Ctype PHP Extension
 - Exif PHP Extension
@@ -22,37 +22,26 @@ To run Statamic you'll need a server meeting the following requirements. These a
 - GD Library or ImageMagick
 - Composer
 
-## Recommended Hosts
+## Development environments
 
-We recommend using [Digital Ocean][do] to host most small to medium Statamic sites. Their servers are fast, inexpensive, and we use them ourselves. _**Full disclosure:** that's an affiliate link but we wouldn't recommend them if it wasn't an excellent option._
+Depending on your operating system, we recommend the following development environments:
 
-:::tip
-We have an install guide on [how to get Statamic running on a typical Digital Ocean droplet](/installing/digital-ocean)
-:::
+### macOS and Windows: Laravel Herd
 
-We also maintain a user-contributed [Github repo][hosts] full of other host recommendations.
+[Laravel Herd](https://herd.laravel.com) is a blazing fast, native development environment for macOS and Windows. Herd includes `php`, `composer` and `npm` - *almost* everything you need to setup Statamic locally.
 
-## Development Environments
+We've written [a guide](/installing/laravel-herd) on installing Herd and setting up your Statamic site.
 
-All of these requirements are satisfied by the [Laravel Homestead][homestead] virtual machine, which makes it a great local Laravel development environment. Virtual machines aren't for everybody though, so here are a couple of other options.
+### Linux
 
-### MacOS: Laravel Valet
+To develop locally with Statamic on Linux, you'll need to install `php`, `composer` and `npm`.
 
-[Laravel Valet][valet] is a development environment for Mac minimalists. No Vagrant, No Apache, No Nginx, No need to manually edit hosts file. It simply maps all the subdirectories in a “web” directory (such as `~/Sites`) to `.test` or `.localhost` domains.
+If you're using Ubuntu (or another variant of Debian), you may find our [Ubuntu guide](/installing/ubuntu) helpful.
 
-You can even share your sites publicly using local tunnels. We use it ourselves and it’s brilliant.
+## Recommended hosts
 
-### Windows: WAMP
+We recommend using [Digital Ocean](https://m.do.co/c/6469827e2269) to host most small to medium Statamic sites. Their servers are fast, inexpensive, and we use them ourselves. _**Full disclosure:** that's an affiliate link but we wouldn't recommend them if it wasn't an excellent option._
 
-[Laragon][laragon] and [WAMP][wamp] are both good choice for those of the Windows persuasion. You may also want to checkout [Laravel Sail](https://laravel.com/docs/8.x/sail), which works well with Statamic or the [Valet for Windows port][valet-windows].
+Some developers choose to pair Digital Ocean with a tool like [Laravel Forge](/deploying/laravel-forge) or [Ploi](/deploying/ploi), which help you provision servers and handle deployments. However, if you're comfortable doing that yourself, then feel free!
 
-
-
-[do]: https://m.do.co/c/6469827e2269
-[vultr]: https://www.vultr.com/?ref=7337126
-[hosts]: https://github.com/statamic/hosts
-[homestead]: https://laravel.com/docs/homestead
-[valet]: https://laravel.com/docs/valet
-[valet-windows]: https://github.com/cretueusebiu/valet-windows
-[wamp]: http://www.wampserver.com/
-[laragon]:https://laragon.org/
+We also maintain a user-contributed [Github repo](https://github.com/statamic/hosts) full of other host recommendations.
diff --git a/content/collections/docs/rest-api.md b/content/collections/docs/rest-api.md
index cfa26fd1c..bc386687b 100644
--- a/content/collections/docs/rest-api.md
+++ b/content/collections/docs/rest-api.md
@@ -9,22 +9,25 @@ pro: true
 
 ## Enable the API
 
-Enable the API in your config or with an environment variable.
-
-```php
-// config/statamic/api.php
-'enabled' => true,
-```
+To enable the REST API, add the following to your `.env` file:
 
 ```env
 STATAMIC_API_ENABLED=true
 ```
 
-You will also need to enable the resources you want to be available. For security, they're all disabled by default.
+Or you can enable it for all environments in `config/statamic/api.php`:
 
 ```php
-// config/statamic/api.php
+'enabled' => true,
+```
+
+You will also need to [enable the resources](#enable-resources) you want to be available. For security, they're all disabled by default.
 
+### Enable resources
+
+You can enable resources (ie. Collections, Taxonomies, etc.) in your `config/statamic/api.php` config:
+
+```php
 'resources' => [
   'collections' => true,
   'taxonomies' => true,
@@ -32,6 +35,23 @@ You will also need to enable the resources you want to be available. For securit
 ]
 ```
 
+### Enable specific sub-resources
+
+If you want more granular control over which sub-resources are enabled within a resource type (ie. enabling specific Collection queries only), you can use array syntax:
+
+```php
+'resources' => [
+    'collections' => [
+        'articles' => true,
+        'pages' => true,
+        // 'events' => false, // Sub-resources are disabled by default
+    ],
+    'taxonomies' => true,
+    // etc.
+]
+```
+
+
 ## Endpoints
 
 `
@@ -44,6 +64,7 @@ You may send requests to the following endpoints:
 - [Taxonomy Terms](#taxonomy-terms) / [Taxonomy Term](#taxonomy-term)
 - [Assets](#assets) / [Asset](#asset)
 - [Globals](#globals) / [Global](#global)
+- [Forms](#forms) / [Form](#form)
 - [Users](#users) / [User](#user)
 
 ### Customizing the API URL
@@ -61,14 +82,50 @@ You may customize the route in your API config file or with an environment varia
 
 ## Filtering
 
+### Enabling filters
+
+For security, [filtering](#filtering) is disabled by default. To enable, you'll need to opt in by defining a list of `allowed_filters` for each sub-resource in your `config/statamic/api.php` config:
+
+```php
+'resources' => [
+    'collections' => [
+        'articles' => [
+            'allowed_filters' => ['title', 'status'],
+        ],
+        'pages' => [
+            'allowed_filters' => ['title'],
+        ],
+        'events' => true, // Enable this collection without filters
+        'products' => true, // Enable this collection without filters
+    ],
+    'taxonomies' => [
+        'topics' => [
+            'allowed_filters' => ['slug'],
+        ],
+        'tags' => true, // Enable this taxonomy without filters
+    ],
+    // etc.
+],
+```
+
+For endpoints that don't have sub-resources (ie. users), you can define `allowed_filters` at the top level of that resource config:
+
+```php
+'resources' => [
+    'users' => [
+        'allowed_filters' => ['name', 'email'],
+    ],
+],
+```
+
+### Using filters
+
 You may filter results by using the `filter` query parameter.
 
 ``` url
 /endpoint?filter[{field}:{condition}]={value}
 ```
 
-### Conditions
-
 You may use the [conditions](/conditions) available to the collection tag. eg. `contains`, `is`, `isnt` (or `not`), etc. For example:
 
 ``` url
@@ -78,26 +135,56 @@ You may use the [conditions](/conditions) available to the collection tag. eg. `
 This would filter down the results to where the `title` value contains the string `"awesome"`, and the `featured`
 value is `true`. When you omit the condition, it defaults to `is`.
 
-### Taxonomies
+### Advanced filtering config
 
-You may filter by taxonomy.
+You can also allow filters on all enabled sub-resources using a `*` wildcard config. For example, here we'll enable only the `articles`, `pages`, and `products` collections, with `title` filtering enabled on each, in addition to `status` filtering on the `articles` collection specifically: 
 
-``` url
-/endpoint?filter[taxonomy:{handle}]={value}
+```php
+'resources' => [
+    'collections' => [
+        '*' => [
+            'allowed_filters' => ['title'], // Enabled for all collections
+        ],
+        'articles' => [
+            'allowed_filters' => ['status'], // Also enable on articles
+        ],
+        'pages' => true,
+        'products' => true,
+    ],
+],
 ```
 
-When filtering by multiple values, the values must be separated by commas.
+If you've enabled filters using the `*` wildcard config, you can disable filters on a specific sub-resource by setting `allowed_filters` to `false`:
 
-``` url
-/endpoint?filter[taxonomy:{handle}]={value},{value},{value}
+```php
+'resources' => [
+    'collections' => [
+        '*' => [
+            'allowed_filters' => ['title'], // Enabled for all collections
+        ],
+        'articles' => [
+            'allowed_filters' => false, // Disable filters on articles
+        ],
+        'pages' => true,
+        'products' => true,
+    ],
+],
 ```
 
-You can negate the filtering.
+Or you can enable endpoints and filters on all sub-resources at once by setting both `enabled` and `allowed_filters` within your `*` wildcard config:
 
-``` url
-/endpoint?filter[taxonomy:{handle}:not_in]={value},{value},{value}
+```php
+'resources' => [
+    'collections' => [
+        '*' => [
+            'enabled' => true, // All collection endpoints enabled
+            'allowed_filters' => ['title'], // With filters enabled for all
+        ],
+    ],
+],
 ```
 
+
 ## Sorting
 
 You may sort results by using the `sort` query parameter:
@@ -118,7 +205,12 @@ You may sort by multiple fields by comma separating them. The reverse flag can b
 /endpoint?sort=one,-two,three
 ```
 
-## Selecting Fields
+You can sort nested fields using the `->` operator, like this: 
+```url
+/endpoint?sort=nested->field
+```
+
+## Selecting fields
 
 You may specify which top level fields should be included in the response.
 
@@ -299,7 +391,7 @@ Gets terms in a taxonomy.
 If you are using [Multi-Site](/multi-site), you can select the site using a `site` [filter](#filtering) (ie. `&filter[site]=fr`).
 :::
 
-## Taxonomy Term
+## Taxonomy term
 
 `GET` `/api/taxonomies/{taxonomy}/terms/{slug}`
 
@@ -356,6 +448,58 @@ Gets a single global set's variables.
 }
 ```
 
+## Forms
+
+`GET` `/api/forms`
+
+Gets all forms.
+
+``` json
+{
+  "data": [
+    {
+      "handle": "contact",
+      "title": "Contact",
+      "fields": {
+        "name": {...},
+        "email": {...},
+        "inquiry": {...}
+      },
+      "api_url": "http://example.com/api/forms/contact",
+    },
+    {
+      "handle": "newsletter",
+      "title": "Subscribe to Newsletter",
+      "fields": {
+        "email": {...}
+      },
+      "api_url": "http://example.com/api/forms/newsletter",
+    }
+  ],
+}
+```
+
+## Form
+
+`GET` `/api/forms/{handle}`
+
+Gets a single form.
+
+``` json
+{
+  "data": {
+    "handle": "contact",
+    "title": "Contact",
+    "fields": {
+      "name": {...},
+      "email": {...},
+      "inquiry": {...}
+    },
+    "api_url": "http://example.com/api/forms/contact",
+  }
+}
+```
+
 ## Users
 
 `GET` `/api/users`
@@ -404,7 +548,8 @@ Get a container's asset data.
     {
       "id": "main::foo.jpg",
       "url": "/assets/foo.jpg",
-      "api_url": "http://example.com/api/assets/main/foo.jpg"
+      "api_url": "http://example.com/api/assets/main/foo.jpg",
+      "alt": "A picture of nothing."
     }
   ],
   "links": {...},
@@ -425,14 +570,15 @@ The `path` in the URL should be the relative path from the container's root.
   "data": {
     "id": "main::foo.jpg",
     "url": "/assets/foo.jpg",
-    "api_url": "http://example.com/api/assets/main/foo.jpg"
+    "api_url": "http://example.com/api/assets/main/foo.jpg",
+    "alt": "A picture of nothing."
   }
 }
 ```
 
-## Customizing Resources
+## Customizing resources
 
-By default the resources generally use the item's [Augmented](/augmentation) data.
+By default, the resources generally use the item's [Augmented](/augmentation) data.
 
 You are free to override the resource classes with your own, in turn letting you customize the responses.
 
@@ -483,7 +629,7 @@ API responses are cached by default. You may customize the cache expiry in `conf
 ],
 ```
 
-### Cache Invalidation
+### Cache invalidation
 
 Cached responses are automatically invalidated when content is changed. Depending on your API usage and blueprint schema, you may also wish to ignore specific events when invalidating.
 
@@ -497,7 +643,7 @@ Cached responses are automatically invalidated when content is changed. Dependin
 ],
 ```
 
-### Disabling Caching
+### Disabling caching
 
 If you wish to disable caching altogether, set `cache` to `false`.
 
@@ -505,7 +651,7 @@ If you wish to disable caching altogether, set `cache` to `false`.
 'cache' => false,
 ```
 
-### Custom Cache Driver
+### Custom cache driver
 
 If you need a more intricate caching solution, you may reference a custom cache driver class and pass extra config along if necessary.
 
@@ -541,11 +687,11 @@ class CustomCacher extends AbstractCacher
 }
 ```
 
-## Rate Limiting
+## Rate limiting
 
-The REST API is Rate Limited to **60 requests per minute** by default.
+The REST API is rate limited to **60 requests per minute** by default.
 
-**If you're running on Laravel 8+** you can change this configuration in your `RouteServiceProvider`. Learn more about [Laravel 8+ Rate Limiting](https://laravel.com/docs/8.x/rate-limiting).
+You can change this configuration in your `RouteServiceProvider`. Learn more about [Laravel 8+ rate limiting](https://laravel.com/docs/master/rate-limiting).
 
 ```php
 // app/Providers/RouteServiceProvider.php
@@ -557,25 +703,6 @@ protected function configureRateLimiting()
 }
 ```
 
-**If you're running on Laravel 7** you can change this configuration in your `HTTP/Kernel` middlweare config. Learn more about [Laravel 7 Rate Limiting](https://laravel.com/docs/7.x/routing#rate-limiting).
-
-```php
-//app/Http/Kernel.php
-protected $middlewareGroups = [
-    ...
-    'api' => [
-        'throttle:60,1',
-        \Illuminate\Routing\Middleware\SubstituteBindings::class,
-    ],
-];
-```
-
-
-
-
-
-
-
 ## Authentication
 
 **Coming soon.** There are no _native_ access tokens or other common authentication methods ready to use. Yet.
diff --git a/content/collections/docs/revisions.md b/content/collections/docs/revisions.md
index 914606191..8297435f9 100644
--- a/content/collections/docs/revisions.md
+++ b/content/collections/docs/revisions.md
@@ -1,6 +1,6 @@
 ---
 title: Revisions
-intro: Revisions adds an entire publishing workflow to your authoring process. You can create revisions, schedule updates to your content, review and rollback to previous revisions of your content, and more.
+intro: Revisions adds an entire publishing workflow to your authoring process. You can create revisions, review and rollback to previous revisions of your content, and more.
 template: page
 blueprint: page
 id: 6177b316-0eed-4dec-83d1-e5a48a8e00b6
@@ -36,17 +36,7 @@ Revisions are tucked away in the `storage/statamic/revisions` directory by defau
 'path' => base_path('content/revisions'),
 ```
 
-## Revision States
-
-At any given point your content can be in one or more publish states. You can control the default beginning state with the `default_status` collection setting.
-
-``` yaml
-# New entries default to published
-default_status: published
-
-# New entries will default to draft
-default_status: draft
-```
+## Revision states
 
 ### Unpublished
 
diff --git a/content/collections/docs/routing.md b/content/collections/docs/routing.md
index da8e7072b..d183bc037 100644
--- a/content/collections/docs/routing.md
+++ b/content/collections/docs/routing.md
@@ -1,31 +1,49 @@
 ---
+id: 8d9cfb16-36bf-45d0-babb-e501a35ddae6
+blueprint: page
 title: Routing
 template: page
-intro: Statamic has several ways it routes requests and defines URLs and patterns, all of which are listed and described in this section.
-blueprint: page
-id: 8d9cfb16-36bf-45d0-babb-e501a35ddae6
+intro: 'Statamic has several ways it routes requests and defines URLs and patterns, all of which are listed and described in this section.'
 ---
 ## Overview
 
 All site requests are handled by Statamic unless you [create your own Laravel routes](#laravel-routes). Here are the ways Statamic defines URLs.
 
-## Content Routes
+## Content routes
 [Collection entries](/collections#routing) and [taxonomy terms](/taxonomies#routing) can have their own URLs as defined by their own flexible route patterns in their respective configuration areas.
 
-## Statamic Routes
+## Statamic routes
 
-Statamic provides a `Route::statamic()` method to do all the CMS "magic" for you, like injecting data (globals and system variables, for example), fetching the view. layout, and so on.
+Statamic provides a `Route::statamic()` method to do all the CMS "magic" for you, like injecting data (globals and system variables, for example), applying middleware, fetching the view, layout, and so on.
 
 ``` php
 Route::statamic('uri', 'view', ['foo' => 'bar']);
 ```
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ myglobal }} // globals are available
 {{ foo }} // bar
 ```
+::tab blade
+```blade
+{{ $myglobal }} // globals are available
+{{ $foo }} // bar
+```
+::
 
 The first argument is the URI, the second is the name of the [template](/views#templates), and the third is an optional array of additional data.
 
+When the template is the same as the URI, you can provide the one argument and Statamic will fall back to use the URI as the template:
+
+```php
+Route::statamic('my-page'); // Implies 'my-page'
+Route::statamic('/my-page'); // Implies 'my-page'
+Route::statamic('/foo/bar'); // Implies 'foo.bar'
+```
+
 ### Parameters
 
 You may use wildcard parameters in your routes. This allows you to match multiple URLs with the same route.
@@ -52,7 +70,7 @@ When using `Route::statamic()`, Statamic will automatically inject the selected
 Route::statamic('uri', 'view', ['layout' => 'custom']);
 ```
 
-### Content Type Headers
+### Content type headers
 
 You can control the content type headers by setting `'content_type' => '{content_type}'`. To make your life easier we also support a few shorthand syntaxes for the most common content types. Nobody wants to memorize this stuff, ourselves included.
 
@@ -62,6 +80,46 @@ You can control the content type headers by setting `'content_type' => '{content
 | `xml` | `text/xml` |
 | `atom` | `application/atom+xml` (ensures `utf8` charset) |
 
+### Dynamic closure based routes
+
+If needed, you can define more dynamic view or data logic by passing a closure.
+
+For example, you might want to dynamically return a view based on dynamic segments in your URI. You can do this by passing a closure into the second argument:
+
+```php
+Route::statamic('/{component}/{mode}', function ($component, $mode) {
+    return view($component, ['mode' => $mode]);
+});
+```
+
+By returning `view()` from a closure, Statamic will still apply [all the "magic"](#statamic-routes) like middleware, layout, globals, system variables, etc.
+
+_Note: If you don't return `view()`, middleware will still get applied, but layout, globals, system variables, etc. will not be. For example, returning an array would output JSON, just like it would with `Route::get()` in Laravel, but with Statamic's middlware stack applied._
+
+#### Dynamic route data
+
+Or, maybe you just want to dynamically compose data that's passed into a static view. You can do this by passing a closure into the third data argument:
+
+```php
+Route::statamic('stats/{category}', 'statistics.show', function ($category) {
+    return ['stats' => Stats::gatherDataExpensively($category)];
+});
+```
+
+_Note: Passing closures into both the second and the third parameter are not supported. If you need to dynamically handle both your view and your data, pass a closure into the second argmuent [as detailed above](#dynamic-closure-based-routes)._
+
+#### Dependency injection
+
+You may also type-hint dependencies in your closure based routes, just as you can [with Laravel](https://laravel.com/docs/routing#dependency-injection):
+
+```php
+use Illuminate\Http\Request;
+
+Route::statamic('stats', 'statistics.show', function (Request $request) {
+    return ['stats' => Stats::gatherDataExpensively($request->category)];
+});
+```
+
 ## Redirects
 
 Creating redirects can be done in your `routes/web.php` using native Laravel Route methods:
@@ -74,11 +132,21 @@ Route::permanentRedirect('/here', '/there');
 
 [More details on the Laravel docs](https://laravel.com/docs/routing#redirect-routes).
 
-## Laravel Routes
+## Laravel routes
 
 You can also configure regular Laravel routes much like you would in a regular Laravel application in `routes/web.php`. You can use closures, point to a [controller](/controllers), and so on. This is [standard Laravel stuff](https://laravel.com/docs/routing) and the standard Laravel docs apply.
 
-## Error Pages
+:::tip
+If you're using [Static Caching](/static-caching), make sure to add Statamic's `Cache` middleware to any Laravel routes so they get static-ly cached.
+
+```php
+Route::get('/thingy', function () {
+	// ...
+})->middleware(\Statamic\StaticCaching\Middleware\Cache::class);
+```
+:::
+
+## Error pages
 
 Whenever an error is encountered, a view will be rendered based on the status code. It will look for the view in `resources/views/errors/{status_code}.antlers.html`.
 
@@ -90,9 +158,9 @@ Statamic will automatically render `404` pages for any unhandled routes.
 For 5xx errors (e.g. 500, 503, etc) only the template will be rendered. It will not be injected into a layout.
 :::
 
-## Disable Statamic Routes
+## Disable Statamic routes
 
-If you want to defer **everything** to explicit Laravel routes (perhaps you're using Statamic as a headless CMS or API), you can disable this behavior by setting in `config/statamic/routes.php`.
+If you want to defer **everything** to explicit Laravel routes (perhaps you're using Statamic as a headless CMS or API), you can disable this behavior by setting it in `config/statamic/routes.php`.
 
 ``` php
 // Lemme do it my way
diff --git a/content/collections/docs/scheduling.md b/content/collections/docs/scheduling.md
new file mode 100644
index 000000000..09f72321b
--- /dev/null
+++ b/content/collections/docs/scheduling.md
@@ -0,0 +1,60 @@
+---
+id: 0df63f01-4b97-4c15-89a9-015c02ea3748
+blueprint: page
+title: Task Scheduling
+intro: "Manage scheduled tasks using Laravel's task scheduler."
+template: page
+related_entries:
+  - 7202c698-942a-4dc0-b006-b982784efb03
+  - ffa24da8-3fee-4fc9-a81b-fcae8917bd74
+---
+Statamic leverages task scheduling via Laravel's Task Scheduler.
+
+In a nutshell, you can create a single cron job which will allow things to happen on a schedule, without any visitors needing to be on the site.
+
+[Learn more about scheduling tasks in the Laravel docs](https://laravel.com/docs/12.x/scheduling)
+
+## Running the scheduler
+
+### In production
+
+In production, you will need to set up a single once-per-minute cron entry that runs the `schedule:run` Artisan command.
+
+Using a service like Laravel Forge makes this simple.
+
+```sh
+* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
+```
+
+### In development
+
+Typically, you would not add a scheduler cron entry to your local development machine. Instead, you may use the `schedule:work` Artisan command. This command will run in the foreground and invoke the scheduler every minute until you terminate the command:
+
+```sh
+php artisan schedule:work
+```   
+
+[Learn more about running the scheduler](https://laravel.com/docs/12.x/scheduling#running-the-scheduler)
+
+## Included tasks
+
+The following tasks will be executed whenever the task scheduler is running, without you needing to enable anything.
+
+### EntryScheduleReached
+
+Statamic will dispatch a `Statamic\Events\EntryScheduleReached` event whenever a scheduled entry reaches its target date. This event is used in multiple places such as updating search indexes and invalidating caches.
+
+The event will be dispatched on the minute _after_ the scheduled time.
+
+
+## Defining schedules
+
+One way to add your own scheduled tasks is by adding items to your `routes/console.php` file.
+
+```php
+Schedule::command('my-command')->daily();
+
+Schedule::job(new Heartbeat)->everyFiveMinutes();
+```
+
+[Learn more about defining schedules](https://laravel.com/docs/12.x/scheduling#defining-schedules)
diff --git a/content/collections/docs/search.md b/content/collections/docs/search.md
index aafe7aa1b..da589d946 100644
--- a/content/collections/docs/search.md
+++ b/content/collections/docs/search.md
@@ -19,7 +19,7 @@ There are four components (coincidentally, the same number of Ninja Turtles) who
 2. Results
 3. Indexes
 4. Drivers
-{.ninja.font-bold}
+{.c-list-turtles}
 
 ## Forms
 
@@ -41,7 +41,10 @@ Results are powered by the [Search Results](/tags/search) tag. The tag will look
 
 Inside the tag you have access to all the content and variables from each result.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ search:results index="default" }}
     {{ if no_results }}
         <h2>No results found for {{ get:q }}.</h2>
@@ -53,6 +56,23 @@ Inside the tag you have access to all the content and variables from each result
     {{ /if }}
 {{ /search:results }}
 ```
+::tab blade
+```blade
+<statamic:search:results
+  index="default"
+  as="results"
+>
+  @forelse ($results as $result)
+    <a href="{{ $result->url }}">
+        <h2>{{ $result->title }}</h2>
+        <p>{{ Statamic::modify($result->description)->truncate(180) }}</p>
+    </a>
+  @empty
+    <h2>No results found for {{ get('q') }}.</h2>
+  @endforelse
+</statamic:search:results>
+```
+::
 
 The tag has a lot more fine-tuned control available, like renaming the query parameter, filtering on fields and collections, and so on. You can read more about it in the [search results tag](/tags/search) docs.
 
@@ -80,9 +100,21 @@ Your site's default index includes _only_ the title from _all_ collections. The
 
 The index you wish you to search can be specified as a parameter on your [search results](#results) tag.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ search:results index="docs" }} ... {{ /search:results }}
 ```
+::tab blade
+```blade
+<statamic:search:results
+  index="docs"
+>
+  ...
+</statamic:search:results>
+```
+::
 
 ### Searchables
 
@@ -95,13 +127,14 @@ The searchables value determines what items are contained in a given index. By p
 #### Possible options include:
 
 - `all`
+- `collection:*`
 - `collection:{collection handle}`
 - `taxonomy:{taxonomy handle}`
 - `assets:{container handle}`
 - `users`
 - Custom ones may be added by addons. [Read about creating custom searchables](/extending/search)
 
-### Filtering Searchables
+### Filtering searchables
 
 You may choose to allow only a subset of searchable items.
 
@@ -110,11 +143,11 @@ For example, you may want to have a toggle field that controls whether an entry
 ```php
 'searchables' => ['collection:blog'],
 'filter' => function ($item) {
-    return $item->status() === 'published' && $item->exclude_from_search;
+    return $item->status() === 'published' && ! $item->exclude_from_search;
 }
 ```
 
-Now, only published entries that dont have the `exclude_from_search` toggle field enabled will be indexed.
+Now, only published entries that don't have the `exclude_from_search` toggle field enabled will be indexed.
 
 
 :::tip Heads up
@@ -134,16 +167,16 @@ class BlogFilter
 {
     public function handle($item)
     {
-        return $item->status() === 'published' && $item->exclude_from_search;
+        return $item->status() === 'published' && ! $item->exclude_from_search;
     }
 }
 ```
 
-### Records & Fields
+### Records & fields
 
 The best practice for creating search indexes is to simplify your record structure as much as possible. Each record should contain only enough information to be discoverable on its own, and no more. You can customize this record by deciding which _fields_ are included in the index.
 
-### Transforming Fields
+### Transforming fields
 
 By default, the data in the entry/term/etc that corresponds to the `fields` you've selected will be stored in the index. However, you're able to tailor the values exactly how you want using `transformers`.
 
@@ -160,11 +193,13 @@ Each transformer is a closure that would correspond to a field in your index's `
 
     // Return an array of values to be stored.
     // These will all be separate searchable fields in the index.
-    'address' => function ($address) {
+    // $value is the current value
+    // $searchable is the object that $value has been plucked from
+    'address' => function ($value, $searchable) {
         return [
-            '_geoloc' => $address['geolocation'],
-            'location' => $address['location'],
-            'region' => $address['region'],
+            '_geoloc' => $value['geolocation'],
+            'location' => $value['location'],
+            'region' => $value['region'],
         ];
     }
 ]
@@ -188,26 +223,29 @@ class MyTransformer
     {
         // $value is the current value
         // $field is the index from the transformers array
-        // $searchable is the class that $value has been plucked from
+        // $searchable is the object that $value has been plucked from
 
         return ucfirst($value);
     }
 }
 ```
 
-### Updating Indexes
+### Updating indexes
 
 Whenever you save an item in the Control Panel it will automatically update any appropriate indexes. If you edit content by hand, you can tell Statamic to scan for new and updated records via the command line.
 
 ``` shell
-# Update all indexes
+# Select which indexes to update
 php please search:update
 
 # Update a specific index
 php please search:update name
+
+# Update all indexes
+php please search:update --all
 ```
 
-### Connecting Indexes
+### Connecting indexes
 
 When a search is performed in the control panel (in collections, taxonomies, or asset containers, for example), Statamic will search the configured index for that content type.
 
@@ -241,13 +279,14 @@ You may choose to use separate indexes to store localized content. For example,
 
 Take these site and search configs for example:
 
-```php
-// config/statamic/sites.php
-'sites' => [
-    'en' => ['url' => '/'],
-    'fr' => ['url' => '/fr/'],
-    'de' => ['url' => '/de/'],
-]
+```yaml
+# resources/sites.yaml
+en:
+  url: /
+fr:
+  url: /fr/
+de:
+  url: /de/
 ```
 
 ```php
@@ -279,6 +318,7 @@ This will create dynamic indexes named after the specified sites:
 
 If you have a localized index and include searchables that do not support localization (like assets or users), they will appear in each localized index.
 
+
 ## Drivers
 
 Statamic takes a "driver" based approach to search engines. Drivers are interchangeable so you can gain new features or integrate with 3rd party services without ever having to change your data or frontend.
@@ -289,7 +329,50 @@ You can build your own custom search drivers or look at the [Addon Marketplace](
 
 ### Local {#local-driver}
 
-The `local` driver uses JSON to store key/value pairs, mapping fields to the content IDs they belong to. It lacks advanced features like weighting and relevance matching, but hey, It Just Works™. It's a great way to get a search started quickly.
+The `local` driver (aka "Comb") uses JSON to store key/value pairs, mapping fields to the content IDs they belong to. It lacks advanced features you would see in a service like Algolia, but hey, It Just Works™. It's a great way to get a search started quickly.
+
+#### Settings
+
+You may provide local driver specific settings in a `settings` array.
+
+```php
+'driver' => 'local',
+'searchables' => 'all',
+// [tl! **:start]
+'min_characters' => 3,
+'use_stemming' => true,
+// [tl! **:end]
+```
+
+- `match_weights`: An array of weights for each field to use when calculating relevance scores. Defaults to:
+    ```php
+    [
+        'partial_word' => 1,
+        'partial_first_word' => 2,
+        'partial_word_start' => 1,
+        'partial_first_word_start' => 2,
+        'whole_word' => 5,
+        'whole_first_word' => 5,
+        'partial_whole' => 2,
+        'partial_whole_start' => 2,
+        'whole' => 10,
+    ]
+    ```
+- `min_characters`: The minimum number of characters required in a search query. Defaults to `1`.
+- `min_word_characters`: The minimum number of characters required in a word in a search query. Defaults to `2`.
+- `score_threshold`: The minimum score required for a result to be included in the search results. Defaults to `1`.
+- `property_weights`: An array of weights for each property to use when calculating relevance scores. Defaults to `[]`.
+- `query_mode`: The query mode to use when searching (e.g. "whole", "words", "boolean"). Defaults to `boolean`.
+- `use_stemming`: Whether to use stemming when searching (e.g. "jumping" matches "jump"). Defaults to `false`.
+- `use_alternates`: Whether to use alternate spellings when searching (e.g. "color" matches "colour"). Defaults to `false`.
+- `include_full_query`: Whether to include the full search query in the search results. Defaults to `true`.
+- `stop_words`: An array of stop words to exclude from the search query. Defaults to `[]`.
+- `limit`: Whether to limit the number of results returned. Defaults to `null`.
+- `enable_too_many_results`: Whether to enable a warning when too many results are returned. Defaults to `false`.
+- `sort_by_score`: Whether to sort the search results by relevance score. Defaults to `true`.
+- `group_by_category`: Whether to group the search results by category. Defaults to `false`.
+- `exclude_properties`: An array of properties to exclude from the search results. Defaults to `[]`.
+- `include_properties`: An array of properties to include in the search results. Defaults to `[]`.
 
 ### Algolia {#algolia-driver}
 
@@ -310,19 +393,39 @@ ALGOLIA_SECRET=your-algolia-admin-key
 ```
 
 ``` shell
-composer require algolia/algoliasearch-client-php
+composer require algolia/algoliasearch-client-php:^3.4
 ```
 
 Statamic will automatically create and sync your indexes as you create and modify entries once you kick off the initial index creation by running the command `php please search:update`.
 
-### Templating with Algolia
+#### Settings
+You may provide Algolia-specific [settings](https://www.algolia.com/doc/api-reference/settings-api-parameters/) in a `settings` array.
+
+```php
+'driver' => 'algolia',
+'searchables' => 'all',
+'settings' => [ // [tl! **:start]
+    'attributesForFaceting' => [
+        'filterOnly(post_tags)',
+        'filterOnly(post_categories)',
+    ],
+    'customRanking' => [
+        'asc(attribute1)',
+        'desc(attribute2)',
+        'typo',
+        'words'
+    ]
+] // [tl! **:end]
+```
+
+#### Templating with Algolia
 
 We recommend using the [Javascript implementation](https://www.algolia.com/doc/api-client/getting-started/install/javascript/?language=javascript) to communicate directly with them for the frontend of your site. This bypasses Statamic entirely in the request lifecycle and is incredibly fast.
 
 
 ## Extras
 
-### Config Cascade
+### Config cascade
 
 You can add values into the defaults array, which will cascade down to all the indexes, regardless of which driver they use.
 
diff --git a/content/collections/docs/account-api-sites.md b/content/collections/docs/sites-api.md
similarity index 81%
rename from content/collections/docs/account-api-sites.md
rename to content/collections/docs/sites-api.md
index 0f4d6c103..d618e5895 100644
--- a/content/collections/docs/account-api-sites.md
+++ b/content/collections/docs/sites-api.md
@@ -1,9 +1,9 @@
 ---
-id: 8ecc72e1-f1b7-4708-bf61-8fb98073da64
+id: 124cb9e8-b5e0-4af6-8271-98ca6b0131b4
 blueprint: page
-title: 'Account API - Sites'
+title: 'Sites API'
+intro: 'We have an API that can be used to manage your Statamic Sites in your [statamic.com](https://statamic.com) account. This is most useful with our Platform Plan, which you can [contact us](https://statamic.com/support) directly about for more information.'
 ---
-The Sites API is used to connect to your [statamic.com](https://statamic.com) account and programmatically create sites. This is most useful for our Platform subscription plan (to learn more about this, [contact us](https://statamic.com/support)).
 
 ## Authentication
 
@@ -26,7 +26,7 @@ Http::acceptJson()
   ->post('https://statamic.com/api/v1/sites', $payload);
 ```
 
-_*For more info, read more about [headers](https://laravel.com/docs/8.x/http-client#headers) and [bearer tokens](https://laravel.com/docs/8.x/http-client#bearer-tokens) in Laravel._
+_*For more info, read more about [headers](https://laravel.com/docs/12.x/http-client#headers) and [bearer tokens](https://laravel.com/docs/12.x/http-client#bearer-tokens) in Laravel.*_
 
 ## Endpoints
 
diff --git a/content/collections/docs/stache.md b/content/collections/docs/stache.md
index 4dbdd4247..8914f6b76 100644
--- a/content/collections/docs/stache.md
+++ b/content/collections/docs/stache.md
@@ -15,25 +15,27 @@ id: 499d808b-18be-42e9-acd0-91bcdff73193
     <figcaption>Behold, the stache of all staches!</figcaption>
 </figure>
 
-## The Stache is Watching Your Files {#watcher}
+## The Stache is watching your files {#watcher}
 
 Each page request from the frontend or Control Panel triggers a scan of the `last_modified` timestamps on all content and configuration files in your Statamic application. When Statamic sees a change, the Stache performs selective updates to any corresponding indexes.
 
 :::best-practice
-This is great for local development, but on a production environment **you should disable the file watcher.** If you're editing content through the control panel, or only ever pushing content through deployments, you are adding extra overhead to every request for no reason.
+This is great for local development, but on a production environment **you should make sure the watcher is disabled.** If you're editing content through the control panel, or only ever pushing content through deployments, you are adding extra overhead to every request for no reason.
 
-Disable this feature in your `.env` file or the `config/statamic/stache.php` config.
+By setting it to `auto`, it will be enabled when running on the `local` environment (`APP_ENV=local`) and disabled everywhere else. This is the default behavior for new sites.
 
 ``` env
-STATAMIC_STACHE_WATCHER=false
+STATAMIC_STACHE_WATCHER=auto
 ```
 
 ``` php
 return [
-   'watcher' => env('STATAMIC_STACHE_WATCHER', true), // [tl! highlight]
+   'watcher' => env('STATAMIC_STACHE_WATCHER', 'auto'), // [tl! highlight]
    ...
 ];
 ```
+
+Of course, you may set it to `false` to explicitly disable it everywhere.
 :::
 
 ## Clearing the Stache {#clearing}
@@ -160,9 +162,9 @@ return [
 
 Any additional indexes you have will be updated [when appropriate](#when-does-indexing-happen).
 
-## Cache Driver
+## Cache driver
 
-Since the Stache places its data in [Laravel's cache](https://laravel.com/docs/cache#configuration), there's no special configuration necessary to change it.
+By default the Stache places its data in the default [Laravel cache store](https://laravel.com/docs/cache#configuration), there's no special configuration necessary to change it.
 
 Whatever your default caching driver is for the rest of your app is where your Stache will be.
 
@@ -172,6 +174,15 @@ By default it's in the filesystem, but of course you can feel free to use Redis,
 CACHE_DRIVER=redis
 ```
 
+If you want to change which cache store is used by the Stache, you can change the `statamic.stache.cache_store` configuration key:
+
+```php
+// config/statamic/stache.php
+return [
+    'cache_store' => 'stache-cache',
+]
+```
+
 ## Locks
 
 Statamic will create indexes and build the cache on demand where appropriate. Depending on the amount of content you have, this
@@ -189,7 +200,7 @@ return [
 ]
 ```
 
-## Diving Even Deeper
+## Diving even deeper
 
 You can dive even deeper and learn how to build your own Stache Indexes and fine-tune performance with Michael Aerni's 2021 Statameet talk.
 
diff --git a/content/collections/docs/starter-kits.md b/content/collections/docs/starter-kits.md
index dd2351052..c6a4ba65a 100644
--- a/content/collections/docs/starter-kits.md
+++ b/content/collections/docs/starter-kits.md
@@ -9,25 +9,26 @@ template: page
 blueprint: page
 nav_title: Overview
 ---
-## Statamic Starter Kits vs WordPress Themes
+## Statamic starter kits vs WordPress themes
 
-While they may seem similar on the surface, Statamic Starter Kits and WordPress Themes take a very different approach to the end-goal of speeding up the web design and development process. Allow us to explain the difference.
+While they may seem similar on the surface, Statamic starter kits and WordPress themes take a very different approach to the end-goal of speeding up the web design and development process. Allow us to explain the difference.
 
 Many WordPress themes are interchangeable because WordPress uses the same content model for all sites. This is both a strength and a weakness of the platform. The strength is the interchangeability, but the weakness is that not every business or website _should_ be the same. Sites often outgrow their themes with feature and content needs the theme doesn't support. When this happens, site owners need to either start hacking and slashing away at someone else's code, or installing plugins and hoping for the best.
 
 Statamic Starter Kits are designed to be a **starting place**. Good, clean code, ready to be changed, built-upon, and adapted to your needs. Each Starter Kit can have a unique content model, design, and set of features that fits its creator's purpose.
 
 We envision Starter Kits as a great way to "skip ahead" in the usual development cycle of a website, and less of a "no-code" approach to web development.
-## Where to Find Starter Kits
 
-The best way to find Starter Kits is by exploring the [Statamic Marketplace](https://statamic.com/marketplace).
+## Where to find starter kits
+
+The best way to find starter kits is by exploring the [Statamic Marketplace](https://statamic.com/marketplace).
 
 <figure>
-    <img src="https://statamic.com/images/storage/products/HRU3TVeiAnVlzRecp8G6pUiYGagWTvWzoh7ZWC27.jpeg" alt="Podcaster – a Statatmic Starter Kit">
+    <img src="https://statamic.com/images/storage/products/HRU3TVeiAnVlzRecp8G6pUiYGagWTvWzoh7ZWC27.jpeg" alt="Podcaster – a Statamic Starter Kit">
     <figcaption>This is <a class="font-bold text-blue-dark no-underline" href="https://statamic.com/starter-kits/statamic/podcaster">Podcaster</a> — a Starter Kit for podcasters.</figcaption>
 </figure>
 
-## Recommended Reading
+## Recommended reading
 
-- [How to Install a Starter Kit](/starter-kits/installing-a-starter-kit)
-- [How to Create Your Own Starter Kit](/starter-kits/creating-a-starter-kit)
+- [How to install a starter kit](/starter-kits/installing-a-starter-kit)
+- [How to create your own starter kit](/starter-kits/creating-a-starter-kit)
diff --git a/content/collections/docs/static-caching.md b/content/collections/docs/static-caching.md
index 5ebe6ee65..2d298916e 100644
--- a/content/collections/docs/static-caching.md
+++ b/content/collections/docs/static-caching.md
@@ -6,7 +6,7 @@ intro: |
     Nothing loads faster than static pages. Instead of rendering pages dynamically on demand, Statamic can cache static pages and pass routing to Apache or Nginx with reverse proxying.
 id: ffa24da8-3fee-4fc9-a81b-fcae8917bd74
 ---
-## Important Preface
+## Important preface
 
 Certain features — such as forms with server-side validation, page protection, or content randomization — may not work with static page caching. (You may want to check out the [nocache tag](/tags/nocache) though.) As long as you understand that, you can leverage static caching for maximum performance.
 
@@ -16,7 +16,7 @@ Whatever is on the page the first time it's visited is what will be cached for a
 You can **alternatively** use the [static site generator](https://github.com/statamic/ssg) to pre-generate and deploy **fully static HTML sites**.
 :::
 
-## Caching Strategies
+## Caching strategies
 
 Each caching strategy can be configured independently. Inside `config/statamic/static_caching.php` you will find two pre-configured strategies - one for each supported driver.
 
@@ -37,7 +37,7 @@ return [
 
 Set `strategy` to the name of the strategy you wish to use, or `null` to disable static caching completely.
 
-## Application Driver
+## Application driver
 
 The application driver will store your cached page content within Laravel's cache. We refer to this as **half measure**.
 
@@ -59,7 +59,7 @@ return [
 You may use the [nocache tag](/tags/nocache) to keep parts of your pages dynamic.
 :::
 
-## File Driver
+## File driver
 
 The file driver will generate completely static `.html` pages ready for your web server to serve directly. This means that the HTML files will be loaded before it even reaches PHP.
 
@@ -82,32 +82,130 @@ return [
 When using full-measure caching, the [nocache tag](/tags/nocache) will rely on JavaScript.
 :::
 
-## Server Rewrite Rules
+
+### Permissions
+
+Using the file driver, you can configure the permissions for the directories and files that are getting created using the `static_caching.strategies.full` config option.
+
+```php
+'strategies' => [
+    'full' => [
+        'driver' => 'file',
+        'path' => public_path('static'),
+        'permissions' => [ // [tl! focus]
+            'directory' => 0755, // [tl! focus]
+            'file' => 0644, // [tl! focus]
+        ], // [tl! focus]
+    ],
+]
+```
+
+## Server rewrite rules
 
 You will need to configure its rewrite rules when using full measure caching. Here are the rules for each type of server.
 
+:::tip
+If you're using Laravel Herd or Laravel Valet, you don't need to worry about configuring rewrite rules locally. They will automatically handle the rewrite rules for you.
+:::
+
 ### Apache
 
 On Apache servers, you can define rewrite rules inside an `.htaccess` file:
 
 ``` htaccess
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{QUERY_STRING} !live-preview
+RewriteRule ^ index.php [L]
+
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{QUERY_STRING} live-preview
+RewriteRule ^ index.php [L]
+
 RewriteCond %{DOCUMENT_ROOT}/static/%{REQUEST_URI}_%{QUERY_STRING}\.html -s
 RewriteCond %{REQUEST_METHOD} GET
 RewriteRule .* static/%{REQUEST_URI}_%{QUERY_STRING}\.html [L,T=text/html]
 ```
 
+:::tip
+When you have the `ignore_query_strings` option enabled, replace the last chunk of the `.htaccess` snippet with this:
+
+``` htaccess
+RewriteCond %{DOCUMENT_ROOT}/static%{REQUEST_URI}\.html -f
+RewriteRule ^ static%{REQUEST_URI}\.html [L]
+
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^ index.php [L]
+```
+:::
+
 ### Nginx
 
-On Nginx servers, you will need to edit your `.conf` files. They are not located within your project, and may be in a slighly different place depending on your server setup.
+On Nginx servers, you will need to edit your `.conf` files. They are not located within your project, and may be in a slightly different place depending on your server setup.
 
 Some applications like [Laravel Forge](https://forge.laravel.com) may let you edit your `nginx.conf` from within the UI.
 
 ``` nginx
+set $try_location @static;
+
+if ($request_method != GET) {
+    set $try_location @not_static;
+}
+
+if ($args ~* "live-preview=(.*)") {
+    set $try_location @not_static;
+}
+
 location / {
-  try_files /static${uri}_${args}.html $uri /index.php?$args;
+    try_files $uri $try_location;
+}
+
+location @static {
+    try_files /static${uri}_$args.html $uri $uri/ /index.php?$args;
+}
+
+location @not_static {
+    try_files $uri /index.php?$args;
 }
 ```
 
+:::tip
+When you have the `ignore_query_strings` option enabled, you should update the `try_files` line inside the `@static` block:
+
+``` nginx
+location @static {
+    try_files /static${uri}_$args.html $uri $uri/ /index.php?$args; # [tl! remove]
+    try_files /static${uri}_.html $uri $uri/ /index.php?$args; # [tl! add]
+}
+```
+:::
+
+
+:::tip
+If your site needs to support URLs with a trailing slash, make sure to update the NGINX config:
+
+``` nginx
+location / {
+    try_files $uri $try_location; # [tl! remove]
+    try_files $uri $uri/ $try_location; # [tl! add]
+}
+
+location @static {
+    try_files /static${uri}_$args.html $uri $uri/ /index.php?$args; # [tl! remove]
+    rewrite ^/(.*)/$ /$1 last; # [tl! add]
+    try_files /static${uri}_$args.html /static${uri}/_$args.html $uri $uri/ /index.php?$args; # [tl! add]
+}
+
+location @not_static {
+    try_files $uri /index.php?$args; # [tl! remove]
+    try_files $uri $uri/ /index.php?$args; # [tl! add]
+}
+```
+:::
+
+
 ### IIS
 
 On Windows IIS servers, your rewrite rules can be placed in a `web.config` file.
@@ -119,17 +217,170 @@ On Windows IIS servers, your rewrite rules can be placed in a `web.config` file.
 </rule>
 ```
 
+## Warming the static cache
+
+Before users visit your website, you may wish to warm the static cache to make first time loads much faster. To do this, run:
+
+```
+php please static:warm
+```
+
+The `static:warm` command supports various arguments:
+
+* **`--queue`**
+    Indicates that URIs should be warmed on the queue (in the background).
+* **`--insecure`**
+    Allows the command to skip SSL verification. This can come in handy when running the site behind a reverse proxy or when using self-signed certificates, for example.
+* **`--user` and `--password`**
+    Allows you to specify credentials to be used when your site is secured with [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#basic_authentication_scheme). Otherwise, you might end up with a `401 Unauthorized` error running the command.
+* **`--uncached`**
+    Ensure that only *uncached* pages are warmed. Perfect for when you just want to 'fill in the gaps' in your cache after some URLs were invalidated, without visiting every single URL in your website. This avoids unnecessary server load.
+* **`--include` and `--exclude`**
+    Accepts a comma-separated list of URLs you'd like to be included/excluded in the warming process.
+    Example: `--include='/about,/contact,/blog/*'`
+* **`--max-depth`**
+    Allows you to specify the max depth of pages that should be warmed.
+    For example with `--max-depth=1` it will visit pages like `/about` and `/products` but not `/products/cool-new-shoes-1` or `/any/other/path/that/is/too/deep`.
+* **`--max-requests`**
+    Limits the number of requests made by the command. Likely makes the most sense to be used alongside the `--uncached` option.
+* **`--header`**
+    Allows you to specify custom HTTP headers to be sent with each request. Can be used multiple times to set multiple headers. Useful for APIs, protected routes, or any scenario where custom headers are required. 
+
+    For example: `--header="Authorization: Bearer your_token" --header="X-Ignore-Cache: true"`
+
+    You can find [practical examples](#custom-headers) of this parameter below.
+
+Depending on your site's setup, it might be a good idea to add this command to your deployment script.
+
+### Concurrency
+
+You may configure the amount of concurrent requests when warming the static cache in your strategy.
+
+By default the pool will use `25`, but feel free to adjust it up or down based on your server's resources.
+
+
+```php
+    'strategies' => [
+        'full' => [
+            'driver' => 'file',
+            'path' => public_path('static'),
+            'lock_hold_length' => 0,
+            'warm_concurrency' => 10, // [tl! highlight]
+        ],
+    ],
+```
+
+:::tip
+Lower the `warm_concurrency` to reduce the overhead and slow the process down, raise it to warm faster by using more CPU.
+:::
+
+### Queuing
+
+When you're using a queue driver other than `sync`, Statamic will push the warming out to the queue.
+
+If needed, you can explicitly tell Statamic which queue and queue connection should be used when warming the static cache:
+
+```php
+// config/statamic/static_caching.php
+
+'warm_queue' => env('STATAMIC_STATIC_WARM_QUEUE'),
+
+'warm_queue_connection' => env('STATAMIC_STATIC_WARM_QUEUE_CONNECTION'),
+```
+
+```
+STATAMIC_STATIC_WARM_QUEUE=warming
+STATAMIC_STATIC_WARM_QUEUE_CONNECTION=database
+```
+
+### Warming additional URLs
+
+Statamic will automatically warm pages for entries, taxonomy terms and any basic `Route::statamic()` routes. If you wish to warm additional URLs as part of the `static:warm` command, you may add a hook into your `AppServiceProvider`'s `boot` method:
+
+```php
+use Statamic\Console\Commands\StaticWarm;
+
+class AppServiceProvider
+{
+    public function boot()
+    {
+        StaticWarm::hook('additional', function ($urls, $next) {
+            return $next($urls->merge([
+                '/custom-1',
+                '/custom-2',
+                'https://different-domain.com/custom-3',
+            ]));
+        });
+    }
+}
+```
+
+When you're adding a lot of additional URLs, you may want to use a dedicated class instead:
+
+```php
+use App\StaticWarmExtras;
+use Statamic\Console\Commands\StaticWarm;
+
+class AppServiceProvider
+{
+    public function boot()
+    {
+        StaticWarm::hook('additional', function ($urls, $next) {
+            return $next($urls->merge(StaticWarmExtras::handle()));
+        });
+    }
+}
+```
+
+### Custom headers
+
+The `--headers` option can be used in advanced scenarios to control how the static cache is warmed. Here are some practical examples:
+
+#### Bypassing cache for refreshes with Nginx
+
+If you have custom Nginx rules, you can check for a specific header (e.g., `X-Cache-Refresh: 1`) and bypass the `try_files` static cache, forcing a fresh request to the backend. For example:
+
+```nginx
+location / {
+    if ($http_x_cache_refresh = "1") {
+        proxy_pass http://127.0.0.1:8000; # your statamic server
+        break;
+    }
+    try_files $uri $try_location;
+}
+```
+
+Then, you can run:
+
+```
+php please static:warm --header="X-Cache-Refresh: 1"
+```
+
+#### Warming behind authentication
+
+If your site is protected by HTTP authentication or expects a specific header, you can use `--header` to provide the necessary credentials or tokens so the warm requests are not blocked. For example:
+
+```
+php please static:warm --header="Authorization: Bearer your_token"
+```
+
+This ensures the cache warming requests are accepted by your backend even when authentication is required.
+
+
 ## Excluding Pages
 
-You may add a list of URLs you wish to exclude from being cached.
+You may wish to exclude certain URLs from being cached.
 
-``` php
+```php
 return [
     'exclude' => [
-        '/contact',
-        '/blog/*',  // Excludes /blog/post-name, but not /blog
-        '/news*',   // Exclude /news, /news/article, and /newspaper
-    ]
+        'class' => null,
+        'urls' => [
+            '/contact', // [tl! add]
+            '/blog/*',  // Excludes /blog/post-name, but not /blog [tl! add]
+            '/news*',   // Exclude /news, /news/article, and /newspaper [tl! add]
+        ],
+    ],
 ];
 ```
 
@@ -143,9 +394,59 @@ Rather than excluding entire pages, you may consider using the [nocache tag](/ta
 CSRF tokens will automatically be excluded from the cache. You don't even need to use a `nocache` tag for that. ([With some exceptions](#csrf-tokens))
 :::
 
+If you'd like to dynamically exclude URLs from being cached (for example: if you want to add a "Exclude from Cache" toggle to entries), you can create your own excluder class:
+
+```php
+// config/statamic/static_caching.php
+
+return [
+    'exclude' => [
+        'class' => App\StaticCaching\CustomExcluder::class, // [tl! add]
+        'urls' => [],
+    ],
+];
+```
+
+```php
+// app/StaticCaching/CustomExcluder.php
+
+<?php
+
+namespace App\StaticCaching;
+
+use Statamic\Support\Str;
+use Statamic\StaticCaching\UrlExcluder;
+
+class CustomExcluder implements UrlExcluder
+{
+    public function __construct(protected string $baseUrl, protected array $exclusions)
+    {
+    }
+
+    public function getBaseUrl(): string
+    {
+        return $this->baseUrl;
+    }
+
+    public function getExclusions(): array
+    {
+        return $this->exclusions;
+    }
+
+    public function isExcluded(string $url): bool
+    {
+        // Your custom logic here.
+        // Return `true` for any URLs you wish to be excluded.
+        return false;
+    }
+}
+```
+
+Alternatively, you may also prevent URLs from being cached by adding the `X-Statamic-Uncacheable: true` header to requests. 
+
 ## Invalidation
 
-A statically cached page will be served until it is invalidated. You have a several options for how to invalidate your cache.
+A statically cached page will be served until it is invalidated. You have several options for how to invalidate your cache.
 
 ### Time Limit
 
@@ -162,6 +463,7 @@ You may also set specific rules for invalidating other pages when content is sav
 ``` php
 return [
     'invalidation' => [
+        'class' => null,
         'rules' => [
             'collections' => [
                 'blog' => [
@@ -214,22 +516,104 @@ You may also choose to invalidate the entire static cache by specifying `all`.
 ``` php
 return [
     'invalidation' => [
-        'rules' => 'all',
-    ]
+        'class' => null,
+        'rules' => 'all', // [tl! highlight]
+    ],
 ];
 ```
 
-### By Force
+### On a schedule
+
+If you have the scheduler running, Statamic will use the same set of rules mentioned above, but when scheduled entries are due to become active.
+
+For example, if you schedule an entry for Friday at 8am, and you have the scheduler running, appropriate pages will be invalidated just as if you had clicked saved on that entry at Friday at 8am.
+
+[Learn how to use the scheduler](/scheduling)
+
+### Custom invalidator class
+
+You can also specify a custom invalidator class to **programmatically determine which URLs should be invalidated**. To achieve that, override or extend [the default invalidator class](https://github.com/statamic/cms/blob/01f8dfd1cbe304be1848d2e4be167a0c49727170/src/StaticCaching/DefaultInvalidator.php).
+
+```php
+return [
+    'invalidation' => [
+        'class' => App\StaticCaching\CustomInvalidator::class,  // [tl! highlight]
+        'rules' => [],
+    ],
+];
+```
+
+It's worth noting that the container binding for the Default Invalidator won't be used now, so you'll need to bind it yourself in your `AppServiceProvider`:
+
+```php
+use App\StaticCaching\CustomInvalidator;
+use Statamic\StaticCaching\Cacher;
+
+class AppServiceProvider
+{
+    public function boot()
+    {
+        $this->app->bind(CustomInvalidator::class, function ($app) {
+            return new CustomInvalidator(
+                $app[Cacher::class],
+                $app['config']['statamic.static_caching.invalidation.rules']
+            );
+        });
+    }
+}
+```
+
+In your class you can then define the logic that decides how URLs should get invalidated.
+
+```php
+// app/StaticCaching/CustomInvalidator.php
+
+<?php
+
+namespace App\StaticCaching;
+
+use Statamic\Entries\Entry;
+use Statamic\StaticCaching\DefaultInvalidator;
+
+class CustomInvalidator extends DefaultInvalidator
+{
+    public function invalidate($item)
+    {
+        // Flushes everything by setting the invalidation rules to `all`.
+        if ($this->rules === 'all') {
+            return $this->cacher->flush();
+        }
+
+        $urls = [];
+
+        // Invalidates entries from the `events` collection.
+        if ($item instanceof Entry && $item->collectionHandle() === 'events') {
+            $urls[] = $item->uri();
+        }
+
+        // Flush the URLs we've added to the $urls array.
+        if (count($urls) >= 1) {
+            $this->cacher->invalidateUrls($urls);
+
+            return;
+        }
+
+        // Otherwise, when the $urls array is empty, fallback to the default invalidation logic.
+        parent::invalidate($item);
+    }
+}
+```
+
+### By force
 
 To clear the static file cache you can run `php please static:clear` (and/or delete the appropriate static file locations).
 
-## File Locations
+## File locations
 
 When using the file driver, the static HTML files are stored in the `static` directory of your webroot, but you can change it.
 
 ``` php
 return [
-
     'strategies' => [
         'full' => [
             'driver' => 'file',
@@ -242,36 +626,97 @@ return [
 You will need to update your appropriate server rewrite rules.
 
 
-## Multi-Site
+## Query parameters
+
+By default, Statamic will cache all pages with the same URL but different query parameters separately. This can be helpful if you're using pagination or displaying pages differently based on user input.
 
-When using [multi-site](/multi-site), the path can accept an array of sites to define separate urls and domains, if needed.
+However, if you wish, you can disable this behaviour so each URL will only be cached once, regardless of query parameters:
+
+```php
+return [
+    'ignore_query_strings' => true,
+];
+```
+
+### Allowed and disallowed query parameters
+
+If you're using half measure caching, you may specify which query parameters Statamic should include in it's "normalized" static caching URL. This is useful if you only want certain query parameters to be persisted in your cache:
+
+```php
+'allowed_query_strings' => [
+    'page',
+],
+```
+
+**For example:** if you allow the `page` query parameter, and visit `/blog?page=2&utm_medium=social`, Statamic will serve/write the cached page for `/blog?page=2`.
+
+You can also do the opposite, by specifying which query parameters should be excluded from the "normalized" static caching URL:
+
+```php
+'disallowed_query_strings' => [
+    'utm_content', 'utm_medium', 'utm_source', 'utm_campaign',
+],
+```
+
+**For example:** if you disallow the UTM query parameters, and visit `/blog?page=2&utm_medium=social`, Statamic will serve/write the cached page for `/blog?page=2`.
+
+The `ignore_query_strings` option should be set to `false` in order for the `allowed_query_strings` & `disallowed_query_strings` to work.
+
+## Multi-site
+
+When using static caching alongside [multi-site](/multi-site), some additional configuration is needed.
+
+### Paths
+
+The `path` config option accepts an array, allowing you to define a different path for each site:
 
 ``` php
 return [
+    'strategies' => [
+        'full' => [
+            'driver' => 'file',
+            'path' => [
+               'english' => public_path('static') . '/domain.com/',
+               'french' => public_path('static') . '/domain.fr/',
+               'german' => public_path('static') . '/domain.de/',
+            ],
+        ],
+    ],
+];
+```
+
+For sites with subdirectory URLs rather than separate domains, you should ensure that all sites with the same domain have the same path.
 
+For example: the `english` and `french` sites below are on the same domain, whereas `german` is on its own domain.
+
+``` php
+return [
     'strategies' => [
         'full' => [
             'driver' => 'file',
             'path' => [
-               'default'    => public_path('static') . '/domain1.com/',
-               'default_fr' => public_path('static') . '/domain1.com/',
-               'other_site' => public_path('static') . '/domain2.com/',
-            ]
-        ]
-    ]
+               'english' => public_path('static') . '/domain.com/',
+               'french' => public_path('static') . '/domain.com/',
+
+               'german' => public_path('static') . '/domain.de/',
+            ],
+        ],
+    ],
 ];
 ```
 
-:::tip
-Your static caching paths should be organized at the top level domain level. You'll notice 'default' and 'default_fr' in the example use the same domain. The subfolders will be organized based on the urls defined in your sites config.
-:::
+_**Note:** You only need to configure paths when you're using full-measure static caching._
+
+### Rewrite rules
 
-### Rewrite Rules
+When you have sites across multiple domains, you will need to modify the rewrite rules on your server to include the domain name.
 
-This multi-site example needs modified rewrite rules.
+_**Note:** You only need to configure rewrite rules when you're using full-measure static caching._
 
 #### Apache
 
+You should update the rewrites in your `.htaccess` file to include `%{HTTP_HOST}`:
+
 ``` htaccess
 RewriteCond %{DOCUMENT_ROOT}/static/%{HTTP_HOST}/%{REQUEST_URI}_%{QUERY_STRING}\.html -s
 RewriteCond %{REQUEST_METHOD} GET
@@ -280,23 +725,37 @@ RewriteRule .* static/%{HTTP_HOST}/%{REQUEST_URI}_%{QUERY_STRING}\.html [L,T=tex
 
 #### Nginx
 
+You should update the `try_files` line inside the `@static` block:
+
 ``` nginx
-location / {
-  try_files /static/${host}${uri}_${args}.html $uri /index.php?$args;
+location @static {
+    try_files /static${uri}_$args.html $uri $uri/ /index.php?$args; # [tl! remove]
+    try_files /static/${host}${uri}_$args.html $uri $uri/ /index.php?$args; # [tl! add]
 }
 ```
 
-The ${host} argument should correspond to the domains set up in the path. This will be dependant on the server. If you're running different environments and need to use caching for them, you should define the paths using an ENV variable that corresponds to each server domain.
+The `${host}` argument should correspond to the domains set up in the path. This will be dependant on the server. If you're running different environments and need to use caching for them, you should define the paths using an ENV variable that corresponds to each server domain. The path can be configured in the `static_caching` config:
+
+For example:
 
-For example `'default'    => public_path('static') . '/' .env('APP_DOMAIN'),`
+``` php
+'strategies' => [
+    'full' => [
+        'driver' => 'file',
+        'path' => public_path('static') . '/' .env('APP_DOMAIN'), // [tl! focus]
+        'lock_hold_length' => 0,
+        'warm_concurrency' => 10
+    ],
+],
+```
 
 and then on your server
 
 ```
-#Production
+# Production
 APP_DOMAIN=domain1.com
 
-#Dev
+# Dev
 APP_DOMAIN=domain1.devserver.com
 ```
 
@@ -313,7 +772,7 @@ APP_DOMAIN=domain1.devserver.com
 `{SERVER_NAME}` is used here instead of `{HTTP_HOST}` because `{HTTP_HOST}` may include the port.
 :::
 
-### Invalidation Rules
+### Invalidation rules
 
 In the [invalidation rules array](#when-saving) explained above, the URLs are relative.
 
@@ -358,7 +817,7 @@ When a page is being statically cached on the first request, or loaded on subseq
 
 Statamic includes two replacers out of the box. One will replace [CSRF tokens](#csrf-tokens), the other will handle [nocache](/tags/nocache) tag usages.
 
-A replacer is a class that implements a `Statamic\StaticCaching\NoCache\Replacer` interface. You will be passed responses to the appropriate methods where you can adjust them as necessary.
+A replacer is a class that implements a `Statamic\StaticCaching\Replacer` interface. You will be passed responses to the appropriate methods where you can adjust them as necessary.
 
 You can then enable your class by adding it to `config/statamic/static_caching.php`:
 
@@ -378,7 +837,7 @@ When using full measure, tokens will automatically be replaced in `<input>` and
 
 ```
 <meta name="csrf-token" content="{{ csrf_token }}" />
-<input type="hidden" value="{{ csrf_token }}" />
+<input type="hidden" name="_token" value="{{ csrf_token }}" />
 ```
 
 If you need to output a CSRF token in another place while using full measure, you'll need to use nocache tags.
@@ -390,3 +849,18 @@ If you need to output a CSRF token in another place while using full measure, yo
 {{ /nocache }} {{# [tl!++] #}}
 </span>
 ```
+
+## Custom cache store
+
+Static caching leverages [Laravel's application cache](https://laravel.com/docs/cache) to store mappings of the URLs to the filenames. To ensure proper invalidation of changes to your content, Statamic uses a cache store _outside_ of the default one. Otherwise, running the `php artisan cache:clear` command can lead invalidation to fail.
+
+The cache store can be customized in `config/cache.php`.
+
+```php
+'static_cache' => [
+    'driver' => 'file',
+    'path' => storage_path('statamic/static-urls-cache'),
+],
+```
+
+By default, running `php artisan cache:clear` won't clear Statamic's cache store. To do this, run `php please static:clear`.
diff --git a/content/collections/docs/structures.md b/content/collections/docs/structures.md
index 2359158e1..c54d7f3ac 100644
--- a/content/collections/docs/structures.md
+++ b/content/collections/docs/structures.md
@@ -15,7 +15,7 @@ Structures are a flexible way to create hierarchies of different items. Statamic
 Each structure is a hierarchy of links and/or titles. These links may be to entries in one or more [collections](/collections), external URLs, or even anchor links in your content.
 
 <figure>
-    <img src="/img/structure.png" alt="A Statamic 3 structure page tree" width="535">
+    <img src="/img/structure.png" alt="A Statamic structure page tree" width="535">
     <figcaption>Part of the structure of this very site.</figcaption>
 </figure>
 
@@ -24,7 +24,7 @@ Each structure is a hierarchy of links and/or titles. These links may be to entr
 Structures come in two flavors, unlike Pringles. They can control the discrete URL pattern and order for a collection (like v2's Pages), or manage ad hoc navigation trees. And _just like_ Pringles &mdash; once you pop the top, you can't stop.
 
 
-## Structured Collections
+## Structured collections
 
 The first type of structure is for defining the URL structure for a collection. This would be the equivalent of "Pages" in Statamic v2.
 
@@ -55,13 +55,25 @@ Freestyle navigation structures exist to manage a nav out of existing entries, a
 
 You can work with the [nav tag](/tags/nav) to loop through and render your HTML with its links.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
 {{ nav:top_nav }}
     <li><a href="{{ url }}">{{ title }}</a></li>
 {{ /nav:top_nav }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+  <s:nav:top_nav>
+    <li><a href="{{ $url }}">{{ $title }}</a></li>
+  </s:nav:top_nav>
+</ul>
+```
+::
 
 ## Tree
 
@@ -83,7 +95,7 @@ tree:
         entry: id-of-contact
       -
         title: 'GitHub Repo'
-        url: 'https://github.com/example/repo
+        url: 'https://github.com/example/repo'
 ```
 
 :::tip
@@ -96,4 +108,4 @@ Each page may have an optional `children` array which is itself another tree. Yo
 - A hardcoded link* should contain a `url` key with either an internal or external URL. The `title` is optional. The GitHub page in the snippet above is an example.
 - Text* can just contain a `title`. The Support page above is an example.
 
-_\* Text and link branches are only available in Navs._
\ No newline at end of file
+_\* Text and link branches are only available in Navs._
diff --git a/content/collections/docs/taxonomies.md b/content/collections/docs/taxonomies.md
index c7d3a1737..cb8a7d2a3 100644
--- a/content/collections/docs/taxonomies.md
+++ b/content/collections/docs/taxonomies.md
@@ -7,10 +7,11 @@ related_entries:
   - 7202c698-942a-4dc0-b006-b982784efb03
   - ba832b71-a567-491c-b1a3-3b3fae214703
   - 3f5506d6-03e0-4fcf-b4e8-334c48d51f81
+  - 420f083d-99be-4d54-9f81-3c09cb1f97b7
 ---
 ## Overview
 
-Taxonomies give you the ability to tag your entries and then fetch and sort all the entries who share any given tag. `Categories` and `tags` are probably the most common taxonomies, but you're not limited to those two. There are many useful taxonomies that can help group and sort your content. For example, `topic`, `color`, `genre`, and `size`.
+Taxonomies give you the ability to tag your entries and then fetch and sort all the entries that share any given tag. `Categories` and `tags` are probably the most common taxonomies, but you're not limited to those two. There are many useful taxonomies that can help group and sort your content. For example, `topic`, `color`, `genre`, and `size`.
 
 Practically speaking, taxonomies are very similar to [collections](/collections). They can have their own fields as defined by [blueprints](/blueprints) and also have their own URLs.
 
@@ -44,12 +45,12 @@ URLs use slugs with dashes, and views use handles with underscores.
 
 - **Global Taxonomy Details**
   - Display the details of the taxonomy, so you can list the terms.
-  - Accessible at `/{taxonomy-slug}` (eg. `/product-tags`)
-  - The `{taxonomy_handle}/index` view will be used (eg. `product_tags/index.antlers.html`)
+  - Accessible at `/{taxonomy-slug}` (eg. `/tags`)
+  - The `{taxonomy_handle}/index` view will be used (eg. `tags/index.antlers.html`)
 - **Global Term details**
   - Display the details of the term, so you can list the entries.
-  - Accessible at `/{taxonomy-slug}/{term-slug}` (eg. `/product-tags/t-shirts`)
-  - The `{taxonomy_handle}/show` view will be used. (eg. `product_tags/show.antlers.html`)
+  - Accessible at `/{taxonomy-slug}/{term-slug}` (eg. `/tags/t-shirts`)
+  - The `{taxonomy_handle}/show` view will be used. (eg. `tags/show.antlers.html`)
 
 For each taxonomy [assigned to a collection](#collections) you will also get these routes:
 
@@ -57,14 +58,14 @@ For each taxonomy [assigned to a collection](#collections) you will also get the
   - Display the details of the taxonomy, so you can list the terms.
   - Only terms that have been used in entries in the collection will be displayed.
   - Accessible at `/{collection-url}/{taxonomy-slug}` (eg. `/products/tags`)
-  - The `{collection_handle}/{taxonomy_handle}/index` view will be used (eg. `blog/tags/index.antlers.html`)
+  - The `{collection_handle}/{taxonomy_handle}/index` view will be used (eg. `products/tags/index.antlers.html`)
 - **Collection Term details**
   - Display the details of the term, so you can list the entries.
   - Only entries that exist in the collection will be displayed.
-  - Accessible at `/{collection-url}/{taxonomy slug}/{term slug}` (eg. `/blog/tags/retrowave`)
-  - The `{collection_handle}/{taxonomy}/show` view will be used. (eg. `blog/tags/show.antlers.html`)
+  - Accessible at `/{collection-url}/{taxonomy-slug}/{term-slug}` (eg. `/products/tags/t-shirts`)
+  - The `{collection_handle}/{taxonomy_handle}/show` view will be used. (eg. `products/tags/show.antlers.html`)
 
-## Term Values and Slugs
+## Term values and slugs
 
 A term **value** is how you might identify a term in your content. For example, “Star Wars”.
 
@@ -104,7 +105,7 @@ For example, you would set up your "topics" index page in `resources/views/topic
 
 The collection equivalents would automatically filter terms that have been associated to entries in that collection.
 
-### Outputting Terms
+### Outputting terms
 
 Term values will be [augmented](/augmentation) into term objects and will have access to all data
 
@@ -114,11 +115,21 @@ tags:
   - sauce
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ tags }}
   {{ title }}, {{ url }}, {{ slug }}, etc
 {{ /tags }}
 ```
+::tab blade
+```blade
+@foreach ($tags as $tag)
+  {{ $tag->title }}, {{ $tag->url }}, {{ $tag->slug }}, etc
+@endforeach
+```
+::
 
 ```
 Awesome, /tags/awesome, awesome, etc
@@ -131,11 +142,14 @@ When the collection can be inferred, the `url` and `permalink` values will inclu
 - ✅ Looping through terms in a taxonomy tag pair, using the collection parameter.
 - ❌ Looping through terms in a taxonomy tag pair, without specifying a collection.
 
-### Listings and Indexes
+### Listings and indexes
 
 When on a [taxonomy route](#routing), you can list the terms by using a `terms` tag pair. For example:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
   {{ terms }}
     <li><a href="{{ url }}">{{ title }}</a></li>
@@ -147,11 +161,39 @@ When on a [taxonomy route](#routing), you can list the terms by using a `terms`
 You can replace the `terms` tag with the name of the taxonomy. eg. `{{ tags }}` or `{{ categories }}`
 :::
 
-### Listing Term Entries
+:::tip
+If your taxonomy name conflicts with a [tag](/tags), you will need to [disambiguate](/antlers#disambiguating-variables) it by using a dollar symbol (`$`).
 
-When on a [term route](#routing), you can list the entries by using an `entries` tag pair. For example:
+For example, if your taxonomy is named `section`, there is also a [tag named section](/tags/section).
 
 ```
+{{ $section }}...{{ /$section }}
+```
+:::
+
+::tab blade
+```blade
+<ul>
+  @foreach ($terms as $term)
+    <li><a href="{{ $term->url }}">{{ $term->title }}</a></li>
+  @endforeach
+</ul>
+```
+
+:::tip
+You can replace the `terms` tag with the name of the taxonomy. eg. `$tags` or `$categories`
+:::
+::
+
+
+### Listing term entries
+
+When on a [term route](#routing), you can list the entries by using an `entries` tag pair. For example:
+
+::tabs
+
+::tab antlers
+```antlers
 {{ entries paginate="5" }}
   <ul>
   {{ results }}
@@ -159,4 +201,19 @@ When on a [term route](#routing), you can list the entries by using an `entries`
   {{ /results }}
   </ul>
 {{ /entries }}
-```
\ No newline at end of file
+```
+::tab blade
+```blade
+@php($results = $entries->paginate(5))
+
+<ul>
+	@foreach ($results->items() as $result)
+		<li><a href="{{ $result->url }}">{{ $result->title }}</a></li>
+	@endforeach
+</ul>
+```
+::
+
+## Search indexes
+
+You can configure search indexes for your collections to improve the efficiency and relevancy of your users searches. Learn [how to connect indexes](/search#connecting-indexes).
diff --git a/content/collections/docs/ubuntu.md b/content/collections/docs/ubuntu.md
index 7628b7be9..6d672d259 100644
--- a/content/collections/docs/ubuntu.md
+++ b/content/collections/docs/ubuntu.md
@@ -10,10 +10,10 @@ parent: ab08f409-8bbe-4ede-b421-d05777d292f7
 
 To install Statamic on an Ubuntu instance you will need the following:
 
-- An Ubuntu 20.04 or 18.04 VPS with root access enabled or a user with Sudo privileges (you can follow our [Digital Ocean](/installing/digital-ocean) or [Linode](/installing/linode) guides to get yours set up)
+- An Ubuntu 22.04 or 20.04 VPS with root access enabled or a user with Sudo privileges (you can follow our [Digital Ocean](/installing/digital-ocean) or [Linode](/installing/linode) guides to get yours set up)
 - A server with at least 1GB memory
 - A valid domain name pointed to your server and SSL certificate in place
-- PHP 7.4+
+- PHP 8.1+
 
 
 ## Update Packages
@@ -28,7 +28,7 @@ sudo apt-get upgrade
 ## Install PHP & Required Modules
 
 ``` shell
-sudo apt install php-common php-fpm php-json php-mbstring zip unzip php-zip php-cli php-xml php-tokenizer -y
+sudo apt install php-common php-fpm php-json php-mbstring zip unzip php-zip php-cli php-xml php-tokenizer php-curl -y
 ```
 
 ## Install Composer
@@ -52,10 +52,22 @@ Now you can check to make sure Composer is installed and configured correctly by
 composer
 ```
 
+## Install Statamic CLI
+
+Next up, let's install the Statamic CLI. To do this, run the following command in your terminal:
+
+``` shell
+composer global require statamic/cli
+```
+
+Upon installation, you can now use the `statamic new` command to spin up fresh Statamic sites with a CLI setup wizard 🧙‍♂️ to guide you through a variety of settings and options.
+
+Our CLI is essentially a super fancy wrapper around the `composer create-project` command. You can choose to not install it, but only at your own annoyance.
+
 
 ## Create a new Statamic Application
 
-Now we'll create a new Statamic application using the `composer create-project` command.
+Now we'll create a new Statamic application using the `statamic new` command.
 
 First, navigate to the `/var/www` directory:
 
@@ -66,11 +78,15 @@ cd /var/www
 Next, run the following install command:
 
 ``` shell
-composer create-project --prefer-dist statamic/statamic example.com
+statamic new example.com
 ```
 
 :::tip
-Alternatively, you could git clone an **existing project** instead of installing a new empty site.
+If you run into a TTY error like `TTY mode requires /dev/tty to be read/writable`, you can simulate TTY by calling `script` and using the `--no-interaction` flag.
+
+```
+script -q -c "statamic new --no-interaction example.com"
+```
 :::
 
 ## Set Permissions
@@ -117,8 +133,26 @@ server {
 
     charset utf-8;
 
+    set $try_location @static;
+
+    if ($request_method != GET) {
+        set $try_location @not_static;
+    }
+
+    if ($args ~* "live-preview=(.*)") {
+        set $try_location @not_static;
+    }
+
     location / {
-        try_files /static${uri}_${args}.html $uri $uri/ /index.php?$query_string;
+        try_files $uri $try_location;
+    }
+
+    location @static {
+        try_files /static${uri}_$args.html $uri $uri/ /index.php?$args;
+    }
+
+    location @not_static {
+        try_files $uri /index.php?$args;
     }
 
     location = /favicon.ico { access_log off; log_not_found off; }
@@ -127,7 +161,7 @@ server {
     error_page 404 /index.php;
 
     location ~ \.php$ {
-        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
+        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
         include fastcgi_params;
@@ -139,6 +173,12 @@ server {
 }
 ```
 
+:::tip
+You should ensure that the PHP path matches the version of PHP-FPM you have installed. 
+
+For example: the example config above specifies `fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;`, but if you update all packages, you may end up with a later version.
+:::
+
 You can confirm that the configuration doesn’t contain any syntax errors with the following command:
 
 ``` shell
@@ -171,3 +211,7 @@ Now visit your IP Address or `https://example.com` (but like the actual domain)
 That's pretty much it. Time for you to take it from here.
 
 If this is your production server, you'll probably want to add cache expiry headers and so on, but those rules and what you cache to the browser are all up to you.
+
+There are many other variables at play when building your own server. It's unrealistic to think we've covered them all here, or that this article won't get out of date at times as things change.
+
+If you run into issues not covered here, you may want to read through [this discussion](https://github.com/statamic/cms/discussions/10487) where several folks work through many edge cases happening all at once.
diff --git a/content/collections/docs/updating-a-starter-kit.md b/content/collections/docs/updating-a-starter-kit.md
new file mode 100644
index 000000000..441c3a4ac
--- /dev/null
+++ b/content/collections/docs/updating-a-starter-kit.md
@@ -0,0 +1,36 @@
+---
+id: 512cbb65-0091-47e2-a3b6-c42aae64349e
+blueprint: page
+title: 'Updating a Starter Kit'
+intro: |
+  Starter Kits aren't all designed to be updatable, but when they are you'll need to know how.
+template: page
+nav_title: Updating
+---
+
+## Not all starter kits are updatable
+
+As their name implies, starter kits were originally intended to be a way to "start" a site. Once installed, you're on your own and can customize as you see fit.
+
+However, some kits _are_ built in a way that they can be updated. Updatable kits will be noted on the Statamic Marketplace.
+
+For example, the [Podcaster](https://statamic.com/starter-kits/statamic/podcaster) Kit is designed in an opinionated way, with settings for you to tweak brand colors. If a CSS or JavaScript bug is encountered one day, the developer of the Kit can fix it and you can simply pull down the update into your site.
+
+## Performing updates
+
+When initially installing an updatable Starter Kit, it will be left as a dependency in your `composer.json` file.
+
+To update, you will need to update via Composer:
+
+```shell
+composer update
+```
+
+(Or `composer update vendor/starter-kit-name` to avoid updating everything else.)
+
+Additionally, you may need to run additional commands to re-compile or publish assets. These should be explained in the Starter Kit's documentation, but would typically be something like this:
+
+```shell
+php artisan vendor:publish --tag=starter-kit-name
+npm run dev
+```
diff --git a/content/collections/docs/updating.md b/content/collections/docs/updating.md
index a403c0391..404824fb7 100644
--- a/content/collections/docs/updating.md
+++ b/content/collections/docs/updating.md
@@ -25,16 +25,18 @@ statamic update
 
 ## Control Panel
 
-You can also run updates in the control panel in the **Tools &rarr; Updates** area.
+The Control Panel will inform you when updates are available.
 
-When using the control panel updater, your `statamic/cms`  Composer version dependency will be fixed to whichever explicit version you choose. To go back to a constraint-style version, you'll need to update your `composer.json` file.
+From within the **Tools &rarr; Updates** section, Statamic will provide you with the appropriate Composer commands to run.
 
-For example, if you update to `v3.3.1` in the control panel, this will be your Composer constraint.
+If you choose to install a non-latest version, your `statamic/cms`  Composer version dependency will be fixed to whichever explicit version you choose. To go back to a constraint-style version, you'll need to update your `composer.json` file.
+
+For example, if you chose `v4.0.1` in the control panel, this will be your Composer constraint.
 
 ```json
 {
     "require": {
-        "statamic/cms": "3.3.1",
+        "statamic/cms": "4.0.1",
     }
 }
 ```
@@ -44,17 +46,11 @@ To go back to a more traditional version range constraint, you may want to repla
 ```json
 {
     "require": {
-        "statamic/cms": "^3.3",
+        "statamic/cms": "^4.0",
     }
 }
 ```
 
-## Major Upgrades
-
-Upgrading between major Statamic versions sometimes involves extra manual steps. Check out these guides for further details.
+## Major upgrades
 
-- [3.3 to 3.4](/upgrade-guide/3-3-to-3-4)
-- [3.2 to 3.3](/upgrade-guide/3-2-to-3-3)
-- [3.1 to 3.2](/upgrade-guide/3-1-to-3-2)
-- [3.0 to 3.1](/upgrade-guide/3-0-to-3-1)
-- [2.x to 3.x](/upgrade-guide/v2-to-v3)
+Upgrading between major Statamic versions sometimes involves extra manual steps. Check out [these guides](/upgrade-guide) for further details.
diff --git a/content/collections/docs/upgrade-guide.md b/content/collections/docs/upgrade-guide.md
index c1155054a..348d0cc17 100644
--- a/content/collections/docs/upgrade-guide.md
+++ b/content/collections/docs/upgrade-guide.md
@@ -1,13 +1,18 @@
 ---
-title: 'Upgrade Guides'
+title: 'Upgrade guide'
 intro: How to upgrade between various versions of Statamic.
 template: page
 id: f12f8ba3-19ff-48cb-a07b-653b05082d7e
 blueprint: page
 ---
+- [4.0 to 5.0](/upgrade-guide/4-to-5)
+- [3.4 to 4.0](/upgrade-guide/3-4-to-4-0)
 - [3.3 to 3.4](/upgrade-guide/3-3-to-3-4)
 - [3.2 to 3.3](/upgrade-guide/3-2-to-3-3)
 - [3.1 to 3.2](/upgrade-guide/3-1-to-3-2)
 - [3.0 to 3.1](/upgrade-guide/3-0-to-3-1)
 - [2.x to 3.x](/upgrade-guide/v2-to-v3)
 - [Bard 1 to 2](/upgrade-guide/bard-v1-to-v2)
+
+If you intend to **upgrade Laravel itself**, please refer to its [upgrade guide](https://laravel.com/docs/upgrade).
+You can also (semi-)automate the Laravel upgrade using [Laravel Shift](https://laravelshift.com) which is by far the most _rad_ way to upgrade.
diff --git a/content/collections/docs/users.md b/content/collections/docs/users.md
index bbcf21f57..f5c4dc487 100644
--- a/content/collections/docs/users.md
+++ b/content/collections/docs/users.md
@@ -14,16 +14,16 @@ related_entries:
 ---
 ## Overview
 
-The most common and obvious reason users exist are to have the means to access the Control Panel and manage the content of your site. But there is so much more a user can do, if you so desire.
+The most common and obvious reason users exist is to have the means to access the Control Panel and manage the content of your site. But there is so much more a user can do, if you so desire.
 
 <figure>
     <img src="/img/users-index.png" alt="List of Statamic Control Panel users">
     <figcaption>Why hasn't the Hoff logged in?</figcaption>
 </figure>
 
-## Creating Users
+## Creating users
 
-The easiest way to create your **first user** is by running `php please make:user` terminal command. After entering basic information, setting a password, and saying `yes` to [super user](#super-admins), you can log into the control panel at `example.com/cp`.
+The easiest way to create your **first user** is by running `php please make:user` terminal command. After entering basic information, setting a password, and saying `yes` to [super user](#super-users), you can log into the control panel at `example.com/cp`.
 
 :::watch https://youtube.com/embed/KuiPocGq3L8
 Watch a new user being born. 🐣
@@ -31,8 +31,7 @@ Watch a new user being born. 🐣
 
 You can also [create users by hand](/tips/creating-users-by-hand) in a YAML file if you'd prefer, or don't have access to the command line. And don't worry, the password field will automatically get encrypted as soon as Statamic spots it.
 
-
-### New User Invitations
+### New user invitations
 
 When creating users in the Control Panel you can send email invitations to help guide those users into activating their accounts and signing in for the first time. You can even customize a lovely little welcome message for them.
 
@@ -45,17 +44,20 @@ When creating users in the Control Panel you can send email invitations to help
 Be sure to [configure the email driver](/email) so those emails actually go out.
 :::
 
-## User Fields
+## User fields
 
 You're more than welcome — encouraged even — to customize what fields and information you'd like to store on your users. For example, you could store author bios and social media links to be used in articles on your front-end.
 
 To customize these fields, edit the included `user` [blueprint](/blueprints) and configure it however you'd like.
 
-
 ## Permissions
 
-<div class="mb-8">
-    <a class="bg-black hover:bg-purple no-underline text-sm px-4 py-1 inline-block transform -rotate-3 text-mint font-display" href="/licensing">Pro Feature</a>
+<div class="c-pro-badge">
+    <a href="/licensing">
+        <div class="c-pro-badge__text">
+            ⭐️ Pro Feature ⭐️
+        </div>
+    </a>
 </div>
 
 A User by itself has no permission to access or change any aspect of Statamic. It takes explicit permissions for a user to access the control panel, create, edit, or publish content, create users, and so on.
@@ -64,12 +66,13 @@ Permissions are grouped into **roles**, and are very simple to manage in the Con
 
 In turn, **roles** are attached directly to individual users or [user groups](#user-groups).
 
-### Statamic's Native Permissions {#native-permissions}
+### Statamic's native permissions {#native-permissions}
 
 | Permission | Handle |
 |------------|--------|
 | Access the Control Panel | `access cp` |
 | Create, edit, and delete collections | `configure collections` |
+| Access site | `access {site} site` |
 | View entries | `view {collection} entries` |
 | ↳  Edit entries | `edit {collection} entries` |
 | &nbsp;&nbsp;↳  Create entries | `create {collection} entries` |
@@ -98,11 +101,12 @@ In turn, **roles** are attached directly to individual users or [user groups](#u
 | &nbsp;&nbsp;↳ Change passwords | `change passwords` |
 | &nbsp;&nbsp;↳ Edit user groups | `edit user groups` |
 | &nbsp;&nbsp;↳ Edit roles | `edit roles` |
+| &nbsp;&nbsp;↳ Impersonate users | `impersonate users` |
 | Configure forms | `configure forms` |
-| View form submissions | `view {form} submissions` |
-| &nbsp;&nbsp;↳ Delete form submissions | `delete {form} submissions` |
+| View form submissions | `view {form} form submissions` |
+| &nbsp;&nbsp;↳ Delete form submissions | `delete {form} form submissions` |
 
-### Author Permissions
+### Author permissions
 
 Author permissions are a little bit special. They determine the control users can have over their own entries or those created by other authors.
 
@@ -110,21 +114,28 @@ Author permissions are a little bit special. They determine the control users ca
 This feature only has any effect if your entry blueprint has an `author` field. If you don't already have an `author` field, this functionality is not available.
 :::
 
-### Super Users
+### Site permissions
+
+When using the [multi-site](/multi-site) feature, Statamic will check for appropriate site permissions in addition to whatever it's checking.
+
+For example, when you try to edit a `blog` entry in the `french` site, Statamic will check if you have both the `edit blog entries` and `access french site` permissions.
+
+
+### Super users
 
 Super Admin accounts are special accounts with **access and permission to everything**. This includes things reserved only for super users like the ability to _create more super users_. It's important to prevent the robot apocalypse and this is an important firewall. We're just doing our part to save the world.
 
-## User Groups
+## User groups
 
 <div class="mb-8">
     <a class="bg-black hover:bg-purple no-underline text-sm px-4 py-1 inline-block transform -rotate-3 text-mint font-display" href="/licensing">Pro Feature</a>
 </div>
 
-User groups allow you to attach roles, include users, thereby assign all the corresponding permissions automatically. This approach is much simpler than assigning roles individually if you have a lot users.
+User groups allow you to attach roles, include users, thereby assign all the corresponding permissions automatically. This approach is much simpler than assigning roles individually if you have a lot of users.
 
 User groups are stored in `resources/users/groups.yaml`.
 
-## Password Resets
+## Password resets
 
 Let's face it. People forget their passwords. A lot, and often. Statamic supports password resets. For users with Control Panel access, the login screen (found by default at `example.com/cp`) already handles this for you automatically.
 
@@ -132,7 +143,7 @@ You can also create your own password reset pages for front-end users by using t
 
 The user will receive an email with a temporary, single-use token allowing them to set a new password and log in again.
 
-## Password Validation
+## Password validation
 
 By default, passwords need to be 8 characters long. If you'd like to customize the default rules, you can use the `Password` rule object. (Requires at least Laravel 8.43).
 
@@ -151,9 +162,9 @@ public function boot()
 }
 ```
 
-Consult the [Laravel documentation](https://laravel.com/docs/8.x/validation#validating-passwords) to see all the available methods for customizing the password rule.
+Consult the [Laravel documentation](https://laravel.com/docs/12.x/validation#validating-passwords) to see all the available methods for customizing the password rule.
 
-## Storing User Records {#storage}
+## Storing user records {#storage}
 
 While users are stored in files by default — like everything else in Statamic — they can also be located in a database or really anywhere else. Here are links to articles for the different scenarios you may find yourself in.
 
@@ -162,8 +173,53 @@ While users are stored in files by default — like everything else in Statamic
 - [Custom User Storage](/tips/storing-users-somewhere-custom)
 - [Using an Independent Auth Guard](/tips/using-an-independent-authentication-guard)
 
+## Avatars
+
+Each user account has an avatar field named `avatar`. By default it's an [Assets Field](/fieldtypes/assets) that falls back to the user's initials.
+
+This avatar is used throughout the Control Panel to represent the user when the context is important. For example, on your user dropdown menu, as an entry's "Author", or while using [Real Time Collaboration](https://github.com/statamic/collaboration).
+
+<figure>
+    <img src="/img/user-avatar.png" alt="A user's avatar in the control panel global header" width="246">
+    <figcaption>Behold — an avatar!</figcaption>
+</figure>
+
+## Ordering
+
+By default, users are ordered alphabetically by their email. However, if you wish, you can change the field and direction used to order users in the Control Panel and when returned with the [`{{ users }}`](/tags/users) tag.
+
+```php
+// config/statamic/users.php
+
+'sort_field' => 'email',
+'sort_direction' => 'asc',
+```
+
+## Language preference
+
+Each user can have their own preferred language in the Control Panel. Head to your preferences area by clicking on the ⚙️ gear/cog icon in the global header and then go to **Preferences**.
+
+You can set the language for _everyone_ by going to **Default**, or you can set by Role or just the current user (yourself) with **Override For User**.
+
+
+<figure>
+    <img src="/img/user-language-preference.png" alt="User Language Preferences">
+    <figcaption>Last we checked, Statamic has been translated into a lot of languages.</figcaption>
+</figure>
+
+## Impersonate users
+
+Statamic gives you the ability to impersonate users via the Control Panel. This lets you see the Control Panel and front end of your site through the eyes of the user you chose. This is pretty neat if certain content or capabilities are limited through roles and permissions and you want to test those things. It saves quite some time since there's no need to manually sign out and in again with a different user anymore.
+
+<figure>
+    <img src="/img/user-impersonation.jpg" alt="List view of Statamic Control Panel users with a dropdown showing various options, one of them being 'Start Impersonation'">
+    <figcaption>Masquerade as someone else 🎭</figcaption>
+</figure>
+
+You can configure impersonation in `config/statamic/users.php`, like setting the redirect destination after starting impersonation or disabling it. Additionally, there is a dedicated `impersonate users` permission that you can assign to roles and users to allow or disallow them using this feature.
+
 ## OAuth
 
 In addition to conventional user authentication, Statamic also provides a simple, convenient way to authenticate with OAuth providers through [Laravel Socialite](https://github.com/laravel/socialite). Socialite currently supports authentication with Facebook, Twitter, LinkedIn, Google, GitHub, GitLab and Bitbucket, while dozens of additional providers are available though [third-party Socialite Providers](https://socialiteproviders.netlify.com/).
 
-Learn how to [configure OAuth](/oauth) on your site.
\ No newline at end of file
+Learn how to [configure OAuth](/oauth) on your site.
diff --git a/content/collections/docs/validation.md b/content/collections/docs/validation.md
index 8f45ce62d..827140d9e 100644
--- a/content/collections/docs/validation.md
+++ b/content/collections/docs/validation.md
@@ -10,10 +10,10 @@ template: page
 
 While configuring a [blueprint or fieldset field](/blueprints), switch to the **Validation** tab where you can choose from [any built in Laravel rule][laravel-validation].
 
-<div class="screenshot">
+<figure>
     <img src="/img/field-validation.png" width="521" alt="Field validation"/>
-    <div class="caption">Add validation rules (with a shortcut for requiring)</div>
-</div>
+    <figcaption>Add validation rules (with a shortcut for requiring)</figcaption>
+</figure>
 
 In this screenshot, you can see that the field has an `alpha_dash` and `min:4` rule which means you can only type letters and dashes, like a slug, and that it
 must be at least 4 characters. You have plenty of options to be creative and confident that your data will be entered the way you need it to be.
@@ -35,12 +35,12 @@ If you're interested in customizing user password validation, you can read about
 :::
 
 
-## Required Fields
+## Required fields
 
 Being the most common type of validation rule, we give you a shortcut for that. Simply toggle it on, or add `required: true` to the YAML.
 
 
-## Validating Nestable Fields
+## Validating nestable fields
 
 Statamic's [Grid](/fieldtypes/grid), [Replicator](/fieldtypes/replicator), and [Bard](/fieldtypes/bard) fields can all contain sub-fields.
 
@@ -85,20 +85,20 @@ Rather than reaching for `{this}`, you can consider using conditional fields alo
 :::
 
 
-## Available Rules
+## Available rules
 
-### All Laravel Rules
+### All Laravel rules
 
-You may use any validation rule provided by Laravel. You can view the complete list [on their documentation][laravel-validation].
+You may use any validation rule provided by Laravel. You can view the complete list [on their documentation][laravel-validation]. You may also use [custom rules](#custom-rules).
 
-### Unique Entry Value
+### Unique entry value
 
 ```yaml
 -
   handle: highlander
   field:
     type: text
-    validate: 'unique_entry_value:{collection},{id},{site}'
+    validate: 'new \Statamic\Rules\UniqueEntryValue({collection}, {id}, {site})'
 ```
 
 This works like Laravel's `unique` validation rule, but for Statamic entries. The rule should be used verbatim as shown above. Statamic will replace the `collection`, `id`, and `site` behind the scenes.
@@ -113,31 +113,68 @@ You can then customize the error message right in your `resources/lang/{lang}/va
 ],
 ```
 
-### Unique Term Value
+### Unique term value
 
 ```yaml
 -
   handle: foo
   field:
     type: text
-    validate: 'unique_term_value:{taxonomy},{id},{site}'
+    validate: 'new \Statamic\Rules\UniqueTermValue({taxonomy}, {id}, {site})'
 ```
 
-This works like the `unique_entry_value` rule, but for taxonomy terms.
+This works like the `UniqueEntryValue` rule, but for taxonomy terms.
 
-### Unique User Value
+### Unique user value
 
 ```yaml
 -
   handle: login
   field:
     type: text
-    validate: 'unique_user_value:{id}'
+    validate: 'new \Statamic\Rules\UniqueUserValue({id})'
 ```
 
-This works like the `unique_entry_value` rule, but for users.
+This works like the `UniqueEntryValue` rule, but for users.
 
+:::tip
+If you want to override the field that is being validated (e.g. in Livewire Form Objects), you can do so by passing a second parameter to the validation rule, such as `new \Statamic\Rules\UniqueUserValue({id}, "username")`.
+:::
+
+## Custom Rules
+
+You may use custom validation rules via Laravel's `Rule` objects.  
+[Documentation on those is here](https://laravel.com/docs/12.x/validation#using-rule-objects).
+
+To references those from your field, you can add them to your `validation` array as if you were writing PHP:
+
+<figure>
+    <img src="/img/field-validation-custom-rule.png" width="643" alt="Custom Field validation rules" />
+    <figcaption>Custom Field validation rules</figcaption>
+</figure>
+
+If you're writing directly into the YAML, make sure to escape any quotes:
+
+```yaml
+validate:
+  - required
+  - string
+  - new App\Rules\Uppercase
+  - 'new App\Rules\AnotherRule(''with argument'')'
+```
+
+## Validating programmatically
+
+You may validate programmatically via the blueprint, if you need to do so within custom code.
 
+```php
+$values = $request->all();
+
+$valid = $blueprint->fields()->addValues($values)->validate();
+
+$entry->data($valid)->save();
+```
 
+The `validate` method would throw a `ValidationException` if invalid and return the appropriate response.  
 
-[laravel-validation]: https://laravel.com/docs/8.x/validation#available-validation-rules
+[laravel-validation]: https://laravel.com/docs/12.x/validation#available-validation-rules
diff --git a/content/collections/docs/variables.md b/content/collections/docs/variables.md
index 3cee41a27..c3791dcfa 100644
--- a/content/collections/docs/variables.md
+++ b/content/collections/docs/variables.md
@@ -10,8 +10,7 @@ id: 662a5918-ac0f-42a1-bf40-5a7a320e87e1
 
 Where appropriate, Statamic will inject data automatically for you to use in your views.
 
-For example, when a view is loaded, you get automatic access to the variables applicable to it. You don't need to use a tag to "get" the data. If you're viewing an entry's URL, all of the [entry variables](#entry-variables) will just
-be there.
+For example, when a view is loaded, you get automatic access to the variables applicable to it. You don't need to use a tag to "get" the data. If you're viewing an entry's URL, all of the [entry variables](#entry-variables) will just be there.
 
 If you use a tag that does supply some data, it will typically make those variables available.
 
@@ -60,8 +59,7 @@ You can create your own [Global variables](/globals), which all get injected int
 
 ## View front-matter
 
-Inside Antlers views, you may define YAML front-matter. This may be a handy way to define variables without needing to add anything
-to content or blueprints.
+Inside Antlers views, you may define YAML front-matter. This may be a handy way to define variables without needing to add anything to content or blueprints.
 
 To access this data, prefix the variables with `view:`.
 
@@ -75,6 +73,10 @@ foo: bar
 bar
 ```
 
-## Available Variables
+:::tip
+You **must** define any front-matter variables at the top of the view file, even before things like Antlers comments.
+:::
+
+## Available variables
 
 The following groups of variables are available in your views, depending on their context.
diff --git a/content/collections/docs/vercel.md b/content/collections/docs/vercel.md
index 0da91026a..6d90a6f70 100644
--- a/content/collections/docs/vercel.md
+++ b/content/collections/docs/vercel.md
@@ -4,28 +4,35 @@ blueprint: page
 title: 'Deploying Statamic with Vercel'
 parent: c4f17d05-78bd-41bf-8e06-8dd52f6ec154
 ---
+
+:::warning
+Please note that by hosting your site statically with a service like Vercel or Netlify, **you can't access the Control Panel in production** and are **not able to use dynamic features** like Statamic's built-in forms or random sorting in your templates.
+:::
+
 Deployments are triggered by committing to Git and pushing to GitHub.
 
-- Create a new file called `./build.sh` and paste the code snippet below.
-- Run `chmod +x build.sh` on your terminal to make sure the file can be executed when deploying.
+- Create a new file `build.sh` in your project and paste from the [example code snippet](#example-build-script) below
+- Run `chmod +x build.sh` on your terminal to make sure the file can be executed when deploying
 - Import a new site in your [Vercel](https://vercel.com) account
 - Link the site to your desired GitHub repository
-- Add build command `./build.sh`
+- Set build command to `./build.sh`
 - Set output directory to `storage/app/static`
-- Add environment variable in your project settings: `APP_KEY` `<copy & paste from dev>`
+- Add `APP_KEY` env variable, by running `php artisan key:generate` locally, and copying from your `.env`
+    - ie. `APP_KEY` `your-app-key-value`
+- Add `APP_URL` environment variable after your site has a configured domain
+    - ie. `APP_URL` `https://thats-numberwang-47392.vercel.app`
+
+#### Example Build Script
 
-#### Code for build.sh
 Add the following snippet to `build.sh` file to install PHP, Composer, and run the `ssg:generate` command:
 
 ```
 #!/bin/sh
 
 # Install PHP & WGET
-yum install -y amazon-linux-extras
-amazon-linux-extras enable php8.1
-yum clean metadata
-yum install php php-{common,curl,mbstring,gd,gettext,bcmath,json,xml,fpm,intl,zip,imap}
-yum install wget
+dnf clean metadata
+dnf install -y php8.2 php8.2-{common,mbstring,gd,bcmath,xml,fpm,intl,zip}
+dnf install -y wget
 
 # INSTALL COMPOSER
 EXPECTED_CHECKSUM="$(wget -q -O - https://composer.github.io/installer.sig)"
@@ -49,4 +56,6 @@ php composer.phar install
 php artisan key:generate
 
 # BUILD STATIC SITE
+php please stache:warm -n -q
 php please ssg:generate
+```
diff --git a/content/collections/docs/view-models.md b/content/collections/docs/view-models.md
index 47d8f0964..0dfa3e70e 100644
--- a/content/collections/docs/view-models.md
+++ b/content/collections/docs/view-models.md
@@ -6,11 +6,17 @@ id: fbf59081-ba24-4e82-b011-b687be228c89
 blueprint: page
 ---
 ## Overview
-Have you ever had some complex data or conditions you found challenging to work with in your [Antlers][antlers] templates? Sure you have. Have you ever peeled a banana and had the stem hang onto the peel stubbornly only to have the fruit poke it's face out of a surprise gap like a hoodie? You can probably relate to that too.
+Have you ever had some complex data or conditions you found challenging to work with in your [Antlers][antlers] templates? Sure you have. Have you ever peeled a banana and had the stem hang onto the peel stubbornly only to have the fruit poke its face out of a surprise gap like a hoodie? You can probably relate to that too.
 
 While Antlers is powerful and flexible, what if you could just jump into PHP-land, work out some tricky logic, and put the data back in place before it was rendered?
 
-Enough rhetorical questions – in Statamic 3 you can now solve one of those two problems with a View Model. 🍌
+Enough rhetorical questions – in Statamic you can now solve one of those two problems with a View Model. 🍌
+
+:::tip
+ViewModels manipulate the _view's_ data at the **last possible moment before render**, not the entry data itself. This approach isn't appropriate for globally altering or manipulating content.
+
+You may consider creating a [computed value](/computed-values) for an entry instead, which would work anywhere, for example in other parts of PHP, or within collection loops in your templates.
+:::
 
 ## What's a View Model?
 
@@ -82,13 +88,7 @@ class ArticleStats extends ViewModel
 </p>
 ```
 
-View models help keep your views nice and clean. Use them often and you'll find that they're quickly becoming your new best friend.
-
-:::tip
-ViewModels manipulate the _view's_ data at the **last possible moment before render**, not the entry data itself. This approach isn't appropriate for globally altering or manipulating content.
-
-You may consider creating a [computed value](/computed-values) for an entry instead, which would work anywhere, for example in other parts of PHP, or within collection loops in your templates.
-:::
+View models help keep your views nice and clean. Use them often and you'll find that they're quickly becoming your new best friend. Unless you find a better friend named [Computed Values](/computed-values). He's kind of the new kid in town and his jean jacket is straight fire.
 
 
 [antlers]: /antlers
diff --git a/content/collections/docs/views.md b/content/collections/docs/views.md
index b8ed32a1f..bb079cf4c 100644
--- a/content/collections/docs/views.md
+++ b/content/collections/docs/views.md
@@ -32,11 +32,11 @@ See how layouts and templates work together.
 
 ## Layouts
 
-**Layouts** are the the foundation of your frontend's HTML. Any markup you want to present no matter what page you're on, no matter where you go, how far you travel, or loud you sing, should go into a layout.
+**Layouts** are the foundation of your frontend's HTML. Any markup you want to present no matter what page you're on, no matter where you go, how far you travel, or loud you sing, should go into a layout.
 
 By default, Statamic will look for and use `/resources/views/layout.antlers.html`, but you're welcome to create other layouts and configure specific entries, whole sections, or the whole site to use those instead.
 
-Layouts usually contain `<head></head>` markup, global header, navigation, footer, JavaScript includes, and so on. In between all that HTML is your _template_ area — the magical place where unique, non-global things happen. Use the `{{ template_content }}` variable to set where you'd like that live.
+Layouts usually contain `<head></head>` markup, global header, navigation, footer, JavaScript includes, and so on. In between all that HTML is your _template_ area — the magical place where unique, non-global things happen. Use the `{{ template_content }}` variable to set where you'd like that to live.
 
 ```
 // resources/views/layout.antlers.html
@@ -56,13 +56,19 @@ Layouts usually contain `<head></head>` markup, global header, navigation, foote
 </html>
 ```
 
-An entry can control the layout its rendered with by setting the `layout` system variable.
+An entry can control the layout it's rendered with by setting the `layout` system variable.
 
 ``` yaml
 # Use /resources/views/rss.antlers.html
 layout: rss
 ```
 
+As mentioned above, Statamic will use the `resources/views/layout.antlers.html` view as the default layout. You can change the default layout in your `config/statamic/system.php` config file:
+
+```php
+'layout' => env('STATAMIC_LAYOUT', 'layout'),
+```
+
 ## Templates
 
 Templates are views that can be used by any entry or section on your site. The template's contents will be inserted into the `{{ template_content }}` variable in your layout much like the way a painting goes into an ornate picture frame.
@@ -107,7 +113,7 @@ Partials are reusable views that may find themselves in any number of other layo
 ```
 
 :::best-practice
-We recommend prefixing any views intended to be _only_ used as partials with an underscore, `_like-this.antlers.html` and reference them `{{ partial:like-this }}. The underscore is not necessary in the partial tag definition.
+We recommend prefixing any views intended to be _only_ used as partials with an underscore, `_like-this.antlers.html` and reference them `{{ partial:like-this }}`. The underscore is not necessary in the partial tag definition.
 :::
 
 :::watch https://www.youtube.com/embed/Ddz6mD-jT7E
@@ -125,7 +131,7 @@ This is useful if...
 - You're really used to using Blade and don't want to learn anything else even if it's really simple, similar, and powerful. You do you.
 
 
-## Recommended Conventions
+## Recommended conventions
 
 We recommend the following conventions for consistency. These are just suggestions, not requirements.
 
@@ -140,7 +146,7 @@ We recommend the following conventions for consistency. These are just suggestio
 
 There are a few recommended ways to organize your layouts, templates, and partials. But you don't have to take _our_ word for it. 🌈
 
-### Go Super Flat
+### Go super flat
 
 Partials are indicated by a prefixed underscore (`_header`), layout by the word `layout` and everything else is a template. **Best for small sites.**
 
@@ -154,7 +160,7 @@ resources/views/
   page.antlers.html
 ```
 
-### Organize by Type
+### Organize by type
 
 This is a bit more of a Statamic v2 style where views are grouped by type - partials, layouts, and templates. **Best for medium sized sites.**
 
@@ -177,7 +183,7 @@ resources/views/
     form.antlers.html
 ```
 
-### Organize by Section
+### Organize by section
 
 A more Laravel/application approach where views are grouped by section (or collection), along with their own partials and alternate layout files. **Best for large sites.**
 
@@ -197,4 +203,4 @@ resources/views/
     index.antlers.html
     show.antlers.html
   layout.antlers.html
-```
\ No newline at end of file
+```
diff --git a/content/collections/docs/white-labeling.md b/content/collections/docs/white-labeling.md
index 202a2e6a3..a017d9cf7 100644
--- a/content/collections/docs/white-labeling.md
+++ b/content/collections/docs/white-labeling.md
@@ -15,7 +15,7 @@ White Label options are available in `config/statamic/cp.php` or through corresp
 Keep in mind that according to the license terms you can only rebrand for personal, internal, or client usage. You cannot resell Statamic under another name.
 :::
 
-### CP Theme
+### CP theme
 
 You can choose to switch the default "rad" login theme with a more vanilla (and boring) "business" theme.
 
@@ -28,12 +28,12 @@ You can choose to switch the default "rad" login theme with a more vanilla (and
 - `rad`
 - `business`
 
-<div class="screenshot">
+<figure>
     <img src="/img/white-label-login.png" alt="Statamic White Label Theme">
-    <div class="caption">Here's the "business" theme with a custom logo</div>
-</div>
+    <figcaption>Here's the "business" theme with a custom logo</figcaption>
+</figure>
 
-### Custom CMS Name
+### Custom CMS name
 
 Set a custom name for the CMS.
 
@@ -41,7 +41,7 @@ Set a custom name for the CMS.
 'custom_cms_name' => env('STATAMIC_CUSTOM_CMS_NAME', 'Statamic'),
 ```
 
-### Custom Logo
+### Custom logo
 
 Swap out the logo with a URL to one of your own.
 
@@ -58,13 +58,32 @@ You may set different logos for inside and outside Control Panel (nav bar and lo
 ],
 ```
 
-### Custom Favicon
+You can also specify a different URL to be used when in Dark Mode:
+
+``` php
+'custom_logo_url' => '/logo-light-mode.png',
+
+'custom_dark_logo_url' => '/logo-dark-mode.png',
+```
+
+### Custom logo text
+
+Display a custom name in plain text in the control panel; automatically changes when in Dark Mode.
+
+When defined, logo image URLs will take precedence over logo text.
+
+``` php
+'custom_logo_text' => env('STATAMIC_CUSTOM_LOGO_TEXT', null),
+```
+
+### Custom favicon
 
 Swap out the favicon with a URL to one of your own.
 
 ``` php
 'custom_favicon_url' => env('STATAMIC_CUSTOM_FAVICON_URL', null),
 ```
+
 ### Custom CSS
 
 Set the path to a CSS file and easily add your own styles to the control panel.
diff --git a/content/collections/docs/widgets.md b/content/collections/docs/widgets.md
index 5d888b17b..ba925195f 100644
--- a/content/collections/docs/widgets.md
+++ b/content/collections/docs/widgets.md
@@ -14,6 +14,6 @@ Each item in the array should specify the widget as the type, plus any widget-sp
 
 You may use the same widget multiple times, configured in different ways.
 
-## Available Widgets
+## Available widgets
 
-Check out the [list of available widgets](/reference/widgets) include in Statamic Core.
+Check out the [list of available widgets](/reference/widgets) included in Statamic Core.
diff --git a/content/collections/docs/yaml.md b/content/collections/docs/yaml.md
index 51c196ae0..1eaea149b 100644
--- a/content/collections/docs/yaml.md
+++ b/content/collections/docs/yaml.md
@@ -15,7 +15,7 @@ YAML complies with the JSON spec, making it easy to interchange it with nearly a
 variable_name: value
 ```
 
-YAML is usually stored in `.yaml` or `.yml` files, but can often (and in Statamic's case) can be found inside and top of other text files. This is referred to as "Front Matter" and looks like this:
+YAML is usually stored in `.yaml` or `.yml` files, but can often (and in Statamic's case) be found inside and at the top of other text files. This is referred to as "Front Matter" and looks like this:
 
 ```md
 ---
@@ -40,7 +40,7 @@ $school = "Flatside High";
 var school = "Flatside High";
 ```
 
-### String Escaping
+### String escaping
 
 As YAML is a **structured** data format, you will occasionally need to quote your strings to prevent rogue apostrophes, commas, and other reserved constructs from confusing the parser, allowing you to structure your data exactly as desired.
 
@@ -58,7 +58,7 @@ cartoon: Rocko's Modern Life
 cartoon: "Rocko's Modern Life"
 ```
 
-### Preserving Newlines
+### Preserving newlines
 
 You can preserve the line breaks in your string block by using the `|` pipe symbol followed by a line break and indented content. This is useful if you're writing Markdown or preserving HTML line breaks.
 
@@ -72,7 +72,7 @@ lyrics: |
   I'm at the corner just in time to see the bus fly by
 ```
 
-### Collapsing Newlines
+### Collapsing newlines
 
 Completely ignore line breaks with a `>` character and indent the rest of the content.
 
@@ -132,7 +132,7 @@ to_sell: [aloe vera, winter coat, mittens]
 To render the values from a YAML array:
 
 
-### Element Map
+### Element map
 
 ```yaml
 antisocial:
@@ -147,10 +147,19 @@ $antisocial = [
 ];
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <a href="{{ antisocial:facebook }}">Facebook</a>
 <a href="{{ antisocial:twitter }}">Twitter</a>
 ```
+::tab blade
+```blade
+<a href="{{ $antisocial['facebook'] }}">Facebook</a>
+<a href="{{ $antisocial['twitter'] }}">Twitter</a>
+```
+::
 
 ### Nesting mappings and sequences
 
@@ -161,7 +170,7 @@ This is a very common pattern in Statamic. Bard, Grid, and Replicator fieldtypes
 ```yaml
 students:
   -
-    name: Zack Slater
+    name: Zach Slater
     school: Bayside High
   -
     name: Jack McDade
@@ -183,7 +192,7 @@ $students = [
 ];
 ```
 
-### Mixing and Matching
+### Mixing and matching
 
 You can build multidimensional arrays full of associative arrays, and vice versa.
 
@@ -208,7 +217,7 @@ title: Another Monday
 
 ## Explicit Typing
 
-YAML autodetects the datatype of the entity. Sometimes you'll want to cast the datatype explicitly, like when a single word string looks like a number or  boolean may need disambiguation by surrounding it with quotes or use of an explicit datatype tag.
+YAML autodetects the datatype of the entity. Sometimes you'll want to cast the datatype explicitly, like when a single word string looks like a number or boolean may need disambiguation by surrounding it with quotes or use of an explicit datatype tag.
 
 ```yaml
 a: 42                      # integer
@@ -221,7 +230,7 @@ o: Yes                     # string
 p: Yes we have No whiskey  # string, disambiguated by context.
 ```
 
-## Related Reading
+## Related reading
 
 So there you have it &mdash; YAML in its many shapes and forms. To learn how to render all this lovely data in a template, check out the [Antlers][antlers] section.
 
diff --git a/content/collections/extending-docs/actions.md b/content/collections/extending-docs/actions.md
index a3ccc96d5..ee5aaa355 100644
--- a/content/collections/extending-docs/actions.md
+++ b/content/collections/extending-docs/actions.md
@@ -3,11 +3,15 @@ title: Actions
 template: page
 updated_by: 42bb2659-2277-44da-a5ea-2f1eed146402
 updated_at: 1569347227
-intro: Actions allow you perform tasks on one or more items. You can trigger actions by selecting multiple items in a listing, or using each item's contextual menu.
+intro: Actions allow you to perform tasks on one or more items. You can trigger actions by selecting multiple items in a listing, or using each item's contextual menu.
 stage: 1
 id: ba2e6172-b4dc-443b-8230-b770dec1423c
 ---
 
+:::tip
+Actions allow you to perform tasks on PHP-based items like Entries. If you'd like to perform actions on specific fields within the publish form, check out [Field Actions](/extending/field-actions).
+:::
+
 ## Defining an action
 
 You may create an action using the following command, which will generate a class in the `App\Actions` namespace.
@@ -80,7 +84,7 @@ Each action button will have an automatic name provided by the `HasTitle` trait
 ``` php
 public static function title()
 {
-    return __('That's Some Sweet Action');
+    return __("That's Some Sweet Action");
 }
 ```
 
@@ -124,7 +128,7 @@ protected $dangerous = true;
 
 ## Context
 
-Each action may have additional contextual data passed to it depending on which listing its being used within. For example, you may find
+Each action may have additional contextual data passed to it depending on which listing it's being used within. For example, you may find
 the collection handle when used inside an entry listing, or the asset container handle when used in an asset listing
 
 ``` php
diff --git a/content/collections/extending-docs/addons.md b/content/collections/extending-docs/addons.md
index e42a6ce23..da16468b8 100644
--- a/content/collections/extending-docs/addons.md
+++ b/content/collections/extending-docs/addons.md
@@ -1,13 +1,13 @@
 ---
+id: 5bd75435-806e-458b-872e-7528f24df7e6
+blueprint: page
 title: Addons
 template: page
 updated_by: 42bb2659-2277-44da-a5ea-2f1eed146402
 updated_at: 1569264134
-intro: An addon is a composer package you intend to reuse, distribute, or sell. For simple or private packages, consider implementing directly into your Laravel application.
+intro: 'An addon is a composer package you intend to reuse, distribute, or sell. For simple or private packages, consider implementing directly into your Laravel application.'
 stage: 1
-id: 5bd75435-806e-458b-872e-7528f24df7e6
 ---
-
 ## Creating an Addon
 
 You can generate an addon with a console command:
@@ -18,29 +18,40 @@ php please make:addon example/my-addon
 
 This will scaffold out everything you need to get started as a [private addon](#private-addons) within your site's `addons` directory.
 
-Eventually, an addon will be available on Packagist and installable through Composer (and therefore live inside your `vendor` directory). During development however, you can keep it on your local filesystem as a path repository.
+Eventually, an addon may be available on Packagist and installable through Composer (and therefore live inside your `vendor` directory). During development however, you can keep it on your local filesystem as a path repository.
 
 :::tip
-If you don't plan on distributing your addon or sharing it between multiple projects, you can take a simpler approach and build an [extension](/extending).
+If you don't plan on distributing your addon or sharing it between multiple projects, you can take a simpler approach and just [add things to your Laravel application](/extending).
 :::
 
-An addon consists of at least a `composer.json` and a service provider. Your directory may be placed anywhere, but for the sake of this example, we'll put it in `addons/example`
+
+### What's in an addon?
+
+An addon consists of at least a `composer.json` and a service provider. Your directory may be placed anywhere, but for the sake of this example, we'll put it in `addons/acme/example`
 
 ``` files theme:serendipity-light
 addons/
-    example/
-        src/
-            ServiceProvider.php
-        composer.json
-    app/
-    content/
-    config/
-    public/
-        index.php
-    resources
-    composer.json
+    acme/
+        example/
+            src/
+                ServiceProvider.php
+            composer.json
+app/
+content/
+config/
+public/
+    index.php
+resources
+composer.json
 ```
 
+### Composer.json
+
+The composer.json is used by (you guessed it) Composer in order to install your package.
+
+The `extra.statamic` section is used by Statamic to know that it's an addon and not just a standard Composer package.
+The `extra.laravel.providers` section what Laravel uses to load your service provider.
+
 ``` json
 {
     "name": "acme/example",
@@ -72,7 +83,11 @@ addons/
 }
 ```
 
-Note the service provider should extend `Statamic\Providers\AddonServiceProvider`, and not Illuminate\Support\ServiceProvider. The Statamic subclass provides you with some helpers to reduce boilerplate when compared to stock Laravel.
+### Service Provider
+
+The service provider is where all the various components of your addon get wired together.
+
+You should make sure that your service provider extends Statamic's `Statamic\Providers\AddonServiceProvider`, and not `Illuminate\Support\ServiceProvider`. Statamic's `AddonServiceProvider` includes some bootstrapping and autoloading that isn't included with Laravel's service provider.
 
 ``` php
 <?php
@@ -83,10 +98,7 @@ use Statamic\Providers\AddonServiceProvider;
 
 class ServiceProvider extends AddonServiceProvider
 {
-    public function bootAddon()
-    {
-        //
-    }
+    //
 }
 ```
 
@@ -95,7 +107,11 @@ The `bootAddon` method should be used instead of `boot`. They are the same excep
 makes sure to boot _after_ Statamic has booted.
 :::
 
-In your project root's `composer.json`, add your package to the `require` and `repositories` sections, like so:
+### Installing your freshly created addon
+
+If you ran the `make:addon` command, this would have been taken care of for you. 
+
+Otherwise, in your project root's `composer.json`, add your package to the `require` and `repositories` sections, like so:
 
 ``` json
 {
@@ -130,7 +146,7 @@ Your addon is now installed. You should be able to go to `/cp/addons` and see it
 
 ### Public addons
 
-A public addon is one available as a composer package on packagist.org. Simple require it with composer:
+A public addon is one available as a composer package on packagist.org. Simply require it with composer:
 
 ``` shell
 composer require vendor/package
@@ -189,6 +205,14 @@ public function bootAddon()
 
 ## Registering Components
 
+::: tip
+Statamic v5.28.0 and v5.29.0 introduced the concept of "autoloading" for most addon components.
+
+For example: as long as your tags live in `src/Tags` and your fieldtypes live in `src/Fieldtypes`, they will be automatically registered by Statamic, without you needing to register them manually.
+
+If your addon supports Statamic v5.28.0 or lower, you should continue registering components manually, like shown below. Otherwise, you can let Statamic do its thing 😎.
+:::
+
 You may register your various addon components by adding their class names to corresponding arrays:
 
 ``` php
@@ -219,6 +243,25 @@ protected $commands = [
 ## Assets
 
 ### CSS and Javascript
+The method of adding assets will differ slightly depending on whether you are using Vite or another build process. We recommend Vite.
+
+#### Using Vite (recommended) {#using-vite}
+
+In your service provider, you may register your Vite config like this, adjusting the paths appropriately.
+
+``` php
+protected $vite = [
+    'input' => [
+        'resources/js/cp.js',
+        'resources/css/cp.css'
+    ],
+    'publicDirectory' => 'resources/dist',
+];
+```
+
+[Get more in-depth about how to use Vite in your addon](/extending/vite-in-addons)
+
+#### Using Webpack/Mix
 
 In your service provider, you may register any number of stylesheets or scripts by providing their full paths.
 
@@ -246,7 +289,7 @@ protected $publishables = [
 
 ### Publishing assets
 
-When using the `$scripts`, `$stylesheets`, and `$publishables` properties, these files will be made available to the `artisan vendor:publish` command.
+When using the `$vite`, `$scripts`, `$stylesheets`, and `$publishables` properties, these files will be made available to the `artisan vendor:publish` command.
 They will all be tagged using your addon's slug.
 
 Whenever the `statamic:install` command is run (i.e. after running `composer update`, etc) the following command will be run:
@@ -265,13 +308,13 @@ This may be useful if you need more control around groups of assets to be publis
 
 ### Assets during development
 
-:::tip
-During development of your addon, rather than constantly running `vendor:publish`, consider symlinking your addon's `resource` directory:
+During development, if you're using Vite, the assets will be loaded through a Vite server and should "just work".
+
+If you're using Webpack/Mix, rather than constantly running `vendor:publish`, consider symlinking your addon's `resource` directory:
 
 ``` shell
 ln -s /path/to/addons/example/resources public/vendor/package
 ```
-:::
 
 ## Routing
 
@@ -287,6 +330,12 @@ protected $routes = [
 ];
 ```
 
+::: tip
+As of Statamic v5.29.0, addon routes following the convention shown above will be automatically registered by Statamic.
+
+If your addon supports Statamic v5.29 or lower, you should continue registering your route files manually, like shown below. Otherwise, you can let Statamic do its thing 😎.
+:::
+
 #### Control Panel Routes
 
 Control Panel routes will be automatically prefixed by `/cp` (or whatever URL the control panel has been configured to use) and will have authorization applied.
@@ -390,7 +439,7 @@ Any views located in your `resources/views` directory will automatically be avai
     src/
     resources/
         views/
-        foo.blade.php
+            foo.blade.php
 ```
 
 ``` php
@@ -409,6 +458,16 @@ return view('custom::foo');
 
 ## Events
 
+::: tip
+Statamic v5.35.0 introduced the concept of "autoloading" for event listeners.
+
+As long as your event listener lives in `src/Listeners` and the event is typehinted in the listener's `handle` or `__invoke` method, they will be automatically registered by Statamic, without you needing to register them manually.
+
+Subscribers will also be autoloaded, as long as they live in `src/Subscribers`.
+
+If your addon supports below Statamic v5.33.0, you should continue registering events and subscribers manually, like shown below. Otherwise, you can let Statamic do its thing 😎.
+:::
+
 You may register any number of event listeners or subscribers the same way you would in a traditional Laravel application's EventServiceProvider – by using a `$listen` or `$subscribes` array:
 
 ``` php
@@ -523,6 +582,11 @@ The `update()` method is where your custom data migration logic happens. Feel fr
 
 That's it! Statamic should now automatically run your update script as your users update their addons.
 
+## Testing
+
+Statamic automatically scaffolds a PHPUnit test suite when you generate an addon with `php please make:addon`.
+
+To learn more about writing addon tests, please review our [Testing in Addons](/extending/testing-in-addons) guide.
 
 ## Publishing to the Marketplace
 
@@ -558,7 +622,7 @@ An example use case is a custom fieldtype maintained by a third party vendor. Ev
 
 ### Starters Kits
 
-- Starter kits are installed via `php please starter-kit:install`
+- Starter kits are installed via `statamic new` or `php please starter-kit:install`
 - Starter kits install pre-configured files and settings into your site
 - Starter kits do not live as updatable packages within your apps
 - Starter kit licenses are not tied to a specific site, and expire after a successful install
diff --git a/content/collections/extending-docs/augmentation.md b/content/collections/extending-docs/augmentation.md
index a62f99b73..b36be23c6 100644
--- a/content/collections/extending-docs/augmentation.md
+++ b/content/collections/extending-docs/augmentation.md
@@ -1,7 +1,7 @@
 ---
 title: Augmentation
 intro: |
-  Augmentation is a transformation step in Statamic 3’s data layer which establishes a connection between your front-end and the blueprints defining your content model.
+  Augmentation is a transformation step in Statamic’s data layer which establishes a connection between your front-end and the blueprints defining your content model.
 id: af1de577-8f75-4623-a0a3-d4c4c49390aa
 stage: 3
 ---
@@ -201,7 +201,7 @@ When Statamic tries to retrieve a value from this class, it will check in this o
 You are required to provide a `keys` method, which lets Statamic know all of the potentially available values, used when it tries to retrieve "all" values.
 
 ``` php
-$augmented->all(); 
+$augmented->all();
 
 // [
 //     'title' => 'My Product',
@@ -230,7 +230,7 @@ $augmented->select(['one', 'two']);
 
 ## Shallow Augmentation
 
-To prevent potentially enormous or unnecessary amounts of deeply nested data being output in a number of places, we have the concept of shallow augmentation, which just displays a subset of the available augmented values. 
+To prevent potentially enormous or unnecessary amounts of deeply nested data being output in a number of places, we have the concept of shallow augmentation, which just displays a subset of the available augmented values.
 
 For example, in the REST API, if you were to request a entry, you'd see all of its fields, but they will only show a limited, single-depth subset of data.
 
diff --git a/content/collections/extending-docs/bard.md b/content/collections/extending-docs/bard.md
index 8bc28cfc4..bd70ea89f 100644
--- a/content/collections/extending-docs/bard.md
+++ b/content/collections/extending-docs/bard.md
@@ -1,21 +1,21 @@
 ---
 title: Extending Bard
 stage: 1
-intro: "The Bard fieldtype is a rich-text editor based on [TipTap](https://tiptap.dev/), which in turn is a Vue component that wraps around [ProseMirror](https://prosemirror.net/docs/guide/), which is robust JavaScript framework for building rich-text editors that _don't_ directly write HTML or rely on `contenteditable`, but rather a document model."
+intro: "The Bard fieldtype is a rich-text and block-based editor based on [Tiptap](https://tiptap.dev/), which in turn is a Vue component that wraps around [ProseMirror](https://prosemirror.net/docs/guide/) — a robust JavaScript framework for building rich-text editors that _don't_ directly write HTML or rely on `contenteditable`, but rather a document model."
 id: e2078e40-0b3f-415b-8963-e99b4cc84f02
 ---
 ## Required Reading
 
-Before you attempt to create any Bard extensions, it would be wise to learn how to write a TipTap extension first. Otherwise you'd be trying to learn how to ride a motorcycle before you can even ride a bike. Or a unicyle before you can juggle. To have a better understanding of how to write a TipTap extension, you'd in turn benefit greatly on reading about how ProseMirror works.
+Before you attempt to create any Bard extensions, it is wise to learn how to write a Tiptap extension first. Otherwise you'd be trying to learn how to ride a motorcycle before you can even ride a bike. Or a unicycle before you can juggle. To have a better understanding of how to write a Tiptap extension, you'd in turn benefit greatly on reading about how ProseMirror works.
 
 :::tip
-Writing custom extensions for Bard is pretty complicated, but can be rewarding and give you powerful results.
+Writing custom extensions for Bard is pretty complicated, but can be rewarding and provide powerful results.
 :::
 
-In short, here's a quickstart of the things you should probably start with:
+In short, here's a quick-start of the things you should probably start with:
 
 - [The ProseMirror guide](https://prosemirror.net/docs/guide/) — Yes, it's really long, but you should at least pretend to read it
-- Checking out the [code samples for the core TipTap extensions](https://github.com/ueberdosis/tiptap/tree/v1/packages/tiptap-extensions), so you can understand how TipTap relates to ProseMirror
+- Checking out the [The Tiptap documentation](https://tiptap.dev/introduction) and [code samples for the core Tiptap extensions](https://github.com/ueberdosis/tiptap/tree/develop/packages), so you can understand how Tiptap relates to ProseMirror
 - If you don't know [how to extend the control panel](/extending/control-panel) yet, go ahead and read up on that first. The code snippets later will be part of your extension to the control panel. Alternatively, you may also [extend the control panel through the creation of an addon](/extending/addons).
 - Come back here again and keep on going.
 
@@ -23,121 +23,83 @@ In short, here's a quickstart of the things you should probably start with:
 
 ### Adding New Extensions
 
-You may add your own TipTap extensions to Bard using the `addExtension` method. (Previously `extend`.) The callback may return a single extension, or an array of them.
+You may add your own Tiptap extensions to Bard using the `addExtension` method. The callback may return a single extension, or an array of them.
 
 ``` js
-Statamic.$bard.addExtension(({ mark, node }) => mark(new MyExtension));
+const { Node, Mark, Extension } = Statamic.$bard.tiptap.core;
+
+Statamic.$bard.addExtension(() => Node.create({...}));
 ```
 
 ``` js
-Statamic.$bard.addExtension(({ mark, node }) => {
+Statamic.$bard.addExtension(() => {
     return [
-        mark(new MyExtension),
-        node(new AnotherExtension)
+        Node.create({...}),
+        Mark.create({...}),
+        Extension.create({...}),
     ]
 });
 ```
 
-The classes you return should be wrapped using the provided helper functions (i.e. `mark` or `node` like in the example above).
+Check out [Tiptap's custom extension documentation](https://tiptap.dev/guide/custom-extensions) and [code samples for the core Tiptap extensions](https://github.com/ueberdosis/tiptap/tree/develop/packages) to find out how to write an extension.
+
+If you're providing a new mark or node and intend to use this Bard field on the front-end, you will also need to create a Mark or Node class to be used by the PHP [renderer](#tiptap-php-rendering).
 
 :::tip
-If you want to _replace_ an existing extension, [read below](#replacing-existing-extensions).
+If you need any other Tiptap helpers or utilities you can use our [Tiptap API](#tiptap-api).
 :::
 
-### Extension Classes
-
-Your extension class should look like a TipTap extension ([see an example here](https://github.com/ueberdosis/tiptap/blob/v1/packages/tiptap-extensions/src/marks/Bold.js))
-except it should not extend another class, and you should use methods instead of getters.
-
-``` js
-export default class MyExtension {
-  constructor(options = {}) {
-    this.options = options
-  }
-
-  name() {
-    return 'myextension';
-  }
-
-  schema() {
-    // Your schema stuff
-  }
-
-  commands({type}) {
-    // Your command stuff
-  }
-
-  inputRules({type}) {
-    return [] // Input rules if you want
-  }
-
-  plugins() {
-    return []
-  }
-
-  pasteRules() {
-    return []
-  }
-}
-```
-
 ### Replacing Existing Extensions
 
-If you'd like to replace a [native extension](https://github.com/ueberdosis/tiptap/tree/v1/packages/tiptap-extensions/src/nodes) (e.g. headings or paragraphs) you can use the `replaceExtension` method. It takes the `name` of the extension, and a callback that returns a single extension instance.
-
-The callback will provide you with the existing extension instance.
+If you'd like to replace a [native extension](https://github.com/ueberdosis/tiptap/tree/develop/packages) (e.g. headings or paragraphs) you can use the `replaceExtension` method. It takes the `name` of the extension, and a callback that returns a single extension instance.
 
 ```js
-Statamic.$bard.replaceExtension('heading', ({ mark, node, extension }) => {
-    return node(new CustomHeadingExtension(extension.options));
-})
+const { Node } = Statamic.$bard.tiptap.core;
+
+Statamic.$bard.replaceExtension('heading', ({ extension, bard }) => {
+    return Node.create({
+        name: 'heading',
+        ...
+    });
+});
 ```
 
-If you are doing simple tweaks to an extension (e.g. adding tailwind classes to headings) you can use the native extension classes directly by importing them through `$bard.tiptap.extensions`. Then you don't need to author an entire class and use the `mark` or `node` helpers.
+The callback will provide you with the existing extension instance, so if you are doing simple tweaks to an extension (e.g. customizing an input rule) you can simply extend the existing instance. Then you don't need to author an entire extension:
 
 ```js
-const { Heading } = Statamic.$bard.tiptap.extensions;
-
-class CustomHeading extends Heading {
-    get schema() {
-        return {
-            ...super.schema,
-            toDOM: node => [`h${node.attrs.level}`, { class: 'font-bold' }, 0],
-        }
-    }
-}
-
-Statamic.$bard.replaceExtension('heading', ({ mark, node, extension }) => {
-    return new CustomHeadingExtension(extension.options);
-})
+const { nodeInputRule } = Statamic.$bard.tiptap.core;
+
+Statamic.$bard.replaceExtension('heading', ({ extension, bard }) => {
+    return extension.extend({
+        addInputRules() {
+            return [
+                nodeInputRule({...}),
+            ];
+        },
+    });
+});
 ```
 
+You can also reconfigure extensions (e.g. to add Tailwind classes to headings or disable specific "smart typography" rules):
 
-### Marks and Nodes
-
-The `addExtension` and `replaceExtension` callbacks will provide the `mark` and `node` functions to you. Use it to wrap your class, and under the hood it will convert it to an actual TipTap extension class
-to be used by Bard.
-
-Within your class, Statamic will provide commonly used functions along with the arguments you'd get in a TipTap extension. This prevents you from needing to
-import the entire TipTap library into your build. For example:
-
-``` js
-// mark
-commands({ type, toggleMark }) {
-    return () => toggleMark(type)
-}
-
-// node
-commands({ type, toggleBlockType }) {
-    return () => toggleBlockType(type)
-}
+```js
+Statamic.$bard.replaceExtension('heading', ({ extension, bard }) => {
+    return extension.configure({
+        HTMLAttributes: {
+            class: 'font-bold',
+        },
+    });
+});
+```
+```js
+Statamic.$bard.replaceExtension('typography', ({ extension, bard }) => {
+    return extension.configure({
+        oneHalf: false,
+        oneQuarter: false,
+        threeQuarters: false,
+    });
+});
 ```
-
-:::tip
-If you need more TipTap methods than the ones passed into the arguments, you can use our [TipTap API](#tiptap-api).
-:::
-
-If you're providing a new mark or node and intend to use this Bard field on the front-end, you will also need to create a Mark or Node class to be used by the PHP [renderer](#prosemirror-rendering).
 
 ## Buttons
 
@@ -151,14 +113,25 @@ The callback may return a `button` object, or an array of them.
 
 ``` js
 Statamic.$bard.buttons((buttons, button) => {
-    return button({ name: 'bold', text: __('Bold'), command: 'bold', icon: 'bold' });
+    return button({
+        name: 'custom_bold',
+        text: __('Custom Bold'), // Tooltip text
+        svg: 'bold', // Name of an SVG icon
+        html: '<svg>...</svg>', // Custom icon HTML
+        args: { class: 'font-bold' }, // The command arguments
+        command: (editor, args) => editor.chain().focus().setCustomBold(args).run(), // The command to run
+        activeName: 'customBold', // The active node/mark type that will activate this button (falls back to name)
+        active: (editor, args) => editor.isActive('bold'), // Active check callback (overrides activeName)
+        visibleWhenActive: 'example', // The active node/mark type that will show this button (always visible if not set)
+        visible: (editor, args) => editor.isActive('example'), // Visible check callback (overrides visibleWhenActive)
+    });
 });
 ```
 
 ``` js
 Statamic.$bard.buttons((buttons, button) => [
-    button({ name: 'bold', text: __('Bold'), command: 'bold', icon: 'bold' }),
-    button({ name: 'italic', text: __('Italic'), command: 'italic', icon: 'italic' }),
+    button({...}),
+    button({...}),
 ]);
 ```
 
@@ -166,11 +139,9 @@ Returning values to the `buttons` method will push them onto the end. If you nee
 
 ``` js
 Statamic.$bard.buttons((buttons, button) => {
-    const indexOfBold = _.findIndex(buttons, { command: 'bold' });
+    const indexOfBold = _.findIndex(buttons, { name: 'bold' });
 
-    buttons.splice(indexOfBold + 1, 0, button({
-        name: 'italic', text: 'Italic', command: 'italic', icon: 'italic'
-    }));
+    buttons.splice(indexOfBold + 1, 0, button({...}));
 });
 ```
 
@@ -180,33 +151,33 @@ Using the `button()` method will make the button only appear if the Bard field h
 If you'd like your button to appear on all Bard fields, regardless of whether it's been configured to use that button, you can just return an object. Don't wrap with `button()`.
 :::
 
-## TipTap API
+## Tiptap API
 
 In your extensions, you may need to use functions from the `tiptap` library. Rather than importing the library yourself and bloating your JS files, you may use methods through our API.
 
 ``` js
-Statamic.$bard.tiptap.core; // 'tiptap'
-Statamic.$bard.tiptap.commands; // 'tiptap-commands'
-Statamic.$bard.tiptap.utils; // 'tiptap-utils'
+Statamic.$bard.tiptap.core; // `tiptap` (core, commands, utilities and helpers)
+Statamic.$bard.tiptap.pm.state; // `prosemirror-state`
+Statamic.$bard.tiptap.pm.model; // `prosemirror-model`
+Statamic.$bard.tiptap.pm.view; // `prosemirror-view`
 ```
 
 You could shorten things up by using destructuring. For example:
 
 ``` js
-const { core: tiptap, commands, utils } = Statamic.$bard.tiptap;
-const selection = new tiptap.TextSelection(...);
-commands.insertText(...);
-utils.getMarkAttrs(...);
+const { InputRule, insertText, getAttributes } = Statamic.$bard.tiptap.core;
+new InputRule(...);
+insertText(...);
+getAttributes(...);
 ```
 
-## ProseMirror Rendering
+## Tiptap PHP Rendering
 
 If you have created an extension on the JS side to be used inside the Bard fieldtype, you will need to be able to render it on the PHP side (in your views).
 
 The Bard `Augmentor` class is responsible for converting the ProseMirror structure to HTML.
 
-You can use the `addExtension` or `replaceExtension` methods to bind an extension class into the renderer. Your service provider's `boot` method
-is a good place to do this.
+You can use the `addExtension` or `replaceExtension` methods to bind an extension class into the renderer. Your AppServiceProvider's `boot` method is a good place to do this.
 
 ``` php
 use Statamic\Fieldtypes\Bard\Augmentor;
@@ -230,3 +201,5 @@ public function boot()
     });
 }
 ```
+
+Check out [code samples for the core Tiptap extensions](https://github.com/ueberdosis/tiptap-php/tree/main/src) to find out how to write PHP extensions.
diff --git a/content/collections/extending-docs/control-panel.md b/content/collections/extending-docs/control-panel.md
index 45c7e8c34..6f0416af3 100644
--- a/content/collections/extending-docs/control-panel.md
+++ b/content/collections/extending-docs/control-panel.md
@@ -11,77 +11,125 @@ If you're [creating an addon](/extending/addons), they will have their own ways
 
 ## Adding CSS and JS assets
 
-Statamic can load extra stylesheets and Javascript files located in the `public/vendor/` directory.
+Statamic can load custom stylesheets and Javascript files located in the `public/vendor/` directory, or from external sources.
 
-You may register an asset to be loaded in the Control Panel using the `script` and `style` methods. This will accept a vendor name and a path.
+### Using Vite (recommended) {#using-vite}
+[Vite](https://vite.dev/) is a modern frontend build tool and recommended in the Statamic and Laravel ecosystems.
 
-For your application specific modifications, `app` will probably do just fine as a vendor name.
+A fresh Statamic install will have Vite ready to go (using the Laravel Vite wrapper plugin) and is the fastest way for you to add CSS and JavaScript to the Control Panel.
 
-``` php
+The code snippets below will already be in your site but commented out. They just need to be uncommented.
+
+You may register a Vite asset to be loaded in the Control Panel using the `vite` method. This will accept a vendor name and an array of paths. For your application specific modifications, `app` will probably do just fine as a vendor name.
+
+```php
 use Statamic\Statamic;
 
 class AppServiceProvider
 {
     public function boot()
     {
-        Statamic::script('app', 'cp.js');
-        Statamic::style('app', 'cp.css');
+        Statamic::vite('app', [ // [tl! ++:start]
+            'resources/js/cp.js',
+            'resources/css/cp.css'
+        ]); // [tl! ++:end]
     }
 }
 ```
 
-These commands will make Statamic expect files at `public/vendor/app/js/cp.js` and `public/vendor/app/css/cp.css` respectively.
-
-:::tip
-This, as well as the webpack config below are already included in the `statamic/statamic` starter site. You just have to uncomment them in `app/Providers/AppServiceProvider.php`.
-:::
+Your `vite.config.js` can contain files for your front-end and the control panel. You'll need to add the control panel input files.
 
-## Adding assets to your build process
+If you plan to create Vue-based features (such as fieldtypes), you will need to make sure the vue2 npm package is installed. 
 
-Rather than writing flat CSS and JS files directly into the `public` directory, you can (and should) set up source files to output there instead.
 
-Add the following to your `webpack.mix.js`, adjusting the location of your source files as necessary:
+```bash
+npm i --save-dev @vitejs/plugin-vue2
+```
 
 ``` js
-mix.js('resources/js/cp.js', 'public/vendor/app/js')
-   .sass('resources/sass/cp.scss', 'public/vendor/app/css');
+import { defineConfig } from 'vite';
+import laravel from 'laravel-vite-plugin';
+import vue2 from '@vitejs/plugin-vue2'; // [tl! ++]
+
+export default defineConfig({
+    plugins: [
+        laravel({
+            input: [
+                'resources/css/site.css',
+                'resources/js/site.js',
+                'resources/css/cp.css',  // [tl! ++]
+                'resources/js/cp.js',  // [tl! ++]
+            ],
+            refresh: true,
+        }),
+        vue2(), // [tl! ++]
+    ],
+});
 ```
 
-The `cp.js` in this example may be your entry point for loading various other files. For instance, you could import fieldtypes:
+Now you are ready to add JS code to `cp.js`:
 
-``` files theme:serendipity-light
-resources/
-    js/
-        cp.js
-        components/
-            fieldtypes/
-                Password.vue
+```php
+alert('Ready to code!');
 ```
 
-``` js
-// resources/js/cp.js
-import Password from './components/fieldtypes/Password.vue';
+To start Vite, run `npm run dev`. The control panel will automatically reload your changes as you work. 
 
-Statamic.booting(() => {
-    Statamic.$components.register('password-fieldtype', Password);
-});
+When you're ready to deploy to production, you can run `npm run build`. 
+
+### Using Webpack
+
+While Vite is the recommended build tool for adding assets to the control panel, you are welcome to use other tools.
+
+If you're using Webpack, Laravel Mix, or some other tool, you may register an asset to be loaded in the Control Panel using the `script` and `style` methods. This will accept a vendor name and a path.
+
+
+``` php
+use Statamic\Statamic;
+
+class AppServiceProvider
+{
+    public function boot()
+    {
+        Statamic::script('app', 'cp.js');
+        Statamic::style('app', 'cp.css');
+    }
+}
+```
+
+These methods will make Statamic expect files at `public/vendor/app/js/cp.js` and `public/vendor/app/css/cp.css` respectively.
+
+### Using `<script>` tags in the Control Panel
+
+For externally-hosted scripts, you may register assets to be loaded in the Control Panel with the `externalScript` method. This method accepts the URL of an external script.
+
+
+```php
+use Statamic\Statamic;
+
+class AppServiceProvider
+{
+    public function boot()
+    {
+        Statamic::externalScript('https://kit.fontawesome.com/5t4t4m1c.js');
+    }
+}
 ```
 
-``` vue
-// resources/js/components/fieldtypes/Password.vue
-<template>
-    ...
-</template>
-<script>
-export default {
-    //
+Otherwise, for inline scripts, you may use the `inlineScript` method. You should omit the `<script>` tags.
+
+```php
+use Statamic\Statamic;
+
+class AppServiceProvider
+{
+    public function boot()
+    {
+        Statamic::inlineScript('window.Beacon("init", "abc123")');
+    }
 }
-</script>
 ```
 
-:::tip
-You are welcome to customize the filenames and folder structure and even the entire build process. The only important thing is to import the compiled files with `Statamic::script()`.
-:::
 
 ## Adding control panel routes
 
diff --git a/content/collections/extending-docs/cp-navigation.md b/content/collections/extending-docs/cp-navigation.md
index 1bf0c0090..576a83cfd 100644
--- a/content/collections/extending-docs/cp-navigation.md
+++ b/content/collections/extending-docs/cp-navigation.md
@@ -29,7 +29,7 @@ Let's assume we're creating a Store addon, and want to add a `Store` nav item to
 ```php
 use Statamic\Facades\CP\Nav;
 
-public function boot()
+public function bootAddon()
 {
     Nav::extend(function ($nav) {
         $nav->content('Store')
@@ -52,6 +52,10 @@ Nav::extend(function ($nav) {
 
 If you wish to use a custom SVG or one from the [Streamline Icon Pack](https://app.streamlinehq.com/icons/streamline-light) that's not included in Statamic, you may pass the SVG icon to the `icon()` method, in place of an icon name.
 
+:::tip
+You can access the complete set of default icons for the `icon()` method in the vendor files located at `vendor/statamic/cms/resources/svg/icons`. Alternatively, you can also view them directly [on GitHub](https://github.com/statamic/cms/tree/5.x/resources/svg/icons/light)
+:::
+
 ```php
 Nav::extend(function ($nav) {
     $nav->create('Store')
@@ -115,7 +119,7 @@ Nav::extend(function ($nav) {
 
 ## Removing Items
 
-To remove an item, we only need to specify the section and item name:
+To remove an item, we may specify the section and item name:
 
 ```php
 Nav::extend(function ($nav) {
@@ -123,6 +127,14 @@ Nav::extend(function ($nav) {
 });
 ```
 
+To remove a child of an item, we can pass a third param to specify the child's name:
+
+```php
+Nav::extend(function ($nav) {
+    $nav->remove('Content', 'Collections', 'Products');
+});
+```
+
 To remove an entire section, we only need to specify the section name:
 
 ```php
@@ -169,5 +181,3 @@ The code examples above demonstrate how to [add](#adding-items), [modify](#modif
 | `children()` | `$children` (array\|collection\|closure) | Define child items. |
 | `can()` | `$ability` (string), `$params` (mixed, optional) | Define authorization. |
 | `view()` | `$view` (string) | Define custom view. |
-| `active()` | `$pattern` (string) | A regular expression to check if the nav item is active. The URL will be relative from the CP. eg. on `/cp/foo`, you'd just get `foo`. |
-
diff --git a/content/collections/extending-docs/data.md b/content/collections/extending-docs/data.md
index f92b840dc..7e3769a0f 100644
--- a/content/collections/extending-docs/data.md
+++ b/content/collections/extending-docs/data.md
@@ -99,6 +99,11 @@ When you are saving or creating your data instance, the `EntrySaving`, `EntryCre
 $entry->saveQuietly();
 ```
 
+Similarly, when deleting data, the `EntryDeleting` and `EntryDeleted` events are dispatched. To surpress those events, use the `deleteQuietly` method:
+```php
+$entry->deleteQuietly();
+```
+
 ## Creating Data
 
 Of course, the data had to get there somehow. You can also create data using the corresponding facades.
@@ -110,7 +115,7 @@ Once you have an instance, you can manipulate it using various methods the same
 use Statamic\Facades\Entry;
 
 $entry = Entry::make()
-            ->published()
+            ->published(true)
             ->data(['title' => 'About us', 'subtitle' => 'We are awesome'])
             ->etc(); // and so on...
 
@@ -130,7 +135,7 @@ More often than not, you'll want to use the "standard" way of getting data out o
 You can use property access to get a single field's augmented value:
 
 ```yaml
-id: 1
+id: 123
 title: My post
 content: |
   # Heading
@@ -268,3 +273,44 @@ $entry->toAugmentedCollection(['title', 'collection']);
 ```
 
 The `toAugmentedArray` method does the same as `toAugmentedCollection`, except that it returns an array.
+
+
+### Checking for data changes
+
+Statamic provides `isDirty`, `isClean`, and `getOriginal` methods to let you see what data has been changed in your item since it was originally retrieved.
+
+The `isDirty` method checks if any of the item's data has been changed since it was last saved. You may pass a specific attribute name or an array of attributes to the `isDirty` method to determine if any of the attributes are "dirty". The `isClean` method will determine if an attribute has remained unchanged since the item was retrieved. This method also accepts an optional attribute argument:
+
+```php
+$entry->title; // "Post title"
+$entry->image; // "/path/to/image.jpg"
+
+$entry->title = 'New Title';
+
+$entry->isDirty(); // true
+$entry->isDirty('title'); // true
+$entry->isDirty('image'); // false
+$entry->isDirty(['image', 'title']); // true
+
+$entry->isClean(); // false
+$entry->isClean('title'); // false
+$entry->isClean('image'); // true
+$entry->isClean(['image', 'title']); // false
+
+$entry->save();
+
+$entry->isDirty(); // false
+$entry->isClean(); // true
+```
+
+The `getOriginal` method returns an array containing the original attributes of the item regardless of any changes to the item since it was retrieved. This method also accepts an optional attribute argument:
+
+```php
+$entry->title; // "Post title"
+$entry->image; // "/path/to/image.jpg"
+
+$entry->title = 'New Title';
+
+$entry->getOriginal('title'); // "Post title"
+$entry->getOriginal(); // ["Post title", "/path/to/image.jpg"]
+```
diff --git a/content/collections/extending-docs/dictionaries.md b/content/collections/extending-docs/dictionaries.md
new file mode 100644
index 000000000..574c2e987
--- /dev/null
+++ b/content/collections/extending-docs/dictionaries.md
@@ -0,0 +1,253 @@
+---
+id: d0668b6e-915b-46da-863e-51fec54b02e2
+blueprint: page
+title: Dictionaries
+template: page
+intro: 'Dictionaries add options to the [Dictionary](/fieldtypes/dictionary) fieldtype.'
+---
+## Overview
+
+Dictionaries come in two "flavors" depending on which class you extend from.
+
+With a `BasicDictionary`, you only really need to define the items. The options, searching, and GraphQL behavior is all handled automatically.
+
+If you need more control, you can either override methods, or extend the base `Dictionary` class and do it yourself.
+
+:::tip
+You might not even need a custom dictionary. The native [File dictionary](/fieldtypes/dictionary#file) allows you simply provide a JSON, YAML, or CSV file to use a source of options.
+:::
+
+
+## Basic Dictionaries
+
+You may create a dictionary using the following command, which will generate a class in the `App\Dictionaries` namespace.
+
+```shell
+php please make:dictionary
+```
+
+You may generate it into an addon using the `--addon=vendor/package` option, which will generate it into your addon's `Dictionaries` namespace.
+
+```php
+<?php
+
+namespace App\Dictionaries;
+
+use Statamic\Dictionaries\BasicDictionary;
+
+class States extends BasicDictionary
+{
+    protected function getItems(): array
+    {
+        return [
+            ['label' => 'Alabama', 'value' => 'AL', 'capital' => 'Montgomery'],
+            ['label' => 'Alaska', 'value' => 'AK', 'capital' => 'Juneau'],
+            ['label' => 'Arizona', 'value' => 'AZ', 'capital' => 'Phoenix'],
+            // ...
+        ];
+    }
+}
+```
+
+### Item data
+
+In the example above, you can see that each item has a `label` and `value`. These will be used in the dropdown field. Any additional keys will be available within templates.
+
+Here we are returning a hardcoded array. But in reality you may be getting options from somewhere like a file, database, or an API:
+
+```php
+protected function getItems(): array
+{
+    return Product::all()->toArray();
+}
+```
+
+
+### Values and Labels
+
+By default, the `value` and `label` keys will be used. However, you may remap them:
+
+```php
+protected string $valueKey = 'abbr';
+protected string $labelKey = 'name';
+
+protected function getItems(): array
+{
+    return [
+        ['name' => 'Alabama', 'abbr' => 'AL', 'capital' => 'Montgomery'],
+        // ...
+    ];
+}
+```
+
+
+If you require more logic, you can override the `getItemValue` and/or `getItemLabel` methods:
+
+```php
+protected function getItemLabel(array $item): string
+{
+    return $item['name'] . ' (' . $item['label'] . ')'; // "Alabama (AL)"
+}
+```
+
+### Basic Search
+
+By default, when a user searches the field, a basic search will be performed by checking against each item's values.
+
+You may use the `searchable` property to narrow down which fields should be searched.
+
+```php
+protected array $searchable = ['name', 'abbr'];
+```
+
+Alternatively, you may customize how the match is performed by overriding the `matchesSearchQuery` method:
+
+```php
+protected function matchesSearchQuery(string $query, Item $item): bool
+{
+    return str_contains($item['name'], $query);
+}
+```
+
+## Options
+
+The `options` method controls what is selectable within the fieldtype. This method should return an array of value/label pairs.  
+
+```php
+public function options(?string $search = null): array
+{
+    return [
+        'one' => 'Option One',
+        'two' => 'Option Two',
+    ];   
+}
+```
+
+This array's keys define what will be stored in the content.
+
+### Search
+
+The `options` method will be passed a `$search` string if the user is searching within the fieldtype. You should filter your options based on this search term.
+
+## Items
+
+The `get` method accepts a value (one of the option's keys) and should return an `Item` instance.
+
+An `Item` requires the value, label, and optionally an array of any additional data.
+
+In the following example we assume a product ID was saved to the content, the product name is the label, and price/sku is extra.
+
+```php
+public function get(string $key): ?Item
+{
+    $product = Product::find($key);
+
+    return new Item($key, $product->name, [
+        'price' => $product->price,
+        'sku' => $product->sku,
+    ]);
+}
+```
+
+## Config
+
+You may define config fields in order for the user to customize functionality of your dictionary. For example, if you are providing products, you may want to allow the user to select a category to narrow down the options.
+
+```php
+protected function fieldItems()
+{
+    return [
+        'category' => [
+           'type' => 'select',
+           'options' => ['clothing', 'accessories']
+        ]
+    ];
+}
+```
+
+The user's configuration values will be available in your class within the `config` property.
+
+```php
+$this->config['category'];
+```
+
+## GraphQL
+
+A dictionary will automatically get a GraphQL type named `Dictionary_YourClass`. Within it, you're able to query the item's fields, like so:
+
+```graphql
+your_dictionary_field {
+  id
+  price
+}
+```
+
+By default, the base `Dictionary` class will provide the GraphQL schema for nested fields automatically. It does this by looking up the first item. You may wish to override this and provide your own schema.
+
+```php
+protected function getGqlFields(): array
+{
+    return [
+        'id' => [
+            'type' => GraphQL::nonNull(GraphQL::string()),
+            'resolve' => fn (Item $item, $args, $context, $info) => $item['id'];
+        ],
+        'price' => [
+            'type' => GraphQL::nonNull(GraphQL::int()),
+            'resolve' => fn (Item $item, $args, $context, $info) => $item['price'];
+        ],
+        // ...
+    ];
+}
+```
+
+## Full Example
+
+Here is an example dictionary class that will use the [MusicBrainz](https://musicbrainz.org/) API to create a dictionary of musicians/artists.
+
+```php
+<?php
+
+namespace App\Dictionaries;
+
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Http;
+use Statamic\Dictionaries\Dictionary;
+use Statamic\Dictionaries\Item;
+
+class Artists extends Dictionary
+{
+    public function options(?string $search = null): array
+    {
+        if (! $search) {
+            return [];
+        }
+
+        $response = Http::get('https://musicbrainz.org/ws/2/artist/?fmt=json&query=artist:'.urlencode($search))->json();
+
+        return collect($response['artists'])->mapWithKeys(function ($artist) {
+            $label = $artist['name'];
+
+            if ($disambiguation = $artist['disambiguation'] ?? null) {
+                $label .= ' ('.$disambiguation.')';
+            }
+
+            return [$artist['id'] => $label];
+        })->all();
+    }
+
+    public function get(string $key): ?Item
+    {
+        return Cache::rememberForever('artist-'.$key, function () use ($key) {
+            $response = Http::get('https://musicbrainz.org/ws/2/artist/'.$key.'?fmt=json')->json();
+
+            return new Item($key, $response['name'], [
+                'name' => $response['name'],
+                'disambiguation' => $response['disambiguation'] ?? null,
+                'type' => $response['type'],
+                'country' => $response['country'],
+            ]);
+        });
+    }
+}
+```
diff --git a/content/collections/extending-docs/events.md b/content/collections/extending-docs/events.md
index 2990869a6..def133449 100644
--- a/content/collections/extending-docs/events.md
+++ b/content/collections/extending-docs/events.md
@@ -11,16 +11,11 @@ intro: |
 
 Statamic will dispatch a number of events in various locations throughout the codebase.
 
-In a nutshell, you'd create an event listener or subscriber, connect them together in a service provider, then handle the event.
+To listen for events, simply create an event listener, type the event name, then handle the event.
 
 ``` php
-protected $listen = [
-    'SomeEvent' => [
-        'SomeListener',
-    ],
-];
-```
-``` php
+use Statamic\Events\SomeEvent;
+
 class SomeListener
 {
     public function handle(SomeEvent $event)
@@ -30,7 +25,17 @@ class SomeListener
 }
 ```
 
-Consult the [Laravel event documentation](https://laravel.com/docs/events) for a more in-depth explanation on events.
+For applications with a `app/Providers/EventServiceProvider.php` file, you should also register the event listener in the `$listen` array:
+
+``` php
+protected $listen = [
+    'SomeEvent' => [
+        'SomeListener',
+    ],
+];
+```
+
+For a more in-depth explanation on events, please consult the [Laravel documentation](https://laravel.com/docs/events).
 
 If you're creating an addon, you can quickly [register event listeners or subscribers](/extending/addons#events).
 
@@ -52,6 +57,18 @@ public function handle(AssetContainerBlueprintFound $event)
 }
 ```
 
+### AssetContainerCreating
+`Statamic\Events\AssetContainerCreating`
+
+Dispatched before an asset container is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(AssetContainerCreating $event)
+{
+    $event->container;
+}
+```
+
 ### AssetContainerDeleted
 `Statamic\Events\AssetContainerDeleted`
 
@@ -76,6 +93,42 @@ public function handle(AssetContainerSaved $event)
 }
 ```
 
+### `AssetCreated`
+`Statamic\Events\AssetCreated`
+
+Dispatched after an asset has been created or uploaded.
+
+``` php
+public function handle(AssetCreated $event)
+{
+    $event->asset;
+}
+```
+
+### `AssetCreating`
+`Statamic\Events\AssetCreating`
+
+Dispatched before an asset is created or uploaded. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(AssetCreating $event)
+{
+    $event->asset;
+}
+```
+
+### AssetDeleting
+`Statamic\Events\AssetDeleting`
+
+Dispatched before an asset is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(AssetDeleting $event)
+{
+    $event->asset;
+}
+```
+
 ### AssetDeleted
 `Statamic\Events\AssetDeleted`
 
@@ -124,6 +177,18 @@ public function handle(AssetSaved $event)
 }
 ```
 
+### AssetSaving
+`Statamic\Events\AssetSaving`
+
+Dispatched before an asset is saved. You can return `false` to prevent it from being saved.
+
+``` php
+public function handle(AssetSaving $event)
+{
+    $event->asset;
+}
+```
+
 ### AssetUploaded
 `Statamic\Events\AssetUploaded`
 
@@ -136,6 +201,30 @@ public function handle(AssetUploaded $event)
 }
 ```
 
+### BlueprintCreating
+`Statamic\Events\BlueprintCreating`
+
+Dispatched before a blueprint is created. You can return `false` to prevent it from being creating.
+
+``` php
+public function handle(BlueprintCreating $event)
+{
+    $event->blueprint;
+}
+```
+
+### BlueprintDeleting
+`Statamic\Events\BlueprintDeleting`
+
+Dispatched before a blueprint is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(BlueprintDeleting $event)
+{
+    $event->blueprint;
+}
+```
+
 ### BlueprintDeleted
 `Statamic\Events\BlueprintDeleted`
 
@@ -160,6 +249,18 @@ public function handle(BlueprintSaved $event)
 }
 ```
 
+### CollectionDeleting
+`Statamic\Events\CollectionDeleting`
+
+Dispatched before a collection is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(CollectionDeleting $event)
+{
+    $event->collection;
+}
+```
+
 ### CollectionDeleted
 `Statamic\Events\CollectionDeleted`
 
@@ -184,6 +285,18 @@ public function handle(CollectionCreated $event)
 }
 ```
 
+### CollectionCreating
+`Statamic\Events\CollectionCreating`
+
+Dispatched before a collection is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(CollectionCreating $event)
+{
+    $event->collection;
+}
+```
+
 ### CollectionSaved
 `Statamic\Events\CollectionSaved`
 
@@ -196,6 +309,18 @@ public function handle(CollectionSaved $event)
 }
 ```
 
+### CollectionSaving
+`Statamic\Events\CollectionSaving`
+
+Dispatched before a collection is saved. You can return `false` to prevent it from being saved.
+
+``` php
+public function handle(CollectionSaving $event)
+{
+    $event->collection;
+}
+```
+
 
 ### CollectionTreeDeleted
 `Statamic\Events\CollectionTreeDeleted`
@@ -221,6 +346,18 @@ public function handle(CollectionTreeSaved $event)
 }
 ```
 
+### CollectionTreeSaving
+`Statamic\Events\CollectionTreeSaving`
+
+Dispatched when a collection tree is being saved. You can return `false` to prevent it from being saved.
+
+``` php
+public function handle(CollectionTreeSaving $event)
+{
+    $event->tree;
+}
+```
+
 ### EntryBlueprintFound
 `Statamic\Events\EntryBlueprintFound`
 
@@ -249,6 +386,30 @@ public function handle(EntryCreated $event)
 }
 ```
 
+### EntryCreating
+`Statamic\Events\EntryCreating`
+
+Dispatched before an entry is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(EntryCreating $event)
+{
+    $event->entry;
+}
+```
+
+### EntryDeleting
+`Statamic\Events\EntryDeleting`
+
+Dispatched before an entry is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(EntryDeleting $event)
+{
+    $event->entry;
+}
+```
+
 ### EntryDeleted
 `Statamic\Events\EntryDeleted`
 
@@ -273,6 +434,10 @@ public function handle(EntrySaved $event)
 }
 ```
 
+:::tip Note
+When an entry has multiple localizations, the `EntrySaved` event will be fired for each of those localizations. You may use the `$event->isInitial()` method to determine whether the localized entry from the event was the one originally being saved.
+:::
+
 ### EntrySaving
 `Statamic\Events\EntrySaving`
 
@@ -285,6 +450,44 @@ public function handle(EntrySaving $event)
 }
 ```
 
+### EntryScheduleReached
+`Statamic\Events\EntryScheduleReached`
+
+Dispatched whenever a scheduled entry reaches its target date. This event is used in multiple places such as updating search indexes and invalidating caches.
+
+The event will be dispatched on the minute _after_ the scheduled time.
+
+``` php
+public function handle(EntryScheduleReached $event)
+{
+    $event->entry;
+}
+```
+
+### FieldsetCreating
+`Statamic\Events\FieldsetCreating`
+
+Dispatched before a fieldset is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(FieldsetCreating $event)
+{
+    $event->fieldset;
+}
+```
+
+### FieldsetDeleting
+`Statamic\Events\FieldsetDeleting`
+
+Dispatched before a fieldset is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(FieldsetDeleting $event)
+{
+    $event->fieldset;
+}
+```
+
 ### FieldsetDeleted
 `Statamic\Events\FieldsetDeleted`
 
@@ -325,6 +528,30 @@ public function handle(FormBlueprintFound $event)
 }
 ```
 
+### FormCreating
+`Statamic\Events\FormCreating`
+
+Dispatched before a form is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(FormCreating $event)
+{
+    $event->form;
+}
+```
+
+### FormDeleting
+`Statamic\Events\FormDeleting`
+
+Dispatched before a form is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(FormDeleting $event)
+{
+    $event->form;
+}
+```
+
 ### FormDeleted
 `Statamic\Events\FormDeleted`
 
@@ -371,10 +598,22 @@ throw ValidationException::withMessages(['You did something wrong.']);
 
 You may also just modify the submission object. You do not need to `return` anything.
 
+### GlideCacheCleared
+`Statamic\Events\GlideCacheCleared`
+
+Dispatched after the Glide cache has been cleared, either via the `php please glide:clear` command or via the Cache Manager utility.
+
+``` php
+public function handle(GlideCacheCleared $event)
+{
+    //
+}
+```
+
 ### GlideImageGenerated
 `Statamic\Events\GlideImageGenerated`
 
-Dispatched after Glide generates an image. 
+Dispatched after Glide generates an image.
 
 ``` php
 public function handle(GlideImageGenerated $event)
@@ -384,6 +623,30 @@ public function handle(GlideImageGenerated $event)
 }
 ```
 
+### GlobalSetCreating
+`Statamic\Events\GlobalSetCreating`
+
+Dispatched before a global set is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(GlobalSetCreating $event)
+{
+    $event->globals;
+}
+```
+
+### GlobalSetDeleting
+`Statamic\Events\GlobalSetDeleting`
+
+Dispatched before a global set is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(GlobalSetDeleting $event)
+{
+    $event->globals;
+}
+```
+
 ### GlobalSetDeleted
 `Statamic\Events\GlobalSetDeleted`
 
@@ -408,6 +671,78 @@ public function handle(GlobalSetSaved $event)
 }
 ```
 
+### GlobalVariablesCreated
+`Statamic\Events\GlobalVariablesCreated`
+
+Dispatched after Global Variables have been created.
+
+``` php
+public function handle(GlobalVariablesCreated $event)
+{
+    $event->variables;
+}
+```
+
+### GlobalVariablesCreating
+`Statamic\Events\GlobalVariablesCreating`
+
+Dispatched before Global Variables are created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(GlobalVariablesCreating $event)
+{
+    $event->variables;
+}
+```
+
+### GlobalVariablesDeleting
+`Statamic\Events\GlobalVariablesDeleting`
+
+Dispatched after Global Variables have been deleted.
+
+``` php
+public function handle(GlobalVariablesDeleting $event)
+{
+    $event->variables;
+}
+```
+
+### GlobalVariablesDeleted
+`Statamic\Events\GlobalVariablesDeleted`
+
+Dispatched before Global Variables are deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(GlobalVariablesDeleted $event)
+{
+    $event->variables;
+}
+```
+
+### GlobalVariablesSaved
+`Statamic\Events\GlobalVariablesSaved`
+
+Dispatched after Global Variables have been saved.
+
+``` php
+public function handle(GlobalVariablesDeleting $event)
+{
+    $event->variables;
+}
+```
+
+### GlobalVariablesSaving
+`Statamic\Events\GlobalVariablesSaving`
+
+Dispatched before Global Variables are saved. You can return `false` to prevent it from being saved.
+
+``` php
+public function handle(GlobalVariablesSaving $event)
+{
+    $event->variables;
+}
+```
+
 ### GlobalVariablesBlueprintFound
 `Statamic\Events\GlobalVariablesBlueprintFound`
 
@@ -425,6 +760,120 @@ public function handle(GlobalVariablesBlueprintFound $event)
 }
 ```
 
+### ImpersonationStarted
+`Statamic\Events\ImpersonationStarted`
+
+Dispatched whenever a user starts impersonating another user.
+
+``` php
+public function handle(ImpersonationStarted $event)
+{
+    $event->impersonator; // The other who started impersonating the other.
+    $event->impersonated; // The user being impersonated.
+}
+```
+
+### ImpersonationEnded
+`Statamic\Events\ImpersonationEnded`
+
+Dispatched whenever a user finishes impersonating another user.
+
+``` php
+public function handle(ImpersonationEnded $event)
+{
+    $event->impersonator; // The other who started impersonating the other.
+    $event->impersonated; // The user being impersonated.
+}
+```
+
+### LicensesRefreshed
+`Statamic\Events\LicensesRefreshed`
+
+Dispatched when a user manually triggers a "Sync" of a site's licenses via the Licenses utility.
+
+``` php
+public function handle(LicensesRefreshed $event)
+{
+    //
+}
+```
+
+### LicenseSet
+`Statamic\Events\LicenseSet`
+
+Dispatched after a license key has been set via the `php please license:set` command.
+
+``` php
+public function handle(LicenseSet $event)
+{
+    //
+}
+```
+
+### LocalizedTermDeleted
+`Statamic\Events\LocalizedTermDeleted`
+
+Dispatched after a taxonomy term has been deleted.
+
+This event is *similar* to the [`TermDeleted`](#termdeleted) event, however, instead of `$term` being a `Term` instance, it will be a `LocalizedTerm` instance.
+
+``` php
+public function handle(LocalizedTermDeleted $event)
+{
+    $event->term;
+}
+```
+
+### LocalizedTermSaved
+`Statamic\Events\LocalizedTermSaved`
+
+Dispatched after a taxonomy term has been saved.
+
+This event is *similar* to the [`TermSaved`](#termsaved) event, however, instead of `$term` being a `Term` instance, it will be a `LocalizedTerm` instance.
+
+``` php
+public function handle(LocalizedTermSaved $event)
+{
+    $event->term;
+}
+```
+
+### NavCreated
+`Statamic\Events\NavCreated`
+
+Dispatched after a nav has been created.
+
+``` php
+public function handle(NavCreated $event)
+{
+    $event->nav;
+}
+```
+
+### NavCreating
+`Statamic\Events\NavCreating`
+
+Dispatched before a nav is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(NavCreating $event)
+{
+    $event->nav;
+}
+```
+
+### NavDeleting
+`Statamic\Events\NavDeleting`
+
+Dispatched before a nav is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(NavDeleting $event)
+{
+    $event->nav;
+}
+```
+
 ### NavDeleted
 `Statamic\Events\NavDeleted`
 
@@ -449,6 +898,18 @@ public function handle(NavSaved $event)
 }
 ```
 
+### NavSaving
+`Statamic\Events\NavSaving`
+
+Dispatched before a nav is saved. You can return `false` to prevent it from being saved.
+
+``` php
+public function handle(NavSaving $event)
+{
+    $event->nav;
+}
+```
+
 ### NavTreeSaved
 `Statamic\Events\NavTreeSaved`
 
@@ -461,6 +922,18 @@ public function handle(NavTreeSaved $event)
 }
 ```
 
+### NavTreeSaving
+`Statamic\Events\NavTreeSaving`
+
+Dispatched when a nav tree is being saved. You can return `false` to prevent it from being saved.
+
+``` php
+public function handle(NavTreeSaving $event)
+{
+    $event->tree;
+}
+```
+
 ### ResponseCreated
 `Statamic\Events\ResponseCreated`
 
@@ -486,6 +959,18 @@ public function handle(RevisionDeleted $event)
 }
 ```
 
+### RevisionSaving
+`Statamic\Events\RevisionSaving`
+
+Dispatched before a revision of an entry is saved. You can return `false` to prevent it from being saved.
+
+``` php
+public function handle(RevisionSaving $event)
+{
+    $event->revision;
+}
+```
+
 ### RevisionSaved
 `Statamic\Events\RevisionSaved`
 
@@ -523,10 +1008,94 @@ public function handle(RoleSaved $event)
 }
 ```
 
+### SearchIndexUpdated
+`Statamic\Events\SearchIndexUpdated`
+
+Dispatched when a search index is updated, either via the `php please search:update` command or via the Search utility.
+
+``` php
+public function handle(SearchIndexUpdated $event)
+{
+    $event->index;
+}
+```
+
+### SiteCreated
+`Statamic\Events\SiteCreated`
+
+Dispatched when a site is created via the Control Panel.
+
+``` php
+public function handle(SiteCreated $event)
+{
+    $event->site;
+}
+```
+
+### SiteDeleted
+`Statamic\Events\SiteDeleted`
+
+Dispatched when a site is deleted via the Control Panel.
+
+``` php
+public function handle(SiteDeleted $event)
+{
+    $event->site;
+}
+```
+
+### SiteSaved
+`Statamic\Events\SiteSaved`
+
+Dispatched when a site is saved via the Control Panel.
+
+``` php
+public function handle(SiteSaved $event)
+{
+    $event->site;
+}
+```
+
+### StacheCleared
+`Statamic\Events\StacheCleared`
+
+Dispatched after the Stache cache has been cleared, either via the `php please stache:clear` command or via the Cache Manager utility.
+
+``` php
+public function handle(StacheCleared $event)
+{
+    //
+}
+```
+
+### StacheWarmed
+`Statamic\Events\StacheWarmed`
+
+Dispatched after the Stache cache has been warmed, either via the `php please stache:warm` command or via the Cache Manager utility.
+
+``` php
+public function handle(StacheWarmed $event)
+{
+    //
+}
+```
+
+### StaticCacheCleared
+`Statamic\Events\StaticCacheCleared`
+
+Dispatched after the Static Cache has been cleared, either via the `php please static:clear` command or via the Cache Manager utility.
+
+``` php
+public function handle(StaticCacheCleared $event)
+{
+    //
+}
+```
+
 ### SubmissionCreated
 `Statamic\Events\SubmissionCreated`
 
-Dispatched after a form submission has been created. This happens after has a form has been submitted on the front-end.
+Dispatched after a form submission has been created. This happens after a form has been submitted on the front-end.
 
 ``` php
 public function handle(SubmissionCreated $event)
@@ -537,6 +1106,18 @@ public function handle(SubmissionCreated $event)
 
 If you're looking to prevent a form being submitted or trigger validation errors, check out the [FormSubmitted](#formsubmitted) event.
 
+### SubmissionCreating
+`Statamic\Events\SubmissionCreating`
+
+Dispatched before a submission is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(SubmissionCreating $event)
+{
+    $event->submission;
+}
+```
+
 ### SubmissionDeleted
 `Statamic\Events\SubmissionDeleted`
 
@@ -561,6 +1142,30 @@ public function handle(SubmissionSaved $event)
 }
 ```
 
+### TaxonomyCreating
+`Statamic\Events\TaxonomyCreating`
+
+Dispatched before a taxonomy is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(TaxonomyCreating $event)
+{
+    $event->taxonomy;
+}
+```
+
+### TaxonomyDeleting
+`Statamic\Events\TaxonomyDeleting`
+
+Dispatched before a taxonomy is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(TaxonomyDeleting $event)
+{
+    $event->taxonomy;
+}
+```
+
 ### TaxonomyDeleted
 `Statamic\Events\TaxonomyDeleted`
 
@@ -601,11 +1206,37 @@ public function handle(TermBlueprintFound $event)
 }
 ```
 
+### TermCreating
+`Statamic\Events\TermCreating`
+
+Dispatched before a taxonomy term is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(TermCreating $event)
+{
+    $event->term;
+}
+```
+
+### TermDeleting
+`Statamic\Events\TermDeleting`
+
+Dispatched before a taxonomy term is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(TermDeleting $event)
+{
+    $event->term;
+}
+```
+
 ### TermDeleted
 `Statamic\Events\TermDeleted`
 
 Dispatched after a taxonomy term has been deleted.
 
+This event is *similar* to the [`LocalizedTermDeleted`](#localizedtermdeleted) event, however, instead of `$term` being a `LocalizedTerm` instance, it will be a `Term` instance.
+
 ``` php
 public function handle(TermDeleted $event)
 {
@@ -618,6 +1249,8 @@ public function handle(TermDeleted $event)
 
 Dispatched after a taxonomy term has been saved.
 
+This event is *similar* to the [`LocalizedTermSaved`](#localizedtermsaved) event, however, instead of `$term` being a `LocalizedTerm` instance, it will be a `Term` instance.
+
 ``` php
 public function handle(TermSaved $event)
 {
@@ -640,6 +1273,30 @@ public function handle(UserBlueprintFound $event)
 }
 ```
 
+### UserCreating
+`Statamic\Events\UserCreating`
+
+Dispatched before a user is created. You can return `false` to prevent it from being created.
+
+``` php
+public function handle(UserCreating $event)
+{
+    $event->user;
+}
+```
+
+### UserDeleting
+`Statamic\Events\UserDeleting`
+
+Dispatched before a user is deleted. You can return `false` to prevent it from being deleted.
+
+``` php
+public function handle(UserDeleting $event)
+{
+    $event->user;
+}
+```
+
 ### UserDeleted
 `Statamic\Events\UserDeleted`
 
@@ -676,6 +1333,18 @@ public function handle(UserGroupSaved $event)
 }
 ```
 
+### UserPasswordChanged
+`Statamic\Events\UserPasswordChanged`
+
+Dispatched when the password of another user has been changed in the Control Panel.
+
+``` php
+public function handle(UserPasswordChanged $event)
+{
+    $event->user;
+}
+```
+
 ### UserRegistering
 `Statamic\Events\UserRegistering`
 
@@ -713,3 +1382,15 @@ public function handle(UserSaved $event)
     $event->user;
 }
 ```
+
+### UrlInvalidated
+`Statamic\Events\UrlInvalidated`
+
+Dispatched after a URL has been removed from the static cache.
+
+``` php
+public function handle(UrlInvalidated $event)
+{
+    $event->url;
+}
+```
diff --git a/content/collections/extending-docs/field-actions.md b/content/collections/extending-docs/field-actions.md
new file mode 100644
index 000000000..1445edcd6
--- /dev/null
+++ b/content/collections/extending-docs/field-actions.md
@@ -0,0 +1,257 @@
+---
+id: 41e386b3-9df9-4d28-9338-8005399f953c
+blueprint: page
+title: 'Field Actions'
+template: page
+intro: 'Field actions allow you perform JavaScript-based tasks on individual fields within a publish form.'
+---
+:::tip
+If you'd like to perform tasks on entire PHP-based items like Entries, check out [Actions](/extending/actions).
+:::
+
+## Overview
+
+Field actions allow you to use JavaScript to modify value for specific fields.
+
+Some examples of what you could do:
+
+- Manipulate the value
+- Make the value uppercase
+- Translate the value
+- Toggle fullscreen mode
+
+## Defining actions
+
+Actions can be added to fieldtypes and Bard/Replicator sets.
+
+You should pass the name of the Vue component and the action object to `Statamic.$fieldActions.add()` method.
+
+```js
+Statamic.$fieldActions.add('text-fieldtype', { /* ... */ });
+Statamic.$fieldActions.add('bard-fieldtype-set', { /* ... */ });
+Statamic.$fieldActions.add('replicator-fieldtype-set', { /* ... */ });
+```
+
+The action will be accessible by a dropdown in the field header.
+
+### Within a fieldtype
+
+If you are the fieldtype author, you may choose to define actions internally by adding an `internalFieldActions` computed property to your Vue component.
+
+```js
+computed: {
+    internalFieldActions() {
+        return [
+            { ... },  
+            { ... },  
+        ];
+    }    
+}
+```
+
+## Action Definition
+
+Each action needs at a minimum the `title` and `run` properties.
+
+```js
+Statamic.$fieldActions.add('text-fieldtype', {
+    title: 'Reverse',
+    run: (payload) => {
+        //
+    }
+});
+```
+
+The `run` callback will be provided with a [payload object](#callback-payload) containing variables and functions that will be useful to you.
+
+The most basic of which will be `value` and `update` which will let you read the value and update it, respectively.
+
+```js
+run: ({ value, update }) => {
+    const reversed = value.split('').reverse().join('');
+    update(reversed);
+}
+```
+
+### Loading State
+
+If your action is expected to take a longer amount of time - perhaps you are doing an AJAX request - you may want to provide a loading state.
+
+To add a loading state, return a Promise from your `run` function. A loading graphic will be automatically applied. When resolved, it will be removed.
+
+```js
+run: ({ value, update }) => {
+    return new Promise(resolve => {
+        longTask();
+        resolve();
+    });
+}
+```
+
+## Callback Payload
+
+The payload provided to the `run`, `quick`, `visible`, and `icon` functions will contain the following properties:
+
+| Property          | Type     | Description                                                                                                                                |
+|-------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------|
+| `handle`          | string   | The handle of the field                                                                                                                    |
+| `value`           | mixed    | The value of the field, when used on a field.                                                                                              |
+| `values`          | mixed    | The values of the set, when used on a set.                                                                                                 |
+| `config`          | Object   | The field configuration                                                                                                                    |
+| `meta`            | Object   | The field's meta data                                                                                                                      |
+| `update`          | function | Whatever you pass to this method will update the field's value. When used in a set, this expects a field handle as the first argument.     |
+| `updateMeta`      | function | Whatever you pass to this method will update the field's meta data. When used in a set, this expects a field handle as the first argument. |
+| `fieldPathPrefix` | string   | The path to the field handle, when nested inside another field like a Grid or Replicator.                                                  |
+| `vm`              | Object   | The Vue component                                                                                                                          |
+| `fieldVm`         | Object   | When inside a Bard or Replicator set, this is the Vue component of the Bard/Replicator.                                                    |
+| `isReadOnly`      | bool     | Whether the field is read only.                                                                                                            |
+| `confirmation`    | Object   | When using a [confirmation modal](#confirmation-modals), this will contain the result of the submission.                                   |                                   
+
+## Quick Actions
+
+An action can be marked as "quick" and will be made available through an icon in addition to the dropdown. The `icon` can be a name of an icon included with Statamic, or an `<svg>...</svg>` string.
+
+```js
+{
+    quick: true,
+    icon: 'light/crane'
+}
+```
+
+Either of these may be functions.
+
+```js
+{
+    quick: (payload) => true,
+    icon: (payload) => 'light/crane'
+}
+```
+
+## Visibility
+
+Since actions are applied to a fieldtype, you may not want to have it usable on every field that uses that fieldtype. You can control whether the action is visible using the `visibile` property.
+
+```js
+{
+    visible: true
+}
+```
+
+This may also be a function:
+
+```js
+{
+    visible: (payload) => true
+}
+```
+
+
+## Read Only Fields
+
+By default, Statamic will not display an action if the field is read only. However, you can opt into showing it.
+
+```js
+{
+    visibleWhenReadOnly: true
+}
+```
+
+You may also pair this with the `isReadOnly` property within the payload.
+
+```js
+{
+    visibleWhenReadOnly: true,
+    run: ({ update, value, isReadOnly }) => {
+        doSomething();
+        
+        if (!isReadOnly) update(...);
+    }
+}
+```
+
+
+## Confirmation Modals
+
+When running your action, you may use a modal as confirmation and to ask for additional information.
+
+```js
+{
+    confirm: true,
+    run: () => {
+        // do something
+    }
+}
+```
+
+If the user closes the modal without confirming, the `run` won't be executed. 
+
+### Confirmation Modal Options
+
+The `confirm` option will give a generic "Are you sure" prompt if you pass `true`. 
+
+You may pass an options object to the `confirm` property in order to customize it. For example:
+
+```js
+{
+    confirm: {
+        title: 'My Modal',
+        text: 'Are you sure you want to do that?'
+    }
+} 
+```
+
+| Option        | Type   | Description                                                                                                      |
+|---------------|--------|------------------------------------------------------------------------------------------------------------------|
+| `title`       | string | The title to displayed in the header of the modal. Defaults to the title of the action.                          |
+| `buttonText`  | string | The text to be displayed in the confirmation button. Default: `Confirm`.                                         |
+| `text`        | string | The body text. Defaults to `Are you sure?` if the modal would otherwise be empty (no fields, warning text, etc). |
+| `warningText` | string | Red warning text. It will be displayed after confirmationText if defined.                                        |
+| `dangerous`   | bool   | Whether the confirmation button should be red.                                                                   | 
+| `fields`      | object | An object containing field definitions. See [fields](#confirmation-modal-fields).                                |
+
+### Confirmation Modal Fields
+
+You may provide blueprint field definitions that will be displayed in the modal. A `confirmation` property will be available within the `run` method payload.
+
+```js
+{
+    confirm: {
+        fields: {
+            name: {
+                type: 'text',
+                display: 'Name',
+                instructions: 'Enter your name',
+                validate: ['required', 'min:2']
+            },
+            color: {
+                type: 'color',
+                instructions: 'Select the color',
+            }
+        }
+    },
+    run: ({ confirmation }) => {
+        console.log(confirmation.values);
+        // { name: 'Bob Down', color: '#aabbcc' }
+    }
+}
+```
+
+The `confirmation` property is an object containing the following properties:
+
+| Property | Type | Description                                                                       |
+|----------|------|-----------------------------------------------------------------------------------|
+| `values` | object | The values that are used in the modal's fieldtype Vue components. (Pre-processed) |
+| `processed` | object | The PHP-based values. e.g. What would get saved to content when editing an entry. |
+| `meta` | object | The meta data for all the fields in the modal.                                    |
+
+## Accessing Other Fields
+
+If you find yourself needing to access other form field values, configs, etc., you can reach into the publish form store from within your `run` function: 
+
+```js
+{
+    run: ({ store, storeName }) => {
+        const values = store.state.publish[storeName].values;
+    }
+}
+```
diff --git a/content/collections/extending-docs/fieldtypes.md b/content/collections/extending-docs/fieldtypes.md
index 87d06b2d8..57f84d6af 100644
--- a/content/collections/extending-docs/fieldtypes.md
+++ b/content/collections/extending-docs/fieldtypes.md
@@ -7,11 +7,21 @@ stage: 1
 id: 83786f60-def6-11e9-aaef-0800200c9a66
 ---
 
+## Prerequisites
+
+Fieldtypes have a JavaScript component, so you will need to have a JavaScript entry file that gets loaded in the Control Panel.
+
+The best way to do that is to use [Vite](/extending/control-panel#using-vite).
+
+Throw an `alert('It works!')` into your JS file. Once you see that appear in the browser, you're ready to build your fieldtype!  
+
 ## Registering
 
+Once created (we'll get to that in a moment), a fieldtype will need to be registered.
+
 Any fieldtype classes inside the `App\Fieldtypes` namespace will be automatically registered.
 
-To store them elsewhere, manually register an action in a service provider by calling the static `register` method on your action class.
+To store them elsewhere, manually register an action in a service provider by calling the static `register` method on your fieldtype's class.
 
 ``` php
 public function boot()
@@ -22,49 +32,50 @@ public function boot()
 
 ## Creating
 
-Fieldtypes have two pieces:
+Fieldtypes have a PHP component and JS component. You can use a command to generate both pieces:
 
-  - A PHP class handling data processing and validation
-  - A Vue 2 component handling the view and data binding
+``` shell
+php please make:fieldtype TogglePassword
+```
 
-For this example we will create a password field with a "show" toggle control:
 
-<figure>
-    <img src="/img/example-password-fieldtype.png" alt="An example fieldtype that reveals a password field" class="p-4 bg-white" width="477">
-    <figcaption>Follow along and you could make this!</figcaption>
-</figure>
+## Vue component
+The Vue component is responsible for the view and data binding. It's what your user will be interacting with.
 
-Create a fieldtype PHP class and Vue component by running the following command:
+The `make:fieldtype` command would have generated a Vue component into `resources/js/components/fieldtypes/TogglePassword.vue`.
 
-``` shell
-php please make:fieldtype TogglePassword
-```
+You should register this Vue component within your JS entry file (`cp.js`):
 
-``` php
-<?php
+``` js
+import Fieldtype from './components/fieldtypes/TogglePassword.vue';
 
-class TogglePassword extends \Statamic\Fields\Fieldtype
-{
-    //
-}
+Statamic.booting(() => {
+    // Should be named [snake_case_handle]-fieldtype
+    Statamic.$components.register('toggle_password-fieldtype', Fieldtype);
+});
 ```
 
-Create a Vue component in [one of your loaded javascript files](/extending/control-panel#adding-css-and-js-assets) and register it as `[handle]-fieldtype`.
+Your component has only two requirements.
+
+- It must expect a `value` prop. This is how it "gets" the value.
+- It must emit an `input` event whenever the value updates. This is how it tells the form the value has changed.
 
-Your component has two requirements:
+Other than that, your component can do whatever you like!
 
-- It must expect a `value` prop.
-- It must emit an `input` event whenever the value updates.
+:::best-practice
+**Do not** modify the `value` prop directly. Instead, call `this.update(value)` (or `this.updateDebounced(value)`) and let the Vuex store handle the update appropriately.
+:::
 
-Statamic provides you with a `Fieldtype` mixin that does this automatically to reduce boilerplate code.
 
 ### Example Vue component
-``` js
-import Fieldtype from './components/fieldtypes/TogglePassword.vue';
 
-// Should be named [snake_case_handle]-fieldtype
-Statamic.$components.register('toggle_password-fieldtype', Fieldtype);
-```
+For this example we will create a password field with a "show" toggle control:
+
+<figure>
+    <img src="/img/example-password-fieldtype.png" alt="An example fieldtype that reveals a password field" class="p-4 bg-white" width="477">
+    <figcaption>Follow along and you could make this!</figcaption>
+</figure>
+
 
 ``` vue
 <template>
@@ -91,18 +102,36 @@ export default {
 </script>
 ```
 
-#### Example walk-through:
-- The `Fieldtype` mixin is providing an `value` prop containing the initial value of the field.
-- The `text-input` component emits an `input` event whenever you type into it. Our component is listening for that event and calls the `update` method.
-- The `Fieldtype` mixin is providing an `updateDebounced` method which emits the required `input` event. This is how the parent component is detecting changes in your fieldtype.
+#### What's happening?
+1. The `Fieldtype` mixin is providing a `value` prop containing the initial value of the field and it passes it along to a text field.
+2. When you type into the text field, an `updateDebounced` method is called which emits the `input` event with the new value.
 
-:::warning
-**Do not** modify the `value` prop directly. Instead, call `this.update(value)` (or `this.updateDebounced(value)`) and let the Vuex store handle the update appropriately.
-:::
+Those are the two requirements satisfied. ✅
+
+In addition to that, we are toggling the type between text and password so you can see what you're typing.
 
-## Fieldtype Icon
+## PHP Class
 
-You can use an existing SVG icon from Statamic's `resources/svg` directory by passing it's name into an `$icon` class variable, by returning a full SVG as a string, or returning it as a string from the `icon()` method.
+The PHP class can be very barebones. At the most basic level, it just needs to exist in order to let Statamic know about it.
+
+```php
+<?php
+
+namespace App\Fieldtypes;
+
+use Statamic\Fields\Fieldtype;
+
+class TogglePassword extends Fieldtype
+{
+    //
+}
+```
+
+Of course, you may add functionality to it, outlined below.
+
+## Fieldtype icon
+
+You can use an existing SVG icon from Statamic's `resources/svg` directory by passing its name into an `$icon` class variable, by returning a full SVG as a string, or returning it as a string from the `icon()` method.
 
 ```php
 <?php
@@ -115,12 +144,50 @@ class CustomFieldtype extends Fieldtype
     // or
     function icon()
     {
-        return file_get_contents(__DIR__ . 'resources/svg/left_shark.svg');
+        return file_get_contents(resource_path('svg/left_shark.svg'));
     }
 }
 ```
 
-## Configuration Fields
+## Fieldtype categories
+
+When using the blueprint builder inside the control panel, your fieldtype will be listed under the `special` category by default. To move your fieldtype into a different category, define the `$categories` property on your class:
+
+```php
+<?php
+
+class CustomFieldtype extends Fieldtype
+{
+    public $categories = ['number'];
+}
+```
+
+You can select from any of the keys available in the `FieldtypeSelector`:
+- `text`
+- `controls`
+- `media`
+- `number`
+- `relationship`
+- `structured`
+- `special`
+
+
+## Fieldtype keywords
+
+You may specify keywords to be used when searching in the fieldtype selector.
+
+For example: if you search for "rich text" or "gutenberg", the [Bard fieldtype](/fieldtypes/bard) will be returned as a result.
+
+```php
+<?php
+
+class CustomFieldtype extends Fieldtype
+{
+    protected $keywords = ['file', 'files', 'image', 'images', 'video', 'videos', 'audio', 'upload'];
+}
+```
+
+## Configuration fields
 
 You can make your fieldtype configurable with configuration fields. These fields are defined by adding a `configFieldItems()` method on your PHP class that returns an array of fields.
 
@@ -150,6 +217,12 @@ protected function configFieldItems(): array
 }
 ```
 
+The configuration values can be accessed in the Vue component using the `config` property.
+
+``` js
+return this.config.mode; // regular
+```
+
 ### Options
 
 | Key | Definition |
@@ -158,11 +231,11 @@ protected function configFieldItems(): array
 | **instructions** | Text shown underneath the display label. Supports Markdown. |
 | **type** | Name of the fieldtype used to manage the config option. |
 | **default** | An optional default value. |
-| **width*
+| **width** | The field's width. |
 | ***other*** | Some fieldtypes have additional configuration options available. |
 
 :::tip
-A little code diving will reveal all the possible config options for each field type. Look for the `configFieldItems()` method in each class here: <https://github.com/statamic/cms/tree/3.3/src/Fieldtypes>
+A little code diving will reveal all the possible config options for each field type. Look for the `configFieldItems()` method in each class here: <https://github.com/statamic/cms/tree/5.x/src/Fieldtypes>
 :::
 
 ### Adding configuration fields to existing fieldtypes
@@ -187,6 +260,33 @@ Text::appendConfigFields([
 ]);
 ```
 
+## Processing
+
+You may need to modify the data going to and from the browser.
+
+The `preProcess` method allows you to modify the original value into what the Vue component requires.
+The `process` method does the opposite. It takes the Vue component's value and allows you to modify it for what gets saved.
+
+For example, the YAML fieldtype stores its value in content as an array but the field needs it as a string in order for it to be editable:
+
+```php
+public function preProcess($value)
+{
+    return YAML::dump($value); // dump a yaml string from an array
+}
+```
+
+In the other direction, it takes the YAML string and needs to convert it back to an array when saving:
+
+```php
+public function process($value)
+{
+    return YAML::parse($value); // parses a yaml string into an array
+}
+```
+
+_(These snippets are simplified for example purposes.)_
+
 ## Meta Data
 
 Fieldtypes can preload additional "meta" data from PHP into JavaScript. This can be anything you want, from settings to eager loaded data.
@@ -219,7 +319,7 @@ Here are some reasons why you might want to use this feature:
 - Grid, Bard, and Replicator fields all preload values for what a new row/set contains, plus the recursive meta values of any nested fields.
 
 
-## Replicator Preview
+## Replicator preview
 
 When [Replicator](/fieldtypes/replicator) (or [Bard](/fieldtypes/bard)) sets are collapsed, Statamic will display a preview of the values within it.
 
@@ -239,7 +339,7 @@ computed: {
 This _does_ support returning an HTML string so you could display image tags for a thumbnail, etc. Just be aware of the limited space.
 :::
 
-## Index Fieldtypes
+## Index fieldtypes
 
 In listings (collection indexes in the Control Panel, for example), string values will be displayed as a truncated string and arrays will be displayed as JSON.
 
@@ -296,7 +396,7 @@ public function augment($value)
 
 [Read more about augmentation](/extending/augmentation)
 
-## Accessing Other Fields
+## Accessing other fields
 
 If you find yourself needing to access other form field values, configs, etc., you can reach into the publish form store from within your Vue component: 
 
@@ -312,7 +412,7 @@ computed: {
 
 ## Updating from v2
 
-In Statamic v2 we pass a `data` prop that can be directly modified. You might be see something like this:
+In Statamic v2 we pass a `data` prop that can be directly modified. You might be used to seeing something like this:
 
 ``` html
 <input type="text" v-model="data" />
diff --git a/content/collections/extending-docs/hooks.md b/content/collections/extending-docs/hooks.md
index dd567f10c..96296060b 100644
--- a/content/collections/extending-docs/hooks.md
+++ b/content/collections/extending-docs/hooks.md
@@ -1,94 +1,185 @@
 ---
-title: Hooks
-intro: |
-  Statamic allows you to hook into specific points and perform asyncronous operations using [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
-stage: 1
-id: fc136da3-ba46-46e1-8443-e345d5b548ac
+id: 900414a8-f73a-46f0-82bd-b607767f5d5d
+blueprint: page
+title: 'Hooks'
+intro: 'Statamic allows you to hook into specific points in PHP logic and perform operations using Pipelines.'
 ---
+:::warning
+This page is about PHP-based hooks. We also have [JavaScript-based hooks](/extending/js-hooks), which work differently.
+:::
+
 ## About
 
-Hooks are programmable interfaces which you can use to modify or extend already existing JavaScript code inside the Control Panel.
+Closures may be registered allowing you to "hook" into a specific point in PHP's lifecycle. These closures are added to a pipeline.
+
+Hooks may be located in tags, fieldtypes, and so on.
 
-Normally they work like this:
+At some point, a payload is send through the pipeline, allowing any registered closures to inspect or modify the payload, then finally gets sent back to the origin.
 
-1. Statamic code is running
-2. Statamic code checks for existing Hooks
-3. Your custom hook was found
-4. The code inside your custom hook will be run
-5. Statamic code continues to run (with modfied data etc.)
+## How to use hooks
 
-## Prerequisites
+For example, the `collection` tag will query for entries, then run the `fetched-entries` hook, passing all the entries along. Your hook may modify these entries.
 
-Before you start using hooks, you need to register the corresponding javascript file.
-Please follow the guide on [Adding CSS and JS assets](/extending/control-panel#adding-css-and-js-assets).
+```php
+// app/Providers/AppServiceProvider.php
 
-## How to use hooks
+use Statamic\Tags\Collection;
 
-For example, the `entry.saving` hook allows you to pause saving to perform an action:
+Collection::hook('fetched-entries', function ($entries, $next) {
+    // Modify the entries...
+    $modified = $entries->take(3);
 
-```js
-Statamic.$hooks.on('entry.saving', (resolve, reject) => {
-    if (confirm('Are you sure you want to save this entry?')) {
-        // Continue with the save action.
-        resolve();
-    } else {
-        // Cancel the save action. You can provide the error message.
-        reject('You chose not to publish.');
-    }
+    // Pass them along to the next registered closure.
+    return $next($modified);
 });
 ```
 
-If you intend to work with another promise, make to resolve or reject once it's done:
+It's also possible to wait until all the other closures in the pipeline have completed. To do that, pass it along to the next closure _first_.
+
+For example, maybe you need to get all the ids of the entries that will be output. By passing along to the other closures first, it will give them a chance to manipulate it. In the example above, it would take the first 3 entries. Now in this hook we'll be getting 3 ids rather than the full amount the tag was originally going to output.
+
+```php
+// app/Providers/AppServiceProvider.php
+
+use Statamic\Tags\Collection;
+
+Collection::addHook('fetched-entries', function ($entries, $next) {
+    // Pass the payload along to the next registered closures.
+    $entries = $next($entries);
+
+    $ids = $entries->pluck('id');
 
-```js
-Statamic.$hooks.on('entry.saving', (resolve, reject) => {
-    return axios.get('/something')
-        .then(resolve)
-        .catch(() => reject('It broke'));
+    // You'll still need to return it!
+    return $entries;
 });
 ```
 
-Some hooks may provide you with a payload containing additional data. For example, the `entry.saving` hook provides you with the collection handle and form values.
+### Scope
 
-```js
-Statamic.$hooks.on('entry.saving', (resolve, reject, payload) => {
-    console.log(payload.collection); // blog
-    console.log(payload.values); // { title: "My Post", content: "Post Content" }
+The closure is scoped to the class where the hook was triggered. The `$this` variable will be the class itself, and will act as if you're in the class so you can call protected methods, as well as any macroed methods.
+
+```php
+Tag::addHook('name', function ($payload, $next) {
+    // {{ tag foo="bar" }}
+    $this->params->get('foo'); // bar
 });
 ```
 
-:::best-practice
-When you `reject` a hook, any other code using that hook will not be executed.
-Unless your intention is to stop the execution chain, you should always `resolve`, even when your code does nothing.
 
-``` js
-Statamic.$hooks.on('example', (resolve, reject) => {
-    if (somethingShouldHappen) {
-        doSomething();
-    }
-    resolve();
+## Available hooks
+
+### All tags: `init`
+Triggered after the tag has been initialized. The payload is `null`.
+
+### Collection tag: `fetched-entries`
+Triggered just after completing the query.
+The payload will either be an `EntryCollection` or a `Paginator`, depending on whether the `paginate` parameter was used.
+
+### Form tag: `attrs`
+Triggered when building the opening form tag. The payload is an array containing two properties:
+- 'attrs' - an array containing the currently calculated list of attributes for the opening &lt;form&gt; tag. Modifications to this array will affect the rendered form tag - e.g. it can be used to add attributes to the form tag.
+- 'data' - the data assembled about the form (config, blueprint, sections etc.)
+
+### Form tag: `after-open`
+Triggered immediately after the opening form tag. The payload is an array containing two properties:
+- 'html' - A string containing the rendered markup of the form so far. Modifications to this string will affect the final rendered markup.
+- 'data' - the data assembled about the form (config, blueprint, sections etc.)
+
+### Form tag: `before-open`
+Triggered immediately before the closing form tag. The payload is an array containing two properties:
+- 'html' - A string containing the rendered markup of the form so far. Modifications to this string will affect the final rendered markup.
+- 'data' - the data assembled about the form (config, blueprint, sections etc.)
+
+### Augmentation: `augmented`
+Triggered when a new augmented instance is made.
+The payload will be the object being augmented (eg. `Entry` / `Term`).
+
+### Entry Index Query: `query`
+Triggered before the index query for the Entries listing table is executed.
+The payload will be an object with `query` and `collection` properties.
+
+```php
+use Statamic\Hooks\CP\EntriesIndexQuery;
+
+EntriesIndexQuery::hook('query', function ($payload, $next) {
+    $payload->query; // a QueryBuilder instance
+    $payload->collection; // a Collection instance
+
+    return $next($payload);
 });
 ```
-:::
 
-## Available hooks
+### Bard: `augment`
+Triggered while the Bard fieldtype is being augmented.
+The payload will be an array of the Bard's content.
+
+### Bard: `process`
+Triggered when the `process` method is called on the Bard fieldtype (when saving a Bard field in the Control Panel).
+The payload will be an array of the Bard's content.
+
+### Bard: `pre-process`
+Triggered when the `preProcess` method is called on the Bard fieldtype (when preparing the Bard field for the publish form).
+The payload will be an array of the Bard's content.
+
+### Bard: `pre-process-index`
+Triggered when the `preProcessIndex` method is called on the Bard fieldtype (when preparing the Bard field for a listing column).
+The payload will be an array of the Bard's content.
+
+### Bard: `pre-process-validatable`
+Triggered when the `preProcessValidatable` method is called on the Bard fieldtype (when preparing the field for validation).
+The payload will be an array of the Bard's content.
+
+### Bard: `preload`
+Triggered when the `preload` method is called on the Bard fieldtype (when preparing the `meta` prop for the publish form).
+The payload will be an array of the Bard's content.
+
+### Bard: `extra-rules`
+Triggered when the `extraRules` method is called on the Bard fieldtype (when gathering validation rules).
+The payload will be an array of the Bard's content.
 
-### entry.saving
+### Bard: `extra-validation-attributes`
+Triggered when the `extraValidationAttributes` method is called on the Bard fieldtype (when gathering validation attributes).
+The payload will be an array of the Bard's content.
 
-Triggered when you click save on the publish form.
-You can use `reject()` to prevent the request. Payload contains collection name, form values, and a reference to the publish container component.
+### Static Cache Warming: `additional`
+Triggered when the `static:warm` command is run. This hook allows you to warm additional URIs during the static warming process.
+For more information about this hook, see the docs on [Static Caching](https://statamic.dev/static-caching#warming-additional-urls).
 
-### entry.saved
+### Multisite Command: `after`
+Triggered at the end of the `multisite` command. This hook allows you to run code when an app is being converted from a single-site to a multi-site.
+The payload is `null`.
 
-Triggered when you click save, but after the request has finished.
-Payload contains collection name, and the Axios response.
 
-### entry.publishing
+## Triggering your own hooks
 
-Triggered when revisions are enabled, and you click publish in the publish action stack.
-You can use `reject()` to stop the request. Payload contains collection name and revision message.
+You may want to trigger your own hook pipeline so that others may use it.
 
-### entry.published
+To do this, you may use the `runHooks` method from the `Hookable` trait, passing the hook name and a payload.
+Once any hook closures have finished running, the payload will be returned back from it.
 
-Triggered when revisions are enabled, but after the request has finished.
-Payload contains collection name, revision message, and the Axios response.
+```php
+use Statamic\Support\Traits\Hookable;
+
+class YourClass
+{
+    use Hookable;
+
+    public function something()
+    {
+        $result = $this->runHooks('hook-name', $payload);
+    }
+}
+```
+
+Now others will be able to call `hook` on your class to register their hook:
+
+```php
+YourClass::hook('hook-name', function ($payload, $next) {
+    // ...
+    return $next($payload);
+});
+```
+
+:::tip
+Tag classes already `use Hookable` so you can simply use `$this->runHooks()` without importing anything.
+:::
diff --git a/content/collections/extending-docs/javascript.md b/content/collections/extending-docs/javascript.md
index 91fb72e8e..8a7af309a 100644
--- a/content/collections/extending-docs/javascript.md
+++ b/content/collections/extending-docs/javascript.md
@@ -8,7 +8,7 @@ id: 0782835d-1f44-4b19-99f4-2bb8ad28c7ba
 ---
 
 - [Events](/extending/js-events)
-- [Hooks](/extending/hooks)
+- [Hooks](/extending/js-hooks)
 - [Toast Notifications](/extending/toast-notifications)
 - [Progress](/extending/progress)
 - [Dirty State Tracking](/extending/dirty-state-tracking)
diff --git a/content/collections/extending-docs/js-hooks.md b/content/collections/extending-docs/js-hooks.md
new file mode 100644
index 000000000..2c49663d7
--- /dev/null
+++ b/content/collections/extending-docs/js-hooks.md
@@ -0,0 +1,109 @@
+---
+title: JavaScript Hooks
+nav_title: Hooks
+intro: |
+  Statamic allows you to hook into specific points in JavaScript and perform asyncronous operations using [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
+stage: 1
+id: fc136da3-ba46-46e1-8443-e345d5b548ac
+---
+:::warning
+This page is about JavaScript-based hooks. We also have [PHP-based hooks](/extending/hooks), which work differently.
+:::
+
+## About
+
+Hooks are programmable interfaces which you can use to modify or extend already existing JavaScript code inside the Control Panel.
+
+Normally they work like this:
+
+1. Statamic code is running
+2. Statamic code checks for existing Hooks
+3. Your custom hook was found
+4. The code inside your custom hook will be run
+5. Statamic code continues to run (with modfied data etc.)
+
+## Prerequisites
+
+Before you start using hooks, you need to register the corresponding javascript file.
+Please follow the guide on [Adding CSS and JS assets](/extending/control-panel#adding-css-and-js-assets).
+
+## How to use hooks
+
+For example, the `entry.saving` hook allows you to pause saving to perform an action:
+
+```js
+Statamic.$hooks.on('entry.saving', (resolve, reject) => {
+    if (confirm('Are you sure you want to save this entry?')) {
+        // Continue with the save action.
+        resolve();
+    } else {
+        // Cancel the save action. You can provide the error message.
+        reject('You chose not to publish.');
+    }
+});
+```
+
+If you intend to work with another promise, make to resolve or reject once it's done:
+
+```js
+Statamic.$hooks.on('entry.saving', (resolve, reject) => {
+    return axios.get('/something')
+        .then(resolve)
+        .catch(() => reject('It broke'));
+});
+```
+
+Some hooks may provide you with a payload containing additional data. For example, the `entry.saving` hook provides you with the collection handle and form values.
+
+```js
+Statamic.$hooks.on('entry.saving', (resolve, reject, payload) => {
+    console.log(payload.collection); // blog
+    console.log(payload.values); // { title: "My Post", content: "Post Content" }
+});
+```
+
+:::best-practice
+When you `reject` a hook, any other code using that hook will not be executed.
+Unless your intention is to stop the execution chain, you should always `resolve`, even when your code does nothing.
+
+``` js
+Statamic.$hooks.on('example', (resolve, reject) => {
+    if (somethingShouldHappen) {
+        doSomething();
+    }
+    resolve();
+});
+```
+:::
+
+## Available hooks
+
+### entry.saving
+
+Triggered when you click save on the publish form.
+You can use `reject()` to prevent the request. Payload contains collection name, form values, and a reference to the publish container component.
+
+### entry.saved
+
+Triggered when you click save, but after the request has finished.
+Payload contains collection name, and the Axios response.
+
+### entry.publishing
+
+Triggered when revisions are enabled, and you click publish in the publish action stack.
+You can use `reject()` to stop the request. Payload contains collection name and revision message.
+
+### entry.published
+
+Triggered when revisions are enabled, but after the request has finished.
+Payload contains collection name, revision message, and the Axios response.
+
+### global-set.saving
+
+Triggered when you click save on the publish form.
+You can use `reject()` to prevent the request. Payload contains global set name, form values, and a reference to the publish container component.
+
+### global-set.saved
+
+Triggered when you click save, but after the request has finished.
+Payload contains global set name, and the Axios response.
diff --git a/content/collections/extending-docs/markdown.md b/content/collections/extending-docs/markdown.md
index 843e4f829..96173a748 100644
--- a/content/collections/extending-docs/markdown.md
+++ b/content/collections/extending-docs/markdown.md
@@ -20,18 +20,41 @@ By default, Statamic follows the [CommonMark spec](https://spec.commonmark.org/c
 - GFM Tables
 - HTML Attributes (eg. `# heading {.someclass #someid}`)
 - Strikethrough (eg. `~~strikethrough~~`)
+- Description Lists
+- Footnotes
+- Task Lists
 
 A few other extensions are available, but disabled by default:
 
 - Autolinking
 - HTML escaping
 - Automatic line breaks
-
+- Heading Permalinks
+- Table of Contents
 
 ## Customizing Markdown behavior
 
 Under the hood, we're using the [league/commonmark](https://commonmark.thephpleague.com/) package which supports all sorts of customization using extensions.
 
+### Configuration
+
+You may customize the behavior of the markdown parser by providing a CommonMark config array in `config/statamic/markdown.php`. All the available options are outlined in the CommonMark docs. You can override the [base options](https://commonmark.thephpleague.com/2.4/configuration/) as well as any [extension](https://commonmark.thephpleague.com/2.4/extensions/overview/)'s options.
+
+You only need to provide the specific options you want to override. For example:
+
+```php
+'configs' => [
+    'default' => [
+        'allow_unsafe_links' => false, // [tl! ++:start]
+        'heading_permalink' => [
+            'symbol' => '#',
+        ], // [tl! ++:end]
+    ]
+]
+```
+
+### Adding extensions
+
 You may add an extension with the `addExtension` or `addExtensions` methods. For example, in the `boot` method of your `AppServiceProvider`, return an extension instance, or an array of them.
 
 ``` php
@@ -40,7 +63,7 @@ namespace App\Providers;
 
 use Illuminate\Support\ServiceProvider;
 use Statamic\Facades\Markdown;
-use League\CommonMark\Extension\Footnote\FootnoteExtension;
+use Ueberdosis\CommonMark\HintExtension;
 use League\CommonMark\Extension\TableOfContents\TableOfContentsExtension;
 
 class AppServiceProvider extends ServiceProvider
@@ -49,22 +72,66 @@ class AppServiceProvider extends ServiceProvider
     {
         // Add one extension... [tl! focus:start]
         Markdown::addExtension(function () {
-            return new FootnoteExtension;
+            return new HintExtension;
         });
 
         // or multiple.
         Markdown::addExtensions(function () {
-            return [new FootnoteExtension, new TableOfContentsExtension];
+            return [new HintExtension, new TableOfContentsExtension];
         }); // [tl! focus:end]
     }
 }
 ```
 
 :::tip
-You can find a long list of Markdown Extensions [on the CommonMark site](https://commonmark.thephpleague.com/2.0/extensions/overview/), or around on GitHub. We love this [Hint Extension](https://github.com/ueberdosis/commonmark-hint-extension) by Ueberdosis – you're seeing it in action, powering this "Hot Tip" box.
+You can find a long list of Markdown Extensions [on the CommonMark site](https://commonmark.thephpleague.com/2.4/extensions/overview/), or around on GitHub. We love this [Hint Extension](https://github.com/ueberdosis/commonmark-hint-extension) by Ueberdosis – you're seeing it in action, powering this "Hot Tip" box.
 :::
 
-Statamic 3.3 uses CommonMark 2.0, while previous versions use CommonMark 1.6. Keep this in mind when reading docs and looking for extension packages.
+Statamic 5.0+ uses CommonMark 2.4, while previous versions used either CommonMark 2.2 or CommonMark 1.6. Keep this in mind when reading docs and looking for extension packages.
+
+### Adding renderers
+
+You may add a custom renderer for a specific node type with the `addRenderer` or `addRenderers` method. For example, in the `boot` method of your `AppServiceProvider`, return an array containing the node type and your custom renderer.
+
+```php
+<?php
+namespace App\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Statamic\Facades\Markdown;
+use League\CommonMark\Extension\CommonMark\Node\Block\Heading;
+use League\CommonMark\Extension\CommonMark\Node\Inline\Link;
+
+class AppServiceProvider extends ServiceProvider
+{
+    public function boot()
+    {
+        // Add one renderer... [tl! focus:start]
+        Markdown::addRenderer(function () {
+            return [Link::class, new \App\Markdown\LinkRenderer];
+        });
+
+        // or multiple.
+        Markdown::addRenderers(function () {
+            return [
+                [Link::class, new \App\Markdown\LinkRenderer],
+                [Heading::class, new \App\Markdown\HeadingRenderer, 100],
+            ];
+        }); // [tl! focus:end]
+    }
+}
+```
+
+You may also [specify a priority](https://commonmark.thephpleague.com/2.7/customization/rendering/#designating-renderers) for renderers, which CommonMark uses to determine which result is rendered when multiple renderers are available for the same node type:
+
+```php
+Markdown::addRenderers(function () {
+    return [
+        [FencedCode::class, new CodeRenderer, 10],
+        [IndentedCode::class, new CodeRenderer, 20]
+    ];
+});
+```
 
 ### Helper Methods
 
@@ -108,13 +175,31 @@ Markdown::parser('special')->parse('# Heading');
 
 The closure provides you with a fresh `Parser` instance which you can customize as needed.
 
+:::tip
+If you need to provide a config to your custom parser, you can either [define it in the config file](#configuration) or pass an array as the second option.
+
+```php
+Markdown::extend('special', $config, function ($parser) {
+    //
+});
+```
+:::
+
 ### Using a custom parser in a modifier
 
 The `markdown` modifier accepts an optional argument to choose which parser to use.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ text | markdown:special }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($text)->markdown('special') !!}
+```
+::
 
 ### Using a custom parser in a fieldtype
 
diff --git a/content/collections/extending-docs/modifiers.md b/content/collections/extending-docs/modifiers.md
index 0ee9b75d8..172bb857e 100644
--- a/content/collections/extending-docs/modifiers.md
+++ b/content/collections/extending-docs/modifiers.md
@@ -9,9 +9,12 @@ id: e052ecb8-60d9-4afa-980e-ce128c301d70
 ---
 ## Anatomy of a Modifier
 
-A modifer consists of a few parts. Let’s break it down.
+A modifier consists of a few parts. Let’s break it down.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ variable | repeat:2 }}
 ```
 
@@ -19,6 +22,15 @@ A modifer consists of a few parts. Let’s break it down.
 - Next up, the modifier's [handle](#handle): `repeat`
 - And finally, a parameter: `2`
 
+::tab blade
+```blade
+{{ Statamic::modify($variable)->repeat(2) }}
+```
+- First, we call `Statamic::modify`, supplying the variable name we want to modify (`$variable`)
+- Next up, we call a method with the modifier's [handle](#handle) (`->repeat()`)
+- If our modifier accepts parameters, we supply them to the modifier's method call (`->repeat(2)`)
+::
+
 Parameters are used to modify the behavior of a modifier. They could be anything from an integer or boolean to a variable reference. It’s up to you.
 
 ## Creating a Modifier
@@ -48,11 +60,24 @@ class Repeat extends Modifier
 {
     public function index($value, $params, $context)
     {
-        // {{ variable | repeat }}
+        // Something awesome awaits.
     }
 }
 ```
 
+We'd be able to use our new `repeat` modifier in our template like so:
+
+::tabs
+::tab antlers
+```antlers
+{{ variable | repeat }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($variable)->repeat() }}
+```
+::
+
 The first and only required argument passed into `index` will be the `$value` that needs modifying. We can do anything to this value as long as we return it when we’re done. Once returned, the template will either render it, or pass it along the next modifier in the chain.
 
 The other two arguments are optional:
@@ -70,8 +95,18 @@ You can override this by setting a static `$handle` property.
 protected static $handle = 'repeatrepeat';
 ```
 
+::tabs
+
+::tab antlers
+
 Then, using the example above, `variable | repeat` would now be `variable | repeatrepeat`.
 
+::tab blade
+
+Then, using the example above, `Statamic::modify($variable)->repeat()` would now be `Statamic::modify($variable)->repeatrepeat()`.
+
+::
+
 ## Aliases
 
 You may choose to create aliases for your modifier too. It will then be usable by its handle, or any of its aliases.
@@ -100,10 +135,10 @@ class Repeat extends Modifier
         $repeat = 2;
 
         // Get the parameter, if there is one
-        if ($param = array_get($params, 0)) {
+        if ($param = Arr::get($params, 0)) {
             // Either get the variable from the context, or if it doesn't exist,
             // use the parameter itself - we'll assume its a number.
-            $repeat = array_get($context, $param, $param);
+            $repeat = Arr::get($context, $param, $param);
         }
 
         // Repeat!
@@ -121,11 +156,21 @@ thing: Pizza
 
 And template:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ thing | repeat }}
 {{ thing | repeat:3 }}
 {{ thing | repeat:times }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($thing)->repeat() }}
+{{ Statamic::modify($thing)->repeat(3) }}
+{{ Statamic::modify($thing)->repeat($times) }}
+```
+::
 
 You would find yourself with varying amounts of pizza.
 
diff --git a/content/collections/extending-docs/query-scopes-and-filters.md b/content/collections/extending-docs/query-scopes-and-filters.md
index 84e0e45fa..c39a7e68e 100644
--- a/content/collections/extending-docs/query-scopes-and-filters.md
+++ b/content/collections/extending-docs/query-scopes-and-filters.md
@@ -35,6 +35,50 @@ The `apply` method will give you a query builder instance, allowing you to modif
 
 It will also give you `$values`, which will be an array of contextual values. For example, when [using the scope on a collection tag](/tags/collection#custom-query-scopes), you will get all the parameter values. When used as a [filter](#filters) inside the control panel, you will get all of your filter's field values.
 
+Example: Suppose a collection named "portfolio" and a dynamically obtained "slug" variable. The scope is called PorfolioScope. In your Antlers template:
+``` antlers
+{{ collection:portfolio query_scope="portfolio_scope" slug="{portfolio}" }}
+    {{ content }}
+{{ /collection:portfolio }}
+```
+
+In `PortfolioScope`:
+``` php
+public function apply($query, $values)
+{
+    $slug = $values['slug'];
+    $query->where('slug', $slug);
+}
+```
+
+This will gives you the content of that page.
+
+
+### Using scopes programmatically
+
+In order to use a scope as a query builder method, like "local scopes" in Eloquent, you have to register it on the respective query builder:
+
+```php
+use Statamic\Facades\Entry;
+
+public function boot()
+{
+    Entry::allowQueryScope(Featured::class);
+}
+```
+```php
+Entry::query()->where('this', 'that')->featured()->get();
+```
+However, unlike Eloquent's local scopes, Statamic's scopes accept an array of context. Make sure to pass an associative array rather than individual arguments:
+```php
+$query->featured([
+    'field' => 'value',
+    'foo' => 'bar',
+]);
+```
+
+
+
 ## Filters
 
 Filters are UI based [scopes](#scopes) that will be displayed in listings inside the Control Panel.
@@ -101,7 +145,7 @@ The `visibleTo` method allows you to control in which listings this filter will
 
 The `autoApply` method lets you define a default value to apply.
 
-You may also pin your filters to the right side of the search bar by setting the `$pinned` class property:
+You may also pin your filters to the filters bar by setting the `$pinned` class property:
 
 ```php
 public $pinned = true;
diff --git a/content/collections/extending-docs/relationship-fieldtypes.md b/content/collections/extending-docs/relationship-fieldtypes.md
index d58e45eb0..7eab4058f 100644
--- a/content/collections/extending-docs/relationship-fieldtypes.md
+++ b/content/collections/extending-docs/relationship-fieldtypes.md
@@ -4,7 +4,6 @@ template: page
 updated_by: 42bb2659-2277-44da-a5ea-2f1eed146402
 updated_at: 1569347303
 intro: The Relationship fieldtype is one of the more powerful fields in Statamic's core. So powerful, in fact, that it earns its very own page in the docs. This is that page.
-stage: 1
 id: 06813e5d-158e-4318-aa4a-b29fd87d107f
 ---
 By default, the relationship fieldtype lets you select entries from various collections as well as create and edit items on the fly from _within_ the field.
@@ -46,7 +45,7 @@ class Tweets extends Relationship
 
 There are a handful of methods and properties inside the `Relationship` class, and you can override them to control how it functions.
 
-There are two main areas you will want to customize. The index items and the selected item data.
+There are three main areas you will want to customize. The index items, the selected item data, and the listing data.
 
 ## Index Items
 
@@ -128,9 +127,22 @@ public function getItemData($values, $site = null)
 }
 ```
 
-## Creating Items
+### Listing Data
+
+When field data is to be displayed in a listing view (eg. in the entries listing table or the entry fieldtype), you may customize the display by overwriting the `preProcessIndex` method.
+
+In our Twitter field, let's show only the text:
+
+```php
+public function preProcessIndex($data)
+{
+    $tweets = Twitter::getStatusesLookup(['id' => implode(',', $data)]);
 
-Todo.
+    return collect($tweets)->map(fn($tweet) => $tweet->text)->join(', ');
+}
+```
+
+## Creating Items
 
 To disable creation of items, you can add the canCreate property.
 
@@ -174,11 +186,11 @@ Vue.component('TwitterRelationshipItem', require('./TwitterRelationshipItem.vue'
 
 ``` vue
 <template>
-    <div class="item mb-1 ">
+    <div class="mb-1 item">
         <div class="item-move">&nbsp;</div>
         <div class="item-inner">
             <div class="p-3">
-                <p class="text-lg mb-2">{{ item.text }}</p>
+                <p class="mb-2 text-lg">{{ item.text }}</p>
                 <p class="text-grey">{{ item.user }} – {{ item.date_relative }}</p>
             </div>
         </div>
diff --git a/content/collections/extending-docs/search.md b/content/collections/extending-docs/search.md
index 723dde61b..00dabeaca 100644
--- a/content/collections/extending-docs/search.md
+++ b/content/collections/extending-docs/search.md
@@ -23,19 +23,20 @@ In the following examples, we'll assume you are wanting to store products as Elo
 
 ### Implement Searchable
 
-The object you want to make searchable should implement the `Statamic\Contracts\Search\Searchable` interface.
-
-There is a `Searchable` trait to make implementing it easier.
+The object you want to make searchable should implement both the `Statamic\Contracts\Data\Augmentable` and `Statamic\Contracts\Search\Searchable` interfaces. To make things easier, you can import the `HasAugmentedData` and `Searchable` traits which will handle most of the heavy lifting for you.
 
 ```php
+use Illuminate\Database\Eloquent\Model;
+use Statamic\Contracts\Data\Augmentable;
 use Statamic\Contracts\Search\Result as ResultContract;
 use Statamic\Contracts\Search\Searchable as SearchableContract;
-use Statamic\Search\Searchable;
+use Statamic\Data\HasAugmentedData;
 use Statamic\Search\Result;
+use Statamic\Search\Searchable;
 
-class Product extends Model implements SearchableContract
+class Product extends Model implements Augmentable, ContainsQueryableValues, SearchableContract
 {
-    use Searchable;
+    use HasAugmentedData, Searchable;
 
     /**
      * The identifier that will be used in search indexes.
@@ -61,6 +62,48 @@ class Product extends Model implements SearchableContract
     {
         return new Result($this, 'product');
     }
+
+/**
+     * Returns an array of the model's attributes to be used in augmentation.
+     */
+    public function augmentedArrayData()
+    {
+        return $this->attributesToArray();
+    }
+}
+```
+
+When you're making a searchable from an Eloquent model, you'll need to override some `offset`/`__call` methods to prevent conflicts between Eloquent and Statamic's implementations of those methods:
+
+```php
+/**
+ * These methods exist on both Eloquent's Model class and in Statamic's HasAugmentedInstance trait.
+ * To prevent conflicts, we need to override these methods and force them to call Eloquent's method.
+ */
+
+public function offsetGet($offset): mixed
+{
+    return parent::offsetGet($offset);
+}
+
+public function offsetSet($offset, $value): void
+{
+    parent::offsetSet($offset, $value);
+}
+
+public function offsetUnset($offset): void
+{
+    parent::offsetUnset($offset);
+}
+
+public function offsetExists($offset): bool
+{
+    return parent::offsetExists($offset);
+}
+
+public function __call($method, $parameters)
+{
+    return parent::__call($method, $parameters);
 }
 ```
 
diff --git a/content/collections/extending-docs/slugify.md b/content/collections/extending-docs/slugify.md
deleted file mode 100644
index a735af0f0..000000000
--- a/content/collections/extending-docs/slugify.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Slugify
-stage: 1
-id: d84613d5-2b2b-465d-8f02-c71b6d2aadf1
----
-You can use the `<slugify>` component to generate a slug based off another property:
-
-``` html
-<slugify :from="title" v-model="slug">
-    <input slot-scope="{}" :value="slug" @input="slug = $event.target.value" />
-</slugify>
-```
-
-When the value of the `from` prop changes (ie. the `title` property), it will update the `slug` property.
-
-If you update the slug manually (ie. by typing in the field), the component will realize, and prevent any further automatic slug generation.
-
-If you want underscores instead of dashes, you can pass in `separator="_"`.
diff --git a/content/collections/extending-docs/slugs.md b/content/collections/extending-docs/slugs.md
new file mode 100644
index 000000000..75033c44d
--- /dev/null
+++ b/content/collections/extending-docs/slugs.md
@@ -0,0 +1,85 @@
+---
+title: Slugs
+stage: 1
+id: d84613d5-2b2b-465d-8f02-c71b6d2aadf1
+---
+## Slugify Vue Component
+
+You can use the `<slugify>` component to generate a slug based off another property:
+
+``` html
+<slugify :from="title" v-model="slug">
+    <input slot-scope="{}" :value="slug" @input="slug = $event.target.value" />
+</slugify>
+```
+
+When the value of the `from` prop changes (ie. the `title` property), it will update the `slug` property.
+
+If you update the slug manually (ie. by typing in the field), the component will realize, and prevent any further automatic slug generation.
+
+If you want underscores instead of dashes, you can pass in `separator="_"`.
+
+
+## JavaScript API
+
+### Basic Slugs
+You may also create slugs programmatically.
+
+```js
+Statamic.$slug.create('Hello World'); // hello-world
+```
+
+You may also define the separating character:
+
+```js
+Statamic.$slug.separatedBy('_').create('Hello World'); // hello_world
+```
+
+You may use the `str_slug` and `snake_case` global methods respectively as aliases for both of these:
+
+```js
+str_slug('Hello World'); // hello-world
+snake_case('Hello World'); // hello_world
+```
+
+:::tip
+When you're within a Vue component, you may use `this.$slug` instead of `Statamic.$slug`.
+:::
+
+### More Oomph
+
+When you need more accurate slugs, you can leverage PHP's more powerful slug logic. By calling `async`, the `create` method will become Promise-based as it requests slugs from the server:
+
+```js
+Statamic.$slug.async().create('Hello World').then(slug => {
+    console.log(slug); // 'hello-world'
+})
+```
+
+This is particularly useful when you need to provide the language:
+
+```js
+Statamic.$slug.in('zh').async().separatedBy('_')
+        .create('你好世界')
+        .then(slug => console.log(slug)); // ni_hao_shi_jie
+```
+
+:::tip
+If you don't provide a language, the language of the selected site in the control panel will be used.
+:::
+
+### Debouncing
+
+If you will be calling this repeatedly, such as via user's keystrokes, debouncing is useful to prevent excess calls to the server.
+
+Debouncing will be automatically handled as long as you call `create` on the same instance:
+
+```js
+const slugger = Statamic.$slug.async().separatedBy('_');
+
+slugger.create('one').then(slug => console.log(slug));
+slugger.create('two').then(slug => console.log(slug));
+slugger.create('three').then(slug => console.log(slug));
+
+// console: 'three'
+```
diff --git a/content/collections/extending-docs/stacks.md b/content/collections/extending-docs/stacks.md
index a3b908325..bbfa42de4 100644
--- a/content/collections/extending-docs/stacks.md
+++ b/content/collections/extending-docs/stacks.md
@@ -66,16 +66,3 @@ shouldClose() {
 ```
 
 If you prevent your stack from closing, any subsequent Stacks closures will also be prevented.
-
-## Panes
-
-Panes are similar to narrow Stacks, except there can only be one at a time, and they appear next to your content instead of over the top. This allows you to interact with the pane and your main content area at the same time.
-
-``` html
-<pane name="options" v-if="showOptions" @closed="showOptions = false">
-    <div slot-scope="{ close }">
-        Pane content
-        <button @click="close">Close</button>
-    </div>
-</pane>
-```
diff --git a/content/collections/extending-docs/tags.md b/content/collections/extending-docs/tags.md
index 89cc50b9e..75d7d1159 100644
--- a/content/collections/extending-docs/tags.md
+++ b/content/collections/extending-docs/tags.md
@@ -3,7 +3,7 @@ title: Building Tags
 template: page
 updated_by: 42bb2659-2277-44da-a5ea-2f1eed146402
 updated_at: 1569264076
-intro: Ultimately a Tag is nothing more than a PHP Method called from an Antlers template. This common pattern allows non-PHP developers to take advantage of dynamic features in their site easily without writing any code.
+intro: Ultimately a Tag is nothing more than a PHP method called from an Antlers or Blade template. This common pattern allows non-PHP developers to take advantage of dynamic features in their site easily without writing any code.
 stage: 1
 id: 098cb1c5-94c2-4bc0-add7-9aad39951d67
 ---
@@ -11,7 +11,10 @@ id: 098cb1c5-94c2-4bc0-add7-9aad39951d67
 
 A tag consists of several parts, none of which are named the “thorax”. Let’s break a Tag down:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ acme:foo_bar src="baz" }}
 ```
 
@@ -19,13 +22,34 @@ A tag consists of several parts, none of which are named the “thorax”. Let
 - The second bit is the method it maps to: `fooBar` (the method will be camelCased)
 - And lastly, a parameter: `src="foo"`. There can be any number of parameters on a Tag.
 
+::tab blade
+```blade
+<s:acme:foo_bar src="baz" />
+```
+
+- The first part after `<s:`? That’s the tag's handle: `acme`
+- The second bit is the method it maps to: `fooBar` (the method will be camelCased)
+- And lastly, a parameter: `src="foo"`. There can be any number of parameters on a Tag.
+
+::
+
 Tags can also come in pairs, much like beer comes in pints. For example:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ entries:listing folder="blog" }}
   <div>{{ title }}</div>
 {{ /entries:listing }}
 ```
+::tab blade
+```blade
+<s:entries:listing folder="blog">
+  <div>{{ $title }}</div>
+</s:entries:listing>
+```
+::
 
 Anything in-between your tag pair is available as `$this->content`. Sometimes you’ll want to use it as input, other times manipulate it, and yet another time leave it be. It’s up to you.
 
@@ -47,11 +71,25 @@ class MyTags extends \Statamic\Tags\Tags
 {
     public function fooBar()
     {
-        // {{ my_tags:foo_bar }}
+        // Stay awhile and listen.
     }
 }
 ```
 
+Would be called like so in your template:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ my_tags:foo_bar }}
+```
+::tab blade
+```blade
+<s:my_tags:foo_bar />
+```
+::
+
 ### Index
 
 A tag without a method will use the `index` method.
@@ -59,43 +97,79 @@ A tag without a method will use the `index` method.
 ``` php
 public function index()
 {
-    // {{ my_tags }}
+    // It's just one of those days.
 }
 ```
 
+Template:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ my_tags }}
+```
+::tab blade
+```blade
+<s:my:tags />
+```
+::
+
 ### Wildcards
 
-A common tag pattern is to have the method be dynamic. For example, the [Collection Tag][collection_tag]'s method is the handle of the collection you want to work with: `{{ collection:blog }}`.
+A common tag pattern is to have the method be dynamic. For example, the [Collection Tag][collection_tag]'s method is the handle of the collection you want to work with: `collection:blog`.
 
 You may add a `wildcard` method to your Tag class to catch these.
 
 ``` php
 public function wildcard($tag)
 {
-    // {{ tag:* }}
-
-    // if you used {{ tag:foo }}, $tag would be "foo"
+    // ♠️♥️♦️♣️
 }
 ```
 
+then, in your template:
+
+::tabs
+
+::tab antlers
+```antlers
+{{# Replace the * with anything you'd like! Go wild - play your crazy card! #}}
+{{ tag:* }}
+
+{{# In this case, the `$tag` value would be "foo" #}}
+{{ tag:foo }}
+```
+::tab blade
+```blade
+{{-- Replace the * with anything you'd like! Go wild - play your crazy card! --}}
+<s:tag:* />
+
+{{-- In this case, the `$tag` value would be "foo" --}}
+<s:tag:foo />
+```
+::
+
 If you want a tag named literally "wildcard", you can adjust the wildcard method that Statamic will call by updating the `wildcardMethod` property.
 
-``` php
+```php
 protected $wildcardMethod = 'missing';
 
 public function wildcard()
 {
-    // {{ tag:wildcard }}
+    // tag:wildcard
 }
 
 public function missing($tag)
 {
-    // {{ tag:* }}
+    // tag:*
 }
 ```
 
-You may have used the `__call()` magic method in Statamic v2 to handle wildcard tags. This still technically works, but we've
-introduced the `wildcard` method to prevent some infinite looping situations you may encounter.
+:::best-practice
+You may notice that the `wildcard` method seems very similar to the `__call()` magic method. It is! The `wildcard` method
+uses `__call` under the hood, but with additional smarts. Be sure to use `wildcard`!
+:::
 
 ## Generating a tag class
 
@@ -139,7 +213,10 @@ Any parameters prefixed with a colon will resolve the values from the context au
 author: john
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ mytag
     greeting="hello"
     :name="author"
@@ -150,6 +227,20 @@ author: john
     things="foo|bar"
 }}
 ```
+::tab blade
+```blade
+<s:mytag
+  greeting="hello"
+  :name="$author"
+  do_this="true"
+  do_that="false"
+  limit="5"
+  latitude="6"
+  things="foo|bar"
+/>
+```
+::
+
 
 ``` php
 $this->params->get('greeting'); // "hello"
@@ -184,7 +275,10 @@ $this->params->get(['salutation', 'greeting']); // "hello"
 The context is the array of values being used for rendering the template where your tag happens to be placed.
 Take this block of templating for example:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title }}
 
 {{ collection:blog }}
@@ -192,6 +286,17 @@ Take this block of templating for example:
     {{ your_tag }}
 {{ /collection:blog }}
 ```
+::tab blade
+```blade
+{{ $title }}
+
+<s:collection:blog>
+  {{ $title }}
+
+  <s:your_tag />
+</s:collection:blog>
+```
+::
 
 The `title` in the first line uses the page context since it's not nested inside any other tag pairs. This would typically be the title of the entry of the URL you're visiting. You can pretend that the entire template is wrapped in a pair of invisible tags.
 
@@ -233,10 +338,20 @@ public function method()
     return 'hello';
 }
 ```
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ your_tag:method }}
 ```
+::tab blade
+```blade
+<s:your_tag:method />
 ```
+::
+
+```text
 hello
 ```
 
@@ -248,10 +363,21 @@ public function method()
     return true;
 }
 ```
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ if {your_tag:method} }} yup {{ /if }}
 ```
+::tab blade
+```blade
+@if (Statamic::tag('your_tag:method')->fetch()) yup @endif
 ```
+
+::
+
+```text
 yup
 ```
 
@@ -270,12 +396,24 @@ public function method() {
     ];
 }
 ```
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ your_tag:method }}
     {{ tree }} {{ path }} {{ sky }}
 {{ /your_tag:method }}
 ```
+::tab blade
+```blade
+<s:your_tag:method>
+  {{ $tree }} {{ $path }} {{ $sky }}
+</s:your_tag:method>
 ```
+::
+
+```text
 maple dirt blue
 ```
 
@@ -297,17 +435,31 @@ public function method() {
     ];
 }
 ```
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ your_tag:method }}
     {{ tree }} {{ path }} {{ sky }}
 {{ /your_tag:method }}
 ```
+::tab blade
+```blade
+<s:your_tag:method>
+  {{ $tree }} {{ $path }} {{ $sky }}
+</s:your_tag:method>
 ```
+::
+
+```text
 maple dirt blue
 oak asphalt black
 ```
 
-Returning an empty array will automatically make a `no_results` boolean available.
+### Empty Results in Antlers
+
+When using Antlers, a `no_results` variable will be automatically created when a tag returns an empty array.
 
 ``` php
 public function method() {
@@ -327,6 +479,53 @@ public function method() {
 No results.
 ```
 
+### Empty Results in Blade
+
+There are many different ways to handle empty results in Blade. When iterating simple tag results without aliasing, there is a special Blade component that takes the place of the `no_results` variable:
+
+``` php
+public function method() {
+    return [ ];
+}
+```
+
+```blade
+<s:your_tag:method>
+  Some results.
+
+  <s:no_results>
+    No results.
+  </s:no_results>
+</s:your_tag:method>
+```
+
+In all other scenarios, you will need to use other techniques. Some examples are:
+
+```blade
+{{-- Checking the count. --}}
+<s:your_tag:method as="results">
+
+  @if (count($results) > 0)
+    Some results.
+  @else
+    No results.
+  @endif
+
+</s:your_tag:method>
+
+{{-- Using forelese --}}
+<s:your_tag:method as="results">
+  @forelse ($results as $value)
+    ...
+  @empty
+    No results.
+  @endforelse
+
+</s:your_tag:method>
+```
+
+Whichever method you choose will depend on the situation and your personal preference.
+
 ### Passing along context
 
 As mentioned above, the array returned from a tag pair method is what'll be available between the tags. The parent context is not available. This is to prevent variable collision and confusion.
@@ -349,6 +548,151 @@ return array_merge(
 );
 ```
 
+## Considerations for Blade
+
+Most tag implementations will work seamlessly whether a user is writing their templates in Antlers or Blade, but there are a few things to keep in mind.
+
+### Conditionally Included Variables and "Falsey-ness"
+
+Tag implementations that conditionally inject a variable should consider always including the variable in their output, with a backwards-compatible default. Antlers will treat non-existent variables as `false` in conditions, and skip them entirely in other contexts.
+
+Because Blade compiles to PHP, if you do not always include the variable, users of your tag will have to resort to adding `isset` (or similar) checks.
+
+If your tag conditionally injects a variable that template authors rely on to change their output, consider adjusting the logic such that the variable is always available, with a backwards-compatible default.
+
+An example of this is Statamic's own form tag and the `success` variable.
+
+### Aliased Array Results
+
+The Antlers engine will automatically alias array results. Consider the following tag:
+
+```php
+<?php
+
+namespace App\Tags;
+
+use Statamic\Tags\Tags;
+
+class YourTag extends Tags
+{
+    public function index()
+    {
+        return ['a', 'b', 'c'];
+    }
+}
+```
+
+When writing Antlers, the following will "just work" due to how to the engine is implemented:
+
+```antlers
+{{ your_tag as="the_array_name" }}
+
+  {{ the_array_name }}
+    {{ value }}
+  {{ /the_array_name }}
+
+{{ /your_tag }}
+```
+
+The Blade countepart would be:
+
+```blade
+<s:my_custom_tag as="the_array_name">
+  @foreach ($the_array_name as $value)
+    {{ $value }}
+  @endforeach
+</s:my_custom_tag>
+```
+
+However, with the current tag implementation, this would not work and template authors would receive an error stating the `$the_array_name` variable doesn't exist. To make this work, we need to add support for the `as` parameter to our tag directly. Luckily, an `aliasedResult` helper method exists to make this easy for us:
+
+```php
+<?php
+
+namespace App\Tags;
+
+use Statamic\Tags\Tags;
+
+class YourTag extends Tags
+{
+    public function index()
+    {
+        return ['a', 'b', 'c']; // [tl! --]
+        return $this->aliasedResult(['a', 'b', 'c']); // [tl! ++]
+    }
+}
+```
+
+### Don't Assume Tag Content is Always Antlers
+
+If you are interacting with a tag's content and rendering it manually, you should *not* assume that the tag's content is always Antlers.
+
+For example, if you have a tag implementation that looks something like this:
+
+```php
+<?php
+
+namespace App\Tags;
+
+use Statamic\Facades\Antlers;
+use Statamic\Tags\Tags;
+
+class MyCustomTag extends Tags
+{
+    public function index()
+    {
+        return Antlers::parse($this->content);
+    }
+}
+
+```
+
+consider using the `parse()` method instead, which will take the current templating language into consideration:
+
+
+```php
+<?php
+
+namespace App\Tags;
+
+use Statamic\Facades\Antlers; // [tl! --]
+use Statamic\Tags\Tags;
+
+class MyCustomTag extends Tags
+{
+    public function index()
+    {
+        return Antlers::parse($this->content); // [tl! --]
+        return $this->parse(); // [tl! ++]
+    }
+}
+
+```
+
+### Implementing Custom Behavior for Blade vs. Antlers
+
+If you want to change your tags behavior specifically for Blade, you can check if the current tag instance is being rendered within a Blade template like so:
+
+```php
+<?php
+
+namespace App\Tags;
+
+use Statamic\Tags\Tags;
+
+class YourTag extends Tags
+{
+    public function index()
+    {
+        if ($this->isAntlersBladeComponent()) {
+            return 'Hello, Blade!';
+        }
+
+        return 'Hello, Antlers!';
+    }
+}
+```
+
 ## Miscellaneous
 
 - `$this->content` - When using a tag pair, this is what's between them.
diff --git a/content/collections/extending-docs/testing-in-addons.md b/content/collections/extending-docs/testing-in-addons.md
new file mode 100644
index 000000000..bfa1583e8
--- /dev/null
+++ b/content/collections/extending-docs/testing-in-addons.md
@@ -0,0 +1,153 @@
+---
+id: 15db07e8-6e83-4b6e-89bb-d050b5d2c823
+blueprint: page
+title: 'Testing in Addons'
+template: page
+nav_title: Testing
+intro: "There's only one thing better than manual testing... automated testing. Addons are scaffolded with PHPUnit test suites out-of-the-box. Learn how to write & run tests."
+---
+When you create an addon with the `php please make:addon` command, Statamic will automatically scaffold the necessary files for a PHPUnit test suite:
+
+``` files theme:serendipity-light
+tests/
+    ExampleTest.php
+    TestCase.php
+phpunit.xml
+```
+
+## The `TestCase`
+
+The `TestCase` class extends Statamic's built-in `AddonTestCase` which is responsible for booting your addon's service provider, amongst other things. 
+
+Under the hood, Statamic's `AddonTestCase` extends [Orchestra Testbench](https://github.com/orchestral/testbench)'s `TestCase` class. Testbench allows you to test against a *real* Laravel application.
+
+If you need to change any config settings for your test suite, like enabling Statamic Pro or configuring the REST API, add a `resolveApplicationConfiguration` method to your `TestCase`:
+
+```php
+protected function resolveApplicationConfiguration($app)
+{
+    parent::resolveApplicationConfiguration($app);
+
+    $app['config']->set('statamic.editions.pro', true);
+
+    $app['config']->set('statamic.api.resources', [
+        'collections' => true,
+        'navs' => true,
+        'taxonomies' => true,
+        'assets' => true,
+        'globals' => true,
+        'forms' => true,
+        'users' => true,
+    ]);
+}
+```
+
+
+## Writing Tests
+
+All of your tests should extend your addon's `TestCase` class, like so:
+
+```php
+<?php
+
+namespace Acme\Example\Tests;
+
+use Acme\Example\Tests\TestCase;
+
+class ExampleTest extends TestCase
+{
+    /**
+     * A basic test example.
+     */
+    public function test_that_true_is_true(): void
+    {
+        $this->assertTrue(true);
+    }
+}
+```
+
+For more information on writing tests, please review the [Laravel Testing Documentation](https://laravel.com/docs/12.x/testing).
+
+### The Stache
+
+During tests, any Stache items (like entries, terms, global sets) will be saved inside your `tests/__fixtures__` directory.
+
+However, most of the time, you'll probably want to blow away old content between test runs. To do this, you may add the `PreventsSavingStacheItemsToDisk` trait to your tests:
+
+```php
+use Statamic\Testing\Concerns\PreventsSavingStacheItemsToDisk; // [tl! focus]
+
+class ExampleTest extends TestCase
+{
+	use PreventsSavingStacheItemsToDisk; // [tl! focus]
+
+    // ...
+}
+```
+
+## Running Tests
+
+Once you've written some tests, you can run them using `phpunit`:
+
+```bash
+./vendor/bin/phpunit
+```
+
+You may run a specific test by passing the `--filter` argument:
+
+```bash
+# Runs all tests in the CheckoutTest
+./vendor/bin/phpunit --filter=CheckoutTest
+
+# Runs the specific user_cant_checkout_without_payment test
+./vendor/bin/phpunit --filter=user_cant_checkout_without_payment
+
+# Runs all tests with checkout in their name.
+./vendor/bin/phpunit --filter=checkout
+```
+
+### GitHub Actions
+
+When you're using GitHub to store your addon's source code, you can take advantage of GitHub Actions so your addon's tests are run whenever you push to your repository or whenever a pull request is submitted.
+
+Running tests on GitHub Actions (or any CI platform for that matter) saves you running the tests locally after every change and also means you can run your addon's tests against multiple PHP & Laravel versions.
+
+For ease of use, here's an example GitHub Actions workflow:
+
+```yaml
+name: Test Suite
+
+on:
+  push:
+  pull_request:
+
+jobs:
+  php_tests:
+    strategy:
+      matrix:
+        php: [8.2, 8.3]
+        laravel: [10.*, 11.*]
+        os: [ubuntu-latest]
+
+    name: ${{ matrix.php }} - ${{ matrix.laravel }}
+    
+    runs-on: ${{ matrix.os }}
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v1
+
+      - name: Setup PHP
+        uses: shivammathur/setup-php@v2
+        with:
+          php-version: ${{ matrix.php }}
+          extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick
+
+      - name: Install dependencies
+        run: |
+          composer require "laravel/framework:${{ matrix.laravel }}" --no-interaction --no-update
+          composer install --no-interaction
+
+      - name: Run PHPUnit
+        run: vendor/bin/phpunit
+```
diff --git a/content/collections/extending-docs/utilities.md b/content/collections/extending-docs/utilities.md
index b8617d696..21bc8029a 100644
--- a/content/collections/extending-docs/utilities.md
+++ b/content/collections/extending-docs/utilities.md
@@ -21,7 +21,7 @@ Registering a utility will give you a route, nav item, and a permission for free
 
 In a service provider's `boot` method, you can register a utility with the `Utility` facade.
 
-Start with `Utility::make()`, chain as many methods as you want, then finish with `register()`. At a minimum, you'll need a view.
+Start with `Utility::register()` with the handle of the utility, then chain as many methods as you want.
 
 Make sure to surround any utility registrations in a `Utility::extend` closure.
 
@@ -31,51 +31,60 @@ use Statamic\Facades\Utility;
 public function boot()
 {
     Utility::extend(function () {
-        Utility::register('french-fries')->view('fries-utility');
+        Utility::register('data_wangjangler')->view('wangjangler.utility');
     });
 }
 ```
 
 ``` blade
 @extends('statamic::layout')
-@section('title', __('French Fries'))
+@section('title', __('Data Wangjangler'))
 
 @section('content')
     <div class="flex items-center justify-between">
-        <h1>{{ __('French Fries') }}</h1>
+        <h1>{{ __('Data Wangjangler') }}</h1>
     </div>
 
-    <div class="mt-3 card">
-        French Fries
-    </div>
+    <button @click="commenceWangjangling">
+        Wangjangle that data.
+    </button>
 @stop
 ```
 
 ## Customizing the navigation and card
 
-You can customize the nav item and the card within the listing by chaining additional methods.
+You can customize the nav item, description, icon, and other details on the index listing by chaining the corresponding methods.
+
+For icons you can pass an SVG as a string. Be sure to use `fill="currentColor"` to allow the UI to fit into the control panel.
 
 ``` php
-$utility
-    ->title('French Fries')
-    ->navTitle('Fries')
-    ->description('Makes french fries at the click of a button.')
-    ->docsUrl('https://yoursite.com/docs/french-fries')
-    ->register();
+use Statamic\Facades\Utility;
+
+public function boot()
+{
+    Utility::extend(function () {
+        Utility::register('data_wangjangler')
+            ->title('Data Wangjangler')
+            ->navTitle('Wangjangler')
+            ->icon('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M246.0422 221.6193c-14.2079 -17.2455 -21.3609 -38.4104 -21.3609 -59.5753 0 -78.4865 94.0663 -156.875 188.1325 -156.875 51.9324 0 94.0662 42.1338 94.0662 94.0662 0 94.0662 -78.3885 188.1325 -156.973 188.1325 -21.1649 0 -42.3298 -7.153 -59.5753 -21.3609L58.6936 497.6449c-12.2482 12.2482 -32.1392 12.2482 -44.3875 0s-12.2482 -32.1393 0 -44.3875l231.7361 -231.6381Z" fill="currentColor" stroke-width="1"></path></svg>')
+            ->description('Wanjangles your data at the click of a button.')
+            ->docsUrl('https://yoursite.com/docs/wangjangler');
+    });
+}
 ```
 
 ## Customizing the controller and view
 
-At a minimum you need to tell it which view to load. 
+At a minimum you need to tell it which view to load.
 
 ``` php
-$utility->view('fries');
+Utility::register('data_wangjangler')->view('wangjangler');
 ```
 
 If you'd like to pass data to it, you could use a closure similar to if it were in a routes file:
 
 ``` php
-$utility->view('fries', function ($request) {
+Utility::register('data_wangjangler')->view('wangjangler', function ($request) {
     return ['foo' => 'bar'];
 });
 ```
@@ -83,32 +92,32 @@ $utility->view('fries', function ($request) {
 Or you can point to a controller action:
 
 ``` php
-$utility
-    ->action(FriesController::class) // call the __invoke method
-    ->action([FriesController::class, 'index']); // call the index method
+Utility::register('data_wangjangler')
+    ->action(WangjanglerController::class) // call the __invoke method
+    ->action([WangjanglerController::class, 'index']); // call the index method
 ```
 
 ## Routing
 
-A route will be created for you automatically, using the slugified version of the handle you initially provided. eg. `/cp/utilities/french-fries`
+A route will be created for you automatically, using the slugified version of the handle you initially provided. eg. `/cp/utilities/data-wangjangler`
 
 If your utility needs to _do_ something (like how you click a button in the cache manager utility to actually clear the cache)
 you may register additional routes.
 
 ``` php
-$utility->routes(function ($router) {
-    $router->post('/', [FriesController::class, 'make'])->name('make');
+Utility::register('data_wangjangler')->routes(function ($router) {
+    $router->post('/', [WangjanglerController::class, 'make'])->name('make');
 });
 ```
 
 ``` blade
-{{ cp_route('utilities.french-fries.make') }}
-// outputs: /cp/utilities/french-fries/make
+{{ cp_route('utilities.data-wangjangler.make') }}
+// outputs: /cp/utilities/data-wangjangler/make
 ```
 
 ## Permissions
 
-A single permission will be registered automatically using the handle.  
-eg. `access french fries utility`
+A single permission will be registered automatically using the handle.
+eg. `access data_wangjangler utility`
 
 Users without this permission will not see the utility in the navigation or utility listing.
diff --git a/content/collections/extending-docs/vite-in-addons.md b/content/collections/extending-docs/vite-in-addons.md
new file mode 100644
index 000000000..5ed0a19b0
--- /dev/null
+++ b/content/collections/extending-docs/vite-in-addons.md
@@ -0,0 +1,164 @@
+---
+id: 5f26a634-19ae-4413-8b9e-1ed9c2c76bb0
+blueprint: page
+title: 'Vite in Addons'
+template: page
+intro: 'How to use Vite in your addon.'
+---
+
+## Files
+We recommend using Vite to manage your addon's asset build process. To use Vite, you'll need the following files inside your addon.
+
+``` files theme:serendipity-light
+your-addon/
+    resources/
+        dist/
+        js/
+            addon.js
+        css/
+            addon.css
+    src/
+        ServiceProvider.php
+    vite.config.js
+    package.json
+```
+
+### package.json
+Here's `package.json`, which contains the commands you'll need to run, and the dependencies needed to run Vite.
+
+- The `laravel-vite-plugin` package allows a simpler wrapper around common Vite options, and provides hot reloading.
+- The `@vitejs/plugin-vue2` package allows you to use Vue v2 in your code. Vue v2 is used because that's the version used in the Control Panel. If you aren't adding Vue components to the CP you can leave this out.
+
+```json
+{
+    "private": true,
+    "scripts": {
+        "dev": "vite",
+        "build": "vite build"
+    },
+    "devDependencies": {
+        "@vitejs/plugin-vue2": "^2.2.0",
+        "laravel-vite-plugin": "^0.7.2",
+        "vite": "^4.0.0"
+    }
+}
+```
+
+### vite.config.js
+Here's `vite.config.js`, which configures Vite itself.
+
+- The Laravel Vite plugin defaults to the `public` directory to place the compiled code because it's intended to be used in your app. We've changed it to `resources/dist` as we think it's a nicer convention when using in an addon. Of course, you may customize it. Whichever directory you choose, you'll need to make sure it exists.
+- If you aren't using Vue components in the CP, you may omit the `vue` plugin and its import.
+
+```js
+import { defineConfig } from 'vite';
+import laravel from 'laravel-vite-plugin';
+import vue from '@vitejs/plugin-vue2';
+
+export default defineConfig({
+    plugins: [
+        laravel({
+            input: [
+                'resources/js/addon.js',
+                'resources/css/addon.css'
+            ],
+            publicDirectory: 'resources/dist',
+        }),
+        vue(),
+    ],
+});
+```
+
+### Service Provider
+Here's `ServiceProvider.php`, which is the PHP entry point to your addon. You should add a `$vite` property which mirrors the paths in your `vite.config.js` file.
+
+```php
+class ServiceProvider extends AddonServiceProvider
+{
+    protected $vite = [ // [tl! ++:start]
+        'input' => [
+            'resources/js/addon.js',
+            'resources/css/addon.css',
+        ],
+        'publicDirectory' => 'resources/dist',
+    ]; // [tl! ++:end]
+}
+```
+
+:::tip
+If you use the `php please make:fieldtype` command, these files will be created automatically for you.
+:::
+
+## Tailwind CSS
+
+If you want to use [Tailwind CSS](https://tailwindcss.com) in your addon's views, you'll need to install & configure Tailwind to scan your addon's files.
+
+1. First, install `tailwindcss` and `postcss`:
+    ```sh
+    npm install tailwindcss postcss
+    ```
+
+2. Create a `postcss.config.js` file in the root of your addon:
+    ```js
+    module.exports = {
+        plugins: {
+            tailwindcss: {}
+        },
+    };
+    ```
+
+3. Create a `tailwind.config.js` file. In the `content` array, add the paths you'd like Tailwind to scan for classes:
+    ```js
+    module.exports = {
+        content: [
+            './resources/js/components/**/*.vue',
+            './resources/views/widgets/**/*.blade.php',
+        ]
+    }
+    ```
+
+4. Finally, in your addon's CSS file, include Tailwind's utility classes:
+    ```css
+    @import "tailwindcss/utilities";
+    ```
+
+    You don't need to add `@tailwind base;` or `@tailwind components;` since they're included in Statamic's CSS file.
+
+## Development
+
+If you visit the Control Panel before running any commands, you will be greeted with a `Vite manifest not found` error. You'll need to install dependencies (the first time only) and start the development server.
+
+```bash
+npm install
+npm run dev
+```
+
+Now that the Vite server is running, the error in the Statamic CP should be gone once you refresh.
+
+With the development server running, hot reloading should be working. When you save a CSS or JS file, it should be reflected in the browser without you needing to manually refresh.
+
+:::tip
+If you're using Valet with a secured site, your JS might not be loading correctly due to access control checks. You'll need Vite know about your Laravel site in `vite.config.js`.
+
+```js
+export default defineConfig({
+    plugins: [
+        laravel({
+            valetTls: 'yoursite.test', // [tl!++]
+            input: [
+```
+:::
+
+## Deployment
+
+When you're ready to deploy your addon, either to your own application or getting it ready to go into the marketplace, you should compile the production assets.
+
+Make sure that the Vite dev server is not running, then run:
+
+```bash
+npm run build
+```
+
+The files will be compiled into `resources/dist`.
+
+If you'd like to test that everything is working you can run `php artisan vendor:publish` in your app and choose your addon's tag. The compiled assets should be copied into `public/vendor/your-addon` and they should be loaded in the Control Panel.
diff --git a/content/collections/extending-docs/widgets.md b/content/collections/extending-docs/widgets.md
index e75dd2c5e..afed96327 100644
--- a/content/collections/extending-docs/widgets.md
+++ b/content/collections/extending-docs/widgets.md
@@ -6,9 +6,15 @@ updated_at: 1569264107
 id: 5900c99f-89b9-4ee3-834c-cb1b070146e4
 ---
 
-For widgets, start with `php please make:widget examplewidgetname`.
+## Generating a widget
 
-This will automagically set up the widget and create a base template file at `resources/views/widgets/examplewidgetname.blade.php`.
+You can generate a widget with a console command:
+
+```shell
+php please make:widget LocalWeather
+```
+
+This will automagically set up the widget and create a base template file at `resources/views/widgets/local_weather.blade.php`.
 
 ## Configuring
 
@@ -19,7 +25,7 @@ Widgets can be added to the dashboard by modifying the `widgets` array in the `c
 'widgets' => [
   'getting_started',
   [ // [tl! focus:start]
-      'type' => 'examplewidgetname',
+      'type' => 'local_weather',
       'width' => 100,
   ], // [tl! focus:end]
 ],
diff --git a/content/collections/fieldtypes.yaml b/content/collections/fieldtypes.yaml
index 2692e69d0..03acb0c1d 100644
--- a/content/collections/fieldtypes.yaml
+++ b/content/collections/fieldtypes.yaml
@@ -1,5 +1,5 @@
 title: Fieldtypes
-template: fieldtypes.show
+template: page
 layout: layout
 mount: 5a8fe626-b073-41fc-8da4-264b54837600
 revisions: false
diff --git a/content/collections/fieldtypes/array.md b/content/collections/fieldtypes/array.md
index fcc74153b..de5bea7f8 100644
--- a/content/collections/fieldtypes/array.md
+++ b/content/collections/fieldtypes/array.md
@@ -4,7 +4,7 @@ meta_title: Array Fieldtype
 intro: Manage data in a `key:value` array format.
 overview: |
   The array fieldtype is used to manage `key: value` array data. It's similar to the [table](/fieldtypes/table) fieldtype but with a more strict data structure and compact user interface.
-screenshot: fieldtypes/screenshots/array.png
+screenshot: fieldtypes/screenshots/v4/array.png
 options:
   -
     name: keys
@@ -45,7 +45,7 @@ If you'd like to have _lists_ of this type of data, you might want to use a [gri
 
 ## Modes
 
-The screenshot above depicts the two modes you can choose from. One for when you know there is a fixed set of keys (keyed), and one for when you don't (dynamic).
+The screenshot above depicts the three modes you can choose from. Two for when you know there is a fixed set of keys (keyed/single), and one for when you don't (dynamic).
 
 ### Keyed Mode
 
@@ -71,6 +71,10 @@ keys:
   - country
 ```
 
+### Single Mode
+
+Exactly the same restrictions and setup as keyed mode, except the user can only manage an array one item at a time, using a select box to switch between keys.
+
 ### Dynamic Mode
 
 The second field contains no pre-defined keys. This will allow the user to define them on the fly and re-arrange them.
@@ -88,7 +92,7 @@ key_header: Why is it awesome?
 
 ## Data Structure
 
-In the example above, both fields would save the exact same data.
+In the example above, the keyed mode and dynamic mode would save the exact same data.
 
 ```yaml
 address:
@@ -97,13 +101,24 @@ address:
   country: England
 ```
 
+Single mode will only save data if it has been entered by the user.
+
+```yaml
+address:
+  England: '221 Baker Street, London'
+```
+
+
 ## Templating
 
 _This fieldtype is not [augmented](/augmentation)._
 
+
+::tabs
+
 You can use basic array access, nested variables, or the [foreach tag](/tags/foreach) to loop through all of the keys. All three of the following methods are equivalent.
 
-```
+```antlers
 // Array access
 {{ address }}
     {{ street }} {{ city }} {{ country }}
@@ -117,3 +132,20 @@ You can use basic array access, nested variables, or the [foreach tag](/tags/for
     {{ value }}
 {{ /foreach:address }}
 ```
+
+::tab
+
+You can use basic array access or the `@foreach` directive to loop through all of the keys.
+
+```blade
+// Nested variables
+{{ $address['street'] }}
+{{ $address['city'] }}
+{{ $address['country'] }}
+
+// Using foreach
+@foreach ($address as $key => $value)
+	{{ $key }}: {{ $value }}
+@endforeach
+```
+::
\ No newline at end of file
diff --git a/content/collections/fieldtypes/assets.md b/content/collections/fieldtypes/assets.md
index 6b5b3fee2..9b8d3b788 100644
--- a/content/collections/fieldtypes/assets.md
+++ b/content/collections/fieldtypes/assets.md
@@ -3,7 +3,7 @@ title: Assets
 meta_title: Assets Fieldtype
 intro: Any time you want to list, display, or work with assets (external files with enhanced abilities), this is the way to do it. Upload, browse, reorder, delete, and even manage field data on individual assets.
 description: Upload files and use the Asset Browser to pick from existing files in your Asset Containers.
-screenshot: fieldtypes/screenshots/assets-list.png
+screenshot: fieldtypes/screenshots/v4/assets-list.png
 stage: 1
 options:
   -
@@ -21,6 +21,16 @@ options:
     type: string
     description: >
         The folder (relative to the container) to begin browsing. Default: the root folder of the container.
+  -
+    name: dynamic
+    type: string
+    description:
+        Assets will be placed in a subfolder based on the value of this field. See [dynamic folders](#dynamic-folders). You may use `id`, `slug`, or `author`.
+  -
+    name: min_files
+    type: int
+    description: >
+      The minimum number of allowed files. Leave empty for no minimum.
   -
     name: max_files
     type: int
@@ -31,11 +41,16 @@ options:
     type: string
     description: >
       Set to `list` to use the table layout mode, and `grid` to use the grid mode with larger thumbnails. Default: `grid`.
+  -
+    name: query_scopes
+    type: string
+    description: >
+      Allows you to specify a [query scope](/extending/query-scopes-and-filters#scopes) which should be applied when retrieving selectable assets. You should specify the query scope's handle, which is usually the name of the class in snake case. For example: `MyAwesomeScope` would be `my_awesome_scope`.
   -
     name: restrict
     type: bool
     description: >
-      If `true`, navigation within the asset browser will be disabled. Your users will be restricted to specified the container and folder. Default: `false`.
+      If `true`, navigation within the asset browser will be disabled. Your users will be restricted to a specified container and folder. Default: `false`.
 
 id: d0c65546-74f1-4a15-89d5-1562a95ee2c6
 ---
@@ -67,7 +82,7 @@ gallery_images:
   - dj-jazzy-jeff.jpg
   - uncle-phil.jpg
 
-# With max_items: 1
+# With max_files: 1
 hero_image: surf-boards.jpg
 ```
 
@@ -75,9 +90,11 @@ hero_image: surf-boards.jpg
 
 The Asset fieldtype uses [augmentation](/augmentation) to automatically relate the files with their Asset records, pull in custom and meta data, and resolve all image paths based on the container.
 
+::tabs
+
 By using a tag pair syntax, you'll be able to output variables for each asset:
 
-```
+```antlers
 {{ gallery_images }}
     <img src="{{ url }}" alt="{{ alt }}" />
 {{ /gallery_images }}
@@ -86,6 +103,21 @@ By using a tag pair syntax, you'll be able to output variables for each asset:
     <img src="{{ url }}" alt="{{ alt }}" />
 {{ /hero_image }}
 ```
+::tab
+
+You can use the `@foreach` directive to loop over each asset and output its variables:
+
+```blade
+@foreach ($gallery_images as $asset)
+    <img src="{{ $asset->url }}" alt="{{ $asset->alt }}" />
+@endforeach
+
+{{-- Assuming $hero_image is max_files: 1 --}}
+<img src="{{ $hero_image->url }}" alt="{{ $hero_image->alt }}" />
+```
+
+::
+
 
 ```html
 <img src="/assets/fresh-prince.jpg" alt="Will Smith as the Fresh Prince" />
@@ -97,14 +129,28 @@ By using a tag pair syntax, you'll be able to output variables for each asset:
 
 The same tag pair syntax can be used regardless of your `max_files` setting.
 
+::tabs
+
 If you have `max_files: 1`, you can also use a single tag syntax to directly use a variable inside the asset. Without a second tag part, the URL will be used.
 
-```
+```antlers
 {{ hero_image }}
 {{ hero_image:url }}
 {{ hero_image:alt }}
 ```
 
+::tab
+
+If you have `max_files: 1`, you can use property access to output variables within the asset. When output as a string, the URL will be used.
+
+```blade
+{{ $hero_image }}
+{{ $hero_image->url }}
+{{ $hero_image->alt }}
+```
+
+::
+
 ```html
 /assets/surf-boards.jpg
 /assets/surf-boards.jpg
@@ -129,6 +175,7 @@ Inside an asset variable's tag pair you'll have access to the following variable
 | `folder` | Which folder the file is in |
 | `is_audio` | `true` when file is one of `aac`, `flac`, `m4a`, `mp3`, `ogg`, or `wav`. |
 | `is_image` | `true` when file is one of `jpg`, `jpeg`, `png`, `gif`, or `webp`. |
+| `is_svg` | `true` when file is an `svg`. |
 | `is_video` | `true` when file is one of `h264`, `mp4`, `m4v`, `ogv`, or `webm`. |
 | `last_modified` | Formatted date string of the last modified time |
 | `last_modified_instance` | [Carbon][carbon] instance of the last modified time |
@@ -155,9 +202,10 @@ You can use [Glide](/tags/glide) to crop, flip, sharpen, pixelate, and perform o
 
 ### Asset Field Data
 
+::tabs
 All custom data set on the assets will also be available inside the asset tag loop.
 
-```
+```antlers
 {{ gallery_images }}
   <figure>
     <img src="{{ url }}" alt="{{ alt }}">
@@ -166,6 +214,42 @@ All custom data set on the assets will also be available inside the asset tag lo
 {{ /gallery_images }}
 ```
 
+::tab
+
+All custom data set on the assets will also be available on the asset instance.
+
+```blade
+@foreach ($gallery_images as $image)
+    <img src="{{ $image->url }}" alt="{{ $image->alt }}" />
+
+    @if ($caption = $image->caption)
+    <figcaption>{{ $caption }}</figcaption>
+    @endif
+@endforeach
+```
+
+::
+
+## Dynamic Folders
+
+In addition to selecting which container and folder assets will be uploaded into, you may configure the field to have a dedicated subfolder based on an entry's value.
+
+For example, you may want to place all the images for a blog post in its own directory.
+
+```yaml
+type: assets
+container: images
+folder: blog
+dynamic: slug
+```
+
+This would result in `image.jpg` being uploaded to `path/to/images/blog/my-entry-slug/image.jpg`.
+
+You may target the entry's `id`, `slug`, or `author` values.
+
+:::warning
+The values are *not* kept in sync. For example, if you change the entry's slug, the asset folder will not be renamed. You may rename the folder manually via a control on the field, or within the asset browser.
+:::
 
 
 [carbon]: https://carbon.nesbot.com/docs/
diff --git a/content/collections/fieldtypes/bard.md b/content/collections/fieldtypes/bard.md
index 0ecc1565a..1cb3af9ec 100644
--- a/content/collections/fieldtypes/bard.md
+++ b/content/collections/fieldtypes/bard.md
@@ -3,7 +3,7 @@ title: Bard
 description: "Rich article writing and block-based layouts made easy."
 intro: |
   Bard is more than just a content editor, and more flexible than a block-based editor. **It is designed to provide a delightful and powerful writing experience** with unparalleled flexibility on your front-end.
-screenshot: fieldtypes/screenshots/bard.jpg
+screenshot: fieldtypes/screenshots/v4/bard-with-sets.png
 options:
   -
     name: allow_source
@@ -23,6 +23,13 @@ options:
 
       These are the defaults:
       ![Bard Buttons](/img/fieldtypes/screenshots/bard-buttons.png) {.mt-4}
+
+      You can override the default buttons using the `Bard::setDefaultButtons()` method:
+      ```php
+      \Statamic\Fieldtypes\Bard::setDefaultButtons(['h2', 'h3', 'bold', 'italic']);
+      ```
+
+      When you have the `image` button toggled, make sure to define an Asset Container in the Bard field's settings, otherwise the button won't show.
   -
     name: target_blank
     type: boolean
@@ -43,6 +50,11 @@ options:
     type: boolean
     description: |
       Enable the option to toggle into fullscreen mode. Default: `true`.
+  -
+    name: collapse
+    type: boolean
+    description: >
+      Expand (`true`) or collapse (`false`) all sets by default. Default: `false`.
   -
     name: container
     type: string
@@ -63,6 +75,11 @@ options:
     type: boolean
     description: >
       Show estimated reading time at the bottom of the field. Default: `false`.
+  -
+    name: word_count
+    type: boolean
+    description: >
+      Show the word count at the bottom of the field. Default: `false`.
   -
     name: save_html
     type: boolean
@@ -98,15 +115,27 @@ Bard stores your data as a [ProseMirror document](https://prosemirror.net/docs/r
 
 If you are using Bard just as a rich text editor and have no need for sets you would use a single tag to render the content.
 
-```
+::tabs
+
+```antlers
 {{ bard_field }}
 ```
 
+::tab
+
+```blade
+{!! $bard_field !!}
+```
+
+::
+
 ### With Sets
 
-When working with sets, you should use the tag pair syntax and `if/else` conditions on the `type` variable to style each set accordingly. The non-set content uses type `text`.
+When working with sets, you should use the tag pair syntax and `if/else` conditions on the `type` variable to style each set accordingly. **Note**: any content that is entered _not_ in a set (i.e. your normal rich-text content) needs to be rendered using the "text" type. See the first condition using "text."
 
-```
+::tabs
+
+```antlers
 {{ bard_field }}
 
   {{ if type == "text" }}
@@ -133,9 +162,40 @@ When working with sets, you should use the tag pair syntax and `if/else` conditi
 {{ /bard_field }}
 ```
 
-An alternative approach (for those who like DRY or small templates) is to create multiple "set" partials and pass the data to them dynamically, moving the markup into corresponding partials bearing the set's name.
+::tab
 
+```blade
+@foreach ($bard_field_with_sets as $set)
+	@if ($set->type === 'text')
+	<div class="text">
+		{!! $set->text !!}
+	</div>
+	@elseif ($set->type === 'poll')
+	<figure class="poll">
+		<figcaption>{{ $set->question }}</figcaption>
+		<ul>
+			@foreach ($set->options as $option)
+				<li>{{ $option->text }}</li>
+			@endforeach
+		</ul>
+	</figure>
+	@elseif ($set->type === 'hero_image' && $hero_image = $set->hero_image)
+		<div class="heroimage">
+			<img src="{{ $hero_image }}" alt="{{ $hero_image->caption }}" />
+		</div>
+	@endif
+@endforeach
 ```
+
+::
+
+An alternative approach (for those who like DRY or small templates) is to create multiple "set" partials and pass the data to them dynamically, moving the markup into corresponding partials bearing the set's name.
+
+::tabs
+
+::tab antlers
+
+```antlers
 {{ bard_field }}
   {{ partial src="sets/{type}" }}
 {{ /bard_field }}
@@ -150,6 +210,31 @@ resources/views/partials/sets/
   video.antlers.html
 ```
 
+::tab blade
+
+:::tip
+By using `[...$set]`, you can access the set variables within the set's Blade file without having to reference `$set` for each variable.
+
+For example, `{!! $set->text !!}` becomes `{!! $text !!}`.
+:::
+
+```blade
+@foreach ($bard_field_with_sets as $set)
+	@include('fieldtypes.bard.sets.'.$set->type, [...$set])
+@endforeach
+```
+
+``` files theme:serendipity-light
+resources/views/partials/sets/
+  gallery.blade.php
+  hero_image.blade.php
+  poll.blade.php
+  text.blade.php
+  video.blade.php
+```
+
+::
+
 ## Extending Bard
 
 Bard uses [TipTap](https://tiptap.dev/) (which in turn is built on top of [ProseMirror][prosemirror]) as the foundation for our quintessential block-based editor.
@@ -159,3 +244,24 @@ Bard uses [TipTap](https://tiptap.dev/) (which in turn is built on top of [Prose
 
 
 [prosemirror]: https://prosemirror.net/
+
+## Custom set icons
+
+You can change the icons available in the set picker by setting an icons directory in a service provider.
+
+For example, you can drop this into your `AppServiceProvider`'s `boot` method:
+
+```php
+use Statamic\Fieldtypes\Sets;
+
+public function boot()
+{
+    Sets::setIconsDirectory(folder: 'light');
+}
+```
+
+Alternatively, if you want to use a different base directory altogether, you can do this:
+
+```php
+Sets::setIconsDirectory(directory: resource_path('custom-icons'));
+```
diff --git a/content/collections/fieldtypes/button_group.md b/content/collections/fieldtypes/button_group.md
index f927cb350..12f7e25cc 100644
--- a/content/collections/fieldtypes/button_group.md
+++ b/content/collections/fieldtypes/button_group.md
@@ -5,6 +5,11 @@ intro: |
   Buttons. Create some options and let your users select one and only one. May they choose wisely.
 screenshot: fieldtypes/screenshots/button_group.png
 options:
+  -
+    name: clearable
+    type: boolean
+    description: |
+      Allow deselecting all options, making `null` a possible value. Default: `false`.
   -
     name: options
     type: array
@@ -53,10 +58,22 @@ seat_choice: middle
 
 It's a string, so you can just use that value.
 
+::tabs
+
+::tab antlers
+
 ```
 <p>I love sitting in the {{ seat_choice }} seat. A lot.</p>
 ```
 
+::tab blade
+
+```blade
+<p>I love sitting in the {{ $seat_choice }} seat. A lot.</p>
+```
+
+::
+
 ```html
 <p>I love sitting in the middle seat. A lot.</p>
 ```
diff --git a/content/collections/fieldtypes/checkboxes.md b/content/collections/fieldtypes/checkboxes.md
index 67f7098bf..5992d6669 100644
--- a/content/collections/fieldtypes/checkboxes.md
+++ b/content/collections/fieldtypes/checkboxes.md
@@ -61,6 +61,10 @@ favorites:
 
 You can loop through the checked items and access the value and label of each item inside the loop.
 
+::tabs
+
+::tab antlers
+
 ```
 <ul>
 {{ favorites }}
@@ -69,6 +73,19 @@ You can loop through the checked items and access the value and label of each it
 </ul>
 ```
 
+::tab blade
+
+```blade
+<ul>
+	@foreach($favorites as $favorite)
+	{{-- You can also access $favorite['key'] and $favorite['label'] --}}
+	<li>{{ $favorite['value'] }}</li>
+	@endforeach
+</ul>
+```
+
+::
+
 ```html
 <ul>
     <li>donuts</li>
@@ -76,6 +93,29 @@ You can loop through the checked items and access the value and label of each it
 </ul>
 ```
 
+::tabs
+
+::tab antlers
+
+To conditionally check if a value has been selected, you can combine the [pluck](/modifiers/pluck) and [contains](/modifiers/contains) modifiers:
+
+```antlers
+{{ if favorites | pluck('value') | contains('donuts') }}
+   <span>Contains donuts!</span>    
+{{ /if }}
+```
+
+::tab blade
+
+To conditionally check if a value has been selected, you can combine the pluck and contains collection methods:
+
+```blade
+@if (collect($favorites)->pluck('value')->contains('donuts'))
+	<span>Contains donuts!</span>
+@endif
+```
+::
+
 ### Variables
 
 Inside an asset variable's tag pair you'll have access to the following variables.
diff --git a/content/collections/fieldtypes/code.md b/content/collections/fieldtypes/code.md
index c1e945819..22db6ad07 100644
--- a/content/collections/fieldtypes/code.md
+++ b/content/collections/fieldtypes/code.md
@@ -72,6 +72,11 @@ options:
     type: string
     description: |
       Pick your preferred set of keyboard shortcuts. Choose between `default`, `sublime`, and `vim`. We'll let you guess which one is default.
+  -
+    name: rulers
+    type: array
+    description: |
+      You can set the columns and the line style (choose between `dashed` or `solid`) of any rulers you wish to use.
 stage: 4
 id: 3ca28569-5b86-49a1-b620-ea3364561cde
 ---
@@ -111,18 +116,42 @@ code_snippet:
 
 You can output that string just as it is. If it is indeed code (and why wouldn't it be?), you'll probably want to to wrap it in pre and code tags to display it prettier. If you want code highlighting on your front-end, we recommend hooking up [prism.js](https://prismjs.com).
 
-```
+::tabs
+
+::tab antlers
+
+```antlers
 <pre><code>{{ code_snippet }}</code></pre>
 ```
 
+::tab blade
+
+```blade
+<pre><code>{!! $code_snippet !!}</code></pre>
+```
+
+::
+
 You're also able to use it as an array if you want to output the mode.
 
+::tabs
+
+::tab antlers
+
 ```
 {{ code_snippet }}
 <pre class="language-{{ mode }}"><code>{{ code }}</code></pre>
 {{ /code_snippet }}
 ```
 
+::tab blade
+
+```blade
+<pre class="language-{{ $code_snippet['mode'] }}"><code>{!! $code_snippet['code'] !!}</code></pre>
+```
+
+::
+
 ### Variables
 
 Inside an code fieldtype's tag pair you'll have access to the following variables.
@@ -131,5 +160,3 @@ Inside an code fieldtype's tag pair you'll have access to the following variable
 |----------|-------------|
 | `code` | The contents of the field. |
 | `mode` | The selected language mode. |
-
-
diff --git a/content/collections/fieldtypes/collections.md b/content/collections/fieldtypes/collections.md
index 54805273b..8a1a4def2 100644
--- a/content/collections/fieldtypes/collections.md
+++ b/content/collections/fieldtypes/collections.md
@@ -36,9 +36,13 @@ listings:
 
 You're more than likely using this field as a way to dynamically display a collection.
 
+::tabs
+
+::tab antlers
+
 Since the collection tag accepts a pipe-delimited list of collection names, you can join them together like this:
 
-```
+```antlers
 <ul>
   {{ collection from="{listings|piped}" }}
     <li>{{ title }}</li>
@@ -46,6 +50,23 @@ Since the collection tag accepts a pipe-delimited list of collection names, you
 </ul>
 ```
 
+::tab blade
+
+You can pass the values from the collections fieldtype to the collection tag like so:
+
+```blade
+<ul>
+	<statamic:collection
+		:from="$listings ?? []"
+	>
+		<li>{{ $title }}</li>
+	</statamic:collection>
+</ul>
+
+```
+
+::
+
 ```html
 <ul>
   <li>A blog entry</li>
diff --git a/content/collections/fieldtypes/color.md b/content/collections/fieldtypes/color.md
index 1211cda1a..a8b175174 100644
--- a/content/collections/fieldtypes/color.md
+++ b/content/collections/fieldtypes/color.md
@@ -1,32 +1,19 @@
 ---
 title: Color
-description: 'Pick colors, enter hex or HSLA values, and other colorful things.'
-intro: 'This fieldtype is a highly configurable color picker with simple and advanced UI modes, support for alpha channel, rgba, hsla, hsva, and more.'
+description: 'Manage colors by hex code with swatches and text inputs.'
+intro: 'A simple color picker with support for pre-defined swatches as well as entering a color by hex code.'
 screenshot: fieldtypes/screenshots/color.png
 options:
-  -
-    name: theme
-    type: string
-    description: |
-      Choose between a `classic` and a simpler `nano` (mini) theme. Default: `classic`.
-
-  -
-    name: color_mode
-    type: array
-    description: |
-      Choose which color modes you want to enable in the UI. Available choices: `hex`, `rgba`, `hsla`, `hsva`, and `cmyk`. Default: `hex`.
-  -
-    name: default_color_mode
-    type: string
-    description: |
-      Set which color mode you wish to be the default. Default: `hex`.
-
   -
     name: swatches
     type: array
     description: |
       Pre-define colors that can be selected from a list. Supports all color mode formats.
-stage: 3
+  -
+    name: allow_any
+    type: boolean
+    description: |
+      Allow entering any color value via picker or hex code.
 id: 09b4af2d-265a-49ee-ac74-3e27041c180b
 ---
 ## Overview
@@ -45,11 +32,23 @@ header_color: "#FF269E"
 
 The color is output as a simple string. Most often you'll use this in an inline `style` tag to style elements of your front-end site.
 
-```
+::tabs
+
+::tab antlers
+
+```antlers
 <div class="hero" style="background-color: {{ header_color }}">
   <h1>Bay Side High's Sweetheart Dance</h1>
   <h2>This Friday Night!</h2>
 </div>
 ```
 
+::tab blade
 
+```blade
+<div class="hero" style="background-color: {{ $header_color }}">
+	<h1>Bay Side High's Sweetheart Dance</h1>
+	<h2>This Friday Night!</h2>
+</div>
+```
+::
\ No newline at end of file
diff --git a/content/collections/fieldtypes/date.md b/content/collections/fieldtypes/date.md
index d15eee6fa..20b678a6b 100644
--- a/content/collections/fieldtypes/date.md
+++ b/content/collections/fieldtypes/date.md
@@ -82,7 +82,10 @@ Date fields are [augmented](/augmentation) to return a [Carbon instance][carbon]
 
 Ranges have nested `start` and `end` variables, so you can access them like this:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 // Nested variable
 Event: {{ date:start }} through {{ date:end }}
 
@@ -92,6 +95,14 @@ Event: {{ start }} through {{ end }}
 {{ /date }}
 ```
 
+::tab blade
+
+```blade
+Event: {{ $date_range['start'] }} through {{ $date_range['end'] }}
+```
+
+::
+
 <figure>
   <img src="/img/fieldtypes/screenshots/date-range.png" alt="Date fieldtype in range mode" width="301">
   <figcaption>Ranges are much simpler than two date fields.</figcaption>
@@ -101,22 +112,63 @@ Event: {{ start }} through {{ end }}
 
 You can format the output of your date fields with the [format modifier](/modifiers/format) and PHP's [date formatting options](https://www.php.net/manual/en/function.date.php).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date format="Y" }} // 2019
 {{ date format="Y-m-d" }} // 2019-10-10
 {{ date format="l, F jS" }} // Sunday, January 21st
 ```
 
+::tab blade
+
+When using Blade, you may also call the `->format` method on Carbon instances.
+
+```blade
+{{-- Using Modifiers --}}
+{{ Statamic::modify($date)->format('Y') }} // 2019
+{{ Statamic::modify($date)->format('Y-m-d') }} // 2019-10-10
+{{ Statamic::modify($date)->format('l, F jS') }} // Sunday, January 21st
+
+{{-- Using Carbon methods --}}
+{{ $date->format('Y') }} // 2019
+{{ $date->format('Y-m-d') }} // 2019-10-10
+{{ $date->format('l, F jS') }} // Sunday, January 21st
+```
+
+::
+
 ### Formatting localized Dates
 
 You can format localized dates with the [iso modifier](/modifiers/iso_format) and [ISO formatting options](https://carbon.nesbot.com/docs/#api-localization). This use Carbon's inner translations rather than language packages you need to install on every machine where you deploy your application.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date iso_format="YYYY" }} // 2019
 {{ date iso_format="YYYY-MM-DD" }} // 2019-10-10
-{{ date iso_format="dddd, MMMM Mo" }} // Sunday, January 21st
+{{ date iso_format="dddd, MMMM Do" }} // Sunday, January 21st
 ```
 
+::tab blade
+
+When using Blade, you may also call the `->isoFormat` method on Carbon instances.
+
+```blade
+{{-- Using Modifiers --}}
+{{ Statamic::modify($date)->isoFormat('YYYY') }} // 2019
+{{ Statamic::modify($date)->isoFormat('YYYY-MM-DD') }} // 2019-10-10
+{{ Statamic::modify($date)->isoFormat('dddd, MMMM Do') }} // Sunday, January 21st
+
+{{-- Using Carbon methods --}}
+{{ $date->isoFormat('YYYY') }} // 2019
+{{ $date->isoFormat('YYYY-MM-DD') }} // 2019-10-10
+{{ $date->isoFormat('dddd, MMMM Do') }} // Sunday, January 21st
+
+```
 
+::
 
 [carbon]: https://carbon.nesbot.com/docs/
diff --git a/content/collections/fieldtypes/dictionary.md b/content/collections/fieldtypes/dictionary.md
new file mode 100644
index 000000000..92995c463
--- /dev/null
+++ b/content/collections/fieldtypes/dictionary.md
@@ -0,0 +1,278 @@
+---
+title: Dictionary
+description: Choose from options provided by dictionaries.
+intro: Give your users a list of options to choose from. Similar to the Select field, but allows you to read options from YAML or JSON files, or even hit external APIs.
+screenshot: fieldtypes/screenshots/dictionary.png
+options:
+  -
+    name: dictionary
+    type: array
+    description: |
+      Configure the dictionary to be used. You may also define any config values which should be passed along to the dictionary. The `dictionary` option accepts both string & array values:
+
+      ```yaml
+      # When it's a dictionary without any config fields...
+      dictionary: countries
+
+      # When it's a dictionary with config fields...
+      dictionary:
+        type: countries
+        region: Europe
+      ```
+  -
+    name: placeholder
+    type: string
+    description: |
+      Set the non-selectable placeholder text. Default: none.
+  -
+    name: default
+    type: string
+    description: |
+      Set the default option key. Default: none.
+  -
+    name: max_items
+    type: integer
+    description: >
+      Cap the number of selections. Setting this to 1 will change the UI. Default: null (unlimited).
+id: 9b14b5b8-6a7a-4db2-8533-9c78faa0e054
+---
+## Overview
+At a glance, the Dictionary fieldtype is similar to the [Select fieldtype](/fieldtypes/select). However, with the Dictionary fieldtype, options aren't manually defined in a field's config, but rather returned from a PHP class (called a "dictionary").
+
+This can prove to be pretty powerful, since it means you can read options from YAML or JSON files, or even hit an external API. It also makes it easier to share common select options between projects.
+
+## Data Storage
+Dictionary fields will store the "key" of the chosen option or options.
+
+For example, a dictionary might have items such as:
+
+```php
+'jan' => 'January',
+'feb' => 'February',
+'mar' => 'March',
+```
+
+Your saved data will be:
+
+``` yaml
+select: jan
+```
+
+## Templating
+Dictionary fields will return the "option data" returned by the dictionary's `get` method. The shape of this data differs between dictionaries and is outlined below.
+
+For example, using the built-in Countries dictionary, your template might look like this:
+
+```yaml
+past_vacations:
+  - USA
+  - AUS
+  - CAN
+  - DEU
+  - GBR
+```
+
+::tabs
+
+::tab antlers
+
+```antlers
+<ul>
+    {{ past_vacations }}
+        <li>{{ emoji }} {{ name }}</li>
+    {{ /past_vacations }}
+</ul>
+```
+
+::tab blade
+
+```blade
+<ul>
+	@foreach ($past_vacations as $vacation)
+	<li>{{ $vacation['emoji'] }} {{ $vacation['name'] }}</li>
+	@endforeach
+</ul>
+```
+
+::
+
+```html
+<ul>
+    <li>🇺🇸 United States</li>
+    <li>🇦🇺 Australia</li>
+    <li>🇨🇦 Canada</li>
+    <li>🇩🇪 Germany</li>
+    <li>🇬🇧 United Kingdom</li>
+</ul>
+```
+
+## Available Dictionaries
+Statamic includes a few dictionaries straight out of the box.
+
+### File
+This allows you point to a file located in your `resources/dictionaries` directory to populate the options. The file can be `json`, `yaml`, or `csv`.
+
+Each option array should have `label` and `value` keys at the minimum. Any additional keys will be available when templating.
+
+You may redefine which keys are used for the labels and values by providing them to your fieldtype config. In the following example, `name` is the label and `id` is the value. 
+
+```json
+[
+    {"name": "Apple", "id": "apple", "emoji": "🍎"},
+    {"name": "Banana", "id": "banana", "emoji": "🍌"},
+    {"name": "Cherry", "id": "cherry", "emoji": "🍒"},
+    ...
+]
+```
+
+```yaml
+-
+  handle: fruit
+  field:
+    type: dictionary
+    dictionary:
+      type: file
+      filename: fruit.json
+      label: name  # optional, defaults to "label"
+      value: id    # optional, defaults to "value"
+```
+
+You may provide enhanced labels using basic Antlers syntax. For example, to include the emoji before the fruit name, you can do this:
+
+```yaml
+label: '{{ emoji }} {{ name }}'
+```
+
+### Countries
+This provides a list of countries with their ISO codes, region, subregion, and flag emoji.
+```yaml
+-
+  handle: countries
+  field:
+    type: dictionary
+    dictionary:
+      type: countries
+      region: 'oceania' # Optionally filter the countries by a region.
+                        # Supported options are: africa, americas, asia, europe, oceania, polar
+      emojis: true      # Whether flag emojis are in the labels. They're on by default.
+```
+```yaml
+countries:
+  - USA
+  - AUS
+```
+
+::tabs
+
+::tab antlers
+
+```antlers
+{{ countries }}
+  {{ emoji }} {{ name }}, {{ iso2 }}, {{ iso3 }}, {{ region }}, {{ subregion }}
+{{ /countries }}
+```
+
+::tab blade
+
+```blade
+@foreach ($countries as $country)
+	{{ $country['emoji'] }} {{ $country['name'] }}, {{ $country['iso2'] }}, {{ $country['iso3'] }}, {{ $country['region'] }}, {{ $country['subregion'] }}
+@endforeach
+```
+
+::
+
+```
+🇺🇸 United States, US, USA, Americas, Northern America
+🇦🇺 Australia, AU, AUS, Oceania, Australia and New Zealand
+```
+
+### Timezones
+This provides a list of timezones and their UTC offsets.
+
+```yaml
+-
+  handle: timezones
+  field:
+    type: dictionary
+    dictionary:
+      type: timezones
+```
+```yaml
+timezones:
+  - America/New_York
+  - Australia/Sydney
+```
+
+::tabs
+
+::tab antlers
+
+```antlers
+{{ timezones }}
+  {{ name }} {{ offset }}
+{{ /timezones }}
+```
+
+::tab blade
+
+```blade
+@foreach ($timezones as $timezone)
+	{{ $timezone['name'] }} {{ $timezone['offset'] }}
+@endforeach
+```
+
+::
+
+```
+America/New_York -04:00
+Australia/Sydney +10:00
+```
+
+### Currencies
+This provides a list of currencies, with their codes, symbols, and decimals.
+
+```yaml
+-
+  handle: currencies
+  field:
+    type: dictionary
+    dictionary:
+      type: currencies
+```
+```yaml
+currencies:
+  - USD
+  - HUF 
+```
+
+::tabs
+
+::tab antlers
+
+```antlers
+{{ currencies }}
+  {{ name }}, {{ code }}, {{ symbol }}, {{ decimals }}
+{{ /currencies }}
+```
+
+::tab blade
+
+```blade
+@foreach ($currencies as $currency)
+{{ $currency['name'] }}, {{ $currency['code'] }}, {{ $currency['symbol'] }}, {{ $currency['decimals'] }}
+@endforeach
+```
+
+::
+
+```
+US Dollar, USD, $, 2
+Hungarian Forint, HUF, Ft, 0
+```
+
+## Custom Dictionaries
+
+In many cases, using the native [File](#file) dictionary can be all you need for something custom. However, it's possible to create an entirely custom dictionary that could read from files, APIs, or whatever you can think of.
+
+[Find out how to create a custom dictionary](/extending/dictionaries)
diff --git a/content/collections/fieldtypes/entries.md b/content/collections/fieldtypes/entries.md
index 3daeb91ca..9e31c5869 100644
--- a/content/collections/fieldtypes/entries.md
+++ b/content/collections/fieldtypes/entries.md
@@ -11,7 +11,11 @@ options:
     type: array
     description: |
       Configure which collections you want to allow relationships with.
-
+  -
+    name: create
+    type: boolean
+    description: |
+      By default you may create new entries. Set to `false` to only allow selecting from existing entries. Only available in the `default` mode.
   -
     name: max_items
     type: integer
@@ -22,6 +26,21 @@ options:
     type: string
     description: |
         Set the UI style for this field. Can be one of 'default' (Stack Selector), 'select' (Select Dropdown) or 'typeahead' (Typeahead Field).
+  -
+    name: query_scopes
+    type: string
+    description: >
+      Allows you to specify a [query scope](/extending/query-scopes-and-filters#scopes) which should be applied when retrieving selectable entries. You should specify the query scope's handle, which is usually the name of the class in snake case. For example: `MyAwesomeScope` would be `my_awesome_scope`.
+  -
+    name: search_index
+    type: string
+    description: >
+        Allows you to specify a [search index](/search#indexes) to be used when searching for entries.
+  -
+    name: select_across_sites
+    type: boolean
+    description: |
+      When enabled, entries from all sites will be displayed. 
 id: acee879a-c832-449d-a714-c57ea5862717
 ---
 ## Overview
@@ -46,7 +65,10 @@ related_entries:
 
 Loop through the entries and do anything you want with the data.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
   {{ related_entries }}
     <li><a href="{{ url }}">{{ title }}</a></li>
@@ -54,11 +76,20 @@ Loop through the entries and do anything you want with the data.
 </ul>
 ```
 
+::tab blade
+```blade
+<ul>
+  @foreach ($entries as $entry)
+    <li><a href="{{ $entry->url }}">{{ $entry->title }}</a></li>
+  @endforeach
+</ul>
+```
+
+::
+
 ```html
 <ul>
   <li><a href="/look-at-this">Look at This!</a></li>
   <li><a href="/look-at-that">Wait, Look at That!</a></li>
 </ul>
 ```
-
-
diff --git a/content/collections/fieldtypes/form.md b/content/collections/fieldtypes/form.md
index 533aeb794..d502e8b95 100644
--- a/content/collections/fieldtypes/form.md
+++ b/content/collections/fieldtypes/form.md
@@ -17,6 +17,11 @@ options:
     type: string
     description: |
       Set the non-selectable placeholder text. Default: none.
+  -
+    name: query_scopes
+    type: string
+    description: >
+      Allows you to specify a [query scope](/extending/query-scopes-and-filters#scopes) which should be applied when retrieving selectable assets. You should specify the query scope's handle, which is usually the name of the class in snake case. For example: `MyAwesomeScope` would be `my_awesome_scope`.
 related_entries:
   - fdb45b84-3568-437d-84f7-e3c93b6da3e6
   - aa96fcf1-510c-404b-9b63-cea8942e1bf8
@@ -31,19 +36,12 @@ The Form fieldtype stores the `handle` of a single form as a string, or an array
 
 ## Templating
 
-The Form fieldtype uses [augmentation](/augmentation) to return a Form instance. You can pass the handle into the [form tags](/tags/form).
+The Form fieldtype provides a few useful variables:
+
+* `handle`
+* `title`
+* `fields`
+* `api_url`
+* `honeypot`
 
-```
-{{ form:create :in="form_field:handle" }}
-  {{ fields }}
-      <div class="p-2">
-          <label>{{ display }}</label>
-          <div class="p-1">{{ field }}</div>
-          {{ if error }}
-              <p class="text-gray-500">{{ error }}</p>
-          {{ /if }}
-      </div>
-  {{ /fields }}
-  <button type="submit">Submit</button>
-{{ /form:create }}
-```
+You can use the [`form:create`](/tags/form-create) tag to render a `<form>` on your page.
diff --git a/content/collections/fieldtypes/grid.md b/content/collections/fieldtypes/grid.md
index 11e286652..abe647c56 100644
--- a/content/collections/fieldtypes/grid.md
+++ b/content/collections/fieldtypes/grid.md
@@ -6,7 +6,7 @@ overview: >
 
   Let's go deeper.
 
-screenshot: fieldtypes/screenshots/grid.png
+screenshot: fieldtypes/screenshots/v4/grid.png
 options:
   -
     name: min_rows
@@ -61,7 +61,11 @@ cast:
     character: Han Solo
 ```
 
-```
+::tabs
+
+::tab antlers
+
+```antlers
 <h3>Star Wars Cast</h3>
 <ul>
     {{ cast }}
@@ -70,6 +74,19 @@ cast:
 </ul>
 ```
 
+::tab blade
+
+```blade
+<h3>Star Wars Cast</h3>
+<ul>
+	@foreach ($cast as $role)
+	<li>{{ $role->character }} played by {{ $role->actor }}</li>
+	@endforeach
+</ul>
+```
+
+::
+
 ```html
 <h3>Star Wars Cast</h3>
 <ul>
diff --git a/content/collections/fieldtypes/group.md b/content/collections/fieldtypes/group.md
new file mode 100644
index 000000000..905392303
--- /dev/null
+++ b/content/collections/fieldtypes/group.md
@@ -0,0 +1,48 @@
+---
+id: 9780cee8-0732-40b5-bc71-ed846d0c290d
+blueprint: fieldtype
+title: Group
+description: 'Group fields visually and scoped their own key in the data.'
+overview: |
+  Organize the data by visually grouping related fields and assigning a distinct key to each group for clearer data structuring.
+screenshot: fieldtypes/screenshots/group.png
+---
+## Overview
+
+A group fieldtype is a simple container that holds additional fields you would like grouped visually as well as under a parent key.
+
+## Data Storage
+
+In the screenshot above, the data structure for these fields will be as follows:
+
+```yaml
+location:
+  address: 123 Main Street
+  city: Schenectady
+  zip: 12345
+```
+
+
+## Templating
+
+All fields inside a Group will be scoped under their parent key like so:
+
+::tabs
+
+::tab antlers
+
+```antlers
+{{ location:address }}, {{ location:city }}, {{ location:zip }}
+```
+
+::tab blade
+```blade
+{{ $location['address'] }}, {{ $location['city'] }}, {{ $location['zip'] }}
+```
+::
+
+will output
+
+```html
+123 Main Street, Schenectady, 1234
+```
diff --git a/content/collections/fieldtypes/hidden.md b/content/collections/fieldtypes/hidden.md
index d5e78fb39..9677c6c44 100644
--- a/content/collections/fieldtypes/hidden.md
+++ b/content/collections/fieldtypes/hidden.md
@@ -2,7 +2,6 @@
 title: Hidden
 description: Set default data when creating new entries.
 overview: "The hidden field is perfect for setting default data when creating new entries. Set anything as the `default` field value and you're good to go."
-screenshot: true
 stage: 5
 
 id: 791c3fb3-0d3c-4e17-bd97-3ab9529a8691
diff --git a/content/collections/fieldtypes/icon.md b/content/collections/fieldtypes/icon.md
new file mode 100644
index 000000000..2b0893a8c
--- /dev/null
+++ b/content/collections/fieldtypes/icon.md
@@ -0,0 +1,54 @@
+---
+id: 50ed54f8-18b3-4b46-b0d7-6fedc07ad81f
+blueprint: fieldtype
+title: Icon
+description: 'Simple UI to select SVG icons from a dropdown.'
+intro: 'Give your users a list of icons to choose from. This field supports search and keyboard commands, and can be configured to use your own icons or ones managed by Statamic.'
+screenshot: fieldtypes/screenshots/icon.png
+options:
+  -
+    id: nKVDUK7I
+    name: directory
+    type: string
+    description: 'Optionally set the path to the directory containing desired icons relative to the project’s root. Default: uses system icons.'
+    required: false
+  -
+    id: 752XSotc
+    name: folder
+    type: string
+    description: 'Optionally set a subdirectory contain a specific set of icons.'
+    required: false
+  -
+    id: u8yCCuXb
+    name: default
+    type: string
+    description: 'Set the default option key. Default: none.'
+    required: false
+---
+## Overview
+
+The Icon field allows you to easily select icons from the Control Panel's default list, or define the path to the directory and/or folder of your own that contains SVG icons.
+
+It has a very minimal UI which will help streamline your Blueprints and help authors build pages faster with less clicks.
+
+
+## Templating
+
+Icon fields return inline string of the selected SVG icon.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ icon }}
+```
+
+::tab blade
+```blade
+{!! $icon !!}
+```
+::
+
+```html
+<svg viewBox="0 0 24 24"><path fill="currentColor" d="M11.983 0a12.206 12.206 0 0 0-8.51 3.653A11.8 11.8 0 0 0 0 12.207C-.008 18.712 5.26 23.992 11.765 24h.249c6.678-.069 12.04-5.531 11.986-12.209C24.015 5.293 18.76.013 12.262-.003L11.983 0zM10.5 16.542a1.475 1.475 0 0 1 1.421-1.529l.028-.001h.027c.82.002 1.492.651 1.523 1.47a1.475 1.475 0 0 1-1.419 1.529l-.03.001h-.027a1.53 1.53 0 0 1-1.523-1.47zM11 12.5v-6a1 1 0 0 1 2 0v6a1 1 0 0 1-2 0z"></path></svg>
+```
diff --git a/content/collections/fieldtypes/link.md b/content/collections/fieldtypes/link.md
index 161d0b416..365e8af46 100644
--- a/content/collections/fieldtypes/link.md
+++ b/content/collections/fieldtypes/link.md
@@ -46,10 +46,34 @@ This option will only be provided when the field is in a collection. Globals and
 
 Link fields will render a URL string you can use however you choose.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 Check out <a href="{{ url_link }}">Statamic</a>!
 ```
 
+::tab blade
+```blade
+Check out <a href="{{ $url_link }}">Statamic</a>!
+```
+::
+
 ```output
 Check out <a href="https://statamic.com">Statamic</a>!
 ```
+
+You can access other data of the link field by using it like an array. This could be the title of an entry you link to, for example.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ link_field:title }}
+```
+
+::tab blade
+```blade
+{{ $link_field['title'] }}
+```
+::
diff --git a/content/collections/fieldtypes/list.md b/content/collections/fieldtypes/list.md
index 37fabecd5..93e6c6747 100644
--- a/content/collections/fieldtypes/list.md
+++ b/content/collections/fieldtypes/list.md
@@ -4,8 +4,7 @@ description: Manage simple lists with the help of a keyboard-friendly interface.
 intro: >
   Create YAML lists with a robust user interface. It has full keyboard controls
   so you can use `up` to go up, `down` to go down, drag and drop to rearrange the order, and click an item to select it and begin editing.
-screenshot: fieldtypes/screenshots/list.png
-stage: 3
+screenshot: fieldtypes/screenshots/v4/list.png
 id: bd079cba-c5d2-475d-ae82-57874818858e
 ---
 ## Overview
@@ -25,7 +24,10 @@ product_ideas:
 
 Loop through the array items to display each item's `value`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <h1>Product Ideas</h1>
 <ul>
   {{ product_ideas }}
@@ -34,6 +36,17 @@ Loop through the array items to display each item's `value`.
 </ul>
 ```
 
+::tab blade
+```blade
+<h1>Product Ideas</h1>
+<ul>
+	@foreach ($product_ideas as $idea)
+	<li>{{ $idea }}</li>
+	@endforeach
+</ul>
+```
+::
+
 ```html
 <h1>Product Ideas</h1>
 <ul>
diff --git a/content/collections/fieldtypes/markdown.md b/content/collections/fieldtypes/markdown.md
index 0addfc9ab..5f7897a30 100644
--- a/content/collections/fieldtypes/markdown.md
+++ b/content/collections/fieldtypes/markdown.md
@@ -2,9 +2,10 @@
 title: Markdown
 description: Our beautiful Markdown editor with preview, assets integration, and more.
 intro: Write Markdown with the help of formatting buttons, assets integration, fullscreen mode, a Markdown cheatsheet, and HTML preview mode. What more do you need?
-screenshot: fieldtypes/screenshots/markdown.png
+screenshot: fieldtypes/screenshots/v4/markdown.png
 id: 607cfe62-7239-461b-8f55-8e7a312c2d5d
-stage: 4
+related_entries:
+  - be292d2b-dc0e-48dc-bce4-0058df27ccc6
 options:
   -
     name: antlers
@@ -36,6 +37,11 @@ options:
     type: string
     description: |
       The folder (relative to the container) to begin browsing. Default: the root folder of the container.
+  -
+    name: heading_anchors
+    type: boolean
+    description: |
+      Inject anchor links to all of your heading elements (`<h1>`, `<h2>`, etc). Default: `false`.
   -
     name: parser
     type: string
@@ -51,6 +57,11 @@ options:
     type: boolean
     description: >
       Automatically convert straight quotes into curly quotes, dashes into en/em-dashes, and other similar text transformations. Default: `false`.
+  -
+    name: table_of_contents
+    type: boolean
+    description: >
+      Automatically insert a table of contents at the top of your content with links to your headings. Default: `false`.
 ---
 ## Overview
 
@@ -74,10 +85,19 @@ This is the Markdown fieldtype. It's for writing [Markdown](https://daringfireba
 
 The Markdown content will be automatically transformed into HTML through [augmentation](/augmentation). You need only use the variable and the rest is done for you.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ content }}
 ```
 
+::tab blade
+```blade
+{!! $content !!}
+```
+::
+
 ```html
 <h2>Overview</h2>
 <p>This is the Markdown fieldtype. It's for writing <a href="https://daringfireball.net/projects/markdown/">Markdown</a>, an easy-to-read, easy-to-write plain text format that magically transforms into HTML.</p>
@@ -88,7 +108,7 @@ The Markdown content will be automatically transformed into HTML through [augmen
 The Markdown fieldtype also has a dark mode when in fullscreen for those of you who like that sort of thing.
 
 <figure>
-    <img src="/img/fieldtypes/screenshots/markdown-dark-mode.png" alt="Dark Mode for Markdown">
+    <img src="/img/fieldtypes/screenshots/markdown-dark-mode-v4.png" alt="Dark Mode for Markdown">
     <figcaption><span class="not-italic">😎</span> Sunglasses off.</figcaption>
 </figure>
 
diff --git a/content/collections/fieldtypes/navs.md b/content/collections/fieldtypes/navs.md
new file mode 100644
index 000000000..458b7e1ae
--- /dev/null
+++ b/content/collections/fieldtypes/navs.md
@@ -0,0 +1,74 @@
+---
+title: Navs
+meta_title: 'Navs Fieldtype'
+description: Choose from one or more navigations.
+overview: Allows you to choose from one or more navigations.
+screenshot: fieldtypes/screenshots/navs.png
+options:
+  -
+    name: max_items
+    type: integer
+    description: >
+      The maximum number of items that may be selected. Setting this to `1` will change the UI to a dropdown.
+  -
+    name: mode
+    type: string
+    description: |
+        Set the UI style for this field. Can be one of 'default' (Stack Selector), 'select' (Select Dropdown) or 'typeahead' (Typeahead Field).
+  -
+    name: structure_types
+    type: array
+    description: >
+        Configure which types of structures you want to be selectable. Options are `collection` or `navigation`.
+id: 0669f781-bc12-44ff-bbbb-921b80aaf4f3
+---
+## Overview
+
+Use this fieldtype to create a one-way relationship with one or more navigations in your site. It's a simple-little-helper type of thing.
+
+## Data Structure
+
+The Navs fieldtype stores the `handle` of a single navigation as a string, or an array of handles if `max_items` is greater than 1.
+
+``` yaml
+navigations:
+  - main_nav
+  - footer
+  ```
+
+## Templating
+
+Loop through the structures to  access their handles and pass them to a [Nav](/tags/nav) tag.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ navigations }}
+  <ul>
+    {{ nav :handle="handle" }}
+      <li><a href="{{ url }}">{{ title }}</a></li>
+    {{ /nav }}
+  </ul>
+{{ /navigations }}
+```
+::tab blade
+```blade
+@foreach ($navigations as $nav)
+  <ul>
+    <statamic:nav
+      :handle="$nav"
+    >
+      <li><a href="{{ $url }}">{{ $title }}</a></li>
+    </statamic:nav>
+  </ul>
+@endforeach
+```
+::
+
+```html
+<ul>
+  <li><a href="/look-at-this">Look at This!</a></li>
+  <li><a href="/look-at-that">Wait, Look at That!</a></li>
+</ul>
+```
diff --git a/content/collections/fieldtypes/radio.md b/content/collections/fieldtypes/radio.md
index 89a250581..3ca6634f5 100644
--- a/content/collections/fieldtypes/radio.md
+++ b/content/collections/fieldtypes/radio.md
@@ -60,10 +60,19 @@ favorite: brownies
 
 It's a string, so you can just use that value.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <p>I love {{ favorite }}. A lot.</p>
 ```
 
+::tab blade
+```blade
+<p>I love {{ $favorite }}. A lot.</p>
+```
+::
+
 ```html
 <p>I love donuts. A lot.</p>
 ```
diff --git a/content/collections/fieldtypes/range.md b/content/collections/fieldtypes/range.md
index b11b93106..701ee2168 100644
--- a/content/collections/fieldtypes/range.md
+++ b/content/collections/fieldtypes/range.md
@@ -46,10 +46,19 @@ number: 42
 
 Use the variable in your templates to display the value. That's pretty much it.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <p>My favorite number is {{ number }}.</p>
 ```
 
+::tab blade
+```blade
+<p>My favorite number is {{ $number }}.</p>
+```
+::
+
 ```html
 <p>My favorite number is 42.</p>
 ```
diff --git a/content/collections/fieldtypes/replicator.md b/content/collections/fieldtypes/replicator.md
index d00a19bfa..32507f404 100644
--- a/content/collections/fieldtypes/replicator.md
+++ b/content/collections/fieldtypes/replicator.md
@@ -5,7 +5,7 @@ overview: |
   The Replicator is a meta fieldtype giving you the ability to define _sets_ of fields that you can dynamically piece together in whatever order and arrangement you imagine. You can build long-form articles like [Medium.com](http://medium.com) and take advantage of the extra markup control.
 
   It's so much better than a WYSIWYG field.
-screenshot: fieldtypes/screenshots/replicator.png
+screenshot: fieldtypes/screenshots/v4/replicator.png
 options:
   -
     name: sets
@@ -15,6 +15,10 @@ options:
     name: max_sets
     type: integer
     description: The maximum number of sets that may be added.
+  -
+    name: button_label
+    type: string
+    description: Allows you to define a label for the "Add Set" button.
 id: 00b140e3-413a-4d91-b9e7-65f58d56a41b
 ---
 ## Usage
@@ -90,7 +94,10 @@ Please note that you **cannot** use a Replicator fieldtype for the `content` fie
 
 Use the tag pair syntax with an `if/else` conditions to style each set accordingly.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ my_replicator_field }}
 
   {{ if type == "text" }}
@@ -116,22 +123,110 @@ Use the tag pair syntax with an `if/else` conditions to style each set according
 {{ /my_replicator_field }}
 
 ```
+::tab blade
+```blade
+@foreach($my_replicator_field as $set)
+	@if ($set->type === 'text')
+		<div class="text">
+			{!! Statamic::modify($set->text)->markdown() !!}
+		</div>
+	@elseif ($set->type === 'quote')
+		<blockquote>{{ $set->text  }}</blockquote>
+		<p>— {{ $set->cite }}</p>
+	@elseif ($set->type === 'image')
+		<figure>
+			<img src="{{ $set->photo }}" alt="{{ $set->caption }}" />
+			<figcaption>{{ $set->caption }}</figcaption>
+		</figure>
+	@endif
+@endforeach
+```
+::
+
 An alternative, and often cleaner, approach is to have multiple 'set' partials and do:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ my_replicator_field }}
   {{ partial src="sets/{type}" }}
 {{ /my_replicator_field }}
 ```
+::tab blade
+
+:::tip
+By using `[...$set]`, you can access the set variables within the set's Blade file without having to reference `$set` for each variable.
+
+For example, `{!! $set->text !!}` becomes `{!! $text !!}`.
+:::
+
+```blade
+@foreach ($my_replicator_field as $set)
+	@include('fieldtypes.partials.sets.'.$set->type, [...$set])
+@endforeach
+```
+::
+
 Then inside your partials directory you could have:
 
-`sets/image.antlers.html`
-`sets/quote.antlers.html`
+::tabs
 
-and the set partial may look something like:
+::tab antlers
+``` files theme:serendipity-light
+resources/views/partials/sets/
+  text.antlers.html
+  quote.antlers.html
+  image.antlers.html
+```
 
+::tab blade
+``` files theme:serendipity-light
+resources/views/partials/sets/
+  text.blade.php
+  quote.blade.php
+  image.blade.php
 ```
+::
+
+and the `image` set partial may look something like:
+
+::tabs
+
+::tab antlers
+```antlers
 {{# this is image.antlers.html #}}
 
 <img src="{{ image }}" alt="{{ caption }}" >
 ```
+
+::tab blade
+```blade
+{{-- this is image.blade.php --}}
+<figure>
+	<img src="{{ $photo }}" alt="{{ $caption }}" />
+	<figcaption>{{ $caption }}</figcaption>
+</figure>
+```
+::
+
+## Custom set icons
+
+You can change the icons available in the set picker by setting an icons directory in a service provider.
+
+For example, you can drop this into your `AppServiceProvider`'s `boot` method:
+
+```php
+use Statamic\Fieldtypes\Sets;
+
+public function boot()
+{
+    Sets::setIconsDirectory(folder: 'light');
+}
+```
+
+Alternatively, if you want to use a different base directory altogether, you can do this:
+
+```php
+Sets::setIconsDirectory(directory: resource_path('custom-icons'));
+```
diff --git a/content/collections/fieldtypes/section.md b/content/collections/fieldtypes/section.md
index ac6da0981..542ff998d 100644
--- a/content/collections/fieldtypes/section.md
+++ b/content/collections/fieldtypes/section.md
@@ -3,9 +3,8 @@ title: Section
 description: A visual header to help break up and organize long publish forms.
 overview: "The Section fieldtype is perfect for giving your fields some breathing room and organization. It serves as a visual break in the publish form, helping you to better group your fields into various sections."
 screenshot: fieldtypes/screenshots/section.png
-stage: 4
 id: 88b0d4a4-e81a-4e84-8a01-fc90f54202a5
 ---
-## See Also...
+## What you probably want, however...
 
-This fieldtype is not to be confused with [Blueprint sections](/blueprints), which act as tabs in your publish forms. Those are another great way to organize your forms.
+This fieldtype is not to be confused with [Blueprint sections](/blueprints), which create separate cards in your publish forms. Those are a much better way to organize your form fields.
diff --git a/content/collections/fieldtypes/select.md b/content/collections/fieldtypes/select.md
index 4947a25dd..9538c5374 100644
--- a/content/collections/fieldtypes/select.md
+++ b/content/collections/fieldtypes/select.md
@@ -80,10 +80,19 @@ select: face
 
 Select fields return the **value** from your selected option. You can access the label with `select_var:label`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <p id="{{ select }}"> Oh yeah? {{ select:label }}</p>
 ```
 
+::tab blade
+```blade
+<p id="{{ $select }}"> Oh yeah? {{ $select['label'] }}</p>
+```
+::
+
 ```html
 <p id="face">Oh yeah? So's your face.</p>
 ```
diff --git a/content/collections/fieldtypes/sites.md b/content/collections/fieldtypes/sites.md
index 89e47d4a0..eed66daa1 100644
--- a/content/collections/fieldtypes/sites.md
+++ b/content/collections/fieldtypes/sites.md
@@ -37,13 +37,29 @@ sites:
 
 You're more than likely using this field as a way to dynamically fetch content from a specific site other than the current one.
 
-```
+The following example assumes `max_items` has been set to `1`:
+
+::tabs
+
+::tab antlers
+```antlers
 <ul>
   {{ collection:news :site="my_sites_field" }}
     <li>{{ title }}</li>
   {{ /collection:news }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+	<statamic:collection:news
+		:site="$my_sites_field"
+	>
+		<li>{{ $title }}</li>
+	</statamic:collection:news>
+</ul>
+```
+::
 
 ```html
 <ul>
diff --git a/content/collections/fieldtypes/spacer.md b/content/collections/fieldtypes/spacer.md
new file mode 100644
index 000000000..75acc5ee4
--- /dev/null
+++ b/content/collections/fieldtypes/spacer.md
@@ -0,0 +1,7 @@
+---
+title: Spacer
+description: An invisible field to help you structure your blueprints and forms.
+overview: "The Spacer fieldtype is invisible, perfect for giving your forms some much-needed breathing room. "
+id: 55043a00-28ee-4977-a10a-6295e903f41b
+screenshot: fieldtypes/screenshots/spacer.png
+---
diff --git a/content/collections/fieldtypes/structures.md b/content/collections/fieldtypes/structures.md
index 780dd68fc..1edef9a40 100644
--- a/content/collections/fieldtypes/structures.md
+++ b/content/collections/fieldtypes/structures.md
@@ -42,7 +42,10 @@ structures:
 
 Loop through the structures to  access their handles and pass them to a [Nav](/tags/nav) tag.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ structures }}
   <ul>
     {{ nav :handle="handle" }}
@@ -51,6 +54,19 @@ Loop through the structures to  access their handles and pass them to a [Nav](/t
   </ul>
 {{ /structures }}
 ```
+::tab blade
+```blade
+@foreach ($structures as $nav)
+  <ul>
+    <statamic:nav
+      :handle="$nav"
+    >
+      <li><a href="{{ $url }}">{{ $title }}</a></li>
+    </statamic:nav>
+  </ul>
+@endforeach
+```
+::
 
 ```html
 <ul>
diff --git a/content/collections/fieldtypes/table.md b/content/collections/fieldtypes/table.md
index ec7ae46c9..852807530 100644
--- a/content/collections/fieldtypes/table.md
+++ b/content/collections/fieldtypes/table.md
@@ -6,6 +6,23 @@ intro: >
 screenshot: fieldtypes/screenshots/table.gif
 stage: 4
 id: 11e0ab78-7698-44c8-98f1-1194cb12ce28
+options:
+  -
+    name: min_rows
+    type: 'integer *0*'
+    description: The minimum number of required rows.
+  -
+    name: max_rows
+    type: integer
+    description: >
+      The maximum number of rows allowed. Once
+      reached the `Add Row`
+      button will disappear.
+  -
+    name: default
+    type: string
+    description: |
+      Set the default value.
 ---
 ## Data Structure
 
@@ -33,13 +50,25 @@ This data format makes it trivial when it comes time to render it templates.
 
 This fieldtype comes with a handy [`table`](/modifiers/table) modifier, which will turn your data into a simple HTML `<table>`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ my_table | table }}
 ```
 
+::tab blade
+```blade
+{!! Statamic::modify($my_table)->table() !!}
+```
+::
+
 Here’s the same thing that the modifier would have output, but we’re modifying the cells to use `| markdown`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <table>
   {{ my_table }}
     <tr>
@@ -50,10 +79,26 @@ Here’s the same thing that the modifier would have output, but we’re modifyi
   {{ /my_table }}
 </table>
 ```
+::tab blade
+```blade
+<table>
+	@foreach ($my_table as $row)
+		<tr>
+			@foreach ($row['cells'] as $cell)
+				<td>{!! Statamic::modify($cell)->markdown() !!}</td>
+			@endforeach
+		</tr>
+	@endforeach
+</table>
+```
+::
 
 Want even more control? This example assumes you have a boolean field in your front-matter named `first_row_headers` which toggles whether or not to render the first row of the table in a `<thead>` with `<th>` tags.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <table>
   {{ my_table }}
     {{ if first && first_row_headers }}
@@ -82,3 +127,42 @@ Want even more control? This example assumes you have a boolean field in your fr
   {{ /my_table }}
 </table>
 ```
+::tab blade
+
+The following example uses the `fetch` helper function, which resolves `Value` instances for you and returns the underlying value. If the passed value is not a `Value` instance, you will get that original value back.
+
+```blade
+<?php
+	use function Statamic\View\Blade\{fetch};
+?>
+<table>
+	@php($first_row_headers = fetch($first_row_headers) ?? false)
+	@foreach ($my_table as $row)
+		@if ($loop->first && $first_row_headers)
+			<thead>
+			<tr>
+				@foreach ($row['cells'] as $value)
+				<th>{!! Statamic::modify($value)->markdown() !!}</th>
+				@endforeach
+			</tr>
+			</thead>
+			<tbody>
+		@endif
+		@if (! $loop->first && $first_row_headers || ! $first_row_headers)
+			@if ($loop->first)
+				<tbody>
+			@endif
+
+			<tr>
+				@foreach ($row['cells'] as $value)
+					<th>{!! Statamic::modify($value)->markdown() !!}</th>
+				@endforeach
+			</tr>
+
+			@if ($loop->last)
+				</tbody>
+			@endif
+		@endif
+	@endforeach
+</table>
+::
diff --git a/content/collections/fieldtypes/taggable.md b/content/collections/fieldtypes/taggable.md
index c47b19fe8..e653bef9f 100644
--- a/content/collections/fieldtypes/taggable.md
+++ b/content/collections/fieldtypes/taggable.md
@@ -24,7 +24,10 @@ Your tags will get saved as a simple YAML list, like this:
 
 Loop through the array items to display each item's `value`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <h1>I've heard rumors of:</h1>
 <ul>
   {{ tags }}
@@ -33,6 +36,18 @@ Loop through the array items to display each item's `value`.
 </ul>
 ```
 
+::tab blade
+
+```blade
+<h1>I've heard rumors of:</h1>
+<ul>
+	@foreach ($tags as $tag)
+		<li>{{ $tag }}</li>
+	@endforeach
+</ul>
+```
+::
+
 ```html
 <h1>I've heard rumors of:</h1>
 <ul>
diff --git a/content/collections/fieldtypes/taxonomies.md b/content/collections/fieldtypes/taxonomies.md
index efe0b1d99..74fad3d01 100644
--- a/content/collections/fieldtypes/taxonomies.md
+++ b/content/collections/fieldtypes/taxonomies.md
@@ -45,13 +45,29 @@ taxonomies:
 
 You're more than likely using this field as a way to dynamically display Terms from one or more Taxonomies.
 
-```
+The following example assumes `max_items` has been set to `1`:
+
+::tabs
+
+::tab antlers
+```antlers
 <ul>
   {{ taxonomy :from="my_taxonomy_field" }}
     <li>{{ title }}</li>
   {{ /taxonomy }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+	<statamic:taxonomy
+		:from="$my_taxonomy_field"
+	>
+		<li>{{ $title }}</li>
+	</statamic:taxonomy>
+</ul>
+```
+::
 
 ```html
 <ul>
diff --git a/content/collections/fieldtypes/terms.md b/content/collections/fieldtypes/terms.md
index a9bb84095..aefae7729 100755
--- a/content/collections/fieldtypes/terms.md
+++ b/content/collections/fieldtypes/terms.md
@@ -22,6 +22,11 @@ options:
     type: boolean *true*
     description: >
       By default you may create new terms. Set to `false` to only allow selecting from existing terms.
+  -
+    name: query_scopes
+    type: string
+    description: >
+      Allows you to specify a [query scope](/extending/query-scopes-and-filters#scopes) which should be applied when retrieving selectable assets. You should specify the query scope's handle, which is usually the name of the class in snake case. For example: `MyAwesomeScope` would be `my_awesome_scope`.
 stage: 2
 id: 31adcc00-4fbb-4fe9-9b48-401061273096
 ---
@@ -58,13 +63,25 @@ things_you_may_find_adorable:
 As outlined in the [Taxonomies Guide](/taxonomies#templating), term slugs will automatically be converted to Term objects which means
 you will have all of the term's data available as variables.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
   {{ wildlife }}
     <li><a href="{{ url }}">{{ title }}</a></li>
   {{ /wildlife }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+	@foreach ($wildlife as $term)
+		<li><a href="{{ $term->url }}">{{ $term->title }}</a></li>
+	@endforeach
+</ul>
+```
+::
 
 ```html
 <ul>
@@ -81,20 +98,19 @@ However, sometimes you have other ideas in mind for using taxonomy terms. For in
 
 When using the taxonomy field in this way, terms will get saved using _IDs_ instead of slugs.
 
-```
+``` yaml
 similar_things:
-  - categories/hats
-  - tags/delightful
+  - categories::hats
+  - tags::delightful
 ```
 
-These will _not_ be automatically converted to Terms, since the field name does not match any taxonomy handle.
-You will need to use the [Relate Tag](/tags/relate) in your template to have these converted to Terms.
+You can still loop through them like your used to:
 
-```
+``` antlers
 <ul>
-  {{ relate:similar_things }}
+  {{ similar_things }}
     <li><a href="{{ url }}">{{ title }}</a></li>
-  {{ /relate:similar_things }}
+  {{ /similar_things }}
 </ul>
 ```
 
@@ -104,5 +120,3 @@ You will need to use the [Relate Tag](/tags/relate) in your template to have the
   <li><a href="/tags/delightful">Delightful</a></li>
 </ul>
 ```
-
-
diff --git a/content/collections/fieldtypes/text.md b/content/collections/fieldtypes/text.md
index 576857083..b51ee13dc 100644
--- a/content/collections/fieldtypes/text.md
+++ b/content/collections/fieldtypes/text.md
@@ -12,8 +12,7 @@ options:
   -
     name: character_limit
     type: integer
-    description: >
-      Set the maximum number of enterable characters.
+    description: 'Set the maximum number of enterable characters. This is only a recommendation, not a hard limit. To enforce a hard limit, use the [`max`](https://laravel.com/docs/master/validation#rule-max) validation rule.'
   -
     name: input_type
     type: string
diff --git a/content/collections/fieldtypes/textarea.md b/content/collections/fieldtypes/textarea.md
index bc512cdec..74f52006d 100644
--- a/content/collections/fieldtypes/textarea.md
+++ b/content/collections/fieldtypes/textarea.md
@@ -8,14 +8,13 @@ options:
   -
     name: character_limit
     type: integer
-    description: 'Set the maximum number of enterable characters.'
+    description: 'Set the maximum number of enterable characters. This is only a recommendation, not a hard limit. To enforce a hard limit, use the [`max`](https://laravel.com/docs/master/validation#rule-max) validation rule.'
   -
     name: placeholder
     type: string
     description: >
       Set some default placeholder text.
-screenshot: fieldtypes/screenshots/textarea.png
-state: 4
+screenshot: fieldtypes/screenshots/v4/textarea.png
 id: 7c54484a-7ba5-4314-b9af-9d9a462090fc
 ---
 
diff --git a/content/collections/fieldtypes/toggle.md b/content/collections/fieldtypes/toggle.md
index 4925c9e28..f9cba2680 100644
--- a/content/collections/fieldtypes/toggle.md
+++ b/content/collections/fieldtypes/toggle.md
@@ -2,8 +2,7 @@
 title: Toggle
 description: A toggle switch for booleans (`true` and `false`).
 intro: A nice little toggle switch generally used to manage settings-type variables. It stores `true` or `false` and is delightfully uncomplicated, just like our relationship with yogurt.
-screenshot: fieldtypes/screenshots/toggle.png
-stage: 4
+screenshot: fieldtypes/screenshots/v4/toggle.png
 id: ac5f8f98-616f-4621-a7ee-dbc8bbc15525
 ---
 ## Data Structure
@@ -11,13 +10,31 @@ id: ac5f8f98-616f-4621-a7ee-dbc8bbc15525
 Flicking the toggle to the right sets to the value to `true`, left to `false`.
 
 ``` yaml
-should_it: true
+do_the_thing: true
 ```
 
 ## Templating
 
-Toggles are usually used to control logic, so you can combine them with `{{ if }}` statements in your templates to do all manner of wizardy.
+Toggles are usually used to control logic, so you can combine them with `{{ if }}` statements in your templates to handle all manner of show/hide wizardry.
 
+::tabs
+
+::tab antlers
+```antlers
+{{ if do_the_thing }} It does it {{ /if }}
 ```
-{{ if should_it }} It does {{ /if }}
+
+::tab blade
+
+The following example uses the `fetch` helper function, which resolves `Value` instances for you and returns the underlying value. This way you always get the real "truthy" value, regardless of how you retrieved `$do_the_thing`.
+
+```blade
+<?php
+	use function Statamic\View\Blade\{fetch};
+?>
+
+@if (fetch($do_the_thing))
+  It does it
+@endif
 ```
+::
diff --git a/content/collections/fieldtypes/user-groups.md b/content/collections/fieldtypes/user-groups.md
index 0712d0857..d371b0ad6 100644
--- a/content/collections/fieldtypes/user-groups.md
+++ b/content/collections/fieldtypes/user-groups.md
@@ -33,8 +33,28 @@ The User Group fieldtype stores the `handle` of a single group as a string, or a
 
 The User Group fieldtype uses [augmentation](/augmentation) to return the `title` and `handle` of each Group. You can use pass these values into the `{{ user:in }}` tag to protect content.
 
-```
+The following example assumes `max_items` has been set to `1`.
+
+::tabs
+
+::tab antlers
+```antlers
 {{ user:in :group="group_field:handle" }}
   You are in the {{ group_field:title }} group. Nice!
 {{ /user:in }}
 ```
+::tab blade
+```blade
+{{-- Using Statamic Tags --}}
+<statamic:user:in
+  :group="$group_field->handle"
+>
+  You are in the {{ $group_field->title }} group. Nice!
+</statamic:user:in>
+
+{{-- Using Fluent Tags --}}
+@if(Statamic::tag('user:in')->group($group_field->handle)->fetch())
+  You are in the {{ $group_field->title }} group. Nice!
+@endif
+```
+::
\ No newline at end of file
diff --git a/content/collections/fieldtypes/user-roles.md b/content/collections/fieldtypes/user-roles.md
index e60378214..c47baf66f 100644
--- a/content/collections/fieldtypes/user-roles.md
+++ b/content/collections/fieldtypes/user-roles.md
@@ -34,8 +34,29 @@ The User Role fieldtype stores the `handle` of a single group as a string, or an
 
 The User Role fieldtype uses [augmentation](/augmentation) to return the `title` and `handle` of each Role. You can use pass these values into the `{{ user:is }}` tag to protect content.
 
-```
+The following example assumes `max_items` has been set to `1`.
+
+::tabs
+
+::tab antlers
+```antlers
 {{ user:is :role="role_field:handle" }}
   You are a {{ role_field:title }}. Nice!
 {{ /user:is }}
 ```
+
+::tab blade
+```blade
+{{-- Using Statamic Tags --}}
+<statamic:user:is
+	:role="$role_field->handle"
+>
+	You are a {{ $role_field->title }}. Nice!
+</statamic:user:is>
+
+{{-- Using Fluent Tags --}}
+@if(Statamic::tag('user:is')->role($role_field->handle)->fetch())
+	You are a {{ $role_field->title }}. Nice!
+@endif
+```
+::
diff --git a/content/collections/fieldtypes/users.md b/content/collections/fieldtypes/users.md
index acc7b558e..41139145d 100644
--- a/content/collections/fieldtypes/users.md
+++ b/content/collections/fieldtypes/users.md
@@ -20,6 +20,11 @@ options:
     type: string
     description: >
       Choose between `select`, `typeahead`, and the `default` stack selector UI modes.
+  -
+    name: query_scopes
+    type: string
+    description: >
+      Allows you to specify a [query scope](/extending/query-scopes-and-filters#scopes) which should be applied when retrieving selectable assets. You should specify the query scope's handle, which is usually the name of the class in snake case. For example: `MyAwesomeScope` would be `my_awesome_scope`.
 stage: 4
 id: 0f8102b9-c948-4264-8cb8-cbfbd0415a04
 ---
@@ -45,7 +50,12 @@ author: abc-123-cba-321
 
 All relationship fields use [augmentation](/augmentation) to fetch the actual data objects, allowing you to interact with the related data automatically and dynamically.
 
-```
+The following example assumes `max_items` has been set to `1`.
+
+::tabs
+
+::tab antlers
+```antlers
 <div class="bg-white p-4 shadow flex items-center">
 {{ author }}
   <img class="w-10 h-10 rounded-full" src="{{ avatar }}" alt="Avatar of {{ name }}">
@@ -56,6 +66,18 @@ All relationship fields use [augmentation](/augmentation) to fetch the actual da
 {{ /author }}
 </div>
 ```
+::tab blade
+```blade
+<div class="bg-white p-4 shadow flex items-center">
+	<img class="w-10 h-10 rounded-full" src="{{ $author->avatar }}" alt="Avatar of {{ $author->name }}">
+	<div class="text-sm ml-4">
+		<p class="text-gray-900 leading-none">{{ $author->name }}</p>
+		<p class="text-gray-600">{{ $author->email }}</p>
+	</div>
+</div>
+```
+
+::
 
 ```html
 <div class="bg-white p-4 shadow flex items-center">
@@ -66,5 +88,3 @@ All relationship fields use [augmentation](/augmentation) to fetch the actual da
     </div>
 </div>
 ```
-
-
diff --git a/content/collections/fieldtypes/video.md b/content/collections/fieldtypes/video.md
index f32aedee5..fa52191eb 100644
--- a/content/collections/fieldtypes/video.md
+++ b/content/collections/fieldtypes/video.md
@@ -3,8 +3,7 @@ title: Video
 description: Extract embed URLs from Youtube, Vimeo, and HTML5 compatible video links and preview them right inline.
 intro: |
   Extract embed URLs from Youtube, Vimeo, and HTML5 compatible video links and preview them right inline. Feel free watch the whole thing instead of working – we won't tell.
-screenshot: fieldtypes/screenshots/video.jpg
-stage: 4
+screenshot: fieldtypes/screenshots/v4/video.png
 id: ced8b901-95bd-4006-b70e-4ea04d72fcb7
 ---
 ## Usage
@@ -30,7 +29,10 @@ video: https://www.youtube.com/watch?v=s9F5fhJQo34
 You can use the [is_embeddable](/modifiers/is_embeddable) and
 [embed_url](/modifiers/embed_url) modifiers to display your video player.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if video | is_embeddable }}
     <!-- Youtube and Vimeo -->
     <iframe src="{{ video | embed_url }}" ...></iframe>
@@ -39,3 +41,14 @@ You can use the [is_embeddable](/modifiers/is_embeddable) and
     <video src="{{ video | embed_url }}" ...></video>
 {{ /if }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($video)->isEmbeddable()->fetch())
+	<!-- Youtube and Vimeo -->
+	<iframe src="{{ Statamic::modify($video)->embedUrl() }}" ...></iframe>
+@else
+	<!-- Other HTML5 video types -->
+	<video src="{{ Statamic::modify($video)->embedUrl() }}" ...></video>
+@endif
+```
+::
\ No newline at end of file
diff --git a/content/collections/fieldtypes/width.md b/content/collections/fieldtypes/width.md
new file mode 100644
index 000000000..ac30f9af9
--- /dev/null
+++ b/content/collections/fieldtypes/width.md
@@ -0,0 +1,59 @@
+---
+id: b8b51bb8-a4bd-4aec-90bd-4f150a29c8a0
+blueprint: fieldtype
+title: Width
+screenshot: fieldtypes/screenshots/width.png
+intro: 'A slick way to select a width in your blueprints. Although you could use it for anything you want as it stores the value in your markdown as an integer. Neat!'
+width_field: 50
+options:
+  -
+    name: options
+    type: array
+    required: false
+    description: 'The array of integers presented in the blueprint. Default: 25 / 33 / 50 / 66 / 75 / 100'
+  -
+    name: default
+    type: integer
+    required: false
+    description: "The default selected width. Can be set to a value that doesn't exist in the options array if desired."
+---
+## Overview
+
+An alternative to the [Button Group](/fieldtypes/button_group) or [Select](/fieldtypes/select) field types that is a bit more compact and visually appealing.
+
+## Data structure
+
+The selected value is stored as an integer.
+
+``` yaml
+image_width: 50
+```
+
+## Templating
+
+Use in your front end, most likely with a CSS framework like Tailwind or Bootstrap to set custom widths.
+
+::tabs
+
+::tab antlers
+
+```antlers
+<div class="col-12"">
+    <div class="w-25">
+        <h1>Compact headings</h1>
+    </div>
+    <div class="w-{{ image_width }}">
+        <h2>With wider sub-headings</h2>
+    </div>
+</div>
+```
+
+::tab blade
+
+```blade
+<div class="header-block">
+	<img class="w-[{{ $image_width }}px] src="/assets/mycoolicon.png>
+    <h1>Icon overview</h1>
+</div>
+```
+::
\ No newline at end of file
diff --git a/content/collections/guides.yaml b/content/collections/guides.yaml
index b8f20a4c1..8f8c9163f 100644
--- a/content/collections/guides.yaml
+++ b/content/collections/guides.yaml
@@ -1,5 +1,5 @@
 title: Guides
-template: guides/show
+template: page
 layout: layout
 mount: 173b892f-7f5a-4b88-8830-f28d8f90265f
 revisions: false
diff --git a/content/collections/modifiers.yaml b/content/collections/modifiers.yaml
index be6d51fd3..6f810a209 100644
--- a/content/collections/modifiers.yaml
+++ b/content/collections/modifiers.yaml
@@ -1,5 +1,5 @@
 title: Modifiers
-template: modifiers.show
+template: page
 layout: layout
 mount: a4bc698a-5971-474d-a19c-0c43c0d641b9
 taxonomies:
diff --git a/content/collections/modifiers/add.md b/content/collections/modifiers/add.md
index e8266e271..2efb3290a 100644
--- a/content/collections/modifiers/add.md
+++ b/content/collections/modifiers/add.md
@@ -12,13 +12,30 @@ books: 5
 magazines: 10
 ```
 
-``` antlers
+::tabs
+
+::tab antlers
+
+```antlers
 {{ books | add:5 }}
 {{ books | add:magazines }}
 {{ books | +:magazines }}
 ```
+::tab blade
+```blade
+{{-- Using Modifiers --}}
+{{ Statamic::modify($books)->add(5) }}
+{{ Statamic::modify($books)->add($magazines) }}
+{{ Statamic::modify($books)->add($magazines) }}
 
+{{-- Using PHP --}}
+{{ $books + 5 }}
+{{ $books + $magazines }}
+{{ $books + $magazines }}
 ```
+::
+
+```text
 10
 15
 15
diff --git a/content/collections/modifiers/add_slashes.md b/content/collections/modifiers/add_slashes.md
index 398b5bd6e..efde8d61a 100644
--- a/content/collections/modifiers/add_slashes.md
+++ b/content/collections/modifiers/add_slashes.md
@@ -17,10 +17,19 @@ summary: >
   "I'm not listening!" said the small, strange creature.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ summary | add_slashes }}
 ```
 
+::tab blade
+```blade
+{{ Statamic::modify($summary)->addSlashes() }}
+```
+::
+
 ``` output
 \"I\'m not listening!\" said the small, strange creature.
 ```
diff --git a/content/collections/modifiers/ampersand_list.md b/content/collections/modifiers/ampersand_list.md
index 84c3c3fa5..aa200673c 100644
--- a/content/collections/modifiers/ampersand_list.md
+++ b/content/collections/modifiers/ampersand_list.md
@@ -20,10 +20,18 @@ fruits:
   - jerky
 ```
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ fruits | ampersand_list }}
 ```
 
+::tab blade
+```blade
+{{ Statamic::modify($fruits)->ampersandList() }}
+```
+::
+
 ```html
 apples, bananas & jerky
 ```
\ No newline at end of file
diff --git a/content/collections/modifiers/antlers.md b/content/collections/modifiers/antlers.md
new file mode 100644
index 000000000..1055b06c3
--- /dev/null
+++ b/content/collections/modifiers/antlers.md
@@ -0,0 +1,31 @@
+---
+id: e3b58c77-0bfc-40da-918f-51a7f65950b8
+blueprint: modifiers
+modifier_types:
+  - string
+  - utility
+title: Antlers
+---
+Parses the given value as an Antlers template.
+
+```yaml
+title: 'Hello {{ audience }}!'
+audience: world
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ title | antlers }}
+```
+
+::tab blade
+```blade
+{{ Statamic::modify($title)->antlers() }}
+```
+::
+
+```
+Hello world!
+```
diff --git a/content/collections/modifiers/as.md b/content/collections/modifiers/as.md
index 823eb0cfe..0b0bfde23 100644
--- a/content/collections/modifiers/as.md
+++ b/content/collections/modifiers/as.md
@@ -6,7 +6,7 @@ modifier_types:
   - utility
 title: As
 ---
-Alias an array variable with a key, giving you some useful markup/iteration options.
+Alias an array variable as another name, allowing you to massage your data to reused shared components and templates.
 
 ```yaml
 blocks:
@@ -18,9 +18,11 @@ blocks:
     photo: /assets/img/baño-tacos.jpg
 ```
 
-```
-{{ blocks as="block" }}
-  {{ block | partial:type }}
+```antlers
+{{ blocks as="sets" }}
+    {{ sets }}
+        {{ partial:type }}
+    {{ /sets }}
 {{ /blocks }}
 ```
 
diff --git a/content/collections/modifiers/ascii.md b/content/collections/modifiers/ascii.md
index 11f3651a0..4da59ef2f 100644
--- a/content/collections/modifiers/ascii.md
+++ b/content/collections/modifiers/ascii.md
@@ -11,9 +11,17 @@ Replaces all non-ASCII characters with their closest ASCII counterparts and remo
 title: lemoñade
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | ascii }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->ascii() }}
+```
+::
 
 ```html
 lemonade
diff --git a/content/collections/modifiers/at.md b/content/collections/modifiers/at.md
index 345e2b66a..937a7a2a4 100644
--- a/content/collections/modifiers/at.md
+++ b/content/collections/modifiers/at.md
@@ -11,9 +11,17 @@ Returns the single character at a given position in a string. It starts at zero
 title: supercalifragilisticexpialidocious
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | at:21 }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->at(21) }}
+```
+::
 
 ```html
 x
diff --git a/content/collections/modifiers/attribute.md b/content/collections/modifiers/attribute.md
new file mode 100644
index 000000000..ca6f18ee2
--- /dev/null
+++ b/content/collections/modifiers/attribute.md
@@ -0,0 +1,47 @@
+---
+id: 9840b1ab-4576-4cc9-9b83-9226d069807d
+blueprint: modifiers
+modifier_types:
+  - string
+  - array
+title: Attribute
+---
+
+When you're writing partials, you might find yourself passing variables that will ultimately just be used in HTML attributes, like this:
+
+```antlers
+<input
+    type="text"
+    {{ if name }}name="{{ name }}"{{ /if }}
+    {{ if class }}class="{{ class }}"{{ /if }}
+    {{ if mandatory }}required{{ /if }}
+/>
+```
+
+You can simplify this using the `attribute` modifier:
+
+```yaml
+name: first_name
+class: text-sm font-mono text-gray-900
+mandatory: true
+```
+
+```antlers
+<input
+    type="text"
+    {{ name | attribute:name }}
+    {{ class | attribute:class }}
+    {{ mandatory | attribute:required }}
+/>
+```
+
+```html
+<input
+    type="text"
+    name="first_name"
+    class="text-sm font-mono text-gray-900"
+    required
+/>
+```
+
+The `attribute` modifier supports passing booleans, *some* objects, arrays, integers, floats and strings.
diff --git a/content/collections/modifiers/background_position.md b/content/collections/modifiers/background_position.md
index 8af61c73e..24db9dde6 100644
--- a/content/collections/modifiers/background_position.md
+++ b/content/collections/modifiers/background_position.md
@@ -12,9 +12,17 @@ Converts an asset focal point value (eg. `50-30`) into a value suitable for the
 focus: 50-30
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 background-position: {{ focus | background_position }};
 ```
+::tab blade
+```blade
+background-position: {{ Statamic::modify($focus)->backgroundPosition() }};
+```
+::
 
 ```html
 background-position: 50% 30%;
diff --git a/content/collections/modifiers/backspace.md b/content/collections/modifiers/backspace.md
index 82b8ac9b0..8cdb3a094 100644
--- a/content/collections/modifiers/backspace.md
+++ b/content/collections/modifiers/backspace.md
@@ -11,9 +11,17 @@ Removes a specified number of characters from the end of a string.
 title: supercalifragilisticexpialidocious
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | backspace:29 }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->backspace(29) }}
+```
+::
 
 ```html
 super
diff --git a/content/collections/modifiers/bard_html.md b/content/collections/modifiers/bard_html.md
index b7e10ae8d..db7039714 100644
--- a/content/collections/modifiers/bard_html.md
+++ b/content/collections/modifiers/bard_html.md
@@ -34,9 +34,17 @@ main_content:
         text: "Kurt always has and always will live in the 1980s and is very excited at the prospect of having his very own place in\_CYBERSPACE."
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ main_content | raw | bard_html }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($main_content)->bardHtml() }}
+```
+::
 
 ```html
 <p>We&#039;re going to build a simple personal website for a fictitious young aspiring programmer named Kurt Logan.</p><p>Kurt always has and always will live in the 1980s and is very excited at the prospect of having his very own place in CYBERSPACE.</p>
diff --git a/content/collections/modifiers/bard_items.md b/content/collections/modifiers/bard_items.md
index 47581e47c..7131bb17f 100644
--- a/content/collections/modifiers/bard_items.md
+++ b/content/collections/modifiers/bard_items.md
@@ -42,7 +42,10 @@ main_content:
         text: "Kurt always has and always will live in the 1980s and is very excited at the prospect of having his very own place in\_CYBERSPACE."
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ main_content | raw | bard_items }}
 {{ main_content | raw | bard_items | where:type:image | first | bard_html }}
 {{ links = main_content | raw | bard_items | where:type:link }}
@@ -50,6 +53,19 @@ main_content:
     {{ node | bard_text }} - {{ attrs:href }}
 {{ /links }}
 ```
+::tab blade
+```blade
+<?php
+    Statamic::modify($bard_field_with_sets)->bardItems();
+    Statamic::modify($bard_field_with_sets)->bardItems()->where('type:text')->first()->bardHtml();
+    $links = Statamic::modify($bard_field_with_sets)->bardItems()->where('type:link')->fetch();
+?>
+
+@foreach ($links as $link)
+	{{ Statamic::modify($link['node'])->bardText() }} - {{ $link['attrs']['href'] }}
+@endforeach
+```
+::
 
 ```yaml
 value:
diff --git a/content/collections/modifiers/bard_text.md b/content/collections/modifiers/bard_text.md
index e6753fcb0..41025ae05 100644
--- a/content/collections/modifiers/bard_text.md
+++ b/content/collections/modifiers/bard_text.md
@@ -34,10 +34,19 @@ main_content:
         text: "Kurt always has and always will live in the 1980s and is very excited at the prospect of having his very own place in\_CYBERSPACE."
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ main_content | raw | bard_text }}
 {{ main_content | raw | bard_text | read_time }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($main_content)->bardText() }}
+{{ Statamic::modify($main_content)->bardText()->readTime() }}
+```
+::
 
 ```
 We're going to build a simple personal website for a fictitious young aspiring programmer named Kurt Logan. Kurt always has and always will live in the 1980s and is very excited at the prospect of having his very own place in CYBERSPACE.
diff --git a/content/collections/modifiers/bool_string.md b/content/collections/modifiers/bool_string.md
new file mode 100644
index 000000000..22e9d3968
--- /dev/null
+++ b/content/collections/modifiers/bool_string.md
@@ -0,0 +1,36 @@
+---
+id: c3214196-3d0d-4a3d-b6c3-1ee4960cfedd
+blueprint: modifiers
+modifier_types:
+  - utility
+title: 'Bool String'
+---
+Converts a truthy value to the string `true` and a falsy to the string `false`. Check out [https://www.php.net/manual/en/language.types.boolean.php](https://www.php.net/manual/en/language.types.boolean.php) to see what PHP considers truthy and falsy.
+
+```yaml
+no: 0
+yes: "hell, yea"
+sure: -1
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ no | bool_string }}
+{{ yes | bool_string }}
+{{ sure | bool_string }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($no)->boolString() }}
+{{ Statamic::modify($yes)->boolString() }}
+{{ Statamic::modify($sure)->boolString() }}
+```
+::
+
+```html
+false
+true
+true
+```
diff --git a/content/collections/modifiers/camelize.md b/content/collections/modifiers/camelize.md
index acefde112..66a94b4bf 100644
--- a/content/collections/modifiers/camelize.md
+++ b/content/collections/modifiers/camelize.md
@@ -11,9 +11,17 @@ Returns a camelCase version of a string. Trims surrounding spaces, capitalizes l
 method: make_everything_better
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ method | camelize }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($method)->camelize() }}
+```
+::
 
 ```html
 makeEverythingBetter
diff --git a/content/collections/modifiers/cdata.md b/content/collections/modifiers/cdata.md
index 95e5fecfc..d1b75e28e 100644
--- a/content/collections/modifiers/cdata.md
+++ b/content/collections/modifiers/cdata.md
@@ -12,9 +12,17 @@ Wraps a string in [CDATA][cdata] tags, useful for formatting characters properly
 title: My Very Own Podcast
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | cdata }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($title)->cdata() !!}
+```
+::
 
 ```html
 <![CDATA[My Very Own Podcast]]>
diff --git a/content/collections/modifiers/ceil.md b/content/collections/modifiers/ceil.md
index 3d374c19a..a7fd046a8 100644
--- a/content/collections/modifiers/ceil.md
+++ b/content/collections/modifiers/ceil.md
@@ -12,9 +12,17 @@ Rounds a number up to the next whole number.
 number: 25.98
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ number | ceil }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($number)->ceil() }}
+```
+::
 
 ```html
 26
diff --git a/content/collections/modifiers/chunk.md b/content/collections/modifiers/chunk.md
index e495554de..39f29b4ff 100644
--- a/content/collections/modifiers/chunk.md
+++ b/content/collections/modifiers/chunk.md
@@ -10,7 +10,10 @@ title: Chunk
 Break arrays or collections into smaller (wait for it) chunks of any given size. This is useful for performing various gymnastics with your HTML markup.
 
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection:news as="posts" limit="6" }}
   {{ posts chunk="3" }}
   <div class="flex space-x-4">
@@ -23,6 +26,23 @@ Break arrays or collections into smaller (wait for it) chunks of any given size.
   {{ /posts }}
 {{ /collection:news }}
 ```
+::tab blade
+```blade
+<s:collection:news as="posts" limit="6">
+
+  @foreach (Statamic::modify($posts)->chunk(3) as $chunk)
+    <div class="flex space-x-4">
+      @foreach ($chunk['chunk'] as $entry)
+        <a href="{{ $entry->url }}" class="bg-purple-800 text-white p-4">
+          {{ $entry->title }}
+        </a>
+      @endforeach
+    </div>
+  @endforeach
+
+</s:collection:news>
+```
+::
 
 ```html
 <div class="flex space-x-4">
diff --git a/content/collections/modifiers/classes.md b/content/collections/modifiers/classes.md
new file mode 100644
index 000000000..f45352709
--- /dev/null
+++ b/content/collections/modifiers/classes.md
@@ -0,0 +1,61 @@
+---
+id: ef8d4f96-e811-4343-a2cf-81e455ee8227
+blueprint: modifiers
+modifier_types:
+  - string
+  - array
+title: Classes
+---
+This conditionally compiles a CSS class string using Laravel's `Arr::toCssClasses()` method.
+
+The modifier expects an array of classes where the array key contains the class or classes you wish to add, while the value is a boolean expression. 
+
+```yaml
+is_active: false
+has_error: true
+```
+
+::tabs
+
+::tab antlers
+```antlers
+<div class="text-sm {{ ['p-4' => true, 'font-bold' => is_active, 'bg-red' => has_error] | classes }}">
+  //
+</div>
+```
+::tab blade
+```blade
+<?php
+  $classes = Statamic::modify([
+    'p-4' => true,
+    'font-bold' => $is_active,
+    'bg-red' => $has_error
+  ])->classes();
+?>
+
+<div class="text-sm {{ $classes }}">
+  //
+</div>
+```
+
+You can also use Blade's `@class` directive:
+
+```blade
+<div @class([
+  'text-sm',
+  'p-4',
+  'font-bold' => $is_active,
+  'bg-red' => $has_error
+])
+>
+  //
+</div>
+```
+
+::
+
+```html
+<div class="text-sm p-4 bg-red">
+  //
+</div>
+```
diff --git a/content/collections/modifiers/collapse.md b/content/collections/modifiers/collapse.md
index 5fbb0f246..22685e6de 100644
--- a/content/collections/modifiers/collapse.md
+++ b/content/collections/modifiers/collapse.md
@@ -14,9 +14,19 @@ numbers:
   - [four, five, six]
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ numbers | collapse }}
 ```
+::tab blade
+```blade
+<?php
+  $collapsed = Satamic::modify($numbers)->collapse()->fetch();
+?>
+```
+::
 
 ```yaml
 numbers:
diff --git a/content/collections/modifiers/collapse_whitespace.md b/content/collections/modifiers/collapse_whitespace.md
index 07e711a6a..61068c21e 100644
--- a/content/collections/modifiers/collapse_whitespace.md
+++ b/content/collections/modifiers/collapse_whitespace.md
@@ -13,9 +13,17 @@ multibyte whitespace such as the thin space and ideographic space.
 title: Bad   at           typing
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | collapse_whitespace }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->collapseWhitespace() }}
+```
+::
 
 ```html
 Bad at typing
diff --git a/content/collections/modifiers/compact.md b/content/collections/modifiers/compact.md
index edda545fc..c2aa27f5a 100644
--- a/content/collections/modifiers/compact.md
+++ b/content/collections/modifiers/compact.md
@@ -17,13 +17,23 @@ stuff:
   two: 'Value Two'
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ "stuff:one, title, stuff:two" | compact | ul }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify("stuff:one, title, stuff:two")->compact()->ul() !!}
+```
+::
 
 Would produce the following output:
 
-```
+::tabs
+
+```html
 <ul>
     <li>Value One</li>
     <li>The finest title there ever was</li>
diff --git a/content/collections/modifiers/console_log.md b/content/collections/modifiers/console_log.md
index cc00bc1c1..f3a40f82c 100644
--- a/content/collections/modifiers/console_log.md
+++ b/content/collections/modifiers/console_log.md
@@ -14,9 +14,17 @@ fruit:
   - bacon
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ fruit | console_log }}
 ```
+::tab blade
+```blade
+@php(Statamic::modify($fruit)->consoleLog())
+```
+::
 
 ```js
 ["apples", "banana", "jerky"]
diff --git a/content/collections/modifiers/contains.md b/content/collections/modifiers/contains.md
index 940409b16..c1bf8dc1b 100644
--- a/content/collections/modifiers/contains.md
+++ b/content/collections/modifiers/contains.md
@@ -23,12 +23,23 @@ adjective: best
 noun: carrot
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if summary | contains('BEST') }}
 {{ if summary | contains('BEST', true) }}
 {{ if summary | contains('adjective') }}
 {{ if summary | contains('noun') }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($summary)->contains('BEST')->fetch()) ... @endif
+@if (Statamic::modify($summary)->contains(['BEST', true])->fetch()) ... @endif
+@if (Statamic::modify($summary)->contains('adjective')->fetch()) ... @endif
+@if (Statamic::modify($summary)->contains('noun')->fetch()) ... @endif
+```
+::
 
 ```html
 true   (the substring "BEST" was in the string, and it didn't care about the case.)
@@ -51,7 +62,10 @@ numbers: [1, 2]
 number: '1'
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if foods | contains('bacon') }}
 {{ if foods | contains('delicious') }}
 {{ if foods | contains('gross') }}
@@ -60,6 +74,17 @@ number: '1'
 {{ if numbers | contains(number) }}
 {{ if numbers | contains(number, true) }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($foods)->contains('bacon')->fetch()) ... @endif
+@if (Statamic::modify($foods)->contains('delicious')->fetch()) ... @endif
+@if (Statamic::modify($foods)->contains('gross')->fetch()) ... @endif
+@if (Statamic::modify($foods)->contains('vegan bacon strips')->fetch()) ... @endif
+
+@if (Statamic::modify($foods)->contains($number)->fetch()) ... @endif
+@if (Statamic::modify($foods)->contains([$number, true])->fetch()) ... @endif
+```
+::
 
 ```html
 true   (there's no field named "bacon", so it searched for literally "bacon")
diff --git a/content/collections/modifiers/contains_all.md b/content/collections/modifiers/contains_all.md
index d562a191d..a557a3b85 100644
--- a/content/collections/modifiers/contains_all.md
+++ b/content/collections/modifiers/contains_all.md
@@ -11,10 +11,19 @@ Search a string against multiple needles and return `true` if all are found, oth
 summary: "It was the best of times, it was the worst of times."
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if summary | contains_all('best', 'worst') }}
 {{ if summary | contains_all('best', 'better') }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($summary)->containsAll(['best', 'worst'])->fetch()) ... @endif
+@if (Statamic::modify($summary)->containsAll(['best', 'better'])->fetch()) ... @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/contains_any.md b/content/collections/modifiers/contains_any.md
index 52354147e..8ee58ab6e 100644
--- a/content/collections/modifiers/contains_any.md
+++ b/content/collections/modifiers/contains_any.md
@@ -11,9 +11,17 @@ Search a string against multiple needles and return `true` if any are found, oth
 summary: "It was the best of times, it was the worst of times."
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if summary | contains_any('good', 'better', 'best') }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($summary)->containsAny(['good', 'better', 'best'])->fetch()) @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/count.md b/content/collections/modifiers/count.md
index 547cf1e76..abfba8a3e 100644
--- a/content/collections/modifiers/count.md
+++ b/content/collections/modifiers/count.md
@@ -14,9 +14,17 @@ fruit:
   - bacon
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ fruit | count }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($fruit)->count() }}
+```
+::
 
 ```html
 3
diff --git a/content/collections/modifiers/count_substring.md b/content/collections/modifiers/count_substring.md
index 4ce0366cb..da97ef100 100644
--- a/content/collections/modifiers/count_substring.md
+++ b/content/collections/modifiers/count_substring.md
@@ -18,9 +18,17 @@ quote: |
   Dude! What does mine say?
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ quote | count_substring('dude') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($quote)->countSubstring('dude') }}
+```
+::
 
 ```html
 5
diff --git a/content/collections/modifiers/dashify.md b/content/collections/modifiers/dashify.md
index 509183af7..318eec770 100644
--- a/content/collections/modifiers/dashify.md
+++ b/content/collections/modifiers/dashify.md
@@ -11,9 +11,17 @@ Returns a lowercase and trimmed string separated by dashes. Dashes are inserted
 title: Just Because I Can
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | dashify }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->dashify() }}
+```
+::
 
 ```html
 just-because-i-can
diff --git a/content/collections/modifiers/days_ago.md b/content/collections/modifiers/days_ago.md
index 774010527..c169ad69d 100644
--- a/content/collections/modifiers/days_ago.md
+++ b/content/collections/modifiers/days_ago.md
@@ -23,9 +23,17 @@ Returns the number of days since a given date variable. Statamic will attempt to
 date: December 25 2021
 ```
 
+::tabs
+
+::tab antlers
 ```antlers
 {{ date | days_ago }}
 ```
+::tab blade
+```blade`
+{{ Statamic::modify($date)->daysAgo() }}
+``
+::
 
 ```output
 6
diff --git a/content/collections/modifiers/decode.md b/content/collections/modifiers/decode.md
index 92ab462ed..03d7204b4 100644
--- a/content/collections/modifiers/decode.md
+++ b/content/collections/modifiers/decode.md
@@ -11,9 +11,17 @@ Convert all HTML entities to their applicable characters via PHP's [html_entity_
 string: "I'll &quot;eat&quot; the &lt;b&gt;bacon&lt;/b&gt; now";
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | decode }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->decode() }}
+```
+::
 
 ```html
 I'll "eat" the <b>bacon</b> now
diff --git a/content/collections/modifiers/deslugify.md b/content/collections/modifiers/deslugify.md
index 17b0ecc73..8aeef0a91 100644
--- a/content/collections/modifiers/deslugify.md
+++ b/content/collections/modifiers/deslugify.md
@@ -11,9 +11,17 @@ Replaces all hyphens and underscores in a string with spaces. The opposite of [d
 title: Just-Because-I-Can
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | deslugify }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->deslugify() }}
+```
+::
 
 ```html
 Just Because I Can
diff --git a/content/collections/modifiers/divide.md b/content/collections/modifiers/divide.md
index 2f037bb85..029a4475c 100644
--- a/content/collections/modifiers/divide.md
+++ b/content/collections/modifiers/divide.md
@@ -12,10 +12,19 @@ bacon: 21
 skillets: 3
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ bacon | divide($skillets) }}
 {{ skillets | divide(3) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($bacon)->divide($skillets) }}
+{{ Statamic::modify($skillets)->divide(3) }}
+```
+::
 
 ```html
 7
diff --git a/content/collections/modifiers/dl.md b/content/collections/modifiers/dl.md
index a85ef78de..82da1c1c3 100644
--- a/content/collections/modifiers/dl.md
+++ b/content/collections/modifiers/dl.md
@@ -18,9 +18,17 @@ food:
     - kale
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ food | dl }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($food)->dl() !!}
+```
+::
 
 ```html
 <dl>
diff --git a/content/collections/modifiers/dump.md b/content/collections/modifiers/dump.md
index abc9d26ca..ac116e65b 100644
--- a/content/collections/modifiers/dump.md
+++ b/content/collections/modifiers/dump.md
@@ -14,9 +14,17 @@ food:
     - sushi
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ food | dump }}
 ```
+::tab blade
+```blade
+@dd($food)
+```
+::
 
 ```html
 array:2 [▼
diff --git a/content/collections/modifiers/embed_url.md b/content/collections/modifiers/embed_url.md
index 2534b3cc6..9ad82baeb 100644
--- a/content/collections/modifiers/embed_url.md
+++ b/content/collections/modifiers/embed_url.md
@@ -15,11 +15,21 @@ vimeo: https://vimeo.com/22439234
 other: http://example.com/video.mp4
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ youtube | embed_url }}
 {{ vimeo | embed_url }}
 {{ other | embed_url }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($youtube)->embedUrl() }}
+{{ Statamic::modify($vimeo)->embedUrl() }}
+{{ Statamic::modify($other)->embedUrl() }}
+```
+::
 
 ```html
 https://www.youtube.com/embed/s9F5fhJQo34
diff --git a/content/collections/modifiers/ends_with.md b/content/collections/modifiers/ends_with.md
index 26501e577..3e9ab4a7d 100644
--- a/content/collections/modifiers/ends_with.md
+++ b/content/collections/modifiers/ends_with.md
@@ -11,10 +11,24 @@ Returns `true` if the value ends with a given string. This comparison is case-in
 punchline: That's what she said!
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if (punchline | ends_with('she said!')) }}
 {{ if (punchline | ends_with('your mom!')) }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($punchline)->endsWith('she said!')->fetch())
+
+@endif
+
+@if (Statamic::modify($punchline)->endsWith('your mom!')->fetch())
+
+@endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/ensure_left.md b/content/collections/modifiers/ensure_left.md
index 69e91d1cd..5f026b041 100644
--- a/content/collections/modifiers/ensure_left.md
+++ b/content/collections/modifiers/ensure_left.md
@@ -14,11 +14,21 @@ links:
   - http://wilderborn.com
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ links }}
   <li>{{ value | ensure_left('http://') }}</li>
 {{ /links }}
 ```
+::tab blade
+```blade
+@foreach ($links as $link)
+  <li>{{ Statamic::modify($link)->ensureLeft('http://') }}</li>
+@endforeach
+```
+::
 
 ```html
 <li>http://statamic.com</li>
diff --git a/content/collections/modifiers/ensure_right.md b/content/collections/modifiers/ensure_right.md
index a40abfe88..0a79a7cfa 100644
--- a/content/collections/modifiers/ensure_right.md
+++ b/content/collections/modifiers/ensure_right.md
@@ -14,11 +14,21 @@ links:
   - wilderborn.com
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ links }}
-  <li>{{ value ensure_right('.com') }}</li>
+  <li>{{ value | ensure_right('.com') }}</li>
 {{ /links }}
 ```
+::tab blade
+```blade
+@foreach ($links as $link)
+  <li>{{ Statamic::modify($value)->ensureRight('.com') }}</li>
+@endforeach
+```
+::
 
 ```html
 <li>statamic.com</li>
diff --git a/content/collections/modifiers/entities.md b/content/collections/modifiers/entities.md
index b4a38347b..f8ba042bd 100644
--- a/content/collections/modifiers/entities.md
+++ b/content/collections/modifiers/entities.md
@@ -12,9 +12,17 @@ Encode a string with HTML entities via PHP's [htmlentities()][entities] function
 string: "The 'bacon' is <b>crispy</b>"
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | entities }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->entities() }}
+```
+::
 
 ```html
 The &#039;bacon&#039; is &lt;b&gt;crispy&lt;/b&gt;
diff --git a/content/collections/modifiers/excerpt.md b/content/collections/modifiers/excerpt.md
index e867d973b..0caf3a402 100644
--- a/content/collections/modifiers/excerpt.md
+++ b/content/collections/modifiers/excerpt.md
@@ -15,9 +15,17 @@ title: 'Example Entry'
 Lorem Ipsum dolor sit amet.<!--more--> consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Massa id neque aliquam vestibulum.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ books | excerpt }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($books)->excerpt() }}
+```
+::
 
 ```html
 Lorem Ipsum dolor sit amet.
diff --git a/content/collections/modifiers/explode.md b/content/collections/modifiers/explode.md
index c6820879e..379ded31f 100644
--- a/content/collections/modifiers/explode.md
+++ b/content/collections/modifiers/explode.md
@@ -12,9 +12,17 @@ Breaks a string into an array of strings split on a given delimiter.
 places: Scotland, England, Switzerland, Italy
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ places | explode(',') | ul }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($places)->explode(',')->ul() !!}
+```
+::
 
 ```html
 <ul>
diff --git a/content/collections/modifiers/favicon.md b/content/collections/modifiers/favicon.md
index 41b6e6d44..a5deb7e35 100644
--- a/content/collections/modifiers/favicon.md
+++ b/content/collections/modifiers/favicon.md
@@ -12,9 +12,17 @@ Given a valid URL will generate a proper favicon meta tag.
 icon: /assets/img/favicon.png
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ icon | favicon }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($icon)->favicon() !!}
+```
+::
 
 ```html
 <link rel="shortcut icon" type="image/x-icon" href="/assets/img/favicon.png">
diff --git a/content/collections/modifiers/filter_empty.md b/content/collections/modifiers/filter_empty.md
new file mode 100644
index 000000000..69d0c67c6
--- /dev/null
+++ b/content/collections/modifiers/filter_empty.md
@@ -0,0 +1,23 @@
+---
+id: a01e28a5-7c59-436c-8137-98e9481631ba
+modifier_types:
+  - array
+title: 'Filter Empty'
+---
+Filters out null values from an array.
+
+```yaml
+favorite_things:
+  - pizza
+  - null
+  - ice cream
+```
+
+```antlers
+{{ favorite_things | filter_empty }}
+```
+
+```output
+pizza
+ice cream
+```
diff --git a/content/collections/modifiers/first.md b/content/collections/modifiers/first.md
index 4344832e4..d9d625242 100644
--- a/content/collections/modifiers/first.md
+++ b/content/collections/modifiers/first.md
@@ -18,10 +18,19 @@ array:
   - Tails
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | first(4) }}
 {{ array | first }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->first(4) }}
+{{ Statamic::modify($array)->first() }}
+```
+::
 
 ```html
 2015
diff --git a/content/collections/modifiers/flatten.md b/content/collections/modifiers/flatten.md
index 08b850272..1e99f3a27 100644
--- a/content/collections/modifiers/flatten.md
+++ b/content/collections/modifiers/flatten.md
@@ -15,9 +15,21 @@ ingredients:
   meat: [chicken]
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ ingredients | flatten }}
 ```
+::tab blade
+```blade
+<?php
+  $flattened = Statamic::modify($ingredients)
+    ->flatten()
+    ->fetch();
+?>
+```
+::
 
 ```yaml
 ingredients:
@@ -31,3 +43,20 @@ ingredients:
   - onion
   - chicken
 ```
+
+You can optionally pass a `depth` parameter to the `flatten` modifier, allowing you to specify how deeply nested arrays should be flattened.
+
+```yaml
+-
+  - garlic
+  - cumin
+  - ginger
+  - turmeric
+  - paprika
+  - curry powder
+-
+  - tomatoes
+  - onion
+-
+  - chicken
+```
diff --git a/content/collections/modifiers/flip.md b/content/collections/modifiers/flip.md
index a0bf637d4..bc92a250c 100644
--- a/content/collections/modifiers/flip.md
+++ b/content/collections/modifiers/flip.md
@@ -13,10 +13,19 @@ favorites:
   drink: soda
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ favorites | json }}
 {{ favorites | flip | json }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($favorites)->json() !!}
+{!! Statamic::modify($favorites)->flip()->json() !!}
+```
+::
 
 ```json
 {"food":"burger","drink":"soda"}
diff --git a/content/collections/modifiers/floor.md b/content/collections/modifiers/floor.md
index 27deedeba..faa4c576f 100644
--- a/content/collections/modifiers/floor.md
+++ b/content/collections/modifiers/floor.md
@@ -12,9 +12,17 @@ Rounds a number down to the next whole number.
 number: 25.98
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ number | floor }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($number)->floor() }}
+```
+::
 
 ```html
 25
diff --git a/content/collections/modifiers/format.md b/content/collections/modifiers/format.md
index 9019eff76..5d5997681 100644
--- a/content/collections/modifiers/format.md
+++ b/content/collections/modifiers/format.md
@@ -12,9 +12,17 @@ Given a date string, or anything that sort of looks like a date string, `format`
 event_date: April 15 2016
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ event_date | format('Y-m-d') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($event_date)->format('Y-m-d') }}
+```
+::
 
 ```html
 2016-04-15
diff --git a/content/collections/modifiers/format_localized.md b/content/collections/modifiers/format_localized.md
deleted file mode 100644
index 857925bd8..000000000
--- a/content/collections/modifiers/format_localized.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-id: 1d181ecf-69ad-4dbe-ae78-bb3b21547a8d
-blueprint: modifiers
-modifier_types:
-  - date
-  - string
-title: 'Format Localized'
----
-:::warning
-Since Carbon 2.55.0 `formatLocalized` has been deprecated. Please use the [`iso_format`](/modifiers/iso_format) modifier instead.
-:::
-
-Given a date string, or anything that sort of looks like a date string, `format` will convert it to a [Carbon][carbon] instance and allow you to format it with PHP's [strftime format][strftime] variables. It will use the current locale defined in your system settings.
-
-For this to work you will need to have the necessary locales installed in your hosting environment.
-
-```yaml
-event_date: April 15 2016
-```
-
-```
-{{ event_date | format_localized('%A %d %B %Y') }}
-```
-
-Assuming your locale is `fr_FR`:
-
-```html
-Vendredi 15 avril 2016
-```
-
-[carbon]: http://carbon.nesbot.com
-[strftime]: http://php.net/strftime
diff --git a/content/collections/modifiers/format_number.md b/content/collections/modifiers/format_number.md
index 81a23d0a7..7a0f43b3e 100644
--- a/content/collections/modifiers/format_number.md
+++ b/content/collections/modifiers/format_number.md
@@ -16,9 +16,17 @@ Format a number with grouped thousands and decimal points. In other words, make
 lucky_number: 130134.109
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ lucky_number | format_number(1, ',', ',') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($lucky_number)->formatNumber(1, ',', ',') }}
+```
+::
 
 ```html
 130,134,1
diff --git a/content/collections/modifiers/format_translated.md b/content/collections/modifiers/format_translated.md
new file mode 100644
index 000000000..4d8ea05b7
--- /dev/null
+++ b/content/collections/modifiers/format_translated.md
@@ -0,0 +1,33 @@
+---
+id: 8cbea367-799f-4fb6-866e-519d571f7b3e
+blueprint: modifiers
+modifier_types:
+  - date
+  - string
+title: 'Format Translated'
+---
+Given a date string, or anything that sort of looks like a date string, `format_translated` will convert it to a [Carbon][carbon] instance and allow you to format it using your site's configured locale.
+
+```yaml
+event_date: 2024-02-28
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ event_date | format_translated('l j F Y') }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($event_date)->format_translated('l j F Y') }}
+```
+::
+
+Assuming your site's locale is `fr_FR`:
+
+```html
+mercredi 28 février 2024
+```
+
+[carbon]: http://carbon.nesbot.com
\ No newline at end of file
diff --git a/content/collections/modifiers/full_urls.md b/content/collections/modifiers/full_urls.md
index 03277cd00..71c4a85f1 100644
--- a/content/collections/modifiers/full_urls.md
+++ b/content/collections/modifiers/full_urls.md
@@ -12,9 +12,17 @@ Replaces root-relative URLs inside HTML attributes (e.g. `href` and `src` ) with
 I had this totally <a href="/dreams/spiders-with-ramen-legs">crazy dream</a> last night and I know you want to hear all about it!
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ content | full_urls }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($content)->fullUrls() !!}
+```
+::
 
 ```html
 I had this totally <a href="https://example.com/dreams/spiders-with-ramen-legs">crazy dream</a> last night and I know you want to hear all about it!
diff --git a/content/collections/modifiers/get.md b/content/collections/modifiers/get.md
index e5072521d..b27f16bc0 100644
--- a/content/collections/modifiers/get.md
+++ b/content/collections/modifiers/get.md
@@ -13,9 +13,17 @@ Gets a value from a relationship based on its ID. This is like a nicer-to-read s
 featured_post: 4e82a520-275f-11e6-bdf4-0800200c9a66
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ featured_post | get('title') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($featured_post)->get('title') }}
+```
+::
 
 ```html
 Featured Post Title
@@ -23,8 +31,18 @@ Featured Post Title
 
 The above is equivalent to doing this:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ get_content :from="featured_post" }}
     {{ title }}
 {{ /get_content }}
 ```
+::tab blade
+```blade
+<s:get_content :from="$featured_post">
+  {{ $title }}
+</s:get_content>
+```
+::
diff --git a/content/collections/modifiers/gravatar.md b/content/collections/modifiers/gravatar.md
index 66d01cc44..b16d2ac30 100644
--- a/content/collections/modifiers/gravatar.md
+++ b/content/collections/modifiers/gravatar.md
@@ -12,10 +12,18 @@ Converts an email string to a Gravatar image URL. The size can be specified by a
 email: rswanson@inpra.org
 ```
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ email | gravatar }}
 {{ email | gravatar(80) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($email)->gravatar() }}
+{{ Statamic::modify($email)->gravatar(80) }}
+```
+::
 
 ```html
 https://www.gravatar.com/avatar/f4650388367dc01cf2acf16b412b3966
diff --git a/content/collections/modifiers/has_lower_case.md b/content/collections/modifiers/has_lower_case.md
index 9f1d25a78..806012f27 100644
--- a/content/collections/modifiers/has_lower_case.md
+++ b/content/collections/modifiers/has_lower_case.md
@@ -11,10 +11,19 @@ Returns `true` if the string contains a lowercase character, `false` otherwise.
 loud_noises: "I DON'T KNOW WHAT WE'RE YELLING ABOUT!"
 ```
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ if loud_noises | has_lower_case }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($loud_noises)->hasLowerCase()->fetch())
+
+@endif
+```
+::
 
 ```html
 false
-```
+```
\ No newline at end of file
diff --git a/content/collections/modifiers/has_upper_case.md b/content/collections/modifiers/has_upper_case.md
index 76c89a9cf..97ecc6ddb 100644
--- a/content/collections/modifiers/has_upper_case.md
+++ b/content/collections/modifiers/has_upper_case.md
@@ -11,9 +11,19 @@ Returns `true` if the string contains an uppercase character, `false` otherwise.
 loud_noises: "I DON'T KNOW WHAT WE'RE YELLING ABOUT!"
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if loud_noises | has_upper_case }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($loud_noises)->hasUpperCase()->fetch())
+
+@endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/headline.md b/content/collections/modifiers/headline.md
new file mode 100644
index 000000000..8f98a9e0a
--- /dev/null
+++ b/content/collections/modifiers/headline.md
@@ -0,0 +1,48 @@
+---
+id: 2d555b32-e68c-4f9b-8570-f2e8d185989b
+blueprint: modifiers
+modifier_types:
+  - markup
+  - string
+  - utility
+title: Headline
+---
+Format the given string, usually a headline or title, with either [AP](https://apastyle.apa.org/style-grammar-guidelines/capitalization/title-case) or [MLA](https://style.mla.org/capitalization-of-titles/) style.
+
+Accepts `ap` or `mla` as an argument. Defaults to `ap` if none is specified.
+
+```yaml
+title: I see a bad-ass mother who don't take no crap off of nobody.
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ title | headline('ap') }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($title)->headline('ap') }}
+```
+::
+
+```
+I See a Bad-Ass Mother Who Don't Take No Crap Off of Nobody.
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ title | headline('mla') }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($title)->headline('mla') }}
+```
+::
+
+```
+I See a Bad-ass Mother Who Don't Take No Crap Off of Nobody.
+```
diff --git a/content/collections/modifiers/hex_to_rgb.md b/content/collections/modifiers/hex_to_rgb.md
new file mode 100644
index 000000000..052d87a31
--- /dev/null
+++ b/content/collections/modifiers/hex_to_rgb.md
@@ -0,0 +1,28 @@
+---
+id: 69000ef1-0a98-42a4-ba1a-0bab4c58ca7d
+blueprint: modifiers
+modifier_types:
+  - utility
+title: 'Hex To RGB'
+---
+Converts a color from hex to RGB, the perfect match for the [color fieldtype](/fieldtypes/color).
+
+```yaml
+color: `#FF269E`
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ color | hex_to_rgb }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($color)->hexToRgb() }}
+```
+::
+
+```html
+255, 38, 158
+```
diff --git a/content/collections/modifiers/hours_ago.md b/content/collections/modifiers/hours_ago.md
index 232cf2114..0ad64c905 100644
--- a/content/collections/modifiers/hours_ago.md
+++ b/content/collections/modifiers/hours_ago.md
@@ -18,10 +18,17 @@ Returns the number of hours since a given date variable. Statamic will attempt t
 date: October 1 2015
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date | hours_ago }}
 ```
-
+::tab blade
+```blade
+{{ Statamic::modify($date)->hoursAgo() }}
+```
+::
 ```html
 {{ test_date | hours_ago }}
 ```
\ No newline at end of file
diff --git a/content/collections/modifiers/image.md b/content/collections/modifiers/image.md
index 169c1d236..61e644833 100644
--- a/content/collections/modifiers/image.md
+++ b/content/collections/modifiers/image.md
@@ -13,10 +13,17 @@ Generate an HTML image element with the variable's value as `src`.
 header_image: /assets/img/bokeh-bunnies.jpg
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ header_image | image }}
 ```
-
+::tab blade
+```blade
+{!! Statamic::modify($header_image)->image() !!}
+```
+::
 ```html
 <img src="/assets/img/bokeh-bunnies.jpg">
 ```
diff --git a/content/collections/modifiers/in_array.md b/content/collections/modifiers/in_array.md
index cc59ffe95..99a8a476d 100644
--- a/content/collections/modifiers/in_array.md
+++ b/content/collections/modifiers/in_array.md
@@ -19,11 +19,21 @@ shopping_list:
 want: eggs
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if (shopping_list | in_array('flour')) }} GOT IT! {{ /if }}
 {{ if (shopping_list | in_array('want')) }} GOT EM! {{ /if }}
 {{ if (shopping_list | in_array('eggs', 'flour')) }} YES I DID NOT FORGET! {{ /if }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($shopping_list)->inArray('flour')->fetch()) GOT IT! @endif
+@if (Statamic::modify($shopping_list)->inArray('want')->fetch()) GOT EM! @endif
+@if (Statamic::modify($shopping_list)->inArray('eggs', 'flour')->fetch()) YES I DID NOT FORGET! @endif
+```
+::
 
 
 ```html
diff --git a/content/collections/modifiers/insert.md b/content/collections/modifiers/insert.md
index d285c9707..05b0d9f54 100644
--- a/content/collections/modifiers/insert.md
+++ b/content/collections/modifiers/insert.md
@@ -12,9 +12,17 @@ Inserts a string at the position provided. The beginning of the string is positi
 opinion: This is yummy.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ opinion | insert('not', 8) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($opinion)->insert(['not', 8]) }}
+```
+::
 
 ```html
 This is not yummy.
diff --git a/content/collections/modifiers/is_after.md b/content/collections/modifiers/is_after.md
index 72fb682e5..92ed5b711 100644
--- a/content/collections/modifiers/is_after.md
+++ b/content/collections/modifiers/is_after.md
@@ -13,11 +13,21 @@ start_date: January 17 2015
 end_date: December 1 2015
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if end_date | is_after($start_date) }}
 {{ if start_date | is_after(2014) }}
 {{ if start_date | is_after($end_date) }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($end_date)->isAfter($start_date)->fetch()) @endif
+@if (Statamic::modify($start_date)->isAfter(2014)->fetch()) @endif
+@if (Statamic::modify($start_date)->isAfter($end_date)->fetch()) @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_alpha.md b/content/collections/modifiers/is_alpha.md
index d6d3fe238..d46860906 100644
--- a/content/collections/modifiers/is_alpha.md
+++ b/content/collections/modifiers/is_alpha.md
@@ -13,10 +13,19 @@ secret_phrase: abcdefg
 even_more_secret_phrase: abc123
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if secret_phrase | is_alpha }}
 {{ if even_more_secret_phrase | is_alpha }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($secret_phrase)->isAlpha()->fetch()) @endif
+@if (Statamic::modify($even_more_secret_phrase)->isAlpha()->fetch()) @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_alphanumeric.md b/content/collections/modifiers/is_alphanumeric.md
index 26a8c0166..8486fa326 100644
--- a/content/collections/modifiers/is_alphanumeric.md
+++ b/content/collections/modifiers/is_alphanumeric.md
@@ -14,10 +14,20 @@ secret_phrase: abc123
 even_more_secret_phrase: abc123!@#
 ```
 
-```
+
+::tabs
+
+::tab antlers:
+```antlers
 {{ if secret_phrase | is_alphanumeric }}
 {{ if even_more_secret_phrase | is_alphanumeric }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($secret_phrase)->isAlphanumeric()->fetch()) @endif
+@if (Statamic::modify($even_more_secret_phrase)->isAlphanumeric()->fetch()) @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_before.md b/content/collections/modifiers/is_before.md
index 591fafe22..b3f74630a 100644
--- a/content/collections/modifiers/is_before.md
+++ b/content/collections/modifiers/is_before.md
@@ -13,11 +13,21 @@ start_date: January 17 2015
 end_date: December 1 2015
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if end_date | is_before($start_date) }}
 {{ if start_date | is_before(2014) }}
 {{ if start_date | is_before($end_date) }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($end_date)->isBefore($start_date)->fetch()) @endif
+@if (Statamic::modify($start_date)->isBefore(2014)->fetch()) @endif
+@if (Statamic::modify($start_date)->isBefore($end_date)->fetch()) @endif
+```
+::
 
 ```html
 false
diff --git a/content/collections/modifiers/is_between.md b/content/collections/modifiers/is_between.md
index c064dc82e..0dbecc8d0 100644
--- a/content/collections/modifiers/is_between.md
+++ b/content/collections/modifiers/is_between.md
@@ -15,9 +15,17 @@ start_date: July 4 2015
 end_date: December 1 2015
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if date | is_between($start_date, $end_date) }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($date)->isBetween([$start_date, $end_date])->fetch()) @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_blank.md b/content/collections/modifiers/is_blank.md
index 20eb94fe0..cfd24e7f1 100644
--- a/content/collections/modifiers/is_blank.md
+++ b/content/collections/modifiers/is_blank.md
@@ -12,10 +12,19 @@ ghost:
 zombie: BRAINSSSS
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if ghost | is_blank }}
 {{ if zombie | is_blank }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($ghost)->isBlank()->fetch()) @endif
+@if (Statamic::modify($zombie)->isBlank()->fetch()) @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_email.md b/content/collections/modifiers/is_email.md
index 60e3e7d6d..e6fa85897 100644
--- a/content/collections/modifiers/is_email.md
+++ b/content/collections/modifiers/is_email.md
@@ -13,10 +13,19 @@ an_email: lknope@inpra.org
 not_an_email: waffles
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if an_email | is_email }}
 {{ if not_an_email | is_email }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($an_email)->isEmail()->fetch()) @endif
+@if (Statamic::modify($not_an_email)->isEmail()->fetch()) @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_embeddable.md b/content/collections/modifiers/is_embeddable.md
index bb29638cf..142451111 100644
--- a/content/collections/modifiers/is_embeddable.md
+++ b/content/collections/modifiers/is_embeddable.md
@@ -15,11 +15,21 @@ vimeo: https://vimeo.com/22439234
 other: http://example.com/video.mp4
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ youtube | is_embeddable }}
 {{ vimeo | is_embeddable }}
 {{ other | is_embeddable }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($youtube)->isEmbeddable()->fetch()) ... @endif
+@if (Statamic::modify($vimeo)->isEmbeddable()->fetch()) ... @endif
+@if (Statamic::modify($other)->isEmbeddable()->fetch()) ... @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_empty.md b/content/collections/modifiers/is_empty.md
index 35968c178..d10be99f0 100644
--- a/content/collections/modifiers/is_empty.md
+++ b/content/collections/modifiers/is_empty.md
@@ -18,11 +18,20 @@ more_data:
     -
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if some_data | is_empty }}
 {{ if more_data | is_empty }}
 
 ```
+::tab blade
+```blade
+@if (Statamic::modify($some_data)->isEmpty()->fetch()) ... @endif
+@if (Statamic::modify($more_data)->isEmpty()->fetch()) ... @endif
+```
+::
 
 ```html
 false
diff --git a/content/collections/modifiers/is_external_url.md b/content/collections/modifiers/is_external_url.md
new file mode 100644
index 000000000..75c5d6009
--- /dev/null
+++ b/content/collections/modifiers/is_external_url.md
@@ -0,0 +1,37 @@
+---
+id: 4cb0f243-72f4-45a1-83d3-d72209907875
+blueprint: modifiers
+modifier_types:
+  - string
+  - conditions
+title: 'Is External Url'
+---
+Returns `true` if a string is an external URL.
+
+```yaml
+google_url: http://google.com/
+entry_url: /waffles
+not_a_url: bacon
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ if google_url | is_external_url }}
+{{ if entry_url | is_external_url }}
+{{ if not_a_url | is_external_url }}
+```
+::tab blade
+```blade
+@if (Statamic::modify($google_url)->isExternalUrl()->fetch()) ... @endif
+@if (Statamic::modify($entry_url)->isExternalUrl()->fetch()) ... @endif
+@if (Statamic::modify($not_a_url)->isExternalUrl()->fetch()) ... @endif
+```
+::
+
+```html
+true
+false
+false
+```
\ No newline at end of file
diff --git a/content/collections/modifiers/is_future.md b/content/collections/modifiers/is_future.md
index c745722b8..9f73e9bd6 100644
--- a/content/collections/modifiers/is_future.md
+++ b/content/collections/modifiers/is_future.md
@@ -13,10 +13,19 @@ date: October 21 2015
 another_date: November 2030
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if date | is_future }}
 {{ if another_date | is_future }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($date)->isFuture()->fetch()) ... @endif
+@if (Statamic::modify($another_date)->isFuture()->fetch()) ... @endif
+```
+::
 
 ```html
 false
diff --git a/content/collections/modifiers/is_json.md b/content/collections/modifiers/is_json.md
index e120a1d73..edd9a6524 100644
--- a/content/collections/modifiers/is_json.md
+++ b/content/collections/modifiers/is_json.md
@@ -12,9 +12,17 @@ Returns `true` if string is valid json
 data: '{"book": "All The Places You'll Go"}'
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if data | is_json }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($data)->isJson()->fetch()) ... @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_leap_year.md b/content/collections/modifiers/is_leap_year.md
index 59f3499ba..16f399ba1 100644
--- a/content/collections/modifiers/is_leap_year.md
+++ b/content/collections/modifiers/is_leap_year.md
@@ -13,10 +13,19 @@ date: November 2016
 another_date: November 2017
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if date | is_leap_year }}
 {{ if another_date | is_leap_year }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($date)->isLeapYear()->fetch()) ... @endif
+@if (Statamic::modify($another_date)->isLeapYear()->fetch()) ... @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_lowercase.md b/content/collections/modifiers/is_lowercase.md
index d1530b56c..5e3bff151 100644
--- a/content/collections/modifiers/is_lowercase.md
+++ b/content/collections/modifiers/is_lowercase.md
@@ -13,10 +13,19 @@ topic: fhqwhgads
 from: Sibbie
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if topic | is_lowercase }}
 {{ if from | is_lowercase }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($topic)->isLowercase()->fetch()) ... @endif
+@if (Statamic::modify($from)->isLowercase()->fetch()) ... @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_numberwang.md b/content/collections/modifiers/is_numberwang.md
index 979dddf1b..bc24588a3 100644
--- a/content/collections/modifiers/is_numberwang.md
+++ b/content/collections/modifiers/is_numberwang.md
@@ -12,9 +12,17 @@ Is it or is it not numberwang? Returns `true` if it is indeed numberwang.
 number: 1002
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if number | is_numberwang }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($number)->isNumberwang()->fetch()) ... @endif
+```
+::
 
 ```html
 ???
diff --git a/content/collections/modifiers/is_numeric.md b/content/collections/modifiers/is_numeric.md
index 49035020f..961af3196 100644
--- a/content/collections/modifiers/is_numeric.md
+++ b/content/collections/modifiers/is_numeric.md
@@ -13,10 +13,19 @@ sequence: 4815162342
 another_sequence: just type 4 8 15 16 23 42
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if sequence | is_numeric }}
 {{ if another_sequence | is_numeric }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($sequence)->isNumeric()->fetch()) ... @endif
+@if (Statamic::modify($another_sequence)->isNumeric()->fetch()) ... @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_past.md b/content/collections/modifiers/is_past.md
index fd95dbf0b..cfb2ee99d 100644
--- a/content/collections/modifiers/is_past.md
+++ b/content/collections/modifiers/is_past.md
@@ -13,11 +13,19 @@ date: October 21 2015
 another_date: November 2019
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if date | is_past }}
 {{ if another_date | is_past }}
 ```
-
+::tab blade
+```blade
+@if (Statamic::modify($date)->isPast()->fetch()) ... @endif
+@if (Statamic::modify($another_date)->isPast()->fetch()) ... @endif
+```
+::
 ```html
 true
 false
diff --git a/content/collections/modifiers/is_today.md b/content/collections/modifiers/is_today.md
index e734d4d95..774b4b10c 100644
--- a/content/collections/modifiers/is_today.md
+++ b/content/collections/modifiers/is_today.md
@@ -12,9 +12,17 @@ Returns `true` if a given date is today, using the server's time.
 date: January 1, 2000
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if date | is_today }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($date)->isToday()->fetch()) ... @endif
+```
+::
 
 ```html
 false
diff --git a/content/collections/modifiers/is_tomorrow.md b/content/collections/modifiers/is_tomorrow.md
index 0b5ec0187..bd9ba95ca 100644
--- a/content/collections/modifiers/is_tomorrow.md
+++ b/content/collections/modifiers/is_tomorrow.md
@@ -12,9 +12,17 @@ Returns `true` if a given date is tomorrow, using the server's time.
 date: January 1, 2000
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if date | is_tomorrow }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($date)->isTomorrow()->fetch()) ... @endif
+```
+::
 
 ```html
 false
diff --git a/content/collections/modifiers/is_uppercase.md b/content/collections/modifiers/is_uppercase.md
index 7ae88b7f2..ad386b8fe 100644
--- a/content/collections/modifiers/is_uppercase.md
+++ b/content/collections/modifiers/is_uppercase.md
@@ -13,10 +13,19 @@ declaration: NOISES
 cite: anonymous
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if declaration | is_uppercase }}
 {{ if cite | is_uppercase }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($declaration)->isUppercase()->fetch()) ... @endif
+@if (Statamic::modify($cite)->isUppercase()->fetch()) ... @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_url.md b/content/collections/modifiers/is_url.md
index 490651368..338648668 100644
--- a/content/collections/modifiers/is_url.md
+++ b/content/collections/modifiers/is_url.md
@@ -13,10 +13,19 @@ a_url: http://google.com/
 not_a_url: waffles
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if a_url | is_url }}
 {{ if not_a_url | is_url }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($a_url)->isUrl()->fetch()) ... @endif
+@if (Statamic::modify($not_a_url)->isUrl()->fetch()) ... @endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/is_weekday.md b/content/collections/modifiers/is_weekday.md
index 653adb5bc..80a34ba0c 100644
--- a/content/collections/modifiers/is_weekday.md
+++ b/content/collections/modifiers/is_weekday.md
@@ -12,9 +12,17 @@ Returns `true` if date is a weekday.
 date: December 25 2015
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if date | is_weekday }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($date)->isWeekday()->fetch()) ... @endif
+```
+::
 
 
 ```html
diff --git a/content/collections/modifiers/is_weekend.md b/content/collections/modifiers/is_weekend.md
index ac771dd0e..a2355f13c 100644
--- a/content/collections/modifiers/is_weekend.md
+++ b/content/collections/modifiers/is_weekend.md
@@ -12,9 +12,17 @@ Returns `true` if date is on the weekend.
 date: December 25 2015
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if date | is_weekend }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($date)->isWeekend()->fetch()) ... @endif
+```
+::
 
 
 ```html
diff --git a/content/collections/modifiers/is_yesterday.md b/content/collections/modifiers/is_yesterday.md
index cc4892b81..17b8fad77 100644
--- a/content/collections/modifiers/is_yesterday.md
+++ b/content/collections/modifiers/is_yesterday.md
@@ -12,9 +12,17 @@ Returns `true` if a given date is yesterday, using the server's time.
 date: January 1, 2000
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if date | is_yesterday }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($date)->isYesterday()->fetch()) ... @endif
+```
+::
 
 ```html
 false
diff --git a/content/collections/modifiers/iso_format.md b/content/collections/modifiers/iso_format.md
index b1a73df3e..097c788c1 100644
--- a/content/collections/modifiers/iso_format.md
+++ b/content/collections/modifiers/iso_format.md
@@ -18,19 +18,35 @@ Check out the [complete list of available replacements](https://carbon.nesbot.co
 event_date: June 19 2020
 ```
 
+::tabs
+
+::tab antlers
+```antlers
+{{ event_date | iso_format("MMMM Do YYYY, h:mm:ss a") }}
 ```
-{{ event_date | iso_format("MMMM Do YYYY, h:mm:ss a")}}
+::tab blade
+```blade
+{{ Statamic::modify($event_date)->isoFormat(["MMMM Do YYYY, h:mm:ss a"]) }}
 ```
+::
 
 ```html
 June 15th 2018, 5:34:15 pm
 ```
 
-You can use macro-formats to format and localize dates as well. 
+You can use macro-formats to format and localize dates as well.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ event_date | iso_format('ll') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($event_date)->isoFormat('ll') }}
+```
+::
 
 Will output this on your English site:
 
diff --git a/content/collections/modifiers/join.md b/content/collections/modifiers/join.md
index b42fa0822..2eaf2bae5 100644
--- a/content/collections/modifiers/join.md
+++ b/content/collections/modifiers/join.md
@@ -16,10 +16,19 @@ tasks:
   - clip toenails
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ tasks | join }}
 {{ tasks | join(" + ") }} = ready
 ```
+::tab blade
+```blade
+{{ Statamic::modify($tasks)->join() }}
+{{ Statamic::modify($tasks)->join(' + ') }} = ready
+```
+::
 
 ```html
 take a shower, brush hair, clip toenails
diff --git a/content/collections/modifiers/kebab.md b/content/collections/modifiers/kebab.md
new file mode 100644
index 000000000..cea9e1aca
--- /dev/null
+++ b/content/collections/modifiers/kebab.md
@@ -0,0 +1,29 @@
+---
+id: eef6642f-053a-4720-a373-78b950d949f2
+blueprint: modifiers
+modifier_types:
+  - string
+  - utility
+title: Kebab Case
+---
+Converts a string into `kebab-case`.
+
+```yaml
+string: statamicIsAwesome
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ string | kebab }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($string)->kebab() }}
+```
+::
+
+```html
+statamic-is-awesome
+```
diff --git a/content/collections/modifiers/keys.md b/content/collections/modifiers/keys.md
new file mode 100644
index 000000000..a68a2c390
--- /dev/null
+++ b/content/collections/modifiers/keys.md
@@ -0,0 +1,40 @@
+---
+id: 9197be05-5e2d-400f-a0f0-c52a4d460e60
+blueprint: modifiers
+title: Keys
+modifier_types:
+  - array
+  - utility
+---
+Retrieves just the keys from the given array.
+
+```yaml
+the_team:
+    jack: Jack McDade
+    jason: Jason Varga
+    jesse: Jesse Leite
+    joshua: Joshua Blum
+    duncan: Duncan McClean
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ the_team | keys }}
+```
+::tab blade
+```blade
+<?php
+  $keys = Statamic::modify($the_team)->keys()->fetch();
+?>
+```
+::
+
+```yaml
+- jack
+- jason
+- jesse
+- joshua
+- duncan
+```
diff --git a/content/collections/modifiers/last.md b/content/collections/modifiers/last.md
index e479f006f..664032000 100644
--- a/content/collections/modifiers/last.md
+++ b/content/collections/modifiers/last.md
@@ -18,10 +18,19 @@ array:
   - Tails
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | last(7) }}
 {{ array | last }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->last(7) }}
+{{ Statamic::modify($array)->last() }}
+```
+::
 
 ```html
 Nuggets
diff --git a/content/collections/modifiers/lcfirst.md b/content/collections/modifiers/lcfirst.md
index f0509e2c6..7e6812e76 100644
--- a/content/collections/modifiers/lcfirst.md
+++ b/content/collections/modifiers/lcfirst.md
@@ -12,9 +12,17 @@ Converts the first character of the supplied string to lower case.
 title: Wow
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | lcfirst }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->lcfirst() }}
+```
+::
 
 ```html
 wow
diff --git a/content/collections/modifiers/length.md b/content/collections/modifiers/length.md
index a04498d0d..f5dd8e86e 100644
--- a/content/collections/modifiers/length.md
+++ b/content/collections/modifiers/length.md
@@ -17,10 +17,19 @@ array:
 string: LEEEEROOOYYYY JEEENKINNNSS!
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ array | length }}
 {{ string | length }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($array)->length() }}
+{{ Statamic::modify($string)->length() }}
+```
+::
 
 ```html
 3
diff --git a/content/collections/modifiers/limit.md b/content/collections/modifiers/limit.md
index a3525b297..e490dd239 100644
--- a/content/collections/modifiers/limit.md
+++ b/content/collections/modifiers/limit.md
@@ -18,9 +18,17 @@ playlist:
 
 Use with the pipe syntax to continue chaining in a single tag like so:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ playlist | limit(2) | join }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($playlist)->limit(2)->join() }}
+```
+::
 
 ```html
 Emancipator, Gong Gong
@@ -28,11 +36,25 @@ Emancipator, Gong Gong
 
 Or using the parameter syntax:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ playlist | limit(2) }}
     <li>{{ value }}</li>
 {{ /playlist }}
 ```
+::tab blade
+```blade
+<?php
+  $limitedPlaylist = Statamic::modify($playlist)->limit(2);
+?>
+
+@foreach ($limitedPlaylist as $item)
+  <li>{{ $item }}</li>
+@endforeach
+```
+::
 
 ```html
 <li>Emancipator</li>
diff --git a/content/collections/modifiers/link.md b/content/collections/modifiers/link.md
index 39643c246..8d8dd7d8a 100644
--- a/content/collections/modifiers/link.md
+++ b/content/collections/modifiers/link.md
@@ -12,9 +12,17 @@ Generate an HTML link element with the value as `href`.
 neat_site: http://example.com
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ neat_site | link }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($neat_site)->link() }}
+```
+::
 
 ```html
 <a href="http://example.com">http://example.com</a>
diff --git a/content/collections/modifiers/list.md b/content/collections/modifiers/list.md
index 29fbbee29..567d2d3f4 100644
--- a/content/collections/modifiers/list.md
+++ b/content/collections/modifiers/list.md
@@ -20,9 +20,17 @@ things:
   - scrunchies
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ things | list }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($things)->list() }}
+```
+::
 
 ```html
 batman, zombies, scrunchies
diff --git a/content/collections/modifiers/lower.md b/content/collections/modifiers/lower.md
index 09b35f682..2cde65efb 100644
--- a/content/collections/modifiers/lower.md
+++ b/content/collections/modifiers/lower.md
@@ -12,9 +12,17 @@ Converts all characters in the string to lowercase.
 yelling: I DON'T KNOW WHAT WE'RE YELLING ABOUT
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ yelling | lower }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($yelling)->lower() }}
+```
+::
 
 ```html
 i don't know what we're yelling about
diff --git a/content/collections/modifiers/macro.md b/content/collections/modifiers/macro.md
index de772d0a5..968ae8c25 100644
--- a/content/collections/modifiers/macro.md
+++ b/content/collections/modifiers/macro.md
@@ -22,9 +22,17 @@ headline:
 title: Actually i don't know what we're talking about.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | macro('headline') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($title)->macro('headline') }}
+```
+::
 
 ```html
 Actually I Don't Know What We're Talking&nbsp;About
@@ -42,6 +50,13 @@ excerpt:
 
 This is equivalent to:
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ content | safe_truncate(175, '...') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($content)->safeTruncate([175, '...']) }}
+```
+::
diff --git a/content/collections/modifiers/mailto.md b/content/collections/modifiers/mailto.md
index 8d3b0c033..95d63a796 100644
--- a/content/collections/modifiers/mailto.md
+++ b/content/collections/modifiers/mailto.md
@@ -12,9 +12,17 @@ Generate a `mailto` link element with the value as the email address. If it's _n
 holler: holler@example.com
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ holler | mailto }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($holler)->mailto() }}
+```
+::
 
 ```html
 <a href="mailto:holler@example.com">holler@example.com</a>
diff --git a/content/collections/modifiers/mark.md b/content/collections/modifiers/mark.md
index db38ddf70..fa63718a8 100644
--- a/content/collections/modifiers/mark.md
+++ b/content/collections/modifiers/mark.md
@@ -12,10 +12,19 @@ Wrap any matched words in `<mark>` tags to highlight them on the page.
 description: This cat video is the okayest thing ever.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ description | mark('cat thing') }}
 {{ description | mark('video', 'class:highlight') }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($description)->mark('cat thing') !!}
+{!! Statamic::modify($description)->mark(['video', 'class:highlight']) !!}
+```
+::
 
 ```html
 This <mark>cat</mark> video is the okayest <mark>thing</mark> ever.
diff --git a/content/collections/modifiers/markdown.md b/content/collections/modifiers/markdown.md
index a793160d7..0030fd651 100644
--- a/content/collections/modifiers/markdown.md
+++ b/content/collections/modifiers/markdown.md
@@ -13,9 +13,17 @@ quote: You can't wait for inspiration. **You have to go after it with a club.**
 
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ quote | markdown }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($quote)->markdown() !!}
+```
+::
 
 ```html
 <p>
diff --git a/content/collections/modifiers/md5.md b/content/collections/modifiers/md5.md
index bab9bf11f..73785b8aa 100644
--- a/content/collections/modifiers/md5.md
+++ b/content/collections/modifiers/md5.md
@@ -7,9 +7,21 @@ title: Md5
 ---
 Creates an md5 hash of a variable.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ "hello" | md5 }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify('hello')->md5() }}
+
+-- or --
+
+{{ md5('hello') }}
+```
+::
 
 ```html
 5d41402abc4b2a76b9719d911017c592
diff --git a/content/collections/modifiers/merge.md b/content/collections/modifiers/merge.md
index 75bf0ce38..8df95159f 100644
--- a/content/collections/modifiers/merge.md
+++ b/content/collections/modifiers/merge.md
@@ -18,12 +18,32 @@ bad_ideas:
 ```
 
 In this template example we'll merge the two arrays and then pull out a single random item from the combined list. For fun!
-```
+
+::tabs
+
+::tab antlers
+```antlers
 <h2>Picking a random idea!</h2>
 {{ good_ideas | merge($bad_ideas) | sort("random") | limit(1) }}
 <p>{{ value }}</p>
 {{ /good_ideas }}
 ```
+::tab blade
+```blade
+<?php
+  $merged = Statamic::modify($good_ideas)
+    ->merge($bad_ideas)
+    ->sort('random')
+    ->limit(1)
+    ->fetch();
+?>
+
+<h2>Picking a random idea!</h2>
+@foreach ($merged as $item)
+  <p>{{ $item }}</p>
+@endforeach
+```
+::
 
 ```
 <p>Use Oxford Commas</p>
diff --git a/content/collections/modifiers/minutes_ago.md b/content/collections/modifiers/minutes_ago.md
index 724fc93c2..afd1fe1c3 100644
--- a/content/collections/modifiers/minutes_ago.md
+++ b/content/collections/modifiers/minutes_ago.md
@@ -19,9 +19,17 @@ Returns the number of minutes since a given date variable. Statamic will attempt
 date: October 1 2015 8:30:am
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date | minutes_ago }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($date)->minutesAgo() }}
+```
+::
 
 ```html
 {{ test_date | minutes_ago }}
diff --git a/content/collections/modifiers/mod.md b/content/collections/modifiers/mod.md
index fc9c2665b..d5b373903 100644
--- a/content/collections/modifiers/mod.md
+++ b/content/collections/modifiers/mod.md
@@ -12,12 +12,21 @@ bottles: 3
 glasses: 14
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glasses | mod(14) }}
 {{ glasses | mod($bottles) }}
 {{ glasses | %($bottles) }}
 
 ```
+::tab blade
+```blade
+{{ Statamic::modify($glasses)->mod(14) }}
+{{ Statamic::modify($glasses)->mod($bottles) }}
+```
+::
 
 ```html
 0
diff --git a/content/collections/modifiers/modify_date.md b/content/collections/modifiers/modify_date.md
index 0d2711458..eb12efe93 100644
--- a/content/collections/modifiers/modify_date.md
+++ b/content/collections/modifiers/modify_date.md
@@ -12,11 +12,21 @@ Alters a timestamp by incrementing or decrementing in a format accepted by PHP's
 date: January 1, 2000
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date | modify_date("-1 day") }}
 {{ date | modify_date("next Sunday") }}
 {{ date | modify_date("+3 months") }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($date)->modifyDate('-1 day') }}
+{{ Statamic::modify($date)->modifyDate('next Sunday') }}
+{{ Statamic::modify($date)->modifyDate('+3 months') }}
+```
+::
 
 ```html
 December 31, 1999
@@ -25,5 +35,5 @@ April 1, 2000
 ```
 
 :::tip
-This modifier **modifies the variable directly** which will be passed onto any additional modifiers.
+As of Statamic 5, this modifier will return a copy of the Date. Earlier versions would **modify the variable directly** which will be passed onto any additional modifiers.
 :::
diff --git a/content/collections/modifiers/months_ago.md b/content/collections/modifiers/months_ago.md
index 6c9f9f33d..3e5dcd3c2 100644
--- a/content/collections/modifiers/months_ago.md
+++ b/content/collections/modifiers/months_ago.md
@@ -18,9 +18,17 @@ Returns the number of months since a given date variable. Statamic will attempt
 date: October 1 2017
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date | months_ago }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($date)->monthsAgo() }}
+```
+::
 
 ```html
 {{ test_date | months_ago }}
diff --git a/content/collections/modifiers/multiply.md b/content/collections/modifiers/multiply.md
index 0f9724110..09301343f 100644
--- a/content/collections/modifiers/multiply.md
+++ b/content/collections/modifiers/multiply.md
@@ -12,12 +12,21 @@ smiles: 3
 winks: 4
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ smiles | multiply(10) }}
 {{ smiles | multiply($winks) }}
 {{ smiles | *($winks) }}
 
 ```
+::tab blade
+```blade
+{{ Statamic::modify($smiles)->multiply(10) }}
+{{ Statamic::modify($smiles)->multiply($winks) }}
+```
+::
 
 ```html
 30
diff --git a/content/collections/modifiers/nl2br.md b/content/collections/modifiers/nl2br.md
index 4c2c835d0..cb5499400 100644
--- a/content/collections/modifiers/nl2br.md
+++ b/content/collections/modifiers/nl2br.md
@@ -15,9 +15,17 @@ summary: |
   on multiple lines
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ summary | nl2br }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($summary)->nl2br() !!}
+```
+::
 
 ```html
 This is a summary
diff --git a/content/collections/modifiers/obfuscate.md b/content/collections/modifiers/obfuscate.md
index 6656ef57c..d595e928c 100644
--- a/content/collections/modifiers/obfuscate.md
+++ b/content/collections/modifiers/obfuscate.md
@@ -13,9 +13,17 @@ Obfuscates a string with special characters making it hard for spam bots to snif
 magic_word: Abracadabra
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ magic_word | obfuscate }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($magic_word)->obfuscate() }}
+```
+::
 
 ```html
 # visibly appears as Abracadabra
diff --git a/content/collections/modifiers/obfuscate_email.md b/content/collections/modifiers/obfuscate_email.md
index fa9b7759c..f456da3b6 100644
--- a/content/collections/modifiers/obfuscate_email.md
+++ b/content/collections/modifiers/obfuscate_email.md
@@ -12,9 +12,15 @@ Obfuscates an email address with special characters making it hard for spam bots
 holler: holler@example.com
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ holler | obfuscate_email }}
 ```
+::tab blade
+{{ Statamic::modify($holler)->obfuscateEmail() }}
+::
 
 ```html
 # output appears as holler@example.com
diff --git a/content/collections/modifiers/offset.md b/content/collections/modifiers/offset.md
index e1c2b41df..d72b54b31 100644
--- a/content/collections/modifiers/offset.md
+++ b/content/collections/modifiers/offset.md
@@ -18,9 +18,17 @@ playlist:
 
 Use with the pipe syntax to continue chaining in a single tag like so:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ playlist | offset(1) | join }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($playlist)->offset(1)->join() }}
+```
+::
 
 ```html
 Gong Gong, Possom Posse, Justin Bieber
@@ -28,12 +36,24 @@ Gong Gong, Possom Posse, Justin Bieber
 
 Or using the parameter syntax:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ playlist | offset(1) }}
     <li>{{ value }}</li>
 {{ /playlist }}
 ```
 
+::tab blade
+
+```blade
+@foreach (Statamic::modify($playlist)->offset(1)->fetch() as $value)
+    <li>{{ $valuie }}</li>
+@endforeach
+```
+::
+
 ```html
 <li>Gong Gong</li>
 <li>Possom Posse</li>
diff --git a/content/collections/modifiers/ol.md b/content/collections/modifiers/ol.md
index 033cce47e..a491fd4f0 100644
--- a/content/collections/modifiers/ol.md
+++ b/content/collections/modifiers/ol.md
@@ -15,9 +15,17 @@ food:
   - kale
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ food | ol }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($food)->ol() !!}
+```
+::
 
 ```html
 <ol>
diff --git a/content/collections/modifiers/option_list.md b/content/collections/modifiers/option_list.md
index 40a0415a5..abfabbd1b 100644
--- a/content/collections/modifiers/option_list.md
+++ b/content/collections/modifiers/option_list.md
@@ -20,8 +20,21 @@ collections:
   - wigs
 ```
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ collection from="{collections|option_list}" }}
 ```
+::tab blade
+```blade
+<statamic:collection
+  :from="Statamic::modify($collections)->optionList()->fetch()"
+>
+
+</statamic:collection>
+```
+::
 
 Can also be used by its alias, [`piped`](/modifiers/piped).
diff --git a/content/collections/modifiers/output.md b/content/collections/modifiers/output.md
index 634a00b21..0d52f596c 100644
--- a/content/collections/modifiers/output.md
+++ b/content/collections/modifiers/output.md
@@ -12,9 +12,17 @@ Given the URL to an Asset file, returns the string output of an Asset file's con
 icon: /img/icons/heart.svg
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ icon | output }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($icon)->output() !!}
+```
+::
 
 ```html
 <svg width="52px" height="50px" viewBox="0 0 52 50" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
diff --git a/content/collections/modifiers/pad.md b/content/collections/modifiers/pad.md
index 44bebcd40..2d10591ba 100644
--- a/content/collections/modifiers/pad.md
+++ b/content/collections/modifiers/pad.md
@@ -13,11 +13,27 @@ epic_meal_time:
   - bacon strips
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ epic_meal_time | pad(4, "bacon strips") }}
     {{ value }}
 {{ /epic_meal_time }}
 ```
+::tab blade
+```blade
+<?php
+  $meals = Statamic::modify($epic_meal_time)
+    ->pad(4, 'bacon strips')
+    ->fetch();
+?>
+
+@foreach ($meals as $meal)
+  {{ $meal }}
+@endforeach
+```
+::
 
 ```html
 jack daniels
diff --git a/content/collections/modifiers/parse_url.md b/content/collections/modifiers/parse_url.md
index 0a57b8ffc..e2cf8e26c 100644
--- a/content/collections/modifiers/parse_url.md
+++ b/content/collections/modifiers/parse_url.md
@@ -12,10 +12,19 @@ Get information about a URL.
 url: 'http://example.com/path?query=1'
 ```
 
+::tabs
+
+::tab antlers
 ``` antlers
 {{ url | parse_url }}
 {{ url | parse_url('host') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($url)->parseUrl() }}
+{{ Statamic::modify($url)->parseUrl('host') }}
+```
+::
 
 ```php
 [
diff --git a/content/collections/modifiers/pathinfo.md b/content/collections/modifiers/pathinfo.md
index ccfe6221f..5209b7dd2 100644
--- a/content/collections/modifiers/pathinfo.md
+++ b/content/collections/modifiers/pathinfo.md
@@ -12,10 +12,19 @@ Get information about a file path.
 path: '/local/file/example.pdf'
 ```
 
+::tabs
+
+::tab antlers
 ``` antlers
 {{ path | pathinfo }}
 {{ path | pathinfo('extension') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($path)->pathinfo() }}
+{{ Statamic::modify($path)->pathinfo('extension') }}
+```
+::
 
 ```php
 [
diff --git a/content/collections/modifiers/pluck.md b/content/collections/modifiers/pluck.md
index 380d192ab..048917ef6 100644
--- a/content/collections/modifiers/pluck.md
+++ b/content/collections/modifiers/pluck.md
@@ -21,9 +21,22 @@ games:
     title: Chutes and Ladders
 ```
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ games | pluck('title') }}
 ```
+::tab blade
+```blade
+<?php
+  $plucked = Statamic::modify($games)
+    ->pluck('title')
+    ->fetch();
+?>
+```
+::
 
 ```yaml
 games:
diff --git a/content/collections/modifiers/plural.md b/content/collections/modifiers/plural.md
index b09e8678e..cca5d07c1 100644
--- a/content/collections/modifiers/plural.md
+++ b/content/collections/modifiers/plural.md
@@ -18,12 +18,22 @@ shopping_list:
     quantity: 500
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 Please pick up the following items:
 {{ shopping_list }}
   - {{ quantity }} {{ item | plural($quantity) }}.
 {{ /shopping_list }}
 ```
+::tab blade
+```blade
+@foreach ($shopping_list as $item)
+  - {{ $item['quantity'] }} {{ Statamic::modify($item)->plural($item['quantity']) }}
+@endforeach
+```
+::
 
 ```html
 Please pick up the following items:
diff --git a/content/collections/modifiers/random.md b/content/collections/modifiers/random.md
new file mode 100644
index 000000000..26f687cc2
--- /dev/null
+++ b/content/collections/modifiers/random.md
@@ -0,0 +1,43 @@
+---
+id: 48178377-da99-4754-ae9e-d294720cff33
+blueprint: modifiers
+modifier_types:
+  - array
+  - utility
+title: Random
+related_entries:
+  - 63acdaa6-9724-4179-b210-ea5d507672e9
+---
+## Overview
+Picks a _single_ random item from an array or collection.
+
+If you are trying to get _multiple_ random items, consider the [shuffle modifier](/modifiers/shuffle).
+
+## Example
+
+### The YAML
+```yaml
+arr:
+  - Soda
+  - Pop
+  - Coke
+```
+
+### The Template
+
+::tabs
+
+::tab antlers
+```antlers
+{{ arr | random }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($arr)->random() }}
+```
+::
+
+### The Output
+```
+Soda (maybe)
+```
diff --git a/content/collections/modifiers/raw.md b/content/collections/modifiers/raw.md
index a37e15559..89124dbac 100644
--- a/content/collections/modifiers/raw.md
+++ b/content/collections/modifiers/raw.md
@@ -25,9 +25,18 @@ markdown_field: >
 ```
 
 ### The Template
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ markdown_field | raw }}
 ```
+::tab blade
+```blade
+{{ $markdown_field->raw() }}
+```
+::
 
 ### The Output
 ```
diff --git a/content/collections/modifiers/rawurlencode.md b/content/collections/modifiers/rawurlencode.md
index 019397ea4..c7a520700 100644
--- a/content/collections/modifiers/rawurlencode.md
+++ b/content/collections/modifiers/rawurlencode.md
@@ -11,12 +11,20 @@ URL-encode a variable according to [RFC 3986][rfc-3986].
 example: please and thank you/Mommy
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 http://example.com/{{ example | rawurlencode }}
 ```
+::tab blade
+```blade
+https://example.com/{{ Statamic::modify($example)->rawurlencode() }}
+```
+::
 
 ```html
-http://example.com/please%20and%thank&20you%2FMommy
+http://example.com/please%20and%20thank%20you/Mommy
 ```
 
 [rfc-3986]: http://php.net/manual/en/function.rawurlencode.php
diff --git a/content/collections/modifiers/ray.md b/content/collections/modifiers/ray.md
index ff6c61d7c..3d3979eec 100644
--- a/content/collections/modifiers/ray.md
+++ b/content/collections/modifiers/ray.md
@@ -8,8 +8,25 @@ related_entries:
     - 12de1a6c-e8be-4703-81a3-fc270311bc84
     - 985dc29c-fe71-464e-bb83-4f3f2aa455c0
 ---
-Send variable to Spatie's [Ray](https://github.com/spatie/laravel-ray). Note, you need to have the Laravel Ray package installed.
+Send a variable to Spatie's [Ray](https://myray.app) app.
 
+You can pass a string with a color name as parameter to get it colored in Ray. Note that you need to have the [spatie/laravel-ray](https://github.com/spatie/laravel-ray) package installed.
+
+::tabs
+
+::tab antlers
 ```antlers
 {{ your_field | ray }}
+{{ your_field | ray('red'} }
+```
+::tab blade
+```blade
+@php(Statamic::modify($your_field)->ray())
+@php(Statamic::modify($your_field)->ray('red'))
+
+-- or --
+
+@php(ray($your_field))
+@php(ray($your_field)->red())
 ```
+::
diff --git a/content/collections/modifiers/read_time.md b/content/collections/modifiers/read_time.md
index c8a61dfef..8cb000c15 100644
--- a/content/collections/modifiers/read_time.md
+++ b/content/collections/modifiers/read_time.md
@@ -15,10 +15,19 @@ title: A long post
 Pretend there are lots of words here...
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <h1>{{ title }}</h1>
 <p>{{ content | read_time(180) }} min</p>
 ```
+::tab blade
+```blade
+<h1>{{ $title }}</h1>
+<p>{{ Statamic::modify($content)->readTime(180) }} min</p>
+```
+::
 
 ```html
 <h1>A long post</h1>
diff --git a/content/collections/modifiers/regex_mark.md b/content/collections/modifiers/regex_mark.md
index b52582e83..6f43df8b7 100644
--- a/content/collections/modifiers/regex_mark.md
+++ b/content/collections/modifiers/regex_mark.md
@@ -12,10 +12,19 @@ Wrap any regex matches in `<mark>` tags to highlight them on the page.
 description: This cat video is the okayest thing ever.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ description | regex_mark('cat video|thing') }}
 {{ description | regex_mark('video', 'class:highlight') }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($description)->regexMark('cat video|thing') !!}
+{!! Statamic::modify($description)->regexMark(['video', 'class:highlight']) !!}
+```
+::
 
 ```html
 This <mark>cat video</mark> is the okayest <mark>thing</mark> ever.
diff --git a/content/collections/modifiers/regex_replace.md b/content/collections/modifiers/regex_replace.md
index d03ef1a18..f9f9e5a75 100644
--- a/content/collections/modifiers/regex_replace.md
+++ b/content/collections/modifiers/regex_replace.md
@@ -12,9 +12,17 @@ Run a find and replace regex on a string of content.
 description: This cat video is the best thing ever.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ description | regex_replace('best', 'okayest') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($description)->regexReplace(['best', 'okayest']) }}
+```
+::
 
 ```html
 This cat video is the okayest thing ever.
diff --git a/content/collections/modifiers/relative.md b/content/collections/modifiers/relative.md
index c6b6a318c..a54eda0e1 100644
--- a/content/collections/modifiers/relative.md
+++ b/content/collections/modifiers/relative.md
@@ -16,12 +16,23 @@ past_date: October 1 2020
 future_date: October 1 2024
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ past_date | relative }}
 {{ past_date | relative(true) }}
 {{ future_date | relative }}
 {{ future_date | relative(true) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($past_date)->relative() }}
+{{ Statamic::modify($past_date)->relative(true) }}
+{{ Statamic::modify($future_date)->relative() }}
+{{ Statamic::modify($future_date)->relative(true) }}
+```
+::
 
 ```html
 2 years ago
diff --git a/content/collections/modifiers/remove_left.md b/content/collections/modifiers/remove_left.md
index 4e98c1aa9..ec566d073 100644
--- a/content/collections/modifiers/remove_left.md
+++ b/content/collections/modifiers/remove_left.md
@@ -12,9 +12,17 @@ Ensures that the string never begins with a specified string.
 twitter: @statamic
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <a href="http://twitter.com/{{ twitter | remove_left('@') }}">Twitter</a>
 ```
+::tab blade
+```blade
+<a href="http://twitter.com/{{ Statamic::modify($twitter)->removeLeft('@') }}">Twitter</a>
+```
+::
 
 ```html
 <a href="http://twitter.com/statamic">Twitter</a>
diff --git a/content/collections/modifiers/remove_right.md b/content/collections/modifiers/remove_right.md
index 56b8cc1ee..eb29087b3 100644
--- a/content/collections/modifiers/remove_right.md
+++ b/content/collections/modifiers/remove_right.md
@@ -14,11 +14,21 @@ urls:
   - http://laravel.com/
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ urls }}
   {{ value | remove_right('/') }}
 {{ /urls}}
 ```
+::tab blade
+```blade
+@foreach ($urls as $url)
+  {{ Statamic::modify($url)->removeRight('/') }}
+@endforeach
+```
+::
 
 ```html
 http://statamic.com
diff --git a/content/collections/modifiers/repeat.md b/content/collections/modifiers/repeat.md
index 3be9ba266..fd3b3845d 100644
--- a/content/collections/modifiers/repeat.md
+++ b/content/collections/modifiers/repeat.md
@@ -11,9 +11,17 @@ Repeats a value any given number of times. For fun.
 lyric: can't touch this
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ lyric | repeat(3) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($lyric)->repeat(3) }}
+```
+::
 
 ```html
 can't touch this can't touch this can't touch this
diff --git a/content/collections/modifiers/replace.md b/content/collections/modifiers/replace.md
index 18e6dbe19..597c392ca 100644
--- a/content/collections/modifiers/replace.md
+++ b/content/collections/modifiers/replace.md
@@ -12,9 +12,15 @@ Find and replace all occurrences of a string with a totally different string.
 description: This cat video is the okayest thing ever.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ description | replace('cat', 'dog') }}
 ```
+::tab blade
+{{ Statamic::modify($description)->replace(['cat', 'dog']) }}
+::
 
 ```html
 This dog video is the okayest thing ever.
diff --git a/content/collections/modifiers/reverse.md b/content/collections/modifiers/reverse.md
index 17cb0a8ed..5e7a8b199 100644
--- a/content/collections/modifiers/reverse.md
+++ b/content/collections/modifiers/reverse.md
@@ -18,10 +18,19 @@ order_of_ceremony:
   - party
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ status | reverse }}
 {{ order_of_ceremony | reverse | list }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($status)->reverse() }}
+{{ Statamic::modify($status)->reverse()->list() }}
+```
+::
 
 ```html
 diaper
diff --git a/content/collections/modifiers/round.md b/content/collections/modifiers/round.md
index a7b3462ed..29ee60f4e 100644
--- a/content/collections/modifiers/round.md
+++ b/content/collections/modifiers/round.md
@@ -12,10 +12,19 @@ Rounds a number to a specified precision (number of digits after the decimal poi
 pi: 3.14159265359
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ pi | round }}
 {{ pi | round(2) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($pi)->round() }}
+{{ Statamic::modify($pi)->round(2) }}
+```
+::
 
 ```html
 3
diff --git a/content/collections/modifiers/safe_truncate.md b/content/collections/modifiers/safe_truncate.md
index 39f7e396d..6052e7128 100644
--- a/content/collections/modifiers/safe_truncate.md
+++ b/content/collections/modifiers/safe_truncate.md
@@ -14,9 +14,17 @@ advice: >
   Live every week like it’s Shark Week.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ advice | safe_truncate(90, '...') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($advice)->safeTruncate([90, '...']) }}
+```
+::
 
 ```html
 So, here’s some advice I wish I woulda got when I was your age:
diff --git a/content/collections/modifiers/sanitize.md b/content/collections/modifiers/sanitize.md
index 132721b59..386940f8e 100644
--- a/content/collections/modifiers/sanitize.md
+++ b/content/collections/modifiers/sanitize.md
@@ -12,9 +12,17 @@ Convert special characters to HTML entities with [htmlspecialchars][htmlspecialc
 example: <b>NEAT</b>
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ example | sanitize }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($example)->sanitize() !!}
+```
+::
 
 ```html
 &lt;b&gt;NEAT&lt;b&gt;
@@ -24,8 +32,16 @@ example: <b>NEAT</b>
 
 You can double encode HTML entities by passing `true` as an argument. This is useful for preserving JSON formatting.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ example | sanitize(true) }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($example)->sanitize(true) !!}
+```
+::
 
 [htmlspecialchars]: http://php.net/manual/en/function.htmlspecialchars.php
diff --git a/content/collections/modifiers/seconds_ago.md b/content/collections/modifiers/seconds_ago.md
index 6df1e94da..727c7344b 100644
--- a/content/collections/modifiers/seconds_ago.md
+++ b/content/collections/modifiers/seconds_ago.md
@@ -18,9 +18,17 @@ Returns the number of seconds since a given date variable. Statamic will attempt
 date: October 1 2015 8:30:am
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date | seconds_ago }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($date)->secondsAgo() }}
+```
+::
 
 ```html
 {{ test_date | seconds_ago }}
diff --git a/content/collections/modifiers/segment.md b/content/collections/modifiers/segment.md
index c7982ef81..8923510cd 100644
--- a/content/collections/modifiers/segment.md
+++ b/content/collections/modifiers/segment.md
@@ -12,9 +12,17 @@ Returns a segment by number from any valid URL or URI.
 example: /this/is/pretty/neat
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ example | segment(4) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($example)->segment(4) }}
+```
+::
 
 ```html
 neat
diff --git a/content/collections/modifiers/select.md b/content/collections/modifiers/select.md
new file mode 100644
index 000000000..16401386a
--- /dev/null
+++ b/content/collections/modifiers/select.md
@@ -0,0 +1,49 @@
+---
+id: 864d101a-c0a2-42d8-a644-80440316de8b
+blueprint: modifiers
+title: Select
+modifier_types:
+  - array
+  - utility
+---
+Retrieves the selected values of a given array.
+
+```yaml
+games:
+  -
+    feeling: love
+    title: Dominion
+    publisher: Rio Grande Games
+  -
+    feeling: love
+    title: Netrunner
+    publisher: Wizards of the Coast
+  -
+    feeling: hate
+    title: Chutes and Ladders
+    publisher: Unknown
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ games | select('title', 'publisher') }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($games)->select(['title', 'published'])->fetch() }}
+```
+::
+
+```yaml
+-
+    title: Dominion
+    publisher: Rio Grande Games
+-
+    title: Netrunner
+    publisher: Wizards of the Coast
+-
+    title: Chutes and Ladders
+    publisher: Unknown
+```
diff --git a/content/collections/modifiers/sentence_list.md b/content/collections/modifiers/sentence_list.md
index 673a33037..a5c3e7e53 100644
--- a/content/collections/modifiers/sentence_list.md
+++ b/content/collections/modifiers/sentence_list.md
@@ -20,9 +20,17 @@ things:
   - scrunchies
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 I like {{ things | sentence_list }}.
 ```
+::tab blade
+```blade
+I like {{ Statamic::modify($things)->sentenceList() }}.
+```
+::
 
 ```html
 I like batman, zombies, and scrunchies.
@@ -30,9 +38,17 @@ I like batman, zombies, and scrunchies.
 
 By default, the "glue" is the word "and", and will be translated appropriately. But, you can change it with the first argument:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 I like {{ things | sentence_list('&') }}.
 ```
+::tab blade
+```blade
+I like {{ Statamic::modify($things)->sentenceList('&') }}.
+```
+::
 
 ```html
 I like batman, zombies, & scrunchies.
@@ -40,9 +56,17 @@ I like batman, zombies, & scrunchies.
 
 The second argument controls the oxford comma. Set that to 0 and it'll get removed:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 I like {{ things | sentence_list('and', 0) }}.
 ```
+::tab blade
+```blade
+I like {{ Statamic::modify($things)->sentenceList(['and', 0]) }}.
+```
+::
 
 ```html
 I like batman, zombies and scrunchies.
diff --git a/content/collections/modifiers/shuffle.md b/content/collections/modifiers/shuffle.md
index 5a54eede6..b5aad0f75 100644
--- a/content/collections/modifiers/shuffle.md
+++ b/content/collections/modifiers/shuffle.md
@@ -6,6 +6,8 @@ modifier_types:
   - markup
   - string
 title: Shuffle
+related_entries:
+  - 48178377-da99-4754-ae9e-d294720cff33
 ---
 Shuffles a string or an array to make it all random.
 
@@ -17,10 +19,19 @@ array:
   - Tails
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | shuffle }}
 {{ array | shuffle }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->shuffle() }}
+{{ Statamic::modify($array)->shuffle()->fetch() }}
+```
+::
 
 ```yaml
 string: a nhglRsws.oMtiotr hprriao eeo.b ti
diff --git a/content/collections/modifiers/singular.md b/content/collections/modifiers/singular.md
index 3865620a5..3e2cd6c64 100644
--- a/content/collections/modifiers/singular.md
+++ b/content/collections/modifiers/singular.md
@@ -11,9 +11,17 @@ Get the singular form of an English word.
 word: nickles
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ word | singular }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($word)->singular() }}
+```
+::
 
 ```html
 nickle
diff --git a/content/collections/modifiers/slugify.md b/content/collections/modifiers/slugify.md
index 6b6a2f9dd..97dea2a7a 100644
--- a/content/collections/modifiers/slugify.md
+++ b/content/collections/modifiers/slugify.md
@@ -14,9 +14,17 @@ and non-alphanumeric characters, and replacing whitespace with dashes. And then
 string: Please, have some lemoñade.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | slugify }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->slugify() }}
+```
+::
 
 ```html
 please-have-some-lemonade
diff --git a/content/collections/modifiers/smartypants.md b/content/collections/modifiers/smartypants.md
index ef780cf22..be202e7bd 100644
--- a/content/collections/modifiers/smartypants.md
+++ b/content/collections/modifiers/smartypants.md
@@ -18,9 +18,17 @@ conversation: |
   Kirk -- who was icing his hands after a 20 minute guitar solo.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ conversation | smartypants }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($conversation)->smartypants() }}
+```
+::
 
 ```html
 “What’s your favorite album?” asked Lars. “…And Justice for All” replied
diff --git a/content/collections/modifiers/snake.md b/content/collections/modifiers/snake.md
new file mode 100644
index 000000000..179cd9422
--- /dev/null
+++ b/content/collections/modifiers/snake.md
@@ -0,0 +1,29 @@
+---
+id: bc02aa00-6b1f-42f6-8cc3-737f803c5070
+blueprint: modifiers
+modifier_types:
+  - string
+  - utility
+title: Snake Case
+---
+Converts a string into `snake_case`.
+
+```yaml
+string: statamicIsAwesome
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ string | snake }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($string)->snake() }}
+```
+::
+
+```html
+statamic_is_awesome
+```
diff --git a/content/collections/modifiers/sort.md b/content/collections/modifiers/sort.md
index 5a4c5bcad..22713654f 100644
--- a/content/collections/modifiers/sort.md
+++ b/content/collections/modifiers/sort.md
@@ -27,12 +27,12 @@ complex:
 ```
 {{ primitive | sort | list }}
 
-{{ complex | sort($last_name) }}
-    Hello, {{ first_name }} {{ last_name }} - {{ key }}
+{{ complex | sort('last_name') }}
+    Hello, {{ first_name }} {{ last_name }}
 {{ /complex }}
 
-{{ complex | sort($last_name, 'desc') }}
-    Hello, {{ first_name }} {{ last_name }} - {{ key }}
+{{ complex | sort('last_name', 'desc') }}
+    Hello, {{ first_name }} {{ last_name }}
 {{ /complex }}
 ```
 
diff --git a/content/collections/modifiers/spaceless.md b/content/collections/modifiers/spaceless.md
index 355725351..9018747a5 100644
--- a/content/collections/modifiers/spaceless.md
+++ b/content/collections/modifiers/spaceless.md
@@ -16,9 +16,17 @@ html: |
         </a>   <strong>for you!</strong>    </p>
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ html | spaceless }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($html)->spaceless() !!}
+```
+::
 
 ```html
 <p>I copy & pasted <a href="http://goodnightchrome.show">this link </a><strong>for you!</strong></p>
diff --git a/content/collections/modifiers/starts_with.md b/content/collections/modifiers/starts_with.md
index af6ac60fe..ee28b241a 100644
--- a/content/collections/modifiers/starts_with.md
+++ b/content/collections/modifiers/starts_with.md
@@ -11,10 +11,24 @@ Returns `true` if the value starts with a given string. This comparison is case-
 reply: Actually, I disagree because this is the internet.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if reply | starts_with('actually') }}
 {{ if reply | starts_with('respectfully') }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($reply)->startsWith('actually')->fetch())
+
+@endif
+
+@if (Statamic::modify($reply)->startsWith('respectfully')->fetch())
+
+@endif
+```
+::
 
 ```html
 true
diff --git a/content/collections/modifiers/str_pad_left.md b/content/collections/modifiers/str_pad_left.md
new file mode 100644
index 000000000..5cdab4738
--- /dev/null
+++ b/content/collections/modifiers/str_pad_left.md
@@ -0,0 +1,24 @@
+---
+id: d01d449b-42fa-48d5-b0be-4884ea587fe4
+blueprint: modifiers
+modifier_types:
+  - string
+title: 'String Pad Left'
+---
+This modifier returns the string padded on the left to the specified padding length (paramameter 1) with a character of choice (parameter 2).
+
+::tabs
+
+::tab antlers
+```antlers
+{{ 1 | str_pad_left(2,0) }}
+```
+::tab blade
+```blade
+{{ Statamic::modify(1)->strPadLeft([2, 0]) }}
+```
+::
+
+```html
+01
+```
diff --git a/content/collections/modifiers/strip_tags.md b/content/collections/modifiers/strip_tags.md
index faaa02d08..7b8fcc27c 100644
--- a/content/collections/modifiers/strip_tags.md
+++ b/content/collections/modifiers/strip_tags.md
@@ -17,11 +17,21 @@ html: >
 unwanted: [p, blockquote]
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ html | strip_tags }}
 {{ html | strip_tags('p') }}
 {{ html | strip_tags($unwanted) }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($html)->stripTags() !!}
+{!! Statamic::modify($html)->stripTags('p') !!}
+{!! Statamic::modify($html)->stripTags($unwanted) !!}
+```
+::
 
 ```html
 "Things we lose have a way of coming back to us in the end,
diff --git a/content/collections/modifiers/studly.md b/content/collections/modifiers/studly.md
new file mode 100644
index 000000000..3ea9b82bc
--- /dev/null
+++ b/content/collections/modifiers/studly.md
@@ -0,0 +1,29 @@
+---
+id: 5a1d121e-0401-49e2-8460-842717d01047
+blueprint: modifiers
+modifier_types:
+  - string
+  - utility
+title: Studly Case
+---
+Converts a string into `StudlyCase`.
+
+```yaml
+string: statamic_is_awesome
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ string | studly }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($string)->studly() }}
+```
+::
+
+```html
+StatamicIsAwesome
+```
diff --git a/content/collections/modifiers/substr.md b/content/collections/modifiers/substr.md
index 2195f8556..43ad743a0 100644
--- a/content/collections/modifiers/substr.md
+++ b/content/collections/modifiers/substr.md
@@ -13,12 +13,22 @@ If length not specific, will return the rest of the string.
 string: How neat is that?
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | substr(0, 3) }}
 {{ string | substr(4, 4) }}
 {{ string | substr(-8, 8) }}
 
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->substr([0, 3]) }}
+{{ Statamic::modify($string)->substr([4, 4]) }}
+{{ Statamic::modify($string)->substr([-8, 8]) }}
+```
+::
 
 ```html
 How
diff --git a/content/collections/modifiers/subtract.md b/content/collections/modifiers/subtract.md
index 3e8a92117..4ae8ce51c 100644
--- a/content/collections/modifiers/subtract.md
+++ b/content/collections/modifiers/subtract.md
@@ -12,11 +12,20 @@ capacity: 2500
 reservations: 1900
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ capacity | subtract(1900) }}
 {{ capacity | subtract($reservations) }}
 {{ capacity | -($reservations) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($capacity)->subtract(1900) }}
+{{ Statamic::modify($capacity)->subtract($reservations) }}
+```
+::
 
 ```html
 600
diff --git a/content/collections/modifiers/sum.md b/content/collections/modifiers/sum.md
index d66710ded..eb1060ac9 100644
--- a/content/collections/modifiers/sum.md
+++ b/content/collections/modifiers/sum.md
@@ -23,10 +23,19 @@ stats:
     score: 1425
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ numbers | sum }}
-{{ stats | sum($score) }}
+{{ stats | sum('score') }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($numbers)->sum() }}
+{{ Statamic::modify($numbers)->sum('score') }}
 ```
+::
 
 ```html
 75
diff --git a/content/collections/modifiers/surround.md b/content/collections/modifiers/surround.md
index 22aedb53a..937499795 100644
--- a/content/collections/modifiers/surround.md
+++ b/content/collections/modifiers/surround.md
@@ -11,9 +11,17 @@ Surrounds a string with another string.
 string:  ͜
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | surround('ʘ') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->surround('ʘ') }}
+```
+::
 
 ```html
 ʘ ͜ ʘ
diff --git a/content/collections/modifiers/swap_case.md b/content/collections/modifiers/swap_case.md
index ee3b82993..d4208f9a7 100644
--- a/content/collections/modifiers/swap_case.md
+++ b/content/collections/modifiers/swap_case.md
@@ -12,9 +12,17 @@ Returns a case swapped version of the string.
 string: IpHONE
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | swap_case }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->swapCase() }}
+```
+::
 
 ```html
 iPhone
diff --git a/content/collections/modifiers/table.md b/content/collections/modifiers/table.md
index 30b6b95b6..2a3400657 100644
--- a/content/collections/modifiers/table.md
+++ b/content/collections/modifiers/table.md
@@ -21,9 +21,17 @@ my_table:
       - Four
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ my_table | table }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($my_table)->table() !!}
+```
+::
 
 ```html
 <table>
diff --git a/content/collections/modifiers/tidy.md b/content/collections/modifiers/tidy.md
index adad4e1a5..73bdd2683 100644
--- a/content/collections/modifiers/tidy.md
+++ b/content/collections/modifiers/tidy.md
@@ -13,9 +13,17 @@ string: >
   “I see…”
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | tidy }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->tidy() }}
+```
+::
 
 ```html
 "I see..."
diff --git a/content/collections/modifiers/timezone.md b/content/collections/modifiers/timezone.md
index ba5820237..872de0e3d 100644
--- a/content/collections/modifiers/timezone.md
+++ b/content/collections/modifiers/timezone.md
@@ -13,10 +13,19 @@ You may pass a [PHP timezone value](http://php.net/manual/en/timezones.php) to s
 when: 2015-01-27 11:00
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ when | format('r') }}
 {{ when | timezone('Australia/Sydney') | format('r') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($when)->format('r') }}
+{{ Statamic::modify($when)->timezone('Australia/Sydney')->format('r') }}
+```
+::
 
 ```html
 Tue, 27 Jan 2015 11:00:00 -0500
@@ -30,9 +39,17 @@ already contains a timezone, and you want to display it in the system timezone.
 when: Tue, 27 Jan 2015 16:00:00 +0000  # Date in UTC
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ when | timezone | format('r') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($when)->timezone()->format('r') }}
+```
+::
 
 ```html
 Tue, 27 Jan 2015 11:00:00 -0500  <!-- Assuming my system timezone is America/New_York -->
diff --git a/content/collections/modifiers/title.md b/content/collections/modifiers/title.md
index 2b3dbf554..aaecdc56b 100644
--- a/content/collections/modifiers/title.md
+++ b/content/collections/modifiers/title.md
@@ -11,9 +11,17 @@ Returns a trimmed string with the first letter of each word capitalized, ignorin
 string: It was one of the best adventures of my life
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | title }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->title() }}
+```
+::
 
 ```html
 It Was One of the Best Adventures of My Life
diff --git a/content/collections/modifiers/to_json.md b/content/collections/modifiers/to_json.md
index 8b50b76cb..41f5d2b91 100644
--- a/content/collections/modifiers/to_json.md
+++ b/content/collections/modifiers/to_json.md
@@ -17,9 +17,17 @@ stats:
     score: 1425
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ stats | to_json }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($stats)->toJson() !!}
+```
+::
 
 ```html
 [
diff --git a/content/collections/modifiers/to_qs.md b/content/collections/modifiers/to_qs.md
new file mode 100644
index 000000000..52d5a1f66
--- /dev/null
+++ b/content/collections/modifiers/to_qs.md
@@ -0,0 +1,29 @@
+---
+id: 6ff17a73-c631-433b-9727-0f72fa543807
+blueprint: modifiers
+title: 'To qs'
+modifier_types:
+  - array
+  - utility
+---
+Converts an array or array-like value into a query string using Laravel's [Arr::query()](https://laravel.com/docs/12.x/helpers#method-array-query) helper method.
+
+```yaml
+$params = [
+    'mode' => 'plaid',
+    'area' => [51, 52],
+    'hat' => null,
+    'transportation' => [
+        'bike' => true,
+        'delorian' => false,
+    ],
+];
+```
+
+```antlers
+<a href="/search?{{ params | to_qs }}">Search Now</a>
+```
+
+```html
+<a href="/search?mode=plaid&area%5B0%5D=51&area%5B1%5D=52&transportation%5Bbike%5D=1&transportation%5Bdelorian%5D=0">Search Now</a>
+```
diff --git a/content/collections/modifiers/to_spaces.md b/content/collections/modifiers/to_spaces.md
index d59fc8666..6c128d18e 100644
--- a/content/collections/modifiers/to_spaces.md
+++ b/content/collections/modifiers/to_spaces.md
@@ -7,7 +7,16 @@ title: 'To Spaces'
 ---
 Converts all tabs in a string to a given number of spaces, `4` by default. This is a boring modifier to output examples of. Here's just a few examples on how the syntax looks.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | to_spaces }}
 {{ string | to_spaces(2) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->toSpaces() }}
+{{ Statamic::modify($string)->toSpaces(2) }}
+```
+::
diff --git a/content/collections/modifiers/to_tabs.md b/content/collections/modifiers/to_tabs.md
index 210b7769c..d339e6632 100644
--- a/content/collections/modifiers/to_tabs.md
+++ b/content/collections/modifiers/to_tabs.md
@@ -7,7 +7,16 @@ title: 'To Tabs'
 ---
 Converts all instances of a specified number of spaces in a string to tabs. `4` by default. This is a boring modifier to output examples of. Here's just a few examples on how the syntax looks.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | to_tabs }}
 {{ string | to_tabs(4) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->toTabs() }}
+{{ Statamic::modify($string)->toTabs(4) }}
+```
+::
diff --git a/content/collections/modifiers/trans.md b/content/collections/modifiers/trans.md
index 0e272c512..0d2eacfbb 100644
--- a/content/collections/modifiers/trans.md
+++ b/content/collections/modifiers/trans.md
@@ -27,9 +27,17 @@ key: 'foo.bar'
 this_many: 2
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ key | trans }} or {{ "foo.bar" | trans }}
 ```
+::tab blade
+```blade
+{{ trans($key) }} {{ trans('foo.bar') }}
+```
+::
 
 ```html
 Bar!
@@ -43,10 +51,19 @@ Parameter replacements are only supported in the [tag version](/tags/trans).
 
 To pluralize, use the `trans_choice` modifier with the count as the parameter. You can use a number or a variable.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ "foo.apples" | trans_choice(2) }}
 {{ "foo.apples" | trans_choice($this_many) }}
 ```
+::tab blade
+```blade
+{{ trans_choice('foo.apples', 2) }}
+{{ trans_choice('foo.apples', $this_many) }}
+```
+::
 
 ```html
 There are 2 apples
@@ -63,9 +80,17 @@ These will be referenced from `resources/lang/fr.json` (where `fr` is the locale
 }
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ "Hello" | trans }}
 ```
+::tab blade
+```blade
+{{ trans('Hello') }}
+```
+::
 
 ```html
 Bonjour
diff --git a/content/collections/modifiers/trim.md b/content/collections/modifiers/trim.md
index 04a43ac74..f2291753e 100644
--- a/content/collections/modifiers/trim.md
+++ b/content/collections/modifiers/trim.md
@@ -11,9 +11,17 @@ Returns a string with whitespace removed from the start and end of the string. S
 string: "    This is so sloppy   "
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | trim }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->trim() }}
+```
+::
 
 ```html
 This is so sloppy
diff --git a/content/collections/modifiers/truncate.md b/content/collections/modifiers/truncate.md
index 9d3ab479d..fa0f53a9f 100644
--- a/content/collections/modifiers/truncate.md
+++ b/content/collections/modifiers/truncate.md
@@ -15,9 +15,17 @@ advice: >
   Live every week like it’s Shark Week.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ advice | truncate(90, '...') }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($advice)->truncate([90, '...']) }}
+```
+::
 
 ```html
 So, here’s some advice I wish I woulda got when I was your age:
diff --git a/content/collections/modifiers/ucfirst.md b/content/collections/modifiers/ucfirst.md
index 072d05340..a0e4bf733 100644
--- a/content/collections/modifiers/ucfirst.md
+++ b/content/collections/modifiers/ucfirst.md
@@ -11,9 +11,17 @@ Converts the first character of a string to upper case.
 string: i wanna go home.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | ucfirst }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->ucfirst() }}
+```
+::
 
 ```html
 I wanna go home.
diff --git a/content/collections/modifiers/ul.md b/content/collections/modifiers/ul.md
index 377f89844..e36c109fc 100644
--- a/content/collections/modifiers/ul.md
+++ b/content/collections/modifiers/ul.md
@@ -15,9 +15,17 @@ food:
   - kale
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ food | ul }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($food)->ul() !!}
+```
+::
 
 ```html
 <ul>
diff --git a/content/collections/modifiers/underscored.md b/content/collections/modifiers/underscored.md
index 3caf63b86..fc08a1fef 100644
--- a/content/collections/modifiers/underscored.md
+++ b/content/collections/modifiers/underscored.md
@@ -15,9 +15,17 @@ of the first character of the string), and in place of spaces as well as dashes.
 string: Please and thank you
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | underscored }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->underscored() }}
+```
+::
 
 ```html
 please_and_thank_you
diff --git a/content/collections/modifiers/unique.md b/content/collections/modifiers/unique.md
index 97119bb70..89c920ad5 100644
--- a/content/collections/modifiers/unique.md
+++ b/content/collections/modifiers/unique.md
@@ -22,9 +22,17 @@ checklist:
 
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ checklist | unique | list }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($checklist)->unique()->list() }}
+```
+::
 
 ```html
 zebra, hippo, hyena, giraffe
diff --git a/content/collections/modifiers/upper.md b/content/collections/modifiers/upper.md
index 1d2c853f8..4c6c34f61 100644
--- a/content/collections/modifiers/upper.md
+++ b/content/collections/modifiers/upper.md
@@ -11,9 +11,17 @@ Transform a string into uppercase. Multi-byte friendly.
 string: That is über neat.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | upper }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->upper() }}
+```
+::
 
 ```html
 THAT IS ÜBER NEAT.
diff --git a/content/collections/modifiers/url.md b/content/collections/modifiers/url.md
index 4ccba22e0..15ffc9316 100644
--- a/content/collections/modifiers/url.md
+++ b/content/collections/modifiers/url.md
@@ -13,9 +13,17 @@ Get the URL of an Asset, Page, Entry, or Taxonomy term from an ID.
 hero_image: 98hf98-sfq4h8f94-fd9s0fj0l
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ hero_image | url }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($hero_image)->url() }}
+```
+::
 
 ```html
 /assets/flying-bacon-wearing-a-batman-mask.jpg
diff --git a/content/collections/modifiers/urldecode.md b/content/collections/modifiers/urldecode.md
index a07012c18..51d14429a 100644
--- a/content/collections/modifiers/urldecode.md
+++ b/content/collections/modifiers/urldecode.md
@@ -12,9 +12,17 @@ URL-decodes a string. The inverse of [urlencode](/modifiers/urlencode)
 string: I+just+want+%26+need+%24pecial+characters%21
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | urldecode }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($string)->urldecode() !!}
+```
+::
 
 ```html
 I just want & need $pecial characters!
diff --git a/content/collections/modifiers/urlencode.md b/content/collections/modifiers/urlencode.md
index 8fc9247f3..245858287 100644
--- a/content/collections/modifiers/urlencode.md
+++ b/content/collections/modifiers/urlencode.md
@@ -12,9 +12,17 @@ URL-encodes a string. The inverse of [urldecode](/modifiers/urldecode)
 string: I just want & need $pecial characters!
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | urlencode }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($string)->urlencode() !!}
+```
+::
 
 ```html
 I+just+want+%26+need+%24pecial+characters%21
diff --git a/content/collections/modifiers/values.md b/content/collections/modifiers/values.md
new file mode 100644
index 000000000..b8cb55f01
--- /dev/null
+++ b/content/collections/modifiers/values.md
@@ -0,0 +1,38 @@
+---
+id: b57caa5c-ae9e-4220-b8a6-f7c82d16f0df
+blueprint: modifiers
+title: Values
+modifier_types:
+  - array
+  - utility
+---
+Retrieves just the values from the given array.
+
+```yaml
+the_team:
+    jack: Jack McDade
+    jason: Jason Varga
+    jesse: Jesse Leite
+    joshua: Joshua Blum
+    duncan: Duncan McClean
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ the_team | values }}
+```
+::tab blade
+```blade
+{{ Statamic::modify($the_team)->values()->fetch() }}
+```
+::
+
+```yaml
+- Jack McDade
+- Jason Varga
+- Jesse Leite
+- Joshua Blum
+- Duncan McClean
+```
diff --git a/content/collections/modifiers/weeks_ago.md b/content/collections/modifiers/weeks_ago.md
index 6cb58a723..e9248054b 100644
--- a/content/collections/modifiers/weeks_ago.md
+++ b/content/collections/modifiers/weeks_ago.md
@@ -18,9 +18,17 @@ Returns the number of weeks since a given date variable. Statamic will attempt t
 date: October 1 2015
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date | weeks_ago }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($date)->weeksAgo() }}
+```
+::
 
 ```html
 {{ test_date | weeks_ago }}
diff --git a/content/collections/modifiers/where-in.md b/content/collections/modifiers/where-in.md
new file mode 100644
index 000000000..431618189
--- /dev/null
+++ b/content/collections/modifiers/where-in.md
@@ -0,0 +1,51 @@
+---
+id: c1141498-eff1-4fab-b24b-4d942784a748
+blueprint: modifiers
+modifier_types:
+  - conditions
+  - array
+title: 'Where In'
+---
+Filter an array (such as a Replicator field's data) to items where a `key` matches specific `values`.
+
+```yaml
+games:
+  -
+    feeling: love
+    title: Dominion
+  -
+    feeling: happy
+    title: Netrunner
+  -
+    feeling: hate
+    title: Chutes and Ladders
+```
+
+::tabs
+
+::tab antlers
+```antlers
+<h2>I love...</h2>
+{{ games | where_in('feeling', ['love', 'happy']) }}
+  {{ title }}<br>
+{{ /games }}
+```
+::tab blade
+```blade
+<?php
+  $filteredGames = Statamic::modify($games)
+    ->whereIn(['feeling', ['love', 'happy']])
+    ->fetch();
+?>
+
+<h2>I love...</h2>
+@foreach ($filteredGames as $game)
+  {{ $game['title'] }}
+@endforeach
+```
+::
+
+```html
+Dominion
+Netrunner
+```
diff --git a/content/collections/modifiers/where.md b/content/collections/modifiers/where.md
index fa645d697..dc185ce6a 100644
--- a/content/collections/modifiers/where.md
+++ b/content/collections/modifiers/where.md
@@ -21,14 +21,40 @@ games:
     title: Chutes and Ladders
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <h2>I love...</h2>
 {{ games | where('feeling', 'love') }}
   {{ title }}<br>
 {{ /games }}
 ```
+::tab blade
+```blade
+<?php
+  $filteredGames = Statamic::modify($games)
+    ->where(['feeling', 'love'])
+    ->fetch();
+?>
+
+<h2>I love...</h2>
+@foreach ($filteredGames as $game)
+  {{ $game['title'] }}
+@endforeach
+```
+::
 
 ```html
 Dominion
 Netrunner
 ```
+
+You can also pass an operator to the modifier, so you can do checks like "where not" and "where greater than". Under the hood, this uses [the `where` method of Laravel Collections](https://laravel.com/docs/12.x/collections#method-where), so you can use any operators it supports.
+
+```
+<h2>I hate...</h2>
+{{ games | where('feeling', '!=', 'love') }}
+  {{ title }}<br>
+{{ /games }}
+```
diff --git a/content/collections/modifiers/widont.md b/content/collections/modifiers/widont.md
index 5897da3b1..9de910101 100644
--- a/content/collections/modifiers/widont.md
+++ b/content/collections/modifiers/widont.md
@@ -14,10 +14,19 @@ The first parameter allows you to customize the number of words to add non-break
 string: I Just Want Pretty Headlines and Sentences
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | widont }}
 {{ string | widont(4) }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->widont() }}
+{{ Statamic::modify($string)->widont(4) }}
+```
+::
 
 ```html
 I Just Want Pretty Headlines and&nbsp;Sentences
diff --git a/content/collections/modifiers/word_count.md b/content/collections/modifiers/word_count.md
index a970b0152..8c40387f6 100644
--- a/content/collections/modifiers/word_count.md
+++ b/content/collections/modifiers/word_count.md
@@ -12,9 +12,17 @@ Returns the number of words in a given string.
 string: There are probably seven words in this sentence.
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ string | word_count }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($string)->wordCount() }}
+```
+::
 
 ```html
 8
diff --git a/content/collections/modifiers/wrap.md b/content/collections/modifiers/wrap.md
index 75cb153d0..8d3cf3ed1 100644
--- a/content/collections/modifiers/wrap.md
+++ b/content/collections/modifiers/wrap.md
@@ -12,9 +12,17 @@ Wraps a string with a given HTML tag. Has the nice benefit of returning null if
 title: As the World Turns
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | wrap('h1') }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($title)->wrap('h1') !!}
+```
+::
 
 ```html
 <h1>As the World Turns</h1>
@@ -22,10 +30,51 @@ title: As the World Turns
 
 You may also use Emmet-style CSS classes to be added to the tag.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ title | wrap('h1.fast.furious') }}
 ```
+::tab blade
+```blade
+{!! Statamic::modify($title)->wrap('h1.fast.furious') !!}
+```
+::
 
 ```html
 <h1 class="fast furious">As the World Turns</h1>
 ```
+
+The `wrap` modifier also accepts passing in arrays. 
+
+```yaml
+team_members:
+  - Jack
+  - Jason
+  - Jesse
+  - Josh
+  - Duncan
+  - The Hoff
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ team_members | wrap('li') | join(' ') }}
+```
+::tab blade
+```blade
+{!! Statamic::modify($team_members)->wrap('li')->join(' ') !!}
+```
+::
+
+```html
+<li>Jack</li>
+<li>Jason</li> 
+<li>Jesse</li> 
+<li>Josh</li> 
+<li>Duncan</li> 
+<li>The Hoff</li>
+```
\ No newline at end of file
diff --git a/content/collections/modifiers/years_ago.md b/content/collections/modifiers/years_ago.md
index 258ba6e8b..f3c1a7d9d 100644
--- a/content/collections/modifiers/years_ago.md
+++ b/content/collections/modifiers/years_ago.md
@@ -18,9 +18,17 @@ Returns the number of years since a given date variable. Statamic will attempt t
 date: October 1 2015
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date | years_ago }}
 ```
+::tab blade
+```blade
+{{ Statamic::modify($date)->yearsAgo() }}
+```
+::
 
 ```html
 {{ test_date | years_ago }}
diff --git a/content/collections/reference/fieldtypes.md b/content/collections/reference/fieldtypes.md
index 49aff07d8..45d802265 100644
--- a/content/collections/reference/fieldtypes.md
+++ b/content/collections/reference/fieldtypes.md
@@ -5,4 +5,4 @@ title: Fieldtypes
 template: fieldtypes/index
 intro: Fieldtypes determine the user interface and storage format for your fields. Statamic includes 40+ fieldtypes to help you tailor the perfect intuitive experience for your authors.
 ---
-Different inputs, interfaces, and data formats help model your content perfectly.
+Inputs, interfaces, formats, and more to shape content.
diff --git a/content/collections/reference/modifiers.md b/content/collections/reference/modifiers.md
index 8688299be..7d8f12093 100644
--- a/content/collections/reference/modifiers.md
+++ b/content/collections/reference/modifiers.md
@@ -9,4 +9,4 @@ related_entries:
   - dcf80ee6-209e-45aa-af42-46bbe01996e2
   - e052ecb8-60d9-4afa-980e-ce128c301d70
 ---
-Manipulate the data of your Antlers variables on the fly with Modifiers.
+Manipulate your data on the fly with Modifiers.
diff --git a/content/collections/reference/repositories.md b/content/collections/reference/repositories.md
index 0dbf02fd8..3e96adb6c 100644
--- a/content/collections/reference/repositories.md
+++ b/content/collections/reference/repositories.md
@@ -6,4 +6,4 @@ template: repositories/index
 intro: |
     Each of the following repository classes is a Facade used to access content in each of Statamic's core data types and query, create, modify, and delete content.
 ---
-Query, create, modify, and delete content in each of Statamic's core data types.
+Manage Statamic’s data: query, create, and modify
diff --git a/content/collections/reference/tags.md b/content/collections/reference/tags.md
index c9222ac87..c4a42d5e3 100644
--- a/content/collections/reference/tags.md
+++ b/content/collections/reference/tags.md
@@ -4,4 +4,4 @@ blueprint: reference
 title: Tags
 template: tags/index
 ---
-Fetch & manipulate content and build all manner of dynamic functionality right in your HTML.
+Fetch, manipulate, and add dynamic functionality
diff --git a/content/collections/reference/variables.md b/content/collections/reference/variables.md
index 586a723af..8e9adf62f 100644
--- a/content/collections/reference/variables.md
+++ b/content/collections/reference/variables.md
@@ -4,4 +4,4 @@ blueprint: reference
 title: Variables
 template: variables/index
 ---
-Access data from current URL, user, entry, site, date, and more right in your templates.
+Access data from current URL, user, entry, and more
diff --git a/content/collections/reference/widgets.md b/content/collections/reference/widgets.md
index a24292c37..338968dc8 100644
--- a/content/collections/reference/widgets.md
+++ b/content/collections/reference/widgets.md
@@ -4,4 +4,4 @@ blueprint: reference
 title: Widgets
 template: widgets/index
 ---
-Configurable blocks in the Control Panel that can show and do all sorts of things.
+Configurable CP blocks to showcase useful things
diff --git a/content/collections/repositories.yaml b/content/collections/repositories.yaml
index 0058fb285..91d99887e 100644
--- a/content/collections/repositories.yaml
+++ b/content/collections/repositories.yaml
@@ -1,5 +1,5 @@
 title: Repositories
-template: repositories/show
+template: page
 layout: layout
 mount: 082e1db7-7b52-4b92-a8bf-4c51ce7d741c
 revisions: false
diff --git a/content/collections/repositories/asset-container-repository.md b/content/collections/repositories/asset-container-repository.md
index d79fac51a..8bf602ec1 100644
--- a/content/collections/repositories/asset-container-repository.md
+++ b/content/collections/repositories/asset-container-repository.md
@@ -26,7 +26,8 @@ use Statamic\Facades\AssetContainer;
 | `all()` | Get all AssetContainers |
 | `find($id)` | Get AssetContainer by `id` |
 | `findByHandle($handle)` | Get AssetContainer by `handle` |
-| `queryAssets()` | Query Builder for the AssetContainer's [Assets](#assets) |
+| `findOrFail($id)` | Get AssetContainer by `id`. Throws an `AssetContainerNotFoundException` when the asset container cannot be found. |
+| `queryAssets()` | Query Builder for the AssetContainer's [Assets](/repositories/asset-repository) |
 | `make()` | Makes a new AssetContainer instance |
 
 :::tip
@@ -45,6 +46,12 @@ $videos->queryAssets()
     ->get();
 ```
 
+When an asset container can't be found, the `AssetContainer::find()` method will return `null`. If you'd prefer an exception be thrown, you may use the `findOrFail` method:
+
+```php
+AssetContainer::findOrFail('videos');
+```
+
 ## Creating
 
 Start by making an instance of an asset container with the `make` method. You can pass the handle into it.
@@ -71,4 +78,3 @@ Finally, save it.
 ```php
 $container->save();
 ```
-
diff --git a/content/collections/repositories/asset-repository.md b/content/collections/repositories/asset-repository.md
index d532dfda5..438ea3b64 100644
--- a/content/collections/repositories/asset-repository.md
+++ b/content/collections/repositories/asset-repository.md
@@ -20,12 +20,13 @@ use Statamic\Facades\Asset;
 | Methods | Description |
 | ------- | ----------- |
 | `all()` | Get all Assets |
-| `find()` | Get Asset by `filename` |
-| `findByPath()` | Get Asset by `path` |
-| `findByUrl()` | Get Asset by `url` |
+| `find($filename)` | Get Asset by `filename` |
+| `findByPath($path)` | Get Asset by `path` |
+| `findByUrl($url)` | Get Asset by `url` |
+| `findOrFail($filename)` | Get Asset by `filename`. Throws an `AssetNotFoundException` when the asset cannot be found. |
 | `query()` | Query Builder |
-| `whereContainer()` | Find Assets by [AssetContainer](#asset-container) |
-| `whereFolder()` | Find Assets in a filesystem folder |
+| `whereContainer($container)` | Find Assets by [AssetContainer](/repositories/asset-container-repository) |
+| `whereFolder($folder)` | Find Assets in a filesystem folder |
 | `make()` | Makes a new `Asset` instance |
 
 :::tip
diff --git a/content/collections/repositories/collection-repository.md b/content/collections/repositories/collection-repository.md
index 1e8048694..6987539a6 100644
--- a/content/collections/repositories/collection-repository.md
+++ b/content/collections/repositories/collection-repository.md
@@ -23,7 +23,8 @@ use Statamic\Facades\Collection;
 | `all()` | Get all Collections |
 | `find($id)` | Get Collection by `id` |
 | `findByHandle($handle)` | Get Collection by `handle` |
-| `findByMount($mount)` | Get Asset by mounted entry `id` |
+| `findByMount($mount)` | Get Collection by mounted entry `id` |
+| `findOrFail($id)` | Get Collection by `id`. Throws a `CollectionNotFoundException` when the collection cannot be found. |
 | `handleExists($handle)` | Check to see if `Collection` exists |
 | `handles()` | Get all `Collection` handles |
 | `queryEntries()` | Query Builder for [Entries](/repositories/entry-repository) |
@@ -44,6 +45,12 @@ $blog = Collection::find('blog');
 $blog->queryEntries()->get();
 ```
 
+When a collection can't be found, the `Collection::find()` method will return `null`. If you'd prefer an exception be thrown, you may use the `findOrFail` method:
+
+```php
+Collection::findOrFail('blog');
+```
+
 ## Creating
 
 Start by making an instance of a collection with the `make` method. You can pass the handle into it.
diff --git a/content/collections/repositories/entry-repository.md b/content/collections/repositories/entry-repository.md
index f0f1fb6be..2b40a888a 100644
--- a/content/collections/repositories/entry-repository.md
+++ b/content/collections/repositories/entry-repository.md
@@ -8,6 +8,7 @@ related_entries:
   - acee879a-c832-449d-a714-c57ea5862717
   - 9c6a0b01-449e-49dd-8fa6-11b975d2726d
   - 7202c698-942a-4dc0-b006-b982784efb03
+  - 853b6690-c1fc-46bc-b865-e61a33d14563
 ---
 To work with the Entry Repository, use the following Facade:
 
@@ -22,6 +23,7 @@ use Statamic\Facades\Entry;
 | `all()` | Get all Entries |
 | `find($id)` | Get Entry by `id` |
 | `findByUri($uri, $site)` | Get Entry by `uri`, optionally in a site |
+| `findOrFail($id)` | Get Entry by `id`. Throws an `EntryNotFoundException` when the entry cannot be found. |
 | `query()` | Query Builder |
 | `whereCollection($handle)` | Get all Entries in a `Collection` |
 | `whereInCollection([$handles])` | Get all Entries in an array of `Collections` |
@@ -40,6 +42,12 @@ Entry::query()->where('id', 123)->first();
 Entry::find(123);
 ```
 
+When an entry can't be found, the `Entry::find()` method will return `null`. If you'd prefer an exception be thrown, you may use the `findOrFail` method:
+
+```php
+Entry::findOrFail(123);
+```
+
 #### Get an entry by its URI
 
 ```php
@@ -117,7 +125,7 @@ Entry::query()
 $author = User::findByEmail('jack@statamic.com');
 
 Entry::query()
-    ->where('collection', $handle)
+    ->where('collection', 'news')
     ->where('author', $author->id())
     ->get();
 ```
@@ -130,11 +138,11 @@ Entry::query()
     ->get();
 ```
 
-#### Get all published and scheduled entries
+#### Get all published entries
 
 ```php
 Entry::query()
-  ->whereIn('status', ['published', 'scheduled'])
+  ->whereStatus('published')
   ->get();
 ```
 
@@ -142,6 +150,39 @@ Entry::query()
 **What is the difference between querying against `published` and `status`?** Read more on [date behavior and published status](/collections#date-behavior-and-published-status)!
 :::
 
+#### Get all entries with taxonomy terms
+
+When you want to query all entries with a specific term, you should use the `whereTaxonomy` method:
+
+```php
+Entry::query()
+  ->where('collection', 'news')
+  ->whereTaxonomy('categories::laravel')
+  ->get();
+```
+
+In the above example, `categories` is the taxonomy's handle and `laravel` is the term's slug.
+
+When you want to query all entries with **multiple** terms, you should instead use the `whereTaxonomyIn` method:
+
+```php
+Entry::query()
+  ->where('collection', 'news')
+  ->whereTaxonomyIn(['categories::laravel', 'categories::statamic'])
+  ->get();
+```
+
+:::warning
+**This only works when the taxonomy [is linked in your collection's config](/collections#taxonomies).** If it's not linked in the collection config, you should use the `whereJsonContains` method instead:
+
+```php
+Entry::query()
+  ->where('collection', 'news')
+  ->whereJsonContains('categories_field', ['laravel', 'statamic'])
+  ->get();
+```
+:::
+
 ## Creating
 
 Start by making an instance of an entry with the `make` method.
@@ -158,6 +199,7 @@ $entry
   ->date($carbon) // or string of Y-m-d or Y-m-d-Hi
   ->published(true) // or false for a draft
   ->locale('default') // the site handle. defaults to the default site.
+  ->blueprint('article') // set entry blueprint
   ->data(['foo' => 'bar']) // an array of data (front-matter)
   ->origin($origin); // another entry instance
 ```
@@ -167,3 +209,63 @@ Finally, save it. It'll return a boolean for whether it succeeded.
 ```php
 $entry->save(); // true or false
 ```
+
+### Setting an entry's parent
+
+When you're creating entries in [structured collections](/collections#ordering), you may find yourself needing to programatically set an entry's parent.
+
+Parent & children pages are stored in structures, which live in "trees", rather than in the entry data. This means that in order to set an entry's parent, we will need to append it to the structure.
+
+```php
+// Create your entry as normal...
+$entry = Entry::make()
+    ->collection('pages')
+    ->slug('about')
+    ->data([
+        // ...
+    ]);
+
+
+// Before saving the entry, define an "afterSave" callback to append the
+// new entry to the tree, under the parent.
+$entry->afterSave(function ($entry) {
+    $parent = Entry::find('the_parent_entry');
+
+    $entry->collection()
+        ->structure()
+        ->in($entry->locale())
+        ->appendTo($parent->id(), $entry->id())
+        ->save();
+});
+
+// And finally, save the entry.
+$entry->save();
+```
+
+### Localization
+
+#### Localizing an entry
+
+After an entry has been created, you can call the `makeLocalization` method to localize the entry into another site:
+
+```php
+$entry->makeLocalization('fr');
+```
+
+#### Getting an entry's localizations
+
+You can use various methods to get an entry's localizations:
+
+```php
+// Check if the entry has been localized in a specific site...
+$entry->existsIn('fr');
+
+// Get the localized entry in a specific site...
+$entry->in('fr');
+
+// Get all "descendants" of the entry (those entries localized from the current entry)...
+$entry->descendants();
+
+// Get all "ancestors" of the entry (those entries the current entry is localized from)...
+$entry->ancestors();
+```
diff --git a/content/collections/repositories/form-repository.md b/content/collections/repositories/form-repository.md
index b863e7fc5..672a90f37 100644
--- a/content/collections/repositories/form-repository.md
+++ b/content/collections/repositories/form-repository.md
@@ -7,6 +7,7 @@ related_entries:
   - fdb45b84-3568-437d-84f7-e3c93b6da3e6
   - e4f4f91e-a442-4e15-9e16-3b9880a25522
   - d630ea15-d94f-4404-84d2-0926a898e672
+  - 02261135-24fa-4d2f-9bc5-a7d2f5e6a975
 ---
 To work with the Form Repository, use the following Facade:
 
@@ -20,6 +21,7 @@ use Statamic\Facades\Form;
 | ------- | ----------- |
 | `all()` | Get all Forms |
 | `find($handle)` | Get Form by `handle` |
+| `findOrFail($handle)` | Get Form by `handle`. Throws a `FormNotFoundException` when the form cannot be found. |
 | `make()` | Makes a new `Form` instance |
 
 :::tip
@@ -36,6 +38,12 @@ The `handle` is the name of the form's YAML file.
 Form::find('postbox');
 ```
 
+When a form can't be found, the `Form::find()` method will return `null`. If you'd prefer an exception be thrown, you may use the `findOrFail` method:
+
+```php
+Form::findOrFail('postbox');
+```
+
 #### Get all forms from your site
 
 ```php
@@ -48,11 +56,7 @@ Form::all()
 Form::find('postbox')->submissions();
 ```
 
-#### Get a single submission to a form by its id
-
-```php
-Form::find('postbox')->submission($id);
-```
+The `->submissions()` method will return a `Collection` of form submissions. You can use the [Form Submissions repository](/repositories/form-submission-repository) if you need to query form submissions further.
 
 #### Get the blueprint of a form
 
diff --git a/content/collections/repositories/form-submission-repository.md b/content/collections/repositories/form-submission-repository.md
new file mode 100644
index 000000000..5038264df
--- /dev/null
+++ b/content/collections/repositories/form-submission-repository.md
@@ -0,0 +1,84 @@
+---
+id: 02261135-24fa-4d2f-9bc5-a7d2f5e6a975
+blueprint: repositories
+title: 'Form Submission Repository'
+nav_title: Form Submissions
+related_entries:
+  - fdb45b84-3568-437d-84f7-e3c93b6da3e6
+  - e4f4f91e-a442-4e15-9e16-3b9880a25522
+  - bbea4454-efa2-4372-842b-b295376230f7
+---
+To work with the Form Submissions Repository, use the following Facade:
+
+```php
+use Statamic\Facades\FormSubmission;
+```
+
+## Methods
+
+| Methods | Description |
+| ------- | ----------- |
+| `all()` | Get all form submissions. |
+| `whereForm($handle)` | Get submissions by form handle. |
+| `whereInForm($handles)` | Get submissions, across multiple forms. Accepts an array of form handles. |
+| `find($id)` | Get a form submission, by its submission ID. |
+| `make()` | Makes a new `Submission` instance |
+| `query()` | Query Builder |
+
+## Querying
+
+#### Examples {.popout}
+
+#### Get form submissions by form
+
+```php
+FormSubmission::whereForm('postbox');
+```
+
+#### Get form submissions, between multiple forms
+
+```php
+FormSubmission::whereInForm(['postbox', 'newsletter']);
+```
+
+#### Get a single submission to a form by its id
+
+```php
+FormSubmission::find($id);
+```
+
+#### Get form submissions, filtered by field
+
+```php
+FormSubmission::query()
+    ->where('form', 'postbox')
+    ->where('email', 'hoff@statamic.com')
+    ->get();
+```
+
+
+## Creating
+
+Start by making an instance of a form submission with the `make` method.
+You need to pass in [a `Form` instance](/repositories/form-repository) before you can save a form submission.
+
+```php
+$form = \Statamic\Facades\Form::find('postbox');
+
+$submission = FormSubmission::make()->form($form);
+```
+
+To set submission data, you may call the `->data()` method and pass an array:
+
+```php
+$submission->data([
+    'name' => 'David Hasselhoff',
+    'email' => 'hoff@statamic.com',
+]);
+```
+
+Finally, save it. It'll return a boolean for whether it succeeded.
+
+```php
+$submission->save(); // true or false
+```
diff --git a/content/collections/repositories/global-repository.md b/content/collections/repositories/global-repository.md
index 63498c31c..1d2f0eeaa 100644
--- a/content/collections/repositories/global-repository.md
+++ b/content/collections/repositories/global-repository.md
@@ -20,6 +20,7 @@ use Statamic\Facades\GlobalSet;
 | `all()` | Get all GlobalSets |
 | `find($id)` | Get GlobalSets by `id` |
 | `findByHandle($handle)` | Get GlobalSets by `handle` |
+| `findOrFail($id)` | Get GlobalSets by `id`. Throws a `GlobalSetNotFoundException` when the global set cannot be found. |
 | `make()` | Makes a new `GlobalSet` instance |
 
 ## Querying
diff --git a/content/collections/repositories/site-repository.md b/content/collections/repositories/site-repository.md
new file mode 100644
index 000000000..79317506a
--- /dev/null
+++ b/content/collections/repositories/site-repository.md
@@ -0,0 +1,45 @@
+---
+id: 668f4934-9dd9-4e5b-b24e-8fa6173336c2
+blueprint: repositories
+title: 'Site Repository'
+class: \Statamic\Facades\Site
+nav_title: 'Sites'
+related_entries:
+  - fb20f2e0-3881-43e6-8507-3308a18c54b0
+updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
+updated_at: 1634259827
+---
+To work with the with Site Repository, use the following Facade:
+
+```php
+use Statamic\Facades\Site;
+```
+
+## Methods
+
+| Methods | Description |
+| ------- | ----------- |
+| `all()` | Get all Sites |
+| `get($handle)` | Get Site by handle |
+| `findByUrl($url)` | Get site by a given URL |
+| `current()` | Returns the current site, determined by the current page URL. |
+| `setCurrent($handle)` | Sets the current site. |
+| `selected()` | Returns the site currently selected in the Control Panel |
+| `setSelected($handle)` | Sets the selected site. |
+| `default()` | Returns the "default site", which will be the first site in the `sites` config |
+| `authorized()` | Returns a collection of Site objects, where the user is authorized to view the site (see [Multisite Permissions](/multi-site#permissions)). |
+| `multiEnabled` | Returns a boolean indicating if multi-site is enabled. |
+| `hasMultiple()` | Returns a boolean indicating if multiple sites are configured. |
+| `setSites($sites)` | Accepts an array. Allows you to override the configured sites. |
+
+## Resolving the current site
+
+When you're using the `Site::current()` method, sometimes the current page URL will lead to the wrong site being returned (like when using Livewire). In this case, you can use the resolveCurrentUrlUsing to check against a different URL:
+
+```php
+// app/Providers/AppServiceProvider.php
+
+use Statamic\Facades\Site;
+
+Site::resolveCurrentUrlUsing(fn () => Livewire::originalUrl());
+```
diff --git a/content/collections/repositories/taxonomy-repository.md b/content/collections/repositories/taxonomy-repository.md
index 4d4021356..c9d39ebc6 100644
--- a/content/collections/repositories/taxonomy-repository.md
+++ b/content/collections/repositories/taxonomy-repository.md
@@ -24,6 +24,7 @@ use Statamic\Facades\Taxonomy;
 | `find($id)` | Get Taxonomy by `id` |
 | `findByHandle($handle)` | Get Taxonomy by `handle` |
 | `findByUri($mount)` | Get Taxonomy by `uri` |
+| `findOrFail($id)` | Get Taxonomy by `id`. Throws a `TaxonomyNotFoundException` when the taxonomy cannot be found. |
 | `handleExists($handle)` | Check to see if `Taxonomy` exists |
 | `handles()` | Get all `Taxonomy` handles |
 | `queryTerms()` | Query Builder for [Terms](/content-queries/term-repository) |
@@ -43,6 +44,12 @@ $tags = Taxonomy::find('tags');
 $tags->queryTerms()->get();
 ```
 
+When a taxonomy can't be found, the `Taxonomy::find()` method will return `null`. If you'd prefer an exception be thrown, you may use the `findOrFail` method:
+
+```php
+Taxonomy::findOrFail('tags');
+```
+
 ## Creating
 
 Start by making an instance of a taxonomy with the `make` method. You can pass the handle into it.
diff --git a/content/collections/repositories/term-repository.md b/content/collections/repositories/term-repository.md
index 4a8ec8d91..1a58b9df3 100644
--- a/content/collections/repositories/term-repository.md
+++ b/content/collections/repositories/term-repository.md
@@ -23,6 +23,7 @@ use Statamic\Facades\Term;
 | `all()` | Get all Terms |
 | `find($id)` | Get Term by `id` |
 | `findByUri($uri)` | Get Term by `uri` |
+| `findOrFail($id)` | Get Term by `id`. Throws a `TermNotFoundException` when the term cannot be found. |
 | `query()` | Query Builder |
 | `make()` | Makes a new `Term` instance |
 
@@ -30,6 +31,23 @@ use Statamic\Facades\Term;
 
 #### Examples {.popout}
 
+#### Get a single term by its id
+
+When getting a single term by its ID, the value of the `$id` parameter should be `taxonomy_handle::term_id`.
+
+```php
+Term::query()->where('id', 'tags::123')->first();
+
+// Or with the shorthand method
+Term::find('tags::123');
+```
+
+When a term can't be found, the `Term::find()` method will return `null`. If you'd prefer an exception be thrown, you may use the `findOrFail` method:
+
+```php
+Term::findOrFail('tags::123');
+```
+
 #### Get all tags
 
 ```php
@@ -75,10 +93,20 @@ You need at least a slug and the taxonomy.
 $term = Term::make()->taxonomy('tags')->slug('my-term');
 ```
 
-Data is stored on a term on a per site basis, even if you only are using a single site.
+Data for a term is stored on a per site basis, even if you only are using a single site.
+
+The method expects a site handle and an array of key-value pairs.
+```php
+// Example for a single site
+$term->dataForLocale('default', [
+    'mandalorian_code' => 'This Is The Value',
+    //...
+]);
+```
 
+When using [multi-site](/multi-site), you can pass different data to each site.
 ```php
-$term->dataForLocale('en', $data);
+$term->dataForLocale('default', $data);
 $term->dataForLocale('fr', $frenchData);
 ```
 
diff --git a/content/collections/repositories/user-group-repository.md b/content/collections/repositories/user-group-repository.md
index 96fe755ff..414818070 100644
--- a/content/collections/repositories/user-group-repository.md
+++ b/content/collections/repositories/user-group-repository.md
@@ -29,7 +29,7 @@ use Statamic\Facades\UserGroup;
 #### Get a User Group
 
 ``` php
-UserGroup::find('admin')->get();
+UserGroup::find('admin');
 ```
 
 #### Get all users in a group
diff --git a/content/collections/repositories/user-repository.md b/content/collections/repositories/user-repository.md
index 53ef3b427..414faad7f 100644
--- a/content/collections/repositories/user-repository.md
+++ b/content/collections/repositories/user-repository.md
@@ -24,6 +24,7 @@ use Statamic\Facades\User;
 | `find($id)` | Get User by `id` |
 | `findByEmail($email)` | Get User by `email` |
 | `findByOAuthID($provider, $id)` | Get User by an ID from an OAuth provider  |
+| `findOrFail($id)` | Get User by `id`. Throws a `UserNotFoundException` when the user cannot be found. |
 | `query()` | Query Builder |
 | `make()` | Makes a new `User` instance |
 
@@ -40,6 +41,12 @@ User::query()
 User::find('abc123');
 ```
 
+When a user can't be found, the `User::find()` method will return `null`. If you'd prefer an exception be thrown, you may use the `findOrFail` method:
+
+```php
+User::findOrFail('abc123');
+```
+
 #### Get a user by email
 
 ```php
@@ -94,3 +101,23 @@ Finally, save it.
 ```php
 $user->save();
 ```
+
+### Roles & Groups
+
+In the example above, it demonstrates passing roles & groups as arrays to the `->roles()` and `->groups()` methods.
+
+However, Statamic also provides a few convenience methods for assigning/removing/checking individual roles & groups:
+
+```php
+$user->roles(); // Returns a collection of the user's roles
+$user->roles(['role_1', 'role_2']); // Sets the user's roles (overrides any existing roles)
+$user->assignRole('role_1'); // Assigns a role to the user
+$user->removeRole('role_1'); // Removes a role from the user
+$user->hasRole('role_2'); // Checks if the user has the provided role.
+
+$user->groups(); // Returns a collection of the user's groups
+$user->groups(['group_1', 'group_2']); // Sets the user's groups (overrides any existing groups)
+$user->addToGroup('group_1'); // Adds the user to a group
+$user->removeFromGroup('group_1'); // Removes the user from a group
+$user->isInGroup('group_2'); // Checks if the user is part of a group
+```
diff --git a/content/collections/sections/docs.md b/content/collections/sections/docs.md
index 6df1302db..24acc7f0c 100644
--- a/content/collections/sections/docs.md
+++ b/content/collections/sections/docs.md
@@ -1,10 +1,74 @@
 ---
 id: 5ee53e1b-8933-4b2e-a72d-af09f2b32600
-blueprint: sections
+blueprint: home
 title: Docs
-meta_title: Learn Statamic
-intro: 'This is where the learning begins and the veterans return for their references. This is the Statamic 3 documentation.'
+meta_title: 'Learn Statamic'
+intro: 'This is where the learning begins and the veterans return for their references.'
 template: home
 section: docs
 content_width: flex-1
+breadcrumb_title: 'Learn Statamic'
+tiles:
+  -
+    id: m8fsi7v5
+    tile_image: tiles/floppy-disk.png
+    tile_title: 'Installing Statamic'
+    tile_description: 'Let’s get Statamic installed and start tinkering around.'
+    type: tile
+    enabled: true
+    flush_image: false
+    hue_rotate: false
+    tile_link: 'entry::ab08f409-8bbe-4ede-b421-d05777d292f7'
+  -
+    id: m8fsmcva
+    tile_image: tiles/cat.png
+    tile_title: 'Learn by Watching'
+    tile_description: 'Learn Statamic with Jack’s free Laravel Creator Series.'
+    type: tile
+    enabled: true
+    flush_image: false
+    hue_rotate: hue_rotate_1
+    tile_link: https://learnstatamic.com
+  -
+    id: m8fszcgf
+    tile_image: tiles/modern-people.png
+    tile_title: 'Discord Community'
+    tile_description: 'Hang out with exceptional devs & designers 24/7.'
+    type: tile
+    enabled: true
+    flush_image: false
+    hue_rotate: false
+    tile_link: 'https://statamic.com/discord'
+  -
+    id: m8ft268a
+    tile_image: tiles/antlers.png
+    tile_title: 'Antler Templating Docs'
+    tile_description: 'Start unlocking the mighty flexible powers of Antlers.'
+    type: tile
+    enabled: true
+    tile_image_dark_mode: tiles/antlers-dark-mode.png
+    flush_image: true
+    hue_rotate: false
+    tile_link: 'entry::d37b2af2-f2bf-493a-9345-7087fb5929ce'
+  -
+    id: m8ft2vpz
+    tile_image: tiles/cd.png
+    tile_title: 'Feature Reference Lists'
+    tile_description: 'Start unlocking the mighty flexible powers of Antlers.'
+    type: tile
+    enabled: true
+    flush_image: false
+    hue_rotate: false
+    tile_link: 'entry::3e260b43-aa71-43b6-832e-1ebf2f59f39b'
+  -
+    id: m8ft8fb1
+    tile_image: tiles/stereo.png
+    tile_title: 'Recent Doc Updates'
+    tile_description: 'Help keep your Statamic superpowers up-to-date.'
+    type: tile
+    enabled: true
+    flush_image: false
+    hue_rotate: false
+    tile_link: 'entry::a77eb282-e050-4288-b83d-789840e245fd'
+advert_override: 972d7159-e76a-4817-a441-65d965d8c794
 ---
diff --git a/content/collections/sections/extending.md b/content/collections/sections/extending.md
index 7a63ad7ca..192eeafd8 100644
--- a/content/collections/sections/extending.md
+++ b/content/collections/sections/extending.md
@@ -8,15 +8,16 @@ section: extending_docs
 ---
 ## To addon, or not to addon?
 
-In Statamic v2, practically every customization would need to be contained within an addon, even if you had no intention of distributing it.
+Since Statamic is a Laravel package, you are in control over your application code.
 
-Since Statamic v3 is a Laravel package, you are in control over your application code. You're free to add whatever extra code you like.
-
-This makes the distinction much clearer: **If you want to reuse, distribute, or sell your features; you should make an addon.** Otherwise, you can just add things to your Laravel application.
+**If you want to reuse, distribute, or sell your features; you should make an addon.** Otherwise, you can just add things to your Laravel application.
 
 ## How to extend Statamic
 
-Some features can simply be placed in the right spot and they'll be wired up automatically. For example, placing a [tag](/extending/tags) class inside `app/Tags` will make it available to your templates without any extra wiring.
+Many features can simply be placed in the right spot and they'll be wired up automatically.
+
+For example, placing a [Tag](/extending/tags) class inside `app/Tags` will make it available to your templates without any extra wiring.
+Or if you're building an addon, putting it in `src/Tags` will do the same.
 
 Others could require some wiring, which would typically go in a service provider.
 
diff --git a/content/collections/sections/reference.md b/content/collections/sections/reference.md
index e6d0c1cf7..25f99144b 100644
--- a/content/collections/sections/reference.md
+++ b/content/collections/sections/reference.md
@@ -2,10 +2,10 @@
 id: 3e260b43-aa71-43b6-832e-1ebf2f59f39b
 blueprint: sections
 title: Reference
-intro: 'Find lists of Statamic''s different types of features along with their respective options, parameters, and variables.'
 template: reference.index
 section: reference
-content_width: w-full
 updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
 updated_at: 1632428132
+breadcrumb_title: Overview
+intro: "Find lists of Statamic's different types of features along with their respective options, parameters, and variables."
 ---
diff --git a/content/collections/tags.yaml b/content/collections/tags.yaml
index 4811083e6..0ad964c3d 100644
--- a/content/collections/tags.yaml
+++ b/content/collections/tags.yaml
@@ -1,5 +1,5 @@
 title: Tags
-template: tags.show
+template: page
 layout: layout
 mount: 710810c7-f710-4364-a6e4-cedf8c292d88
 revisions: false
@@ -7,3 +7,4 @@ route: '/tags/{slug}'
 sort_dir: asc
 inject:
   section: reference
+  view_model: App\ViewModels\Tags
diff --git a/content/collections/tags/404.md b/content/collections/tags/404.md
index 11b38cec1..be14c6e4f 100755
--- a/content/collections/tags/404.md
+++ b/content/collections/tags/404.md
@@ -10,7 +10,10 @@ id: 89f254ef-0312-429c-80bf-0a30a19edd0c
 
 The most common use cases for the 404 tag is for checking if a user is logged in or has performed an action before displaying a particular page.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if ! logged_in }}
   {{ 404 }}
 {{ /if }}
@@ -20,8 +23,34 @@ The most common use cases for the 404 tag is for checking if a user is logged in
 {{ /if }}
 ```
 
+::tab blade
+```blade
+@if (! $logged_in }}
+  <statamic:not_found />
+@endif
+
+@if (! $success)
+  <statamic:not_found />
+@endif
+```
+
+:::tip
+If you want to trigger Statamic's 404 logic manually, you can throw an instance of the `NotFound` exception:
+
+```php
+<?php
+
+use Statamic\Exceptions\NotFoundHttpException;
+
+// Trigger Statamic's 404 logic.
+throw new NotFoundHttpException();
+```
+:::
+::
+
 If you'd rather perform a _redirect_ instead of throwing a 404, you can use the [redirect tag](/tags/redirect).
 
 :::tip
 There's no need to wrap the rest of the template in an else condition.
 :::
+
diff --git a/content/collections/tags/asset.md b/content/collections/tags/asset.md
index e90d2457c..81c6742e0 100644
--- a/content/collections/tags/asset.md
+++ b/content/collections/tags/asset.md
@@ -17,8 +17,26 @@ The Asset tag's primary purpose is to retrieve [Assets](/assets) by their URL.
 
 ## Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ asset url="/img/brand/logo.png" }}
-  <img src="{{ url }}" alt="{{ alt }}">
+  <img src="{{ url }}" alt="{{ alt }}" />
 {{ /asset }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<statamic:asset
+  url="/assets/logo.png"
+>
+	<img src="{{ $url }}" alt="{{ $alt }}" />
+</statamic:asset>
+
+{{-- Using Fluent Tags --}}
+@if ($asset = Statamic::tag('asset')->src('/assets/logo.png')->fetch())
+	<img src="{{ $asset->url }}" alt="{{ $asset->alt }}" />
+@endif
+```
+::
diff --git a/content/collections/tags/assets.md b/content/collections/tags/assets.md
index b08956a6a..ff2fc6e3a 100644
--- a/content/collections/tags/assets.md
+++ b/content/collections/tags/assets.md
@@ -21,6 +21,11 @@ parameters:
     type: boolean
     description: |
       If you enable recursion, the tag will return all the assets in all the subdirectories that match your parameters. Default: `false`.
+  -
+    name: not_in
+    type: string
+    description: >
+      Filter by excluding from a subdirectory or subdirectories. You may use regex, and will be matched against the file path without a leading slash. For example: `not_in="img/(brand|logos)"`
   -
     name: limit
     type: integer
@@ -39,10 +44,33 @@ parameters:
 
 If you ever find yourself needing to loop over all the assets in a container or folder instead of selecting them manually with the [assets fieldtype](/fieldtypes/assets), this tag was designed to make you smile.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ assets container="photoshoots" }}
     <img src="{{ url }}" alt="{{ alt }}" />
 {{ /assets }}
 ```
 
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<statamic:assets
+  container="photoshoots"
+>
+	<img src="{{ $url }}" alt="{{ $alt }}" />
+</statamic:assets>
+
+{{-- Using Fluent Tags --}}
+@php
+	$assets = Statamic::tag('assets')->container('photoshoots')->fetch();
+@endphp
+
+@foreach ($assets as $asset)
+	<img src="{{ $asset->url }}" alt="{{ $asset->alt }}" />
+@endforeach
+```
+::
+
 This tag returns an array of [Asset](/assets) objects. You'll have access to all the data and meta data on each file.
diff --git a/content/collections/tags/cache.md b/content/collections/tags/cache.md
index 657134eef..983e59364 100644
--- a/content/collections/tags/cache.md
+++ b/content/collections/tags/cache.md
@@ -12,14 +12,14 @@ parameters:
     name: key
     type: string
     description: 'The cache key to be used, if you''d like to manually invalidate this tag pair programmatically.'
-  -
-    name: tags
-    type: string|array
-    description: 'The [cache tags](https://laravel.com/docs/8.x/cache#cache-tags) this section will be using, if you''d like to invalidate this pair programmatically. If you use this, do not also use `key`.'
   -
     name: scope
     type: 'string'
     description: 'Sets the [cache scope](#scope). Three possible values: `site`, `page` or `user`. Has no effect when using the `key` parameter.'
+  -
+    name: store
+    type: 'string'
+    description: 'Sets the [cache store](https://laravel.com/docs/cache#accessing-multiple-cache-stores) the cache tag uses to store and retrieve the cached values.'
 stage: 4
 id: 1d0d2d1f-734b-4360-af7a-6792bf670bc7
 ---
@@ -27,7 +27,10 @@ id: 1d0d2d1f-734b-4360-af7a-6792bf670bc7
 
 After an initial render, markup inside a cache tag will be pulled from a cached, statically cached copy until invalidated.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cache for="5 minutes" }}
   {{ collection:stocks limit="5000" }}
     <!-- probably lots of stuff happening -->
@@ -35,8 +38,25 @@ After an initial render, markup inside a cache tag will be pulled from a cached,
 {{ /cache }}
 ```
 
+::tab blade
+```blade
+<statamic:cache
+  for="5 minutes"
+>
+  <statamic:collection:stocks
+    limit="5000"
+  >
+    <!-- probably lots of stuff happening -->
+  </statamic:collection:stocks>
+</statamic:cache>
+```
+::
+
+It's worth noting that variables defined inside the cache tag won't be available outside of it.
+
+
 :::tip
-You can disable the `{{ cache }}` tag (temporarily) based on the environment. This is great for your local setup.
+You can disable the `cache` tag (temporarily) based on the environment. This is great for your local setup.
 
 ``` env
 STATAMIC_CACHE_TAGS_ENABLED=false
@@ -54,13 +74,25 @@ return [
 
 You may use the `nocache` tag inside a `cache` tag to keep that section dynamic.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cache }}
-    this will be cached
-    {{ nocache }} this will remain dynamic {{ /nocache }}
-    this will also be cached
+  this will be cached
+  {{ nocache }} this will remain dynamic {{ /nocache }}
+  this will also be cached
 {{ /cache }}
 ```
+::tab blade
+```blade
+<statamic:cache>
+  this will be cached
+  <statamic:nocache> this will remain dynamic </statamic:nocache>
+  this will also be cached
+</statamic:cache>
+```
+::
 
 [Read more about the nocache tag](/tags/nocache)
 
@@ -73,23 +105,48 @@ the tag contents can be invalidated.
 
 Using the `for` parameter allows you to say how long the tag pair contents should be cached in time.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cache for="5 minutes" }} ... {{ /cache }}
 ```
+::tab blade
+```blade
+<statamic:cache
+  for="5 minute"
+>
+  ...
+</statamic:cache>
+```
+::
 
 ### Key
 
 By specifying a `key`, you can invalidate it programmatically.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cache key="homepage_stocks" }} ... {{ /cache }}
 ```
+::tab blade
+```blade
+<statamic:cache
+  key="homepage_stocks"
+>
+  ...
+</statamic:cache>
+```
+::
 
 For example, you could listen for an entry in the `stocks` collection being saved and then bust the key.
 
 ``` php
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Event;
+use Statamic\Events\EntrySaved;
 
 class EventServiceProvider
 {
@@ -108,27 +165,6 @@ class EventServiceProvider
 Invalidating by `key` won't work if you're using tags. In that case, you should invalidate by flushing the tag.
 :::
 
-### Tag
-
-By specifying `tags`, you can invalidate it programmatically. You must be using a cache driver that supports [tags](https://laravel.com/docs/8.x/cache#cache-tags), like Redis or Memcached.
-
-```
-{{ cache tags="stocks|home" }} ... {{ /cache }}
-{{ cache tags="home" }} ... {{ /cache }}
-{{ cache tags="stocks" }} ... {{ /cache }}
-```
-
-Similar to invalidating by a key as explained above, you can flush all keys that use the tags.
-
-```php
-Cache::tags('home')->flush(); // invalidates first and second pair
-Cache::tags('stocks')->flush(); // invalidates first and third pair
-```
-
-:::warning
-Don't use the `key` and `tags` parameters together.
-:::
-
 ### Cache clear
 
 The contents of your cache tags are stored in the application cache. Clear that, and you'll see fresh content next visit.
@@ -155,21 +191,46 @@ For example, you might have a "recent articles" list on the sidebar that's the s
 
 However, your header navigation might have "active" states on it, so you'd want to make sure to cache it per page.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cache scope="page" }}
     {{ nav }} ... {{ /nav }}
 {{ /cache }}
 ```
+::tab blade
+```blade
+<statamic:cache
+  scope="page"
+>
+  <statamic:nav> ... </statamic:nav>
+</statamic:cache>
+```
+::
 
 Or if your navigation changes depending on the current user, you want to use the `user` scope:
 
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cache scope="user" }}
     {{ nav }} {{ user }} ... {{ /user }} {{ /nav }}
 {{ /cache }}
 ```
-
+::tab blade
+```blade
+<statamic:cache
+  scope="user"
+>
+  <statamic:nav>
+    {{ $user->name }}
+  </statamic:nav>
+</statamic:cache>
+```
+::
 
 :::tip
 The `scope` parameter has no effect if you use the `key` parameter.
diff --git a/content/collections/tags/children.md b/content/collections/tags/children.md
new file mode 100644
index 000000000..04bf66911
--- /dev/null
+++ b/content/collections/tags/children.md
@@ -0,0 +1,35 @@
+---
+id: 85539849-c829-4ebc-a849-8b14fc8a4bf2
+blueprint: tag
+title: Children
+description: 'Fetch data from children of the current URL'
+intro: 'The Children tag allows you to loop over and fetch data from the current URL.'
+stage: 3
+---
+## Overview
+
+:::warning
+Not to be confused with [the children variable when inside the Nav tag](/tags/nav#variables).
+:::
+
+The children tag allows you to fetch data and loop over the children of the current page/URL. Can be handy when building a sub-nav, for example.
+
+You can get the parent by using the [Parent tag](/tags/parent).
+
+## Example
+
+::tabs
+
+::tab antlers
+```antlers
+{{ children }}
+    {{ title }}
+{{ /children }}
+```
+::tab blade
+```blade
+<statamic:children>
+  {{ $title }}
+</statamic:children>
+```
+::
diff --git a/content/collections/tags/collection-count.md b/content/collections/tags/collection-count.md
index f2400111b..2c3ffcb38 100644
--- a/content/collections/tags/collection-count.md
+++ b/content/collections/tags/collection-count.md
@@ -23,18 +23,48 @@ This tag's only purpose is to fetch the number of the entries in a collection th
 
 ## Example
 
-```
+::tabs
+::tab antlers
+```antlers
 There are {{ collection:count in="pogs" }} pogs in this site.
 ```
 
+::tab blade
+
+```blade
+{{-- Using Antlers Blade Components --}}
+There are <collection:count in="pogs" /> pogs in this site.
+
+{{-- Using Fluent Tags --}}
+There are {{ Statamic::tag('collection:count')->in('pogs') }} pogs in this site.
+```
+::
+
 ```html
 There are 6201 pogs in this site.
 ```
 
 You could do the same thing inside a regular collection tag by aliasing the results to a single variable and using the [count modifier](/modifiers/count).
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection:blog as="entries" }}
 There are {{ entries | count }} pogs in this site.
 {{ /collection:blog }}
 ```
+
+::tab blade
+```blade
+<statamic:collection:blog
+  as="entries"
+>
+{{-- This example calls the ->count() method on a Collection instance. --}}
+There are {{ $entries->count() }} pogs in this site.
+
+{{-- This example uses the count modifier. --}}
+There are {{ Statamic::modify($entries)->count()->fetch() }} pogs in this site.
+
+</statamic:collection:blog>
+```
+::
\ No newline at end of file
diff --git a/content/collections/tags/collection-next.md b/content/collections/tags/collection-next.md
index 38f82bf46..b4487ac7b 100755
--- a/content/collections/tags/collection-next.md
+++ b/content/collections/tags/collection-next.md
@@ -34,7 +34,10 @@ This tag relies on the native publish `date` field for date ordering.
 
 This will show the next 2 posts in a `blog` collection. It'll scope the entries loop into the `posts` tag pair. If there are no more entries, the no results text will be shown.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection:next in="blog" as="posts" limit="2" sort="date:asc" }}
 
   {{ if no_results }}
@@ -49,6 +52,26 @@ This will show the next 2 posts in a `blog` collection. It'll scope the entries
 
 {{ /collection:next }}
 ```
+::tab blade
+```blade
+<statamic:collection:next
+  in="blog"
+  as="posts"
+  limit="2"
+  sort="date:asc"
+>
+  @if ($no_results)
+    No more posts to read!
+  @endif
+
+  @foreach ($posts as $post)
+    <div class="post">
+      <a href="{{ $post->url }}">{{ $post->title }}</a>
+    </div>
+  @endforeach
+</statamic:collection:next>
+```
+::
 
 :::tip
 This functions the same way as the [collection:previous](/tags/collection-previous) tag but in the opposite direction.
diff --git a/content/collections/tags/collection-previous.md b/content/collections/tags/collection-previous.md
index efdbc7380..7b22bdfc3 100644
--- a/content/collections/tags/collection-previous.md
+++ b/content/collections/tags/collection-previous.md
@@ -34,7 +34,10 @@ This tag relies on the native publish `date` field for date ordering.
 
 This will show the next 2 posts in a `blog` collection. It'll scope the entries loop into the `posts` tag pair. If there are no more entries, the no results text will be shown.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection:previous in="blog" as="posts" limit="2" sort="date:asc" }}
 
   {{ if no_results }}
@@ -49,6 +52,26 @@ This will show the next 2 posts in a `blog` collection. It'll scope the entries
 
 {{ /collection:previous }}
 ```
+::tab blade
+```blade
+<statamic:collection:previous
+  in="blog"
+  as="posts"
+  limit="2"
+  sort="date:asc"
+>
+  @if ($no_results)
+    No more posts to read!
+  @endif
+
+  @foreach ($posts as $post)
+    <div class="post">
+      <a href="{{ $post->url }}">{{ $post->title }}</a>
+    </div>
+  @endforeach
+</statamic:collection:previous>
+```
+::
 
 :::tip
 This functions the same way as the [collection:next](/tags/collection-next) tag but in the opposite direction.
diff --git a/content/collections/tags/collection.md b/content/collections/tags/collection.md
index 369e063bf..3d588f77b 100644
--- a/content/collections/tags/collection.md
+++ b/content/collections/tags/collection.md
@@ -55,7 +55,7 @@ parameters:
   -
     name: filter|query_scope
     type: string
-    description: 'Apply a custom [query scope](https://statamic.dev/extending/query-scopes-and-filters)'
+    description: "Apply a custom [query scope](https://statamic.dev/extending/query-scopes-and-filters) You should specify the query scope's handle, which is usually the name of the class in snake case. For example: `MyAwesomeScope` would be `my_awesome_scope`."
     required: false
   -
     name: offset
@@ -72,6 +72,11 @@ parameters:
     type: 'boolean|int *false*'
     description: 'Specify whether your entries should be paginated. You can pass `true` and also use the `limit` param, or just pass the limit directly in here.'
     required: false
+  -
+    name: page_name
+    type: 'string *page*'
+    description: 'The query string variable used to store the page number (ie. `?page=`).'
+    required: false
   -
     name: on_each_side
     type: 'int *3*'
@@ -144,17 +149,32 @@ The collection tag is one of main workhorses of your Statamic [frontend](/fronte
 
 A basic example would be to loop through the entries in a blog collection and link to each individual blog post:
 
-```
+::tabs
+::tab antlers
+```antlers
 <ul>
 {{ collection from="blog" }}
     <li><a href="{{ url }}">{{ title }}</a></li>
 {{ /collection }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+<statamic:collection
+    from="blog"
+>
+    <li><a href="{{ $url }}">{{ $title }}</a></li>
+</statamic:collection>
+</ul>
+```
+::
 
 You can also use the shorthand syntax for this. We prefer this style ourselves.
 
-```
+::tabs
+::tab antlers
+```antlers
 <ul>
 {{ collection:blog }}
     <li><a href="{{ url }}">{{ title }}</a></li>
@@ -162,17 +182,50 @@ You can also use the shorthand syntax for this. We prefer this style ourselves.
 </ul>
 ```
 
+::tab blade
+```blade
+<ul>
+<statamic:collection:blog>
+    <li><a href="{{ $url }}">{{ $title }}</a></li>
+</statamic:collection:blog>
+</ul>
+```
+::
+
 If you'd like to fetch entries from multiple collections, you'll need to use the standard syntax.
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection from="blog|events" }}
 ```
+::tab blade
+```blade
+<statamic:collection
+    from="blog|events"
+>
+
+</statamic:collection>
+```
+::
 
 To get entries from _all_ collections, use the wildcard `*`. You may also exclude collections when doing this.
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection from="*" not_from="blog|events" }}
 ```
+::tab blade
+```blade
+<statamic:collection
+    from="*"
+    not_from="blog|events"
+>
+
+</statamic:collection>
+```
+::
 
 ## Filtering
 
@@ -182,10 +235,25 @@ There are a number of ways to filter your collection. There's the conditions syn
 
 Want to get entries where the title has the words "awesome" and "thing", and "joe" is the author? You can write it how you'd say it:
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection:blog title:contains="awesome" title:contains="thing" author:is="joe" }}
 ```
 
+::tab blade
+
+```blade
+<statamic:collection:blog
+    title:contains="awesome"
+    title:contains="thing"
+    author:is="joe"
+>
+
+</statamic:collection:blog>
+```
+::
+
 There are a bunch of conditions available to you, like `:is`, `:isnt`, `:contains`, `:starts_with`, and `:is_before`. There are many more than that. In fact, there's a whole page dedicated to [conditions - check them out][conditions].
 
 ### Taxonomies
@@ -194,10 +262,23 @@ Filtering by a taxonomy term (or terms) is done using the `taxonomy` parameter,
 
 To show entries with the `harry-potter` term within the `tags` taxonomy, you could do this:
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection:blog taxonomy:tags="harry-potter" }}
 ```
 
+::tab blade
+
+```blade
+<statamic:collection:blog
+    taxonomy:tags="harry-potter"
+>
+
+</statamic:collection:blog>
+```
+::
+
 It is important that the collection has been [configured to use this taxonomy](/collections#taxonomies) in order to filter the results based on the passed in term.
 
 :::tip
@@ -206,18 +287,25 @@ There are several different ways to use this filtering parameter. They are expla
 
 ### Published Status
 
-By default, only `published` entries are included.  Entries can be queried against `draft`, `scheduled`, or `expired` status with [conditions](#conditions) on `status` like this:
+By default, only `published` entries are included.  Entries can be queried against `any`, `draft`, `scheduled`, or `expired` status with [conditions](#conditions) on `status` like this:
 
+::tabs
+::tab antlers
+```antlers
+// Only include published entries
+{{ collection:blog status:is="published" }}
 ```
-// Include draft entries
-{{ collection:blog status:in="published|draft" }}
 
-// Only include expired entries
-{{ collection:blog status:is="expired" }}
+::tab blade
+
+```blade
+<statamic:collection:blog
+    status:is="published"
+>
 
-// Exclude published entries
-{{ collection:blog status:not_in="published" }}
+</statamic:collection:blog>
 ```
+::
 
 :::tip
 **What is the difference between filtering against `published` and `status`?** Read more on [date behavior and published status](/collections#date-behavior-and-published-status)!
@@ -228,15 +316,32 @@ By default, only `published` entries are included.  Entries can be queried again
 
 Doing something custom or complicated? You can create [query scopes](/extending/query-scopes-and-filters) to narrow down those results with the `query_scope` or `filter` parameter:
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection:blog query_scope="your_query_scope" }}
 ```
 
+::tab blade
+```blade
+<statamic:collection:blog
+    query_scope="your_query_scope"
+>
+
+</statamic:collection:blog>
+```
+::
+
+You should reference the query scope by its handle, which is usually the name of the class in snake case. For example: `YourQueryScope` would be `your_query_scope`.
+
 ## Pagination
 
 To enable pagination mode, add the `paginate` parameter with the number of entries in each page.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection:blog paginate="10" as="posts" }}
 
     {{ if no_results }}
@@ -260,6 +365,33 @@ To enable pagination mode, add the `paginate` parameter with the number of entri
 
 {{ /collection:blog }}
 ```
+::tab blade
+```blade
+<statamic:collection:pages
+  paginate="10"
+  as="posts"
+>
+  @if ($no_results)
+    <p>Aww, there are no results.</p>
+  @endif
+
+  @foreach ($posts as $post)
+    <article>
+      {{ $post->title }}
+    </article>
+  @endforeach
+
+  @if ($paginate['total_pages'] > 1)
+    <a href="{{ $paginate['prev_page'] }}">⬅ Previous</a>
+
+    {{ $paginate['current_page'] }} of {{ $paginate['total_pages'] }} pages
+    (There are {{ $paginate['total_items'] }} posts)
+
+    <a href="{{ $paginate['next_page'] }}">Next ➡</a>
+  @endif
+</statamic:collection:pages>
+```
+::
 
 In pagination mode, your entries will be scoped (in the example, we're scoping them into the `posts` tag pair). Use that tag pair to loop over the entries in that page.
 
@@ -293,7 +425,10 @@ Maybe the default markup isn't for you and you want total control. You're a mave
 
 Here's the `auto_links` output, recreated using the other tags, for you mavericks out there:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ paginate }}
     <ul class="pagination">
         {{ if prev_page }}
@@ -346,18 +481,110 @@ Here's the `auto_links` output, recreated using the other tags, for you maverick
     </ul>
 {{ /paginate }}
 ```
+::tab blade
+```blade
+<statamic:collection:blog
+  paginate="10"
+  as="posts"
+>
+  @if ($no_results)
+    <p>Aww, there are no results.</p>
+  @endif
+
+  @foreach ($posts as $post)
+    <article>
+      {{ $post->title }}
+    </article>
+  @endforeach
+
+  @if ($paginate['total_pages'] > 1)
+    @php
+        $hasSlider = count($paginate['links']['segments']['slider']) > 0;
+        $hasLast = count($paginate['links']['segments']['last']) > 0;
+    @endphp
+
+    <ul class="pagination">
+      @if ($paginate['prev_page'])
+        <li><a href="{{ $paginate['prev_page'] }}">&laquo;</a></li>
+      @else
+        <li class="disabled"><span>&laquo;</span></li>
+      @endif
+
+      @foreach (Arr::get($paginate, 'links.segments.first', []) as $segment)
+        @if ($segment['page'] == $paginate['current_page'])
+          <li class="active"><span>{{ $segment['page'] }}</span></li>
+        @else
+          <li><a href="{{ $segment['url'] }}">{{ $segment['page'] }}</a></li>
+        @endif
+      @endforeach
+
+      @if ($hasSlider)
+        <li class="disabled"><span>...</span></li>
+      @endif
+
+      @foreach (Arr::get($paginate, 'links.segments.slider', []) as $segment)
+        @if ($segment['page'] == $paginate['current_page'])
+          <li class="active"><span>{{ $segment['page'] }}</span></li>
+        @else
+          <li><a href="{{ $segment['url'] }}">{{ $segment['page'] }}</a></li>
+        @endif
+      @endforeach
+
+      @if ($hasSlider || $hasLast)
+        <li class="disabled"><span>...</span></li>
+      @endif
+
+      @foreach (Arr::get($paginate, 'links.segments.last', []) as $segment)
+        @if ($segment['page'] == $paginate['current_page'])
+          <li class="active"><span>{{ $segment['page'] }}</span></li>
+        @else
+          <li><a href="{{ $segment['url'] }}">{{ $segment['page'] }}</a></li>
+        @endif
+      @endforeach
+
+      @if ($paginate['next_page'])
+        <li><a href="{{ $paginate['next_page'] }}">&raquo;</a></li>
+      @else
+        <li class="disabled"><span>&raquo;</span></li>
+      @endif
+    </ul>
+  @endif
+</statamic:collection:blog>
+```
+::
 
 ## Aliasing {#alias}
 
 Often times you'd like to have some extra markup around your list of entries, but only if there are results. Like a `<ul>` element, for example. You can do this by _aliasing_ the results into a new variable tag pair. This actually creates a copy of your data as a new variable. It goes like this:
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection:blog as="posts" }}
-  {{ posts }}
-    <a href="{{ url }}">{{ title }}</a>
-  {{ /posts }}
+    <ul>
+      {{ posts }}
+        <li>
+            <a href="{{ url }}">{{ title }}</a>
+        </li>
+      {{ /posts }}
+    <ul>
 {{ /collection:blog }}
 ```
+::tab blade
+```blade
+<statamic:collection:blog
+  as="posts"
+>
+  <ul>
+    @foreach ($posts as $post)
+    <li>
+      <a href="{{ $post->url }}">{{ $post->title }}</a>
+    </li>
+    @endforeach
+  </ul>
+</statamic:collection:blog>
+```
+::
 
 ## Scoping {#scope}
 
@@ -370,7 +597,9 @@ You can assign a _scope_ prefix to your entries so you can be sure to get the da
 featured_image: /img/totes-adorbs-kitteh.jpg
 ```
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection:blog scope="post" }}
   <div class="block">
     <img src="{{ post:featured_image }}">
@@ -378,9 +607,23 @@ featured_image: /img/totes-adorbs-kitteh.jpg
 {{ /collection:blog }}
 ```
 
+::tab blade
+```blade
+<statamic:collection:blog
+    scope="post"
+>
+  <div class="block">
+    <img src="{{ $post->featured_image }}">
+  </div>
+</statamic:collection:blog>
+```
+::
+
 You can also add your scope down into your [alias](#alias) loop. Yep, we thought of that too.
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection:blog as="posts" }}
   {{ posts scope="post" }}
     <div class="block">
@@ -389,6 +632,19 @@ You can also add your scope down into your [alias](#alias) loop. Yep, we thought
   {{ /posts }}
 {{ /collection:blog }}
 ```
+::tab blade
+```blade
+<statamic:collection:blog
+    as="posts"
+>
+  @foreach ($posts as $post)
+    <div class="block">
+      <img src="{{ $post->featured_image }}">
+    </div>
+  @endforeach
+</statamic:collection:blog>
+```
+::
 
 Combining both an Alias and a Scope on a Collection Tag doesn't make a whole lot of sense. You shouldn't do that.
 
@@ -399,7 +655,10 @@ There's no "grouping" feature on the collection tag itself.
 
 For example, if you want to group some dated entries by month/year, you could do this:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection:articles as="entries" }}
     {{ entries group_by="date|F Y" }}
         {{ groups }}
@@ -411,5 +670,24 @@ For example, if you want to group some dated entries by month/year, you could do
     {{ /entries }}
 {{ /collection:articles }}
 ```
+::tab blade
+```blade
+<statamic:collection:articles
+  as="entries"
+>
+  @php
+  $groupedEntries = $entries->groupBy(fn($entry) => $entry->date?->format('F Y'));
+  @endphp
+
+  @foreach ($groupedEntries as $group => $items)
+    <h3>{{ $group }}</h3>
+
+    @foreach ($items as $entry)
+      {{ $entry->title }}
+    @endforeach
+  @endforeach
+</statamic:collection:articles>
+```
+::
 
 [conditions]: /conditions
diff --git a/content/collections/tags/cookie.md b/content/collections/tags/cookie.md
index 732b18049..77080d76b 100644
--- a/content/collections/tags/cookie.md
+++ b/content/collections/tags/cookie.md
@@ -9,11 +9,25 @@ id: c15836c2-808d-4260-9d01-e5a569da5b7a
 
 You can use `{{ cookie }}` as a tag pair to access any cookie data that has been set.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cookie }}
     {{ oreo }}
 {{ /cookie }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:cookie>
+  {{ $oreo ?? '' }}
+</s:cookie>
+
+{{-- Using the Cookie facade --}}
+{{ Cookie::get('oreo') }}
+```
+::
 
 ```.output
 Yum yum yum.
@@ -21,51 +35,137 @@ Yum yum yum.
 
 You can also retrieve single variables with a single tag syntax.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cookie:oreo }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:cookie:oreo />
+
+{{-- Using the Cookie facade --}}
+{{ Cookie::get('oreo') }}
+```
+::
 
 ## Checking
 
 You can check if a cookie exists with [cookie:has](/tags/session-has).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if {cookie:has key="has_voted"} === true }}
   You already voted. Thank you!
 {{ /if }}
 ```
+::tab blade
+```blade
+{{-- Using the Cookie facade --}}
+@if (Cookie::has('has_voted') === true)
+  You already voted. Thank you!
+@endif
+```
+::
 
 ## Aliasing
 
 If you need extra markup around your cookie data, you can _alias_ a new child array variable.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cookie as="snack" }}
   {{ snack }}
     {{ message }}
   {{ /snack }}
 {{ /cookie }}
 ```
+::tab blade
+```blade
+{{-- Retrieving the message using the Cookie facade --}}
+{{ Cookie::get('message') }}
+
+{{-- Aliasing using Antlers Blade Components --}}
+<s:cookie as="snack">
+  {{ $snack['oreo'] ?? '' }}
+</s:cookie>
+```
+::
 
 ## Setting
 
 You can set a cookie with `cookie:set`:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cookie:set my_key="my_value" }}
 ```
+::tab blade
+```blade
+{{-- Using Antler Blade Components --}}
+<s:cookie:set my_key="my_value" />
+
+{{-- Using the cookie helper --}}
+<?php
+  cookie()->queue(cookie('my_key', 'my_value'));
+?>
+```
+::
 
 You can optionally set a number of minutes the cookie is valid for (60 by default):
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cookie:set my_key="my_value" minutes="3600" }}
 ```
+::tab blade
+```blade
+{{-- Using Antler Blade Components --}}
+<s:cookie:set
+  my_key="my_value"
+  minutes="3600"
+/>
+
+{{-- Using the cookie helper --}}
+<?php
+  cookie()->queue(cookie('my_key', 'my_value', 3600));
+?>
+```
+::
 
 You can set multiple cookies at once and reference interpolated data (references to variables).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cookie:set likes="hats" :visited="url" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:cookie:set
+  likes="hats"
+  :visited="$url"
+/>
+
+{{-- Using the cookie helper --}}
+<?php
+  cookie()->queue(cookie('likes', 'hats'));
+  cookie()->queue(cookie('visited', $url));
+?>
+```
+::
 
 :::tip
 When you set a cookie, it will only be available on the _next_ request.
@@ -75,12 +175,54 @@ When you set a cookie, it will only be available on the _next_ request.
 
 You can remove cookies by passing the names of the variables into the `keys` parameter. Pass multiple keys by delimiting them with a pipe.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ cookie:forget keys="likes|referral" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:cookie:forget
+  keys="likes|referral"
+/>
+
+{{-- Using the Cookie helper --}}
+<?php
+  cookie()->queue(cookie()->forget('likes'));
+  cookie()->queue(cookie()->forget('referral'));
+?>
+```
+::
 
 ## Accessing Cookies in JavaScript
 
-By default, in Laravel, cookies are encrypted so you will not be able to access the values of any data you set outside of PHP.
+By default, in Laravel, cookies are encrypted so you will not be able to access the values of any data you set outside of PHP. To exclude specific cookies from encryption follow the steps below:
+
+### Laravel 10
 
 To prevent encryption you need to add an exception to the `$except` array in your `app/Http/Middleware/EncryptCookies.php` file.
+
+```php
+/**
+ * The names of the cookies that should not be encrypted.
+ *
+ * @var array
+ */
+protected $except = [
+    'cookie_name',
+];
+```
+
+### Laravel 11 and above
+
+To prevent encryption you need to use the `encryptCookies` method in your application's `bootstrap/app.php` file:
+
+```php
+->withMiddleware(function (Middleware $middleware) {
+    $middleware->encryptCookies(except: [
+        'cookie_name',
+    ]);
+})
+```
diff --git a/content/collections/tags/dictionary.md b/content/collections/tags/dictionary.md
new file mode 100644
index 000000000..35c9d22c6
--- /dev/null
+++ b/content/collections/tags/dictionary.md
@@ -0,0 +1,260 @@
+---
+title: Dictionary
+intro: Allows you to loop through options from a Dictionary.
+description: Allows you to loop through options from a Dictionary.
+id: 603bb573-5ebf-4851-935e-713f1caaa431
+parameters:
+  -
+    name: handle
+    type: string
+    description: 'The handle of the dictionary you wish to get options from.'
+    required: true
+  -
+    name: sort
+    type: string
+    description: 'Sort options by field name (or `random`). You may pipe-separate multiple fields for sub-sorting and specify sort direction of each field using a colon. For example, `sort="name"` or `sort="date:asc|name:desc"` to sort by date then by name.'
+    required: false
+  -
+    name: limit
+    type: integer
+    description: 'Limit the total results returned.'
+    required: false
+  -
+    name: filter|query_scope
+    type: string
+    description: "Apply a custom [query scope](https://statamic.dev/extending/query-scopes-and-filters) You should specify the query scope's handle, which is usually the name of the class in snake case. For example: `MyAwesomeScope` would be `my_awesome_scope`."
+    required: false
+  -
+    name: offset
+    type: integer
+    description: 'Skip a specified number of results.'
+    required: false
+  -
+    name: paginate
+    type: 'boolean|int *false*'
+    description: 'Specify whether your options should be paginated. You can pass `true` and also use the `limit` param, or just pass the limit directly in here.'
+    required: false
+  -
+    name: page_name
+    type: 'string *page*'
+    description: 'The query string variable used to store the page number (ie. `?page=`).'
+    required: false
+  -
+    name: on_each_side
+    type: 'int *3*'
+    description: When using pagination, this specifies the max number of links each side of the current page. The minimum value is `1`.
+  -
+    name: as
+    type: string
+    description: 'Alias your options into a new variable loop.'
+    required: false
+  -
+    name: scope
+    type: string
+    description: 'Scope your options with a variable prefix.'
+    required: false
+  -
+    name: '*'
+    type: string
+    description: 'Any additional parameters will be set as config options on the Dictionary.'
+---
+
+This tag allows you to loop through options from a [Dictionary](/fieldtypes/dictionary).
+
+::tabs
+
+::tab antlers
+```antlers
+{{ dictionary handle="countries" }}
+    {{ label }} {{ value }}
+{{ /dictionary }}
+```
+::tab blade
+```blade
+<s:dictionary handle="countries">
+  {{ $label }} {{ $value }}
+</s:dictionary>
+```
+::
+
+You can also use the shorthand syntax for this:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ dictionary:countries }}
+    {{ label }} {{ value }}
+{{ /dictionary:countries }}
+```
+::tab blade
+```blade
+<s:dictionary:countries>
+  {{ $label }} {{ $value }}
+</s:dictionary:countries>
+```
+::
+
+You can also output any additional data provided by the Dictionary, like `emoji` or `region` in the case of the Countries dictionary:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ dictionary:countries }}
+    {{ emoji }} {{ name }} in {{ region }}
+{{ /dictionary:countries }}
+```
+::tab blade
+```blade
+<s:dictionary:countries>
+  {{ $emoji }} {{ $name }} in {{ $region }}
+</s:dictionary:countries>
+```
+::
+
+## Searching
+
+::tabs
+
+::tab antlers
+```antlers
+{{ dictionary:countries search="Aus" }}
+    {{ label }} {{ value }}
+{{ /dictionary:countries }}
+```
+::tab blade
+```blade
+<s:dictionary:countries search="Aus">
+  {{ $label }} {{ $value }}
+</s:dictionary:countries>
+```
+::
+
+```html
+🇦🇺 Australia AUS
+🇦🇹 Austria AUT
+```
+
+## Conditions
+
+::tabs
+
+::tab antlers
+```antlers
+{{ dictionary:countries region:is="Europe" }}
+    {{ label }} {{ value }}
+{{ /dictionary:countries }}
+```
+::tab blade
+```blade
+<s:dictionary:countries region:is="Europe">
+  {{ $label }} {{ $value }}
+</s:dictionary:countries>
+```
+::
+
+There are a bunch of conditions available to you, like `:is`, `:isnt`, `:contains`, `:starts_with`, and `:is_before`. There are many more than that. In fact, there's a whole page dedicated to [conditions - check them out](/conditions).
+
+## Paginating
+
+To enable pagination mode, add the `paginate` parameter with the number of options in each page.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ dictionary:countries paginate="10" as="countries" }}
+    {{ countries }}
+        {{ label }}<br>
+    {{ /countries }}
+
+    {{ paginate }}
+        <a href="{{ prev_page }}">⬅ Previous</a>
+
+        {{ current_page }} of {{ total_pages }} pages
+        (There are {{ total_items }} pages)
+
+        <a href="{{ next_page }}">Next ➡</a>
+    {{ /paginate }}
+{{ /dictionary:countries }}
+```
+::tab blade
+```blade
+<s:dictionary:countries paginate="10" as="countries">
+  @foreach ($countries as $country)
+    {{ $country['label'] }}<br>
+  @endforeach
+
+  @if ($paginate['total_pages'] > 1)
+    <a href="{{ $paginate['prev_page'] }}">⬅ Previous</a>
+
+    {{ $paginate['current_page'] }} of {{ $paginate['total_pages'] }} pages
+    (There are {{ $paginate['total_items'] }} pages)
+
+    <a href="{{ $paginate['next_page'] }}">Next ➡</a>
+  @endif
+</s:dictionary:countries>
+```
+::
+
+In pagination mode, your options will be scoped (in the example, we're scoping them into the `countries` tag pair). Use that tag pair to loop over the options in that page.
+
+The `paginate` variable will become available to you. This is an array containing data about the paginated set.
+
+| Variable | Description |
+|----------|-------------|
+| `next_page` |	The URL to the next paginated page.
+| `prev_page` |	The URL to the previous paginated page.
+| `total_items` |	The total number of options.
+| `total_pages` |	The number of paginated pages.
+| `current_page` |	The current paginated page. (ie. the x in the ?page=x param)
+| `auto_links` |	Outputs an HTML list of paginated links.
+| `links` |	Contains data for you to construct a custom list of links.
+| `links:all` |	An array of all the pages. You can loop over this and output {{ url }} and {{ page }}.
+| `links:segments` |	An array of data for you to create a segmented list of links.
+
+<br>
+
+## Query Scopes
+
+Doing something custom or complicated? You can create [query scopes](/extending/query-scopes-and-filters) to narrow down those results with the `query_scope` or `filter` parameter:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ dictionary:countries query_scope="your_query_scope" }}
+```
+::tab blade
+```blade
+<s:dictionary:countries query_scope="your_query_scope">
+
+</s:dictionary:countries>
+```
+::
+
+You should reference the query scope by its handle, which is usually the name of the class in snake case. For example: `YourQueryScope` would be `your_query_scope`.
+
+## Files
+
+One of the powerful things you can do with the Files dictionary is pull in options from a JSON, YAML or CSV file.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ dictionary:file filename="products.json" label="Name" value="Code" paginate="5" }}
+```
+::tab blade
+```blade
+<s:dictionary:file
+  filename="products.json"
+  label="Name"
+  value="Code"
+  paginate="5"
+>
+
+</s:dictionary:file>
+```
+::
diff --git a/content/collections/tags/dump.md b/content/collections/tags/dump.md
index 48ccc0989..1af3ffc7d 100644
--- a/content/collections/tags/dump.md
+++ b/content/collections/tags/dump.md
@@ -10,17 +10,39 @@ This tag is useful for debugging. It will stop execution of the page and render
 
 Dropping it in a template or layout will show you all the data that's been injected into the view layer.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ dump }}
 ```
+::tab blade
+```blade
+<statamic:dump />
+```
+::
 
 Dropping it inside a loop will dump all the data _just for that loop context_.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ gallery }}
   {{ dump }}
 {{ /gallery }}
 ```
+::tab blade
+```blade
+@foreach ($gallery as $item)
+  {{-- Using the Statamic tag --}}
+  <statamic:dump />
+  
+  {{-- Using Blade Directives --}}
+  @dd($item)
+@endforeach
+```
+::
 
 :::tip
 You can also use the [dump modifier](/modifiers/dump) to achieve a similar effect.
diff --git a/content/collections/tags/foreach.md b/content/collections/tags/foreach.md
index ce6d5bc08..a8edb83a3 100644
--- a/content/collections/tags/foreach.md
+++ b/content/collections/tags/foreach.md
@@ -14,6 +14,11 @@ parameters:
     type: string|array
     description: |
       The name of the array to loop over, or a reference to the array itself. See [dynamic variables](#dynamic-variables).
+  -
+    name: limit
+    type: int
+    description: |
+      Limits the number of items returned in the loop.
 stage: 4
 id: 34b03d03-a113-467f-a1c9-65bc6b446220
 ---
@@ -35,8 +40,10 @@ song_reviews:
   Never Gonna Give You Up: 5/5
   My Heart Will Go On: 3/5
 ```
+::tabs
 
-```
+::tab antlers
+```antlers
 {{ foreach:company_info }}
   {{ key }}: {{ value }}<br>
 {{ /foreach:company_info }}
@@ -47,6 +54,22 @@ song_reviews:
   {{ /foreach:song_reviews }}
 </ul>
 ```
+::tab blade
+
+When authoring Blade templates, you should use the `@foreach` directive instead.
+
+```blade
+@foreach ($company_info as $key => $value)
+  <li>{{ $key }}: {{ $value }}<br>
+@endforeach
+
+<ul>
+  @foreach ($song_reviews as $song => $rating)
+     <li>{{ $song }}: {{ $rating }}</li>
+  @endforeach
+</ul>
+```
+::
 
 ```html
 Address 1: 123 Hollywood Blvd<br>
@@ -69,11 +92,21 @@ PHP reserves the word `foreach`, so this tag is _technically_ an alias of `itera
 
 Instead of using the shorthand `{{ foreach:variable_name }}` syntax, you may pass in the array's name manually.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ foreach array="song_reviews" }}
     ...
 {{ /foreach }}
 ```
+::tab blade
+```blade
+@foreach ($song_reviews as $review)
+  ...
+@endforeach
+```
+::
 
 If you have a more complicated array location, you can use a dynamic parameter to pass the array itself.
 
@@ -82,8 +115,18 @@ reviews:
   songs: [...]
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ foreach :array="reviews:songs" }}
     ...
 {{ /foreach }}
 ```
+::tab blade
+```blade
+@foreach ($reviews['songs'] as $song)
+  ...
+@endforeach
+```
+::
diff --git a/content/collections/tags/form-create.md b/content/collections/tags/form-create.md
index b27428fa8..23d856a9e 100644
--- a/content/collections/tags/form-create.md
+++ b/content/collections/tags/form-create.md
@@ -74,7 +74,10 @@ stage: 4
 
 Here we'll be creating a form to submit an entry in a `contact` form.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ form:create in="contact" }}
 
     {{ if errors }}
@@ -101,97 +104,264 @@ Here we'll be creating a form to submit an entry in a `contact` form.
 
 {{ /form:create }}
 ```
+::tab blade
+```blade
+<s:form:create
+  in="contact"
+>
+  @if (count($errors) > 0)
+    <div class="bg-red-300 text-white p-2">
+      @foreach ($errors as $error)
+        {{ $error }}<br>
+      @endforeach
+    </div>
+  @endif
 
-You can also use the shorthand syntax for `form:create in="contact"`.
+  @if ($success)
+    <div class="bg-green-300 text-white p-2">
+      {{ $success }}
+    </div>
+  @endif
+
+  <label>Email</label>
+  <input type="text" name="email" value="{{ old('email') }}" />
+
+  <label>Message</label>
+  <textarea name="message" rows="5">{{ old('message') }}</textarea>
 
+  <button>Submit</button>
+</s:form:create>
 ```
+::
+
+You can also use the shorthand syntax for `form:create in="contact"`.
+
+::tabs
+
+::tab antlers
+```antlers
 {{ form:contact }}
     ...
 {{ /form:contact }}
 ```
+::tab blade
+```blade
+<s:form:contact>
+  ...
+</s:form:contact>
+```
+::
 
-When you need to render a form that's selected via the Form Fieldtype you can use this pattern:
+Using this tag, Statamic will automatically take care of opening your form with a proper [CSRF token](https://laravel.com/docs/csrf).
 
+```html
+<form method="POST" action="https://website.example/!/forms/contact">
+    <input type="hidden" name="_token" value="cN03woeRj5Q0GtlOj7GydsZcRwlyp9VLzfpwDFJZ">
+    ...
+</form>
 ```
+
+It also provides helpers for [dynamically rendering](#dynamic-rendering) sections and fields, [conditionally rendering](#conditional-fields) fields, etc.
+
+## Dynamic Rendering
+
+### Dynamically Rendering via Form Fieldtype
+
+When you need to render a form that's selected via the [Form Fieldtype](/fieldtypes/form) you can use this pattern:
+
+::tabs
+
+::tab antlers
+```antlers
 {{ form:create in="{ form_fieldtype:handle }" }}
     ...
 {{ /form:create }}
 ```
+::tab blade
+```blade
+<s:form:create
+  :in="$form_fieldtype->handle"
+>
+  ...
+</s:form:create>
+```
+::
 
 This way you can let Control Panel users select which form should be used on an entry.
 
-## Dynamic Rendering
+### Dynamically Rendering Fields
+
+Instead of hardcoding individual fields, you may loop through the `fields` array to render your blueprint's fields in a dynamic fashion.
 
-Instead of hardcoding individual fields, you may loop through the `fields` array to render fields in a dynamic fashion.
+::tabs
 
+::tab antlers
+```antlers
+{{ form:contact }}
+
+    {{ fields }}
+        <div class="p-2">
+            <label>
+                {{ display }}
+                {{ if validate | contains:required }}
+                    <sup class="text-red">*</sup>
+                {{ /if }}
+            </label>
+            <div class="p-1">{{ field }}</div>
+            {{ if error }}
+                <p class="text-gray-500">{{ error }}</p>
+            {{ /if }}
+        </div>
+    {{ /fields }}
+
+    <button>Submit</button>
+
+{{ /form:contact }}
 ```
-{{ fields }}
+::tab blade
+```blade
+<s:form:contact>
+
+  @foreach ($fields as $field)
     <div class="p-2">
-        <label>
-          {{ display }}
-          {{ if validate | contains:required }}
-            <sup class="text-red">*</sup>
-          {{ /if }}
-        </label>
-        <div class="p-1">{{ field }}</div>
-        {{ if error }}
-            <p class="text-gray-500">{{ error }}</p>
-        {{ /if }}
+      <label>
+        {{ $field['display'] }}
+        @if (in_array('required', $field['validate'] ?? []))
+          <sup class="text-red">*</sup>
+        @endif
+      </label>
+      <div class="p-1">{!! $field['field'] !!}</div>
+      @if ($field['error'])
+        <p class="text-gray-500">{{ $field['error'] }}</p>
+      @endif
     </div>
-{{ /fields }}
+  @endforeach
+
+  <button>Submit</button>
+
+</s:form:contact>
 ```
+::
 
 Each item in the `fields` array contains the following data configurable in the form's blueprint.
 
+#### Fields Array Variables
+
 | Variable | Type | Description |
 |---|---| --- |
 | `handle` | string | System name for the field |
 | `display` | string | User-friendly field label |
 | `type` | string | Name of the [fieldtype](/fieldtypes) |
-| ` field` | string | Pre-rendered HTML based on the fieldtype |
+| ` field` | string | [Pre-rendered field HTML](#pre-rendered-field-html) based on the fieldtype |
 | `error` | string | Error message from an unsuccessful submission |
 | `old` | array | Contains user input from an unsuccessful submission |
 | `instructions` | string | User-friendly instructions label |
 | `validate` | array | Contains an array of validation rules |
+| `width` | string | Width of the field assigned in the blueprint |
 
-### Pre-rendered HTML
+
+### Pre-rendered Field HTML
 
 Using the `field` variable will intelligently render inputs as inputs, textareas as textareas, and snozzberries as snozzberries.
 
 You can customize these pre-rendered snippets by running `php artisan vendor:publish --tag=statamic-forms`. It will expose editable templates snippets in your `views/vendor/statamic/forms/fields` directory that will be used by each fieldtype.
 
+:::tip
+By default, pre-rendered snippets are implemented in Antlers. If you'd prefer to use Blade, you can grab some [ready-to-go Blade snippets](/blade-form-fields) to use as a starting point.
+:::
+
 This approach, combined with the [blueprint editor](/blueprints), will give you something very similar to a traditional "Form Builder" from other platforms.
 
 **Example**
 
+::tabs
+
+::tab antlers
+```antlers
+{{ fields }}
+    <div class="mb-2">
+        <label class="block">{{ display }}</label>
+        {{ field }}
+    </div>
+{{ /fields }}
+```
+::tab blade
+```blade
+@foreach ($fields as $field)
+  <div class="mb-2">
+    <label class="block">{{ $field['display'] }}</label>
+    {!! $field['field'] !!}
+  </div>
+@endforeach
 ```
+::
+
+```output
+<div class="mb-2">
+    <label class="block">Name</label>
+    <input type="text" name="name" value="">
+</div>
+<div class="mb-2">
+    <label class="block">Email Address</label>
+    <input type="text" name="email" value="">
+</div>
+<div class="mb-2">
+    <label class="block">Note</label>
+    <textarea name="message"></textarea>
+</div>
+```
+
+### Dynamically Rendering Sections
+
+If you have defined multiple sections in your form's blueprint, you can loop over these `sections` in a dynamic fashion as well.
+
+::tabs
+
+::tab antlers
+```antlers
 {{ form:contact }}
-    {{ fields }}
-        <div class="mb-2">
-            <label class="block">{{ display }}</label>
-            {{ field }}
-        </div>
-    {{ /fields }}
+
+    {{ sections }}
+        <fieldset>
+            <legend>{{ display }}</legend>
+            {{ fields }}
+                ...
+            {{ /fields }}
+        </fieldset>
+    {{ /sections }}
+
+    <button>Submit</button>
+ 
 {{ /form:contact }}
 ```
+::tab blade
+```blade
+<s:form:contact>
 
-```output
-<form method="POST" action="https://website.example/!/forms/contact">
-    <input type="hidden" name="_token" value="cN03woeRj5Q0GtlOj7GydsZcRwlyp9VLzfpwDFJZ">
-    <div class="mb-2">
-        <label class="block">Name</label>
-        <input type="text" name="name" value="">
-    </div>
-      <div class="mb-2">
-        <label class="block">Email Address</label>
-        <input type="text" name="email" value="">
-    </div>
-      <div class="mb-2">
-        <label class="block">Note</label>
-        <textarea name="message"></textarea>
-    </div>
-</form>
+  @foreach($sections as $section)
+    <fieldset>
+      <legend>{{ $section['display'] }}</legend>
+
+      @foreach ($section['fields'] as $field)
+        ...
+      @endforeach
+    </fieldset>
+  @endforeach
+
+  <button>Submit</button>
+
+</s:form:contact>
 ```
+::
+
+Each item in the `sections` array contains the following data configurable in the form's blueprint.
+
+| Variable | Type | Description |
+|---|---| --- |
+| `display` | string | User-friendly section label |
+| `instructions` | string | User-friendly section instructions |
+| `fields` | array | An array of [fields](#dynamically-rendering-fields) defined within that section |
+
 
 ## Conditional Fields 🆕
 
@@ -214,11 +384,23 @@ These can be added to your [layout](/views#layouts) just before your `</body>` t
 
 The next step is to enable the Alpine JS driver via the `js="alpine"` parameter.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ form:contact js="alpine" }}
     ...
 {{ /form:contact }}
 ```
+::tab blade
+```blade
+<s:form:contact
+  js="alpine"
+>
+  ...
+</s:form:contact>
+```
+::
 
 This will generate an Alpine component, with automatic `x-data` handling that will respect old input when there are validation errors, etc.
 
@@ -226,12 +408,27 @@ This will generate an Alpine component, with automatic `x-data` handling that wi
 
 Finally, you will need to wire up the fields. With Alpine, this is done using `x-model` on the input to keep it in sync with the component, as well as an `x-if` to conditionally render the input and its label.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <template x-if="{{ show_field:name }}">
+    <div class="p-2">
+        <label>Name</label>
+        <input type="text" name="name" value="{{ old:name }}" x-model="name" />
+    </div>
+</template>
+```
+::tab blade
+```blade
+<template x-if="{{ $show_field['name'] }}">
+  <div class="p-2">
     <label>Name</label>
-    <input type="text" name="name" value="{{ old:name }}" x-model="name" />
+    <input type="text" name="name" value="{{ old('name') }}" x-model="name" />
+  </div>
 </template>
 ```
+::
 
 The `x-model` should reference the field's handle, and the `x-if` should reference the appropriate `show_field` JS generated by Statamic; In this case, `x-model="name"` and `x-if="{{ show_field:name }}"` respectively.
 
@@ -239,7 +436,10 @@ The `x-model` should reference the field's handle, and the `x-if` should referen
 
 If you are [dynamically rendering your fields](#dynamic-rendering) using the `fields` loop, your template might look something like this:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ fields }}
     <template x-if="{{ show_field }}">
         <div class="p-2">
@@ -249,6 +449,24 @@ If you are [dynamically rendering your fields](#dynamic-rendering) using the `fi
     </template>
 {{ /fields }}
 ```
+::tab blade
+```blade
+<s:form:contact
+  js="alpine"
+>
+
+  @foreach ($fields as $field)
+    <template x-if="{{ $field['show_field'] }}">
+      <div class="p-2">
+        <label>{{ $field['display'] }}</label>
+        <div class="p-1">{!! $field['field'] !!}</div>
+      </div>
+    </template>
+  @endforeach
+
+</s:form:contact>
+```
+::
 
 The pre-rendered `{{ field }}` input will automatically render `x-model` for you, but you'll still need to wrap your input and its label with an `x-if="{{ show_field }}`, as shown above.
 
@@ -256,22 +474,49 @@ The pre-rendered `{{ field }}` input will automatically render `x-model` for you
 
 If you are using other Alpine components in your form or on your page, the included Alpine driver allows you to scope the generated `x-data` to prevent conflicts with your other components. To do this, provide a scope key when enabling the JS driver.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ form:contact js="alpine:contact_form" }}
     ...
 {{ /form:contact }}
 ```
+::tab blade
+```blade
+<s:form:contact
+  js="alpine:contact_form"
+>
+  ...
+</s:form:contact>
+```
+::
 
 The above will nest your form fields in a `contact_form` object within the generated `x-data`.
 
 If you are hardcoding your inputs, you will need adjust your `x-model` to follow suit.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <template x-if="{{ show_field:name }}">
+    <div class="p-2">
+        <label>Name</label>
+        <input type="text" name="name" value="{{ old:name }}" x-model="contact_form.name" />
+    </div>
+</template>
+```
+::tab blade
+```blade
+<template x-if="{{ $show_field['name'] }}">
+  <div class="p-2">
     <label>Name</label>
-    <input type="text" name="name" value="{{ old:name }}" x-model="contact_form.name" />
+    <input type="text" name="name" value="{{ old('name') }}" x-model="contact_form.name" />
+  </div>
 </template>
 ```
+::
 
 If you are [dynamically rendering your fields](#dynamic-rendering) using the `fields` loop, this is once again handled for you.
 
@@ -365,11 +610,23 @@ Take a look at the [AbstractJsDriver](https://github.com/statamic/cms/blob/featu
 
 You can also pass comma-delimited options into the `js` parameter like so:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ form:contact js="radjs:foo:bar" }}
     ...
 {{ /form:contact }}
 ```
+::tab blade
+```blade
+<s:form:contact
+  js="radjs:foo:bar"
+>
+  ...
+</s:form:contact>
+```
+::
 
 Within your driver class, you'll be able to access `$this->options` to retrieve an array of options (ie. `['foo', 'bar']` in the example above).
 
diff --git a/content/collections/tags/form-errors.md b/content/collections/tags/form-errors.md
index c8c305d43..989dc8c10 100644
--- a/content/collections/tags/form-errors.md
+++ b/content/collections/tags/form-errors.md
@@ -22,7 +22,10 @@ stage: 4
 
 This tag can be used both as a conditional and as the data itself.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ form:set is="contact" }}
     {{ if {form:errors} }}
         <p>Oops, here's what went wrong:</p>
@@ -42,3 +45,28 @@ This tag can be used both as a conditional and as the data itself.
 :::tip
 `form:errors` is a Tag, not a variable. Be sure to wrap it with single braces when inside a condition.
 :::
+
+::tab blade
+```blade
+<s:form:set
+  is="contact"
+>
+  <s:form:errors
+    as="errors"
+  >
+    @if (count($errors) > 0)
+      <p>Oops, here's what went wrong:</p>
+      <ul>
+        @foreach($errors as $error)
+          <li>{{ $error['value'] }}</li>
+        @endforeach
+      </ul>
+    @endif
+  </s:form:errors>
+
+  <s:form:create>
+    ...
+  </s:form:create>
+</s:form:set>
+```
+::
diff --git a/content/collections/tags/form-set.md b/content/collections/tags/form-set.md
index db094aebe..a7f81c108 100644
--- a/content/collections/tags/form-set.md
+++ b/content/collections/tags/form-set.md
@@ -15,7 +15,10 @@ stage: 4
 
 Each `form` tag needs to know which formset it is handling. As a convenience, rather than re-specifying the same formset parameter over and over, we can use an enclosing `{{ form:set }}` tag pair to apply it everywhere, automatically.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ form:set is="contact" }}
 
     {{ if {form:errors} }}
@@ -28,6 +31,29 @@ Each `form` tag needs to know which formset it is handling. As a convenience, ra
 
 {{ /form:set }}
 ```
+::tab blade
+```blade
+<statamic:form:set
+  is="contact"
+>
+  <statamic:form:errors
+    as="errors"
+  >
+    @foreach ($errors as $error)
+      {{ $error['value'] }}
+    @endforeach
+  </statamic:form:errors>
+  
+  <statamic:form:success>
+    ...
+  </statamic:form:success>
+  
+  <statamic:form:create>
+    ...
+  </statamic:form:create>
+</statamic:form:set>
+```
+::
 
 In this example, if we didn't use the `form:set` wrapper tag, we would need to add `in="contact"` to each of the
 `form:something` tags.
diff --git a/content/collections/tags/form-submission.md b/content/collections/tags/form-submission.md
index de5592c5a..fe8856190 100644
--- a/content/collections/tags/form-submission.md
+++ b/content/collections/tags/form-submission.md
@@ -21,9 +21,13 @@ stage: 4
 
 Here we'll output a small thank-you note once there's a successful submission, otherwise show the form itself.
 
+::tabs
+
+::tab antlers
+
 The `{{ name }}` and `{{ rating }}` variables correspond to input fields of the same name.
 
-```
+```antlers
 {{ form:set is="feedback" }}
     {{ if {form:success} }}
 
@@ -39,3 +43,37 @@ The `{{ name }}` and `{{ rating }}` variables correspond to input fields of the
     {{ /if }}
 {{ /form:set }}
 ```
+::tab blade
+
+The `{{ $submission['name'] }}` and `{{ $submission['rating'] }}` variables correspond to input fields of the same name.
+
+```blade
+<s:form:set
+  is="feedback"
+>
+  @if (Statamic::tag('form:success')->in('feedback')->fetch())
+    <s:form:submission
+      as="submission"
+    >
+      Thanks for your feedback, {{ $submission['name'] }}.
+      We appreciate the {{ $submission['rating'] }} star rating you gave us.
+    </s:form:submission>
+  @else
+    <s:form:create>
+      ...
+    </s:form:create>
+  @endif
+</s:form:set>
+```
+
+:::tip
+The `$success` variable is added by the `<s:form:set></s:form:set>` tag pair. It is a shortcut for the following:
+
+```blade
+@if (Statamic::tag('form:success')->in('feedback')->fetch())
+  ...
+@endif
+```
+:::
+
+::
diff --git a/content/collections/tags/form-submissions.md b/content/collections/tags/form-submissions.md
index 61c7e4818..40f9e1591 100644
--- a/content/collections/tags/form-submissions.md
+++ b/content/collections/tags/form-submissions.md
@@ -9,6 +9,50 @@ parameters:
     type: string
     description: >
       Specify the name of the form. Only required if you do _not_ use the `form:set` tag, or don't have a `form` defined in the current context.
+  -
+    name: sort
+    type: string
+    description: 'Sort form submissions by field name (or `random`). You may pipe-separate multiple fields for sub-sorting and specify sort direction of each field using a colon. For example, `sort="name"` or `sort="date:asc|name:desc"` to sort by date then by name.'
+    required: false
+  -
+    name: limit
+    type: integer
+    description: 'Limit the total results returned.'
+    required: false
+  -
+    name: filter|query_scope
+    type: string
+    description: "Apply a custom [query scope](https://statamic.dev/extending/query-scopes-and-filters) You should specify the query scope's handle, which is usually the name of the class in snake case. For example: `MyAwesomeScope` would be `my_awesome_scope`."
+    required: false
+  -
+    name: offset
+    type: integer
+    description: 'Skip a specified number of results.'
+    required: false
+  -
+    name: paginate
+    type: 'boolean|int *false*'
+    description: 'Specify whether your form submissions should be paginated. You can pass `true` and also use the `limit` param, or just pass the limit directly in here.'
+    required: false
+  -
+    name: page_name
+    type: 'string *page*'
+    description: 'The query string variable used to store the page number (ie. `?page=`).'
+    required: false
+  -
+    name: on_each_side
+    type: 'int *3*'
+    description: When using pagination, this specifies the max number of links each side of the current page. The minimum value is `1`.
+  -
+    name: as
+    type: string
+    description: 'Alias your form submissions into a new variable loop.'
+    required: false
+  -
+    name: scope
+    type: string
+    description: 'Scope your form submissions with a variable prefix.'
+    required: false
 variables:
   -
     name: submission data
@@ -32,7 +76,10 @@ stage: 4
 
 ## Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ form:submissions in="feedback" }}
     <div>
         Submitted on {{ date }}<br>
@@ -42,3 +89,446 @@ stage: 4
     </div>
 {{ /form:submissions }}
 ```
+::tab blade
+```blade
+{{-- Without aliasing. --}}
+<s:form:submissions
+  in="feedback"
+>
+  <div>
+    Submitted on {{ $date }}<br>
+    Name: {{ $name }}<br>
+    Rating: {{ $rating }}<br>
+    Comment: {{ $comment }}
+  </div>
+</s:form:submissions>
+
+{{-- With aliasing --}}
+<s:form:submissions
+  in="feedback"
+  as="submissions"
+>
+  @foreach ($submissions as $submission)
+    <div>
+      Submitted on {{ $submission->date }}<br>
+      Name: {{ $submission->name }}<br>
+      Rating: {{ $submission->rating }}<br>
+      Comment: {{ $submission->comment }}
+    </div>
+  @endforeach
+</s:form:submissions>
+```
+::
+
+## Filtering
+
+There are a number of ways to filter your submissions. There's the conditions syntax for filtering by fields and the custom filter class if you need extra control.
+
+### Conditions
+
+Want to get entries where the title has the words "awesome" and "thing", and "joe" is the author? You can write it how you'd say it:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ form:submissions in="feedback" name:contains="David" email:contains="gmail.com" }}
+```
+::tab blade
+```blade
+<s:form:submissions
+  in="feedback"
+  name:contains="David"
+  email:contains="gmail.com"
+>
+
+</s:form:submissions>
+```
+::
+
+There are a bunch of conditions available to you, like `:is`, `:isnt`, `:contains`, `:starts_with`, and `:is_before`. There are many more than that. In fact, there's a whole page dedicated to [conditions - check them out][conditions].
+
+### Custom Query Scopes
+
+Doing something custom or complicated? You can create [query scopes](/extending/query-scopes-and-filters) to narrow down those results with the `query_scope` or `filter` parameter:
+
+
+::tabs
+
+::tab antlers
+```antlers
+{{ form:submissions in="feedback" query_scope="your_query_scope" }}
+```
+::tab blade
+
+```blade
+<s:form:submissions
+  in="feedback"
+  query_scope="your_query_scope"
+>
+
+</s:form:submissions>
+```
+::
+
+You should reference the query scope by its handle, which is usually the name of the class in snake case. For example: `YourQueryScope` would be `your_query_scope`.
+
+## Pagination
+
+
+To enable pagination mode, add the `paginate` parameter with the number of submissions in each page.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ form:submissions in="feedback" paginate="10" as="comments" }}
+
+    {{ if no_results }}
+        <p>Aww, there are no results.</p>
+    {{ /if }}
+
+    {{ comments }}
+        <article>
+            Feedback from {{ name }}
+        </article>
+    {{ /comments }}
+
+    {{ paginate }}
+        <a href="{{ prev_page }}">⬅ Previous</a>
+
+        {{ current_page }} of {{ total_pages }} pages
+        (There are {{ total_items }} submissions)
+
+        <a href="{{ next_page }}">Next ➡</a>
+    {{ /paginate }}
+
+{{ /form:submissions }}
+```
+::tab blade
+```blade
+<s:form:submissions
+  in="feedback"
+  paginate="10"
+  as="comments"
+>
+  @if ($no_results)
+    <p>Aww, there are now results.</p>
+  @endif
+
+  @foreach ($comments as $comment)
+    <article>
+      Feedback from {{ $comment->name }}
+    </article>
+  @endforeach
+
+  @if ($paginate['total_pages'] > 1)
+    <a href="{{ $paginate['prev_page'] }}">⬅ Previous</a>
+
+    {{ $paginate['current_page'] }} of {{ $paginate['total_pages'] }} pages
+    (There are {{ $paginate['total_items'] }} submissions)
+
+    <a href="{{ $paginate['next_page'] }}">Next ➡</a>
+  @endif
+</s:form:submissions>
+```
+::
+
+In pagination mode, your submissions will be scoped (in the example, we're scoping them into the `comments` tag pair). Use that tag pair to loop over the entries in that page.
+
+The `paginate` variable will become available to you. This is an array containing data about the paginated set.
+
+| Variable | Description |
+|----------|-------------|
+| `next_page` |	The URL to the next paginated page.
+| `prev_page` |	The URL to the previous paginated page.
+| `total_items` | The total number of submissions.
+| `total_pages` |  number of paginated pages.
+| `current_page` | The current paginated page. (ie. the x in the ?page=x param)
+| `auto_links` | Outputs an HTML list of paginated links.
+| `links` |	Contains data for you to construct a custom list of links.
+| `links:all` |	An array of all the pages. You can loop over this and output {{ url }} and {{ page }}.
+| `links:segments` | An array of data for you to create a segmented list of links.
+
+<br>
+
+### Pagination Examples
+
+The `auto_links` tag is designed to be your friend. It'll save you more than a few keystrokes, and even more headaches. It will output an HTML list of links for you. With a large number of pages, it will create segments so that you don't end up with hundreds of numbers.
+
+It's clever enough to work out a comfortable range of numbers to display, and it'll also throw in the prev/next arrow for good measure.
+
+Maybe the default markup isn't for you and you want total control. You're a maverick. That's cool, we roll that way sometimes too. That's where the `links:all` or `links:segments` array variables come in. These give you all the data you need to recreate your own set of links.
+
+- The `links:all` array is _all_ the pages with `url` and `page` variables.
+
+- The `links:segments` array will contain the segments mentioned above. You'll be able to access `first`, `slider`, and `last`, which are the 3 segments.
+
+Here's the `auto_links` output, recreated using the other tags, for you mavericks out there:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ paginate }}
+    <ul class="pagination">
+        {{ if prev_page }}
+            <li><a href="{{ prev_page }}">&laquo;</a></li>
+        {{ else }}
+            <li class="disabled"><span>&laquo;</span></li>
+        {{ /if }}
+
+        {{ links:segments }}
+
+            {{ first }}
+                {{ if page == current_page }}
+                    <li class="active"><span>{{ page }}</span></li>
+                {{ else }}
+                    <li><a href="{{ url }}">{{ page }}</a></li>
+                {{ /if }}
+            {{ /first }}
+
+            {{ if slider }}
+                <li class="disabled"><span>...</span></li>
+            {{ /if }}
+
+            {{ slider }}
+                {{ if page == current_page }}
+                    <li class="active"><span>{{ page }}</span></li>
+                {{ else }}
+                    <li><a href="{{ url }}">{{ page }}</a></li>
+                {{ /if }}
+            {{ /slider }}
+
+            {{ if slider || (!slider && last) }}
+                <li class="disabled"><span>...</span></li>
+            {{ /if }}
+
+            {{ last }}
+                {{ if page == current_page }}
+                    <li class="active"><span>{{ page }}</span></li>
+                {{ else }}
+                    <li><a href="{{ url }}">{{ page }}</a></li>
+                {{ /if }}
+            {{ /last }}
+
+        {{ /links:segments }}
+
+        {{ if next_page }}
+            <li><a href="{{ next_page }}">&raquo;</a></li>
+        {{ else }}
+            <li class="disabled"><span>&raquo;</span></li>
+        {{ /if }}
+    </ul>
+{{ /paginate }}
+```
+::tab blade
+```blade
+<s:form:submissions
+  in="feedback"
+  paginate="10"
+  as="comments"
+>
+  // ...
+
+  @if ($paginate['total_pages'] > 1)
+    @php
+        $hasSlider = count($paginate['links']['segments']['slider']) > 0;
+        $hasLast = count($paginate['links']['segments']['last']) > 0;
+    @endphp
+
+    <ul class="pagination">
+      @if ($paginate['prev_page'])
+        <li><a href="{{ $paginate['prev_page'] }}">&laquo;</a></li>
+      @else
+        <li class="disabled"><span>&laquo;</span></li>
+      @endif
+
+      @foreach (Arr::get($paginate, 'links.segments.first', []) as $segment)
+        @if ($segment['page'] == $paginate['current_page'])
+          <li class="active"><span>{{ $segment['page'] }}</span></li>
+        @else
+          <li><a href="{{ $segment['url'] }}">{{ $segment['page'] }}</a></li>
+        @endif
+      @endforeach
+
+      @if ($hasSlider)
+        <li class="disabled"><span>...</span></li>
+      @endif
+
+      @foreach (Arr::get($paginate, 'links.segments.slider', []) as $segment)
+        @if ($segment['page'] == $paginate['current_page'])
+          <li class="active"><span>{{ $segment['page'] }}</span></li>
+        @else
+          <li><a href="{{ $segment['url'] }}">{{ $segment['page'] }}</a></li>
+        @endif
+      @endforeach
+
+      @if ($hasSlider || $hasLast)
+        <li class="disabled"><span>...</span></li>
+      @endif
+
+      @foreach (Arr::get($paginate, 'links.segments.last', []) as $segment)
+        @if ($segment['page'] == $paginate['current_page'])
+          <li class="active"><span>{{ $segment['page'] }}</span></li>
+        @else
+          <li><a href="{{ $segment['url'] }}">{{ $segment['page'] }}</a></li>
+        @endif
+      @endforeach
+
+      @if ($paginate['next_page'])
+        <li><a href="{{ $paginate['next_page'] }}">&raquo;</a></li>
+      @else
+        <li class="disabled"><span>&raquo;</span></li>
+      @endif
+    </ul>
+  @endif
+</s:form:submissions>
+```
+::
+
+## Aliasing {#alias}
+
+Often times you'd like to have some extra markup around your list of submissions, but only if there are results. Like a `<ul>` element, for example. You can do this by _aliasing_ the results into a new variable tag pair. This actually creates a copy of your data as a new variable. It goes like this:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ form:submissions in="feedback" as="comments" }}
+    <ul>
+      {{ comments }}
+        <li>
+            Feedback from {{ name }}
+        </li>
+      {{ /comments }}
+    <ul>
+{{ /form:submissions }}
+```
+::tab blade
+```blade
+<s:form:submissions
+  in="feedback"
+  as="comments"
+>
+  <ul>
+    @foreach ($comments as $comment)
+    <li>
+      Feedback from {{ $comment->name }}
+    </li>
+    @endforeach
+  </ul>
+</s:form:submissions>
+```
+::
+
+## Scoping {#scope}
+
+Sometimes not all of your submissions have the same set of variables. And sometimes the page that you're on may have those very same variables on the page-level scope. Statamic assumes you'd like to fallback to the parent scope's data to plug any holes. This logic has pros and cons, and you can [read more about scoping and the Cascade here](/cascade).
+
+You can assign a _scope_ prefix to your submissions so you can be sure to get the data you want. Define your scope and then prefix all of your variables with it.
+
+```yaml
+# Page data
+featured_image: /img/totes-adorbs-kitteh.jpg
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ form:submissions in="feedback" scope="comment" }}
+  <div class="block">
+    {{ comment:name }}
+  </div>
+{{ /form:submissions }}
+```
+::tab blade
+```blade
+<s:form:submissions
+  in="feedback"
+  scope="comment"
+>
+   <div class="block">
+     {{ $comment->name }}
+   </div>   
+</s:form:submissions>
+```
+::
+
+You can also add your scope down into your [alias](#alias) loop. Yep, we thought of that too.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ form:submissions in="feedback" as="comments" }}
+  {{ comments scope="comment" }}
+    <div class="block">
+      {{ comment:name }}
+    </div>
+  {{ /comments }}
+{{ /form:submissions }}
+```
+::tab blade
+```blade
+<s:form:submissions
+  in="feedback"
+  as="comments"
+>
+  @foreach ($comments as $comment)
+  <div class="block">
+    {{ $comment->name }}  
+  </div>
+  @endforeach
+</s:form:submissions>
+```
+::
+
+Combining both an Alias and a Scope on the Form Submissions Tag doesn't make a whole lot of sense. You shouldn't do that.
+
+## Grouping
+
+To group submissions – by date or any other field – you should use [aliasing](#alias) (explained above) as well as the [`group_by`](/modifiers/group_by) modifier.
+There's no "grouping" feature on the submissions tag itself.
+
+For example, if you want to group some dated submissions by month/year, you could do this:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ form:submissions in="feedback" as="comments" }}
+  {{ comments group_by="date|F Y" }}
+    {{ groups }}
+        <h3>{{ group }}</h3>
+        {{ items }}
+            {{ title }} <br>
+        {{ /items }}
+    {{ /groups }}
+  {{ /comments }}
+{{ /form:submissions }}
+```
+::tab blade
+```blade
+<s:form:submissions
+  in="feedback"
+  as="comments"
+>
+  @php
+  $groupedSubmissions = $comments->groupBy(fn($$comment) => $entry->comment?->format('F Y'));
+  @endphp
+
+  @foreach ($groupedSubmissions as $group => $items)
+    <h3>{{ $group }}</h3>
+
+    @foreach ($items as $comment)
+      {{ $comment->title }}
+    @endforeach
+  @endforeach
+</s:form:submissions>
+```
+::
+
+
+[conditions]: /conditions
diff --git a/content/collections/tags/form-success.md b/content/collections/tags/form-success.md
index fb98ce44f..27c8e6027 100644
--- a/content/collections/tags/form-success.md
+++ b/content/collections/tags/form-success.md
@@ -14,7 +14,10 @@ stage: 4
 ---
 ## Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if {form:success in="contact"} }}
     <p>Thanks for filling out the survey! Sorry it was so long.</p>
 {{ /if }}
@@ -23,3 +26,19 @@ stage: 4
 :::tip
 `form:success` is a Tag, not a variable. Be sure to wrap it with single braces when inside a condition.
 :::
+
+::tab blade
+```blade
+{{-- Using Fluent Tags --}}
+@if (Statamic::tag('form:success')->in('contact')->fetch())
+  <p>Thanks for filling out the survey! Sorry it was so long.</p>
+@endif
+
+{{-- Using Antlers Blade Components --}}
+<s:form:success
+  in="contact"
+>
+  <p>Thanks for filling out the survey! Sorry it was so long.</p>
+</s:form:success>
+```
+::
diff --git a/content/collections/tags/get_content.md b/content/collections/tags/get_content.md
index b20eb1d54..c488a1eed 100644
--- a/content/collections/tags/get_content.md
+++ b/content/collections/tags/get_content.md
@@ -22,16 +22,29 @@ This tag lets you fetch data from other entries. It's useful if you need to hard
 :::tip
 If you're using a fieldtype like [entries](/fieldtypes/entries) to select which entries you'd like to render, then you don't even need this tag. You can loop over the selections like this:
 
-````
+::tabs
+
+::tab antlers
+```antlers
 {{ your_entries_field }}
   {{ title }}, {{ url }}, {{ whatever }}
 {{ /your_entries_field }}
 ```
+::tab blade
+```blade
+@foreach ($your_entries_field as $entry)
+  {{ $entry->title }}, {{ $entry->url }}, {{ $entry->whatever }}
+@endforeach
+```
+::
 :::
 
 For example, you might want to output some company information from your home page:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ get_content from="/about/company" }}
   {{ staff }}
     <div class="w-1/3">
@@ -41,17 +54,35 @@ For example, you might want to output some company information from your home pa
   {{ /staff }}
 {{ /get_content }}
 ```
+::tab blade
+```blade
+<s:get_content from="/about/company">
+  @foreach ($staff as $member)
+    <div class="w-1/3">
+      <img src="{{ $member->headshot }}" alt="{{ $member->name }}">
+      <p>{{ $member->name }}, {{ $member->job_title }}</p>
+    </div>
+  @endforeach
+</s:get_content>
+```
+::
 
 
 ## Shorthand
 
 You may also use a shorthand syntax, where the second tag argument refers to a variable that contains a URI or ID.
 
-```
----
+The data:
+
+```yaml
 related_by_uri: /about
 related_by_id: 123-321-abc-defg123
----
+```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ get_content:related_by_uri }}
   {{ title }}
 {{ /get_content:related_by_uri }}
@@ -60,3 +91,14 @@ related_by_id: 123-321-abc-defg123
   {{ title }}
 {{ /get_content:related_by_id }}
 ```
+::tab blade
+```blade
+<s:get_content:related_by_uri>
+  {{ $title }}
+</s:get_content:related_by_uri>
+
+<s:get_content:related_by_id>
+  {{ $title }}
+</s:get_content:related_by_id>
+```
+::
diff --git a/content/collections/tags/get_errors.md b/content/collections/tags/get_errors.md
index 1c285d5aa..8f90b0a97 100644
--- a/content/collections/tags/get_errors.md
+++ b/content/collections/tags/get_errors.md
@@ -17,7 +17,10 @@ The most common use case is to list all the validation errors. You can do this w
 
 If there are no errors, the tag will output nothing at all, so you can put your wrapping html around the inner `messages` tag pair.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ get_errors:all }}
 <div class="errors">
   <p>Oops, something went wrong!</p>
@@ -29,12 +32,29 @@ If there are no errors, the tag will output nothing at all, so you can put your
 </div>
 {{ /get_errors:all }}
 ```
+::tab blade
+```blade
+<s:get_errors:all>
+<div class="errors">
+  <p>Oops, something went wrong!</p>
+  <ul>
+    @foreach ($messages as $message)
+      <li>{{ $message['message'] }}</li>
+    @endforeach
+  </ul>
+</div>
+</s:get_errors:all>
+```
+::
 
 ## List errors for a specific field
 
 You can replace `all` with a field's handle to get errors for just that field.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ get_errors:fieldname }}
 <div class="errors">
   <p>Oops, something went wrong!</p>
@@ -46,15 +66,37 @@ You can replace `all` with a field's handle to get errors for just that field.
 </div>
 {{ /get_errors:fieldname }}
 ```
+::tab blade
+```blade
+<s:get_errors:fieldname>
+  <p>Oops, something went wrong!</p>
+  <ul>
+    @foreach ($messages as $message)
+      <li>{{ $message['message'] }}</li>
+    @endforeach
+  </ul>
+</s:get_errors:fieldname>
+```
+::
 
 ## Get the first error for a specific field
 Useful for outputting inline errors, you can use the `get_error` tag.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ get_error:fieldname }}
     <div class="inline-error">{{ message }}</div>
 {{ /get_error:fieldname }}
 ```
+::tab blade
+```blade
+<s:get_error:fieldname>
+  <div class="inline-error">{{ $message }}</div>
+</s:get_error:fieldname>
+```
+::
 
 :::tip Note
 That's `get_error` (singular), not `get_errors`.
@@ -65,7 +107,10 @@ That's `get_error` (singular), not `get_errors`.
 
 Using the standalone tag, you can loop through fields and then their errors.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ get_errors }}
   <div class="errors">
     Oops!
@@ -80,3 +125,20 @@ Using the standalone tag, you can loop through fields and then their errors.
   </div>
 {{ /get_errors }}
 ```
+::tab blade
+```blade
+<s:get_errors>
+  <div class="errors">
+    Oops!
+    @foreach ($fields as $field)
+      <p>{{ $field['field'] }}</p>
+      <ul>
+        @foreach ($field['messages'] as $message)
+          <li>{{ $message['message'] }}</li>
+        @endforeach
+      </ul>
+    @endforeach
+  </div>
+</s:get_errors>
+```
+::
diff --git a/content/collections/tags/get_files.md b/content/collections/tags/get_files.md
index bf719967f..5c1375ce2 100644
--- a/content/collections/tags/get_files.md
+++ b/content/collections/tags/get_files.md
@@ -119,15 +119,28 @@ Here's a few examples of what you can do with the `get_files` tag.
 
 ### List non-asset images in the site's design resources
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ get_files in="public/img/brand" }}
   <img src="{{ file }}" class="w-1/3">
 {{ /get_files }}
 ```
+::tab blade
+```blade
+<s:get_files in="public/img/brand">
+  <img src="{{ $file }}" class="w-1/3">
+</s:get_files>
+```
+::
 
 ### List the zip files in a web-inaccessible directory
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <table>
   <thead>
     <tr>
@@ -147,3 +160,25 @@ Here's a few examples of what you can do with the `get_files` tag.
   </tbody>
 </table>
 ```
+::tab blade
+```blade
+<table>
+  <thead>
+    <tr>
+      <th>File</th>
+      <th>Size</th>
+      <th>Last Modified</th>
+    </tr>
+  </thead>
+  <tbody>
+  <s:get_files in="secure/downloads">
+    <tr>
+      <td>{{ $basename }}</td>
+      <td>{{ $size }}</td>
+      <td>{{ $last_modified }}</td>
+    </tr>
+  </s:get_files>
+  </tbody>
+</table>
+```
+::
diff --git a/content/collections/tags/get_site.md b/content/collections/tags/get_site.md
new file mode 100644
index 000000000..b0988a9e6
--- /dev/null
+++ b/content/collections/tags/get_site.md
@@ -0,0 +1,77 @@
+---
+id: 6761887c-a062-488f-a43e-87b22326215f
+blueprint: tag
+title: 'Get Site'
+intro: "It gets a site's config, given it's handle."
+description: "Fetches a site's config, given it's handle."
+stage: 4
+---
+## Overview
+
+This tag lets you get a site's config. It's useful if you need to display information, like site names or URLs, outside of the context of that site.
+
+For example, you might want to output a site's name & logo in your footer:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ get_site:english }}
+    <a href="{{ permalink }}">
+        Go to {{ name }}
+    </a>
+{{ /get_site:english }}
+```
+::tab blade
+```blade
+<s:get_site:english>
+  <a href="{{ $permalink }}">
+    Go to {{ $name }}
+  </a>
+</s:get_site:english>
+```
+
+You can also alias the result, if you need to:
+
+```blade
+<s:get_site:english as="the_site">
+  {{ $the_site->name }}
+</s:get_site:english>
+```
+::
+
+If you need to, you can pass the site handle dynamically:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ get_site :handle="another_sites_handle" }}
+    <!-- ... -->
+{{ /get_site }}
+```
+::tab blade
+```blade
+<s:get_site :handle="$another_sites_handle">
+  <!-- ... -->
+</s:get_site>
+```
+::
+
+You can also use it as a single tag:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ get_site:english:permalink }}
+```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:get_site:english:permalink />
+
+{{-- Using Fluent Tags --}}
+{{ Statamic::tag('get_site:english:permalink') }}
+```
+::
diff --git a/content/collections/tags/glide-batch.md b/content/collections/tags/glide-batch.md
index 27ae845ee..6996bacd5 100644
--- a/content/collections/tags/glide-batch.md
+++ b/content/collections/tags/glide-batch.md
@@ -27,11 +27,21 @@ I went exploring today and here are some photos I took and I was too lazy to use
 ![Battlestar](/images/galactica.jpg)
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide:batch width="600" height="400" fit="crop" }}
   {{ page:content }}
 {{ /glide:batch }}
 ```
+::tab blade
+```blade
+<s:glide width="600" height="400" fit="crop">
+  {!! $page->content !!}
+</s:glide>
+```
+::
 
 ```html
 <p>I went exploring today and here are some photos I took and I was too lazy to use an Asset fieldtype so here they all are plop ok</p>
diff --git a/content/collections/tags/glide-data-url.md b/content/collections/tags/glide-data-url.md
new file mode 100644
index 000000000..b23446130
--- /dev/null
+++ b/content/collections/tags/glide-data-url.md
@@ -0,0 +1,56 @@
+---
+title: "Glide:Data_URL"
+description: Manipulates an image and returns a data URL
+stage: 4
+intro: Use `glide:data_url` to output a manipulated image as a Data URL.
+parameters:
+  -
+    name: src|path|id
+    type: string
+    description: >
+      The URL of the image when _not_ using the shorthand syntax. (Use the shorthand syntax if you can, it's nicer.)
+      This also accepts asset IDs, if using [private assets](/assets#private-assets), for example.
+  -
+    name: tag
+    type: boolean *false*
+    description: When set to true, this will output an `<img>` tag with the URL in the `src` attribute, rather than just the URL.
+  -
+    name: alt
+    type: string
+    description: When using the `tag` parameter, this will insert the given text into the `alt` attribute.
+  -
+    name: preset
+    type: string
+    description: >
+      Use a preset of pre-configured parameters. [Learn more](#presets).
+id: 41698c83-5ca0-43eb-88ad-96343dea12ef
+---
+## Overview
+
+The `{{ glide:data_url }}` tag works in a very similar way to the standard [Glide tag](/tags/glide), except it outputs the manipulated as a [Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs).
+
+## Example
+
+You may pass any parameters you'd [normally pass to the Glide tag](/tags/glide#parameters), like `width`, `height` and `format`.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ glide:data_url src="image.jpg" width="1280" height="800" format="webp" }}
+```
+::tab blade
+```blade
+{{
+  Statamic::tag('glide:data_url')
+    ->src('image.jpg')
+    ->width(1280)
+    ->height(800)
+    ->format('webp')
+}}
+```
+::
+
+```output
+data:image/webp;base64,R0lGODlhAgACAJEAALwWrOQqhOwqhP///yH5BAEAAAMALAAAAAACAAIAAAIDBBIFADs=
+```
diff --git a/content/collections/tags/glide.md b/content/collections/tags/glide.md
index 086f7cde0..521afee5a 100644
--- a/content/collections/tags/glide.md
+++ b/content/collections/tags/glide.md
@@ -122,7 +122,7 @@ filters:
     name: pixelate
     type: integer
     description: >
-      Applies a pixelation effect to the image. Use values between `0` and `1000`.
+      Applies a pixelation effect to the image. Use values between `0` and `100`.
   -
     name: filter
     type: string
@@ -193,18 +193,44 @@ Glide is ready to go out of the box with no setup required. However, you may cus
 
 Manipulate images by passing an image [source](#sources) and adding the desired [parameters](#parameters) like `height`, `crop`, or `quality`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide src="image.jpg" width="1280" height="800" }}
 ```
+::tab blade
+```blade
+<s:glide src="image.jpg" width="1280" height="800" />
+```
+::
+
+
 ```output
 /img/image.jpg?w=1280&h=800
 ```
 
 The Glide tag outputs a URL of the transformed image, so you'll likely want to use it as the `src` for an `<img />` HTML tag.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <img src="{{ glide ... }}" />
 ```
+::tab blade
+```blade
+{{-- Using fluent tags --}}
+<img
+  src="{{ Statamic::tag('glide')->src('test.png')->width(1280)->height(800)->fetch() }}"
+/>
+
+{{-- Using Antlers Blade Components tag pair --}}
+<s:glide src="test.png" width="1280" height="800">
+  <img src="{{ $url }}" />
+</s:glide>
+```
+::
 
 ## Sources
 
@@ -213,42 +239,93 @@ There are a number of options when it comes to what you can use as an image sour
 ### Asset
 You can pass along an asset object by using an asset field by reference:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide :src="asset_field" w="100" }} // /img/asset/6f75d8as?w=100
 ```
+::tab blade
+```blade
+<s:glide :src="$asset_field" w="100" /> // /img/asset/6f75d8as?w=100
+```
+::
 
 ### Relative path/URL
 You can pass a string of a path located within your `public` directory.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide src="image.jpg" w="100" }} // img/image.jpg?w=100
 ```
+::tab blade
+```blade
+<s:glide src="image.jpg" w="100" /> // img/image.jpg?w=100
+```
+::
 
 ### External URL
 You can pass a string of a URL on another site.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide src="http://anothersite.com/image.jpg" w="100" }} // /img/http/6f75d8as?w=100
 ```
+::tab blade
+```blade
+<s:glide src="http://anothersite.com/image.jpg" w="100" /> // /img/http/6f75d8as?w=100
+```
+::
 
 
 ## Tag Pair
 
 If you use the tag as a pair, you'll have access to `url`, `height`, and `width` variables inside to do with as you wish.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide src="image.jpg" width="600" }}
     <img src="{{ url }}" width="{{ width }}" height="{{ height }}">
 {{ /glide }}
 ```
+::tab blade
+```blade
+<s:glide src="image.jpg" width="600">
+  <img src="{{ $url }}" width="{{ $width }}" height="{{ $height }}">
+</s:glide>
+```
+::
 
 You may also use the tag pair to loop over multiple sources. For example, you may provide it with an `assets` field.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide :src="multiple_assets" width="600" }}
    ...
 {{ /glide }}
 ```
+::tab blade
+```blade
+<s:glide :src="multiple_assets" width="600">
+  {{ $url }}
+</s:glide>
+
+{{-- Aliasing the results --}}
+<s:glide :src="$multiple_assets" width="600" as="assets">
+  @foreach ($assets as $asset)
+    {{ $asset['url'] }}
+  @endforeach
+</s:glide>
+```
+::
 
 :::tip
 The tag pair is also available as `{{ glide:generate }}`. You may need to use this version if you're using [Blade](#usage-in-blade).
@@ -263,24 +340,50 @@ Normally, the Glide tag only generates a URL. The image itself is generated when
 
 Rather than using the `src` parameter, you may choose to use a variable name as the second part of the tag.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide:my_var w="100" }}
 ```
+::tab blade
+```blade
+<s:glide:my_var w="100" />
+```
+::
 
 You may also use the shorthand as a tag pair:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide:my_var }} ... {{ /glide:my_var }}
 ```
+::tab blade
+```blade
+<s:glide:my_var>
+  ...
+</s:glide:my_var>
+```
+::
 
 
 ## Watermarks
 
 You may use Glide's [watermarking feature](https://glide.thephpleague.com/2.0/api/watermarks/) by passing in a [source](#sources) to the `mark` parameter, and then manipulate it using the various watermark parameters (`markw`, `markh`, `markfit`, etc).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ glide src="image.jpg" mark="watermark.jpg" markw="30" }}
 ```
+::tab blade
+```blade
+<s:glide src="image.jpg" mark="watermark.jpg" markw="30" />
+```
+::
 
 :::tip
 You don't need to worry about setting up a watermark filesystem yourself. Statamic will take care of that automatically based on the source you provide.
@@ -289,7 +392,7 @@ You don't need to worry about setting up a watermark filesystem yourself. Statam
 
 ## Usage in Blade
 
-To use the Glide tag within Blade, you should use the `generate` tag, which follows the same rules as the [tag pair](#tag-pair).
+To use the Glide tag within Blade, you can also use the `generate` tag, which follows the same rules as the [tag pair](#tag-pair).
 
 ```blade
 @foreach (Statamic::tag('glide:generate')->src($source)->width(100) as $image)
@@ -339,11 +442,23 @@ images:
   - image.svg
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ images }}
   <img src="{{ glide:url width="600" }}" />
 {{ /images }}
 ```
+::tab blade
+```blade
+@foreach ($images as $image)
+  <img
+    src="{{ Statamic::tag('glide')->src($image['url'])->width(600)->fetch() }}"
+  />
+@endforeach
+```
+::
 
 ```html
 <img src="/img/image.jpg?w=600" />
diff --git a/content/collections/tags/increment.md b/content/collections/tags/increment.md
index bcfc01c0d..953aa5e07 100644
--- a/content/collections/tags/increment.md
+++ b/content/collections/tags/increment.md
@@ -20,11 +20,25 @@ id: b33aa176-06e6-411d-a4b7-0a514f697d78
 
 Most loops already have an `index` variable that will display which iteration the loop is on. However, there are cases were you may need to start another counter, begin counting from a particular number, or increment by a step size other than `1`. For those reasons, this tag exists.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ items }}
   {{ increment }}
 {{ /items }}
 ```
+::tab blade
+```blade
+@foreach ($items as $item)
+  <s:increment />
+
+  -- or --
+  
+  {{ Statamic::tag('increment') }}
+@endforeach
+```
+::
 
 ```html
 0 1 2 3 4 5
@@ -38,21 +52,41 @@ A counter will only be incremented if its parsed. You can wrap it inside an `if`
 
 You can have multiple counters going at once in your view by giving each a unique name as the second tag argument.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ items }}
   {{ increment:again }}
 {{ /items }}
 ```
+::tab blade
+```blade
+@foreach ($items as $item)
+  <s:increment:again />
+@endforeach
+```
+::
 
 ## Customize the Counters
 
 Customize the counts using the `from` and `by` parameters.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ items }}
   {{ increment from="0" by="200" }}
 {{ /items }}
 ```
+::tab blade
+```blade
+@foreach ($items as $item)
+  <s:increment from="0" by-"200" />
+@endforeach
+```
+::
 
 ```html
 0 200 400 600 800 100
diff --git a/content/collections/tags/installed.md b/content/collections/tags/installed.md
index 5f479f94a..7575bf357 100644
--- a/content/collections/tags/installed.md
+++ b/content/collections/tags/installed.md
@@ -9,21 +9,43 @@ to do something differently depending on whether a package is installed.
 
 Use this as a single tag within an `if` statement:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if {installed:statamic/seo-pro} }}
     {{ seo_pro:meta }}
 {{ else }}
     {{ partial:seo }}
 {{ /if }}
 ```
+::tab blade
+```blade
+@if (Statamic::tag('installed:statamic/seo-pro')->fetch())
+  <s:seo_pro:meta />
+@else
+  <s:partial:seo />
+@endif
+```
+::
 
 Or as a tag pair. If the package doesn't exist, then nothing between the tag will be output:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ installed:statamic/seo-pro }}
     {{ seo_pro:meta }}
 {{ /installed:statamic/seo-pro }}
 ```
+::tab blade
+```blade
+<s:installed:statamic/seo-pro>
+  <s:seo_pro:meta />
+</s:installed:statamic/seo-pro>
+```
+::
 
 :::tip
 You can pass any Composer package name into this tag. It's not limited to Statamic addons.
diff --git a/content/collections/tags/link.md b/content/collections/tags/link.md
index 8972481dd..7f850efaa 100644
--- a/content/collections/tags/link.md
+++ b/content/collections/tags/link.md
@@ -31,10 +31,24 @@ You can create a fully qualified URL to any resource, asset, or page on your sit
 
 For example, if you had a link to `<a href="fanny-packs">`, it would be broken if you left that relative area of the site. By using the link tag you can ensure it's relative to your site root, and include the domain if needed.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ link to="fanny-packs" }}
 {{ link to="fanny-packs" absolute="true" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:link to="fanny-packs" />
+<s:link to="fanny-packs" absolute="true" />>
+
+{{-- Using Fluent Tags --}}
+{{ Statamic::tag('link')->to('fanny-packs') }}
+{{ Statamic::tag('link')->to('fanny-packs')->absolute(true) }}
+```
+::
 
 ```html
 /fanny-packs
@@ -45,9 +59,21 @@ https://example.com/fanny-packs
 
 You can also link to entries using their ID directly:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ link id="1715c9a8-0662-4ca7-b9ea-1ad642431fae" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:link id="1715c9a8-0662-4ca7-b9ea-1ad642431fae" />
+
+{{-- Using Fluent Tags --}}
+{{ Statamic::tag('link')->id('1715c9a8-0662-4ca7-b9ea-1ad642431fae') }}
+```
+::
 
 ``` output
 /the-pages-slug
@@ -55,9 +81,22 @@ You can also link to entries using their ID directly:
 
 When using Multi-Site, the URL automatically links to the entry on the current site. If you want to link to a specific site instead, you can add the `in` parameter:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ link id="1715c9a8-0662-4ca7-b9ea-1ad642431fae" in="spanish" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:link id="1715c9a8-0662-4ca7-b9ea-1ad642431fae" in="spanish" />
+
+{{-- Using Fluent Tags --}}
+{{ Statamic::tag('link')->id('1715c9a8-0662-4ca7-b9ea-1ad642431fae')->in('spanish') }}
+```
+```
+::
 
 ``` output
 /es/el-asdf-de-la-pagina
diff --git a/content/collections/tags/locales-count.md b/content/collections/tags/locales-count.md
index 3181ab185..44398e734 100644
--- a/content/collections/tags/locales-count.md
+++ b/content/collections/tags/locales-count.md
@@ -6,10 +6,24 @@ intro: 'Get the number of localizations.'
 ---
 This tag shares everything from the [locales tag](/tags/locales), except that instead of looping over the results, it will just tell you how many there are.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ locales:count }}
 {{ locales:count self="false" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:locales:count />
+<s:locales:count self="false" />
+
+{{-- Using Fluent Tags --}}
+{{ Statamic::tag('locales:count') }}
+{{ Statamic::tag('locales:count')->self(false) }}
+```
+::
 
 ```output
 3
diff --git a/content/collections/tags/locales.md b/content/collections/tags/locales.md
index 849f72d54..658fb7b68 100644
--- a/content/collections/tags/locales.md
+++ b/content/collections/tags/locales.md
@@ -83,37 +83,67 @@ variables:
 
 This tag is used to access all the locales any given entry or term is available in. It's most commonly used as a language switcher.
 
-Each locale's system data, as configured in `config/statamic/sites.php`, is available inside of a `locale` array.
+Each locale's system data, is [configured](/multi-site#configuration) in `resources/sites.yaml`.
 ## Examples
 
 ### Iterating over locales {#iterating}
 
 Loop through in each locale to get URLs to translated versions of an entry or taxonomy term.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
 {{ locales }}
     <li><a href="{{ permalink }}">View in {{ locale:name }}</a></li>
 {{ /locales }}
 </ul>
 ```
+::tab blade
+<ul>
+<s:locales>
+  <li><a href="{{ $locale['permalink'] }}">View in {{ $locale['name'] }}</a></li>
+</s:locales>
+</ul>
+::
 
 ### Targeting a locale {#targeting}
 
 You can also specify a locale directly instead of looping through them all.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ locales:fr }}
     <a href="{{ permalink }}">View in French</a>
 {{ /locales:fr }}
 ```
+::tab blade
+```blade
+<s:locales:fr>
+  <a href="{{ $locale['permalink'] }}">View in French</a>
+</s:locales:fr>
+```
+::
 
 ### Excluding the entry's locale {#excluding}
 
 You can choose to not show the locale belonging to the entry.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ locales self="false" }}
     <a href="{{ permalink }}">View in {{ locale:name }}</a>
 {{ /locales }}
 ```
+::tab blade
+```blade
+<s:locales self="false">
+  <a href="{{ $locale['permalink'] }}">View in {{ $locale['name'] }}</a>
+</s:locales>
+```
+::
diff --git a/content/collections/tags/loop.md b/content/collections/tags/loop.md
index 093575c19..dcc877529 100644
--- a/content/collections/tags/loop.md
+++ b/content/collections/tags/loop.md
@@ -31,15 +31,29 @@ Create and iterate through a loop a specific number of times using the `times` p
 ## Examples
 
 ### Count to 10
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ loop times="10" }}
   {{ value }}
 {{ /loop }}
 ```
+::tab blade
+```blade
+<s:loop times="10">
+  {{ $value }}
+</s:loop>
+```
+::
 
 ### Looping a variable number of times
 
 
+::tabs
+
+::tab antlers
 ```antlers
 ---
 number: "5"
@@ -52,13 +66,39 @@ text: "Pow"
 
 // Output: PowPowPowPowPow
 ```
+::tab blade
+```blade
+<?php
+  $number = 5;
+  $text = 'Pow';
+?>
 
-### Populate a select field with years
+<s:loop :times="$number">
+  {{ $text }}
+</s:loop>
 
+// Output: PowPowPowPowPow
 ```
+::
+
+### Populate a select field with years
+
+::tabs
+
+::tab antlers
+```antlers
 <select name="year">
    {{ loop from="1900" to="2020" }}
       <option value="{{ value }}">{{ value }}</option>
    {{ /loop }}
 </select>
 ```
+::tab blade
+```blade
+<select name="year">
+  <s:loop from="1900" to="2020">
+    <option value="{{ $value }}">{{ $value }}</option>
+  </s:loop>
+</select>
+```
+::
\ No newline at end of file
diff --git a/content/collections/tags/markdown-indent.md b/content/collections/tags/markdown-indent.md
index 9831ce31d..ee6c95e52 100644
--- a/content/collections/tags/markdown-indent.md
+++ b/content/collections/tags/markdown-indent.md
@@ -7,7 +7,10 @@ stage: 4
 ---
 ## Example {#example}
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <article class="mx-auto max-w-lg">
   {{ markdown:indent }}
     # My Favorite Nickelodeon Shows
@@ -20,6 +23,21 @@ stage: 4
   {{ /markdown:indent }}
 </article>
 ```
+::tab blade
+```blade
+<article class="mx-auto max-w-lg">
+  <s:markdown:indent>
+    # My Favorite Nickelodeon Shows
+
+    - Kenan & Kel
+    - All That
+    - Double Dare
+    - Wild & Crazy Kids
+    - Legends of the Hidden Temple
+  </s:markdown:indent>
+</article>
+```
+::
 
 ```html
 <article class="mx-auto max-w-lg">
diff --git a/content/collections/tags/markdown.md b/content/collections/tags/markdown.md
index 8aff63250..a4d2dbf71 100644
--- a/content/collections/tags/markdown.md
+++ b/content/collections/tags/markdown.md
@@ -7,7 +7,10 @@ stage: 5
 ---
 ## Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <article class="mx-auto max-w-lg">
 {{ markdown }}
 # My Favorite Nickelodeon Shows
@@ -20,6 +23,21 @@ stage: 5
 {{ /markdown }}
 </article>
 ```
+::tab blade
+```blade
+<article class="mx-auto max-w-lg">
+<s:markdown>
+# My Favorite Nickelodeon Shows
+
+- Kenan & Kel
+- All That
+- Double Dare
+- Wild & Crazy Kids
+- Legends of the Hidden Temple
+</s:markdown>
+</article>
+```
+::
 
 ```html
 <article class="mx-auto max-w-lg">
diff --git a/content/collections/tags/mix.md b/content/collections/tags/mix.md
index 5b4b66211..c3a125a79 100644
--- a/content/collections/tags/mix.md
+++ b/content/collections/tags/mix.md
@@ -20,21 +20,41 @@ id: b8936f37-a237-4fad-bf70-a6421ab413ae
 
 [Webpack][webpack] and asset compilation can be a pretty complicated task and Laravel Mix does a really good job of simplifying it as far as it can possibly go.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 // CSS
 <link href="{{ mix src='/css/tailwind.css' }}" rel="stylesheet">
 
 // JavaScript
 <script src="{{ mix src='/js/app.js' }}"></script>
 ```
+::tab blade
+```blade
+// CSS
+<link href="{{ Statamic::tag('mix')->src('/css/tailwind.css') }}" rel="stylesheet">
+
+// JavaScript
+<script src="{{ Statamic::tag('mix')->src('/js/app.js') }}"></script>
+```
+::
 
 ## Default Directory
 
 By default Mix will assume that the `mix-manifest.json` file that points to the proper file locations is in your `public/` directory. If your file is configured to build elsewhere you can point to it with the `in` parameter.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <link href="{{ mix src='/css/tailwind.css' in='assets' }}" rel="stylesheet">
 ```
+::tab blade
+```blade
+<link href="{{ Statamic::tag('mix')->src('/css/tailwind.css')->in('assets') }}" rel="stylesheet">
+```
+::
 
 ## Related Reading
 
diff --git a/content/collections/tags/mount_url.md b/content/collections/tags/mount_url.md
index 57d51dd4d..59d359009 100644
--- a/content/collections/tags/mount_url.md
+++ b/content/collections/tags/mount_url.md
@@ -14,14 +14,30 @@ parameters:
 
 This tag lets you get the URL to a collection's mount entry.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <a href="{{ mount_url handle="blog" }}">Read Our Blog</a>
 ```
+::tab blade
+```blade
+<a href="{{ Statamic::tag('mount_url')->handle('blog') }}">Read Our Blog</a>
+```
+::
 
 ## Shorthand
 
 You may also use a shorthand syntax, where the second tag argument is the collection handle.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <a href="{{ mount_url:blog }}">Read Our Blog</a>
-```
\ No newline at end of file
+```
+::tab blade
+```blade
+<a href="{{ Statamic::tag('mount_url:blog') }}">Read Our Blog</a>
+```
+::
\ No newline at end of file
diff --git a/content/collections/tags/nav-breadcrumbs.md b/content/collections/tags/nav-breadcrumbs.md
index 2271b795c..531618f7a 100755
--- a/content/collections/tags/nav-breadcrumbs.md
+++ b/content/collections/tags/nav-breadcrumbs.md
@@ -54,17 +54,20 @@ Breadcrumbs don't follow structures, they follow the current URL hierarchy.
 Here's an example of what breadcrumbs might look like, as well as a code example in use.
 
 <figure>
-    <div class="flex font-mono">
-      <div class="mr-4">Home</div>
-      <div class="mr-4">&rarr;</div>
-      <div class="mr-4">Blog</div>
-      <div class="mr-4">&rarr;</div>
-      <div class="mr-4 text-pink-hot font-bold">How to Dress Like David Hasselhoff</div>
+    <div class="flex font-mono space-x-4 mx-4">
+      <div>Home</div>
+      <div>&rarr;</div>
+      <div>Blog</div>
+      <div>&rarr;</div>
+      <div class="text-pink-hot font-bold">How to Dress Like David Hasselhoff</div>
     </div>
     <figcaption>These crumbs are delicious.</figcaption>
 </figure>
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul class="breadcrumbs">
     {{ nav:breadcrumbs }}
     <li{{ if is_current }} class="current"{{ /if }}>
@@ -73,3 +76,16 @@ Here's an example of what breadcrumbs might look like, as well as a code example
     {{ /nav:breadcrumbs }}
 </ul>
 ```
+::tab blade
+```blade
+<ul class="breadcrumbs">
+  <s:nav:breadcrumbs>
+  <li
+    @if ($is_current) class="current" @endif
+  >
+    <a href="{{ $url }}">{{ $title }}</a>
+  </li>
+  </s:nav:breadcrumbs>
+</ul>
+```
+::
diff --git a/content/collections/tags/nav.md b/content/collections/tags/nav.md
index 74c957b2b..56f1d5302 100755
--- a/content/collections/tags/nav.md
+++ b/content/collections/tags/nav.md
@@ -15,7 +15,7 @@ parameters:
   -
     name: from
     type: string
-    description: "The starting point for your navigation. If unspecified, it'll start from the top. Note: this parameter is only supported for orderable collections."
+    description: "Specify the URI of the entry to be used as the starting point for your navigation. If unspecified, it'll start from the top. Note: this parameter is only supported for orderable collections."
   -
     name: show_unpublished
     type: 'boolean *false*'
@@ -25,7 +25,12 @@ parameters:
     type: 'boolean *false*'
     description: >
       You can choose to turn off the home page in the tree, opting to start the crumbs from the first level nav item. Doesn't do
-      anything if you're using the `from` paramter.
+      anything if you're using the `from` parameter.
+  -
+    name: include_parents
+    type: 'boolean *true*'
+    description: >
+      Prevents the `parent` key from being returned on nav items.
   -
     name: max_depth
     type: 'int'
@@ -36,6 +41,12 @@ parameters:
     type: array
     description: >
       Limits the fields that will be made available to the tag. Selecting fewer fields will improve performance. By default all variables will be selected. See [performance](#performance).
+  -
+     name: as
+     type: string
+     description: >
+      Alias your nav items into a new variable loop. It's worth noting that the `*recursive children*` variable won't be available when using this parameter.
+     required: false
 variables:
   -
     name: is_published
@@ -112,6 +123,7 @@ variables:
       of the `nav` tag pair.
 ---
 ## Overview
+
 The various Nav tags work together to allow you to easily traverse your content upways and downways, sideways, slantways, longways, backways, squareways, frontways, and any other ways that you can think of.
 
 This tag is designed to be used for top-level and multi-level navs.
@@ -122,33 +134,86 @@ The nav tag supports both [navigations](/navigation) or multi-depth [collections
 
 You specify what kind you need by using the second tag part:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 // The "links" nav
 {{ nav:links }} ... {{ /nav:links }}
 ```
-
+::tab blade
+```blade
+// The "links" nav
+<s:nav:links>
+  ...
+</s:nav:links>
 ```
+::
+
+::tabs
+
+::tab antlers
+```antlers
 // The "pages" collection
 {{ nav:collection:pages }} ... {{ /nav:collection:pages }}
 ```
+::tab blade
+```blade
+// The "pages" collection
+<s:nav:collection:pages>
+  ...
+</s:nav:collection:pages>
+```
+::
 
 If you use the tag on it's own without a second part, it will assume you want the `pages` collection. That's a super common thing to do, and the `statamic/statamic` repo comes bundled with it.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 // Also the "pages" collection
 {{ nav }} ... {{ /nav }}
 ```
+::tab blade
+```blade
+// Also the "pages" collection
+<s:nav>
+  ...
+</s:nav>
+```
+::
 
 You can also specify the navigation using the `handle` parameter:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ nav handle="links" }} ... {{ /nav }}
 ```
+::tab blade
+```blade
+<s:nav
+  handle="links"
+>
+  ...
+</s:nav>
+```
+::
+
+:::tip
+The `{{ nav }}` tag will only output entries for [**Orderable** collections](collections#ordering). If you need navigation for a non-ordered collection, you may wish to use the [`collection`](/tags/collection) tag instead.
+:::
 
 ## Basic Example
 
 A single level nav, much like something you'd have at the top of your site, can be built by looping through all the items in the nav and using their `title` and `url` variables in your HTML. Add a "current" state by checking for `is_current` and `is_parent`, and you're probably good to go.
-```
+
+::tabs
+
+::tab antlers
+```antlers
 <ul>
   {{ nav include_home="true" }}
     <li>
@@ -159,12 +224,35 @@ A single level nav, much like something you'd have at the top of your site, can
   {{ /nav }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+  <s:nav include_home="true">
+    <li>
+      <a
+        href="{{ $url }}"
+        @if ($is_current || $is_parent) class="current" @endif
+      >
+        {{ $title }}
+      </a>
+    </li>
+  </s:nav>
+</ul>
+```
+::
 
 ## Show the children of the current page
 
+:::tip
+A simpler way is to use the [children tag](/tags/children) for this.
+:::
+
 Use the `uri` to get the children of the current page.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
     {{ nav :from="uri" }}
         {{ unless no_results }}
@@ -175,12 +263,28 @@ Use the `uri` to get the children of the current page.
     {{ /nav }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+  <s:nav :from="uri" as="pages">
+    @foreach ($pages as $page)
+      <li>
+        <a href="{{ $page['url'] }}">{{ $page['title'] }}</a>
+      </li>
+    @endforeach
+  </s:nav>
+</ul>
+```
+::
 
 ## Multi-level Nav Example Recursion {#multi-level}
 
 Building an infinitely deep nav is possible by using recursion.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
    {{ nav :from="segment_1" }}
       <li>
@@ -194,6 +298,27 @@ Building an infinitely deep nav is possible by using recursion.
    {{ /nav }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+   <s:nav :from="$segment_1">
+      <li>
+         <a
+           href="{{ $url }}"
+           @if ($is_current || $is_parent) class="current" @endif
+         >
+           {{ $title }}
+         </a>
+         @if ($is_current || $is_parent)
+            @if (count($children) > 0)
+               <ul>@recursive_children</ul>
+            @endif
+         @endif
+      </li>
+   </s:nav>
+</ul>
+```
+::
 
 The `{{ *recursive children* }}` tag will repeat the contents of the entire `{{ nav }}` tag using child elements, if they exist. As long as there are children to display, and we’re still on either the current or parent page of those children, the nav tag will traverse deeper. If your scoped variables have trouble making it through to the next recursion, you can glue them to children like this: `{{ *recursive children:my_scoped_variable* }}`.
 
diff --git a/content/collections/tags/nocache.md b/content/collections/tags/nocache.md
index 030263a2e..092d4949a 100644
--- a/content/collections/tags/nocache.md
+++ b/content/collections/tags/nocache.md
@@ -9,9 +9,12 @@ intro: When using a broader caching solution (like [static caching](/static-cach
 
 When using [Static Caching](/static-caching) or the [cache tag](/tags/cache), the rendered contents will be remembered for the next request. That's great for performance, but if you have something in there that you'd like to keep dynamic (such as authenticated user data, randomized elements, or listings), you'd normally have to disable static caching for the whole page.
 
-With the `nocache` tag, you can keep the entirety of the page cached (when using Static Caching) or chunks of the page cached (when using the cache tag), with certain parts left as as dynamic:
+With the `nocache` tag, you can keep the entirety of the page cached (when using Static Caching) or chunks of the page cached (when using the cache tag), with specific parts remaining dynamic:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ nav }} ... {{ /nav }}
 
 {{ nocache }} {{# [tl! focus:6] #}}
@@ -24,6 +27,21 @@ With the `nocache` tag, you can keep the entirety of the page cached (when using
 
 {{ content }}
 ```
+::tab blade
+```blade
+<statamic:nav> ... </statamic:nav>
+
+<statamic:nocache> {{-- [tl! focus:6] --}}
+   @if ($logged_in)
+      Welcome back, {{ $current_user->name }}   
+   @else
+      Hello, guest!
+   @endif
+</statamic:nocache>
+
+{!! $content !!}
+```
+::
 
 ## Forms
 
@@ -35,17 +53,33 @@ CSRF tokens are now updated automatically.
 
 However, if your form has logic in it, like validation or success messages, you'll need to keep the `form:create` dynamic by wrapping in `nocache` tags.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ nocache }} {{# [tl!++] #}}
     {{ form:create }}
         ...
     {{ /form:create }}
 {{ /nocache }} {{# [tl!++] #}}
 ```
+::tab blade
+```blade
+<statamic:nocache> {{-- [tl!++] --}}
+   <statamic:form:create>
+      ...
+   </statamic:form:create>
+</statamic:nocache> {{-- [tl!++] --}}
+```
+::
 
 ## Blade
 
-You can use the "no cache" feature in Blade too, although you should use the dedicated Blade directive instead of trying to use the tag.
+You can use the "no cache" feature in Blade too, although you should use the dedicated Blade directive or the Statamic Elements tag instead of trying to use `Statamic::tag`.
+
+::tabs
+
+::tab nocache Directive
 
 To keep a part of your template dynamic, move it into a partial then use the `@nocache` directive just like you would use the `@include` directive.
 
@@ -53,6 +87,16 @@ To keep a part of your template dynamic, move it into a partial then use the `@n
 @include('mypartial') {{-- this will be cached --}}
 @nocache('mypartial') {{-- this will be dynamic --}}
 ```
+::tab Antlers Blade Components
+
+If you'd like to make a section of the current template dynamic without extracting a dedicated partial, you may use the `<statamic:nocache>` tag:
+
+```blade
+<statamic:nocache>
+  ...
+</statamic:nocache>
+```
+::
 
 ## Caveats
 
@@ -63,7 +107,9 @@ Most of the time you can probably get away with wrapping something in a `nocache
 
 For example, let's say you have a collection of stocks. Each entry contains information about the stock, except for the price. You have a custom tag that will get the up-to-the-second stock price using an API.
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection:stocks }}
     <li>
         {{ company }}
@@ -72,12 +118,25 @@ For example, let's say you have a collection of stocks. Each entry contains info
     </li>
 {{ /collection:stocks }}
 ```
+::tab blade
+```blade
+<statamic:collection:stocks>
+   <li>
+      {{ $company }}
+      {{ $symbol }}
+      <statamic:get_price :of="$symbol" />
+   </li>
+</statamic:collection:stocks>
+```
+::
 
 If you turned on static caching now, then the whole listing would be cached, including the prices.
 
 In this example, you should put a `nocache` _inside_ the loop.
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ collection:stocks }}
     <li>
         {{ company }}
@@ -88,6 +147,19 @@ In this example, you should put a `nocache` _inside_ the loop.
     </li>
 {{ /collection:stocks }}
 ```
+::tab blade
+```blade
+<statamic:collection:stocks>
+   <li>
+      {{ $company }}
+      {{ $symbol }}
+      <statamic:nocache> {{-- [tl!++] --}}
+        <statamic:get_price :of="$symbol" />
+      </statamic:nocache> {{-- [tl!++] --}}
+   </li>
+</statamic:collection:stocks>
+```
+::
 
 By putting it inside the loop, it means that the `collection:stocks` tag wouldn't need to re-query for entries on each subsequent request.
 
@@ -95,13 +167,27 @@ You'd then also rely on [static caching invalidation rules](/static-caching#inva
 
 An example where you would want to put a `nocache` tag _around_ a loop would be when re-querying every request would be important. For example, a randomized section:
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ nocache }}
     {{ collection:blog featured:is="true" sort="random" }}
         ...
     {{ /collection:blog }}
 {{ /nocache }}
 ```
+::tab blade
+```blade
+<statamic:nocache>
+   <statamic:collection:blog
+     featured:is="true"
+     sort="random"
+   >
+     ...
+   </statamic:collection:blog>
+</statamic:nocache>
+```
+::
 
 ### Context
 
@@ -120,7 +206,9 @@ reviews:
     rating: 3%
 ```
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ reviews }}
     <div class="movie">
         {{ nocache }}
@@ -129,6 +217,18 @@ reviews:
     </div>
 {{ /reviews }}
 ```
+::tab blade
+
+```blade
+@foreach ($reviews as $review)
+  <div class="movie">
+    <statamic:nocache>
+      {{ $review->name }} {{ $review->rating}} {{ $review->title }}
+    </statamic:nocache>
+  </div>
+@endforeach
+```
+::
 
 ```
 <div class="movie"> Top Gun 58% Movie Reviews </div>
@@ -151,7 +251,9 @@ Now lets say you update `title` to `Ratings` and Top Gun's `rating` to `60%`. Th
 
 Only the `title`'s change would be reflected, since the `reviews` value was remembered. If you wanted this to be dynamic, you should wrap the loop rather than putting it inside the loop, as explained in [when to wrap](#when-to-wrap).
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ nocache }} {{# [tl!++] #}}
     {{ reviews }}
         <div class="movie">
@@ -162,10 +264,81 @@ Only the `title`'s change would be reflected, since the `reviews` value was reme
     {{ /reviews }}
 {{ /nocache }} {{# [tl!++] #}}
 ```
+::tab blade
+```blade
+<statamic:nocache> {{-- [tl!++] --}}
+    @foreach ($reviews as $review)
+        <div class="movie">
+            <statamic:nocache> {{-- [tl!--] --}}
+                {{ $review->name }} {{ $review->rating }} {{ $review->title }}
+            </statamic:nocache> {{-- [tl!--] --}}
+        </div>
+    @endforeach
+</statamic:nocache> {{-- [tl!++] --}}
+```
+::
+
 ```
 <div class="movie"> Top Gun 60% Ratings </div>
 ```
 
+#### Performance
+Sometimes, you may notice the contents of the `nocache` taking a while to load. This is often caused by Statamic hydrating all of the variables from the context.
+
+To improve performance, you can explicitly select the variables you need:
+
+::tabs
+::tab antlers
+```antlers
+{{ nocache select="this|that" }}
+```
+::tab blade
+```blade
+<statamic:nocache
+  select="this|that"
+>
+</statamic:nocache>
+```
+::
+
+Alternatively, you can use the `@auto` placeholder for Statamic to extract the variables from the template (this is similar to the `@shallow` placeholder in the nav tag):
+
+::tabs
+::tab antlers
+```antlers
+{{ nocache select="@auto" }}
+```
+::tab blade
+```blade
+<statamic:nocache
+  select="@auto"
+>
+
+</statamic:nocache>
+```
+::
+
+:::tip
+It's worth noting, the `nocache` tag won't be able to extract variables used inside partials or PHP files like custom tags. You will need to explicitly define the variables you need in these cases.
+:::
+
+You can also combine them to extract the variables from the template and add additional ones:
+
+::tabs
+::tab antlers
+```antlers
+{{ nocache select="@auto|this|that" }}
+```
+::tab blade
+```blade
+<statamic:nocache
+  select="@auto|this|that"
+>
+
+</statamic:nocache>
+```
+::
+
 ## Full Measure Static Caching
 
 When using the `file` static cache driver (aka. "full measure") the pages will be stored as plain `html` files on your server.
@@ -183,3 +356,34 @@ StaticCache::nocachePlaceholder('Loading...');
 // or
 StaticCache::nocachePlaceholder('<svg>...</svg>');
 ```
+
+You may wish to run some additional Javascript code once the nocache fragments on the page have been replaced, to enable this a custom event is dispatched that you may register an event listener for.
+
+```js
+document.addEventListener('statamic:nocache.replaced', (event) => {
+    alert('nocache fragments have been replaced!');
+});
+```
+
+## Database
+
+Behind the scenes, the `nocache` tag needs to store some data somewhere. This includes the contents of the template chunks, the available variables at that point of the template, which pages it's being used on, etc.
+
+By default, these are stored in the cache. However, with increased traffic or site size, you may eventually run into resource usage issues. In this case, it's possible to store the nocache data in a database.
+
+1. Configure the database driver in `config/statamic/static_caching.php`:
+    ```php
+    'nocache' => 'database'
+    ``` 
+2. Generate the migration:
+    ```sh
+    php please nocache:migration
+    ```
+3. Run the migration:
+    ```sh
+    php artisan migrate
+    ```
+4. Clear the static cache. Things may be out of sync if you have previously cached pages but the nocache regions don't exist in the DB yet.
+    ```sh
+    php please static:clear
+    ```
diff --git a/content/collections/tags/oauth.md b/content/collections/tags/oauth.md
index 18b6696ae..0b21f8187 100644
--- a/content/collections/tags/oauth.md
+++ b/content/collections/tags/oauth.md
@@ -19,9 +19,17 @@ id: f7676fe0-abb3-4a05-8530-6d23a9b5130d
 
 Here's the regular/parameter syntax in action, especially useful if the provider name comes from variable.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <a href="{{ oauth provider="github" }}">Sign In with Github</a>
 ```
+::tab blade
+```blade
+<a href="{{ Statamic::tag('oauth')->provider('github') }}">Sign In with Github</a>
+```
+::
 
 ```output
 <a href="/oauth/github">Sign In with Github</a>
@@ -29,9 +37,17 @@ Here's the regular/parameter syntax in action, especially useful if the provider
 
 And the shorthand version.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <a href="{{ oauth:github }}">Sign In with Github</a>
 ```
+::tab blade
+```blade
+<a href="{{ Statamic::tag('oauth:github') }}">Sign In with Github</a>
+```
+::
 
 ```html
 <a href="/oauth/github">Sign In with Github</a>
@@ -39,9 +55,17 @@ And the shorthand version.
 
 And now with a redirect:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <a href="{{ oauth:github redirect="/account" }}">Sign In with Github</a>
 ```
+::tab blade
+```blade
+<a href="{{ Statamic::tag('oauth:github')->redirect('/account') }}">Sign In with Github</a>
+```
+::
 
 ```html
 <a href="/oauth/github?redirect=/account">Sign In with Github</a>
diff --git a/content/collections/tags/obfuscate.md b/content/collections/tags/obfuscate.md
index 207c8212a..87a7499dd 100644
--- a/content/collections/tags/obfuscate.md
+++ b/content/collections/tags/obfuscate.md
@@ -12,11 +12,21 @@ This tag obfuscates content.
 
 Obfuscation is a method of encoding content so that the **source code** is hard or impossible to understand. This is most often used on email addresses to prevent spambots from scraping them and signing the poor souls up for an endless chain of pharmaceutical drug emails.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ obfuscate }}
-	djjazzyjeff@angelfire.com
+  djjazzyjeff@angelfire.com
 {{ /obfuscate }}
 ```
+::tab
+```blade
+<s:obfuscate>
+  djjazzyjeff@angelfire.com
+</s:obfuscate>
+```
+::
 
 ```html
 <!-- Users see this -->
@@ -31,4 +41,3 @@ djjazzyjeff@angelfire.com
 - [Obfuscate modifier](/modifiers/obfuscate)
 - [How to pronounce obfuscate](https://www.youtube.com/watch?v=zaEg0gziFiU)
 - [How to pronounce Schenectady](https://www.youtube.com/watch?v=e6IO_x3L53c)
-
diff --git a/content/collections/tags/parent.md b/content/collections/tags/parent.md
index 3e4fdfb15..04d4968cf 100644
--- a/content/collections/tags/parent.md
+++ b/content/collections/tags/parent.md
@@ -12,27 +12,65 @@ This is a simple utility tag that makes it easy to fetch data from the entry one
 ## Parent URL
 By itself the tag returns the parent's URL.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ parent }}
 // Would return "/tags"
 ```
+::tab blade
+```blade
+<s:parent />
+```
+::
 
 ## Single Variables
 You can fetch single variables from the parent entry by passing them as the second tag argument.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ parent:title }}
 // Would return "Tags"
 ```
+::tab blade
+
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:parent:title />
+
+{{-- Using Fluent Tags --}}
+{{ Statamic::tag('parent:title') }}
+```
+
+::
 
 ## Tag Pair
+
 As a tag pair, it will have access to all the parent's data:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ parent }}
   Go back to <a href="{{ url }}">{{ title }}</a>.
 {{ /parent }}
 ```
+::tab blade
+```blade
+<s:parent>
+    Go back to <a href="{{ $url }}">{{ $title }}</a>.
+</s:parent>
+
+{{-- You also use "as" to alias the parent variable. --}}
+<s:parent as="parent">
+    Go back to <a href="{{ $parent['url'] }}">{{ $parent['title'] }}</a>.
+</s:parent>
+```
+::
 
 ```html
 Go back to <a href="/tags">Tags</a>.
diff --git a/content/collections/tags/partial-exists.md b/content/collections/tags/partial-exists.md
index 7a0848e7d..1804caffe 100644
--- a/content/collections/tags/partial-exists.md
+++ b/content/collections/tags/partial-exists.md
@@ -13,13 +13,25 @@ parameters:
 
 You can use this tag to check if a partial exists. Useful if you have some sort of dynamic loop.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if {partial:exists src="mypartial" } }}
     It exists
 {{ else }}
     It doesn't.
 {{ /if }}
 ```
+::tab blade
+```blade
+@if (Statamic::tag('partial:exists')->src('mypartial')->fetch())
+  It exists
+@else
+  It doesn't.
+@endif
+```
+::
 
 ## Related Reading
 
diff --git a/content/collections/tags/partial-if-exists.md b/content/collections/tags/partial-if-exists.md
index 10f54b628..f4a3d8ea7 100644
--- a/content/collections/tags/partial-if-exists.md
+++ b/content/collections/tags/partial-if-exists.md
@@ -18,9 +18,17 @@ parameters:
 
 You can use this tag to output a partial if it exists. Useful if you have some sort of dynamic loop.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ partial:if_exists src="mypartial" }}
 ```
+::tab blade
+```blade
+<s:partial:if_exists src="mypartial" />
+```
+::
 
 Practically identical to the [`partial`](/tags/partial) except if the view doesn't exist it will just output
 nothing instead of throwing a "view not found" exception.
diff --git a/content/collections/tags/partial.md b/content/collections/tags/partial.md
index ee8de5279..0e4c48b55 100644
--- a/content/collections/tags/partial.md
+++ b/content/collections/tags/partial.md
@@ -9,6 +9,16 @@ parameters:
     type: string
     description: |
       You can pass the name of the partial with a parameter instead of tag argument. Example: `src="cards/author_bio"` or `:src="var_name"`.
+  -
+    name: when
+    type: string
+    description: |
+      Render a partial only if a condition is met.
+  -
+    name: unless
+    type: string
+    description: |
+      The converse of `when`.
   -
     name: "*"
     type: mixed
@@ -21,10 +31,19 @@ id: 1f683992-401e-44f6-8506-7967005778a5
 
 You can use any view as a partial by using this here partial tag.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 // This will import /resources/views/blog/_card.antlers.html
 {{ partial:blog/card }}
 ```
+::tab blade
+```blade
+// This will import /resources/views/blog/_card.antlers.html
+<s:partial:blog/card />
+```
+::
 
 :::best-practice
 We recommend prefixing any views intended to be _only_ used as partials with an underscore, `_like-this.antlers.html` and reference them `{{ partial:like-this }}. The underscore is not necessary in the partial tag definition.
@@ -34,13 +53,31 @@ We recommend prefixing any views intended to be _only_ used as partials with an
 
 You can pass additional data into a partial via on-the-fly parameters. The parameter name will become a variable inside the partial. The only reserved parameter is `src`, so you can name your variables just about anything.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ partial:list header="favorite ice cream flavors" :items="flavors" }}
 
 // Inside `list.antlers.html`
 <h2>These are my {{ header }}</h2>
 {{ items | ul }}
 ```
+::tab blade
+```blade
+<s:partial:list
+  header="favorite ice cream flavors"
+  :items="$flavors"
+/>
+```
+
+```blade
+{{-- Inside `list.blade.php` --}}
+
+<h2>These are my {{ $header }}</h2>
+{!! Statamic::modify($items)->ul() !!}
+```
+::
 
 ```html
 <h2>These are my favorite ice cream flavors</h2>
@@ -53,13 +90,63 @@ You can pass additional data into a partial via on-the-fly parameters. The param
 
 Note that the `:items` parameter is prefixed by a colon, meaning it will pass the _value_ of a `flavors` variable, if it exists.
 
+
+:::best-practice
+To set default values for parameters inside your partials, you can [add YAML front-matter](/variables/#view-frontmatter) to the top of your Antlers partials.
+
+In the example below, the partial has two front-matter variables (`author` and `image`). When the partial is called, the `author` parameter is provided. When the partial is outputted, the `author` parameter is used, and the value for the `image` variable falls back to the partial's front-matter.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ partial:card author="David Hasselhoff" }}
+```
+
+```antlers
+---
+author: Jack McDade
+image: https://example.com/placeholder.png
+---
+
+<img src="{{ view:image }}">
+<p>Written by {{ view:author }}</p>
+```
+::tab blade
+```blade
+<s:partial:card author="David Hasselhoff" />
+```
+
+```blade
+@frontmatter([
+  'author' => 'Jack McDade',
+  'image'  => 'https://example.com/placeholder.png',
+])
+
+<img src="{{ $view['image'] }}">
+<p>Written by {{ $view['author'] }}</p>
+```
+::
+
+```html
+<img src="https://example.com/placeholder.png"> <!-- No image was provided, so falling back to the front-matter. -->
+<p>Written by David Hasselhoff</p> <!-- Author parameter provided, so using that. -->
+```
+
+This technique is preferrable over defining custom variables inside your partial.
+
+:::
+
+
 ## Slots
 
 Sometimes you might need to pass a large chunk of content into a partial. Jamming a bunch of HTML through a parameter would be like trying to shove a pizza through a donut. A hilarious YouTube video but a bad idea on a Friday night.
 
 The solution is to use the partial tag as a pair. Everything inside will be passed into the partial in the `{{ slot }}` variable.
 
-```
+::tabs
+::tab antlers
+```antlers
 // Your main view
 {{ partial:modal title="Confirmation" }}
   <div class="flex items-center">
@@ -75,6 +162,24 @@ The solution is to use the partial tag as a pair. Everything inside will be pass
   <button @click="confirm" class="button">Do it</button>
 </div>
 ```
+::tab blade
+```blade
+// Your main view
+<s:partial:modal title="Confirmation">
+  <div class="flex items-center">
+    <img src="/img/warning.svg" />
+    <p>Are you sure you want to delete your entire collection of WWE wrestling figures?</p>
+  </div>
+</s:partial:modal>
+
+// _modal.blade.php
+<div class="bg-white rounded shadow">
+  <h2 class="p-2 border-b">{{ $title }}</h2>
+  {!! $slot !!}
+  <button @click="confirm" class="button">Do it</button>
+</div>
+```
+::
 
 ```output
 <div class="bg-white rounded shadow">
@@ -87,6 +192,30 @@ The solution is to use the partial tag as a pair. Everything inside will be pass
 </div>
 ```
 
+You can also name your slots using the `name` parameter.
+
+
+## Conditional Rendering
+
+You can render a partial only if a condition is met.
+
+::tabs
+::tab antlers
+```antlers
+{{ partial:components/subtitle :when="subtitle" }}
+    {{ subtitle }}
+{{ /partial:components/subtitle }}
+```
+::tab blade
+```blade
+<s:partial:components/subtitle :when="isset($subtitle)">
+  {{ $subtitle }}
+</s:partial:components/subtitle>
+```
+::
+
+Also supports the converse using `:unless`.
+
 ## Related Reading
 
 If you haven't read up on [views](/views) yet, you should. It's considered fundamental knowledge, like knowing that seals are just dog mermaids. 🐕 🧜‍♀️
diff --git a/content/collections/tags/protect-password_form.md b/content/collections/tags/protect-password_form.md
index e3beb018d..6c48312d2 100644
--- a/content/collections/tags/protect-password_form.md
+++ b/content/collections/tags/protect-password_form.md
@@ -10,10 +10,10 @@ parameters:
       Set HTML attributes as if you were on an HTML element. For example, `class="required" id="contact-form"`.
 variables:
   -
-    name: no_token
+    name: invalid_token
     type: boolean
     description: |
-      `true` if a valid token was not submitted.
+      Returns `true` when the token is missing or invalid. Functionally the same as the `no_token` variable.
   -
     name: errors
     type: array
@@ -39,11 +39,16 @@ related_entries:
 
 The HTML of the form itself is up to you. The only requirement is to name the password input `password` and wrap the form with the tag pair.
 
+Any variables from the protected entry will also be available in the password form.
+
 ## Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ protect:password_form }}
-    {{ if no_token }}
+    {{ if invalid_token }}
         No token has been provided.
     {{ else }}
 
@@ -62,9 +67,32 @@ The HTML of the form itself is up to you. The only requirement is to name the pa
     {{ /if }}
 {{ /protect:password_form }}
 ```
+::tab blade
+```blade
+<s:protect:password_form>
+  @if ($no_token)
+    No token has been provided.
+  @else
+    @if ($error)
+      <div class="error">{{ $error }}</div>
+    @endif
+
+    <input type="password" name="password" />
+
+    @if (isset($errors['password']))
+      @foreach ($errors['password'] as $error)
+        <div class="inline-error">{{ $error }}</div>
+      @endforeach
+    @endif
+
+    <button>Submit</button>
+  @endif
+</s:protect:password_form>
+```
+::
 
 ### Tokens
 
 When visiting a password protected page, Statamic generates a token and appends it to the form’s URL. Without this token, the form cannot function correctly. This is to combat brute-forcing and bots.
 
-In the example above, you can see the `no_token` boolean will be populated for you. This may happen if you visit the form URL directly.
+In the example above, you can see the `invalid_token` boolean will be populated for you. This may happen if you visit the form URL directly.
diff --git a/content/collections/tags/redirect.md b/content/collections/tags/redirect.md
index 5fb915e86..799b1fea3 100644
--- a/content/collections/tags/redirect.md
+++ b/content/collections/tags/redirect.md
@@ -26,18 +26,41 @@ id: 444d1109-ed96-4162-b86d-24b39f569220
 ## Redirecting to URLs
 
 Let's redirect visitors to the homepage if they're not logged in.
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ if ! logged_in }}
   {{ redirect to="/" }}
 {{ /if }}
 ```
+::tab blade
+```blade
+@if (! $logged_in)
+  <s:redirect to="/" />
+@endif
+```
+::
 
 How about RickRolling visitors if it's April Fool's Day?
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ if (now|format:m-d) == "04-01" }}
   {{ redirect to="https://www.youtube.com/watch?v=dQw4w9WgXcQ" }}
 {{ /if }}
 ```
+::tab blade
+```blade
+@if (Statamic::modify($now)->format('m-d')->fetch() == '04-01')
+  <s:redirect to="https://www.youtube.com/watch?v=dQw4w9WgXcQ" />
+@endif
+```
+
+::
 
 
 ## Named Routes
@@ -49,7 +72,19 @@ Route::get('products/{product}/{size}', fn($product, $size) => ...)
      ->name('products.show');
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ redirect route="products.show" product="socks" size="large" }}
 // /products/socks/large
 ```
+::tab blade
+```blade
+<s:redirect
+  route="products.show"
+  product="socks"
+  size="large"
+/>
+```
+::
diff --git a/content/collections/tags/route.md b/content/collections/tags/route.md
index eb65b7ffb..3db807c29 100644
--- a/content/collections/tags/route.md
+++ b/content/collections/tags/route.md
@@ -23,11 +23,21 @@ This tag is equivalent to the `route()` helper in [Laravel](https://laravel.com/
   Route::put('bacon/{bacon}', 'BaconController@update')->name('bacon.update');
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <form action="{{ route:bacon.update :bacon="id" }}">
    ... yummy bacon goodness
 </form>
 ```
+::tab blade
+```blade
+<form action="{{ route('bacon.update', ['bacon' => $id]) }}">
+   ... yummy bacon goodness
+</form>
+```
+::
 
 ```html
 <form action="/bacon/6">
diff --git a/content/collections/tags/scope.md b/content/collections/tags/scope.md
new file mode 100644
index 000000000..1fce3fef7
--- /dev/null
+++ b/content/collections/tags/scope.md
@@ -0,0 +1,47 @@
+---
+id: d4f29394-ac2f-4f73-bc33-5ec081324e2e
+blueprint: tag
+title: Scope
+intro: 'Used to push all of the "root", or page scope data into an array to be used however you see fit.'
+parameters:
+  -
+    name: scope
+    type: 'tag part'
+    description: 'The name of the scope while. This is not a parameter, but part of the tag itself. For example, `{{ scope:plop }}`.'
+    required: false
+---
+## Overview
+
+Most commonly this take is used to avoid any kind of variable collisions or to confirm data to a particular naming mechanism. Scoping is most often done on the Tag level (e.g. the [Collection Tag](/tags/collection/#scope)), but gives you another level of control and flexibility.
+
+## Example
+
+::tabs
+
+::tab antlers
+```antlers
+---
+title: Grimmace Shake
+---
+
+{{ scope:stuff }}
+<h1>{{ stuff:title }}</h1>
+{{ /scope:stuff }}
+```
+::tab blade
+```blade
+<?php
+  $title = 'Grimmace Shake';
+?>
+
+<s:scope:stuff>
+  <h1>{{ $stuff['title'] }}</h1>
+</s:scope:stuff>
+```
+::
+
+This will output:
+
+```html
+<h1>Grimmace Shake</h1>
+```
diff --git a/content/collections/tags/search.md b/content/collections/tags/search.md
index 11ef83ee1..5a05f8f19 100644
--- a/content/collections/tags/search.md
+++ b/content/collections/tags/search.md
@@ -44,6 +44,24 @@ parameters:
     type: string
     required: false
     description: 'The term to be searched for. Overrides the `query` parameter.'
+  -
+    name: paginate
+    type: 'boolean|int *false*'
+    description: 'Specify whether your results should be paginated. You can pass `true` and also use the `limit` param, or just pass the limit directly in here.'
+    required: false
+  -
+    name: page_name
+    type: 'string *page*'
+    description: 'The query string variable used to store the page number (ie. `?page=`).'
+    required: false
+  -
+    name: on_each_side
+    type: 'int *3*'
+    description: When using pagination, this specifies the max number of links each side of the current page. The minimum value is `1`.
+  -
+    name: chunk
+    type: int
+    description: 'Chunking results can significantly reduce memory usage when loading lots of results. Specify how many results should be included in each "chunk".'
 variables:
   -
     name: no_results
@@ -72,7 +90,9 @@ variables:
   -
     name: total_results
     type: integer
-    description: The number of results in the loop.
+    description: >
+      The number of results in the loop. 
+      When you're paginating results, this will be the number of results on the current page. If you need to get the total number of results across all pages, you can use `{{ paginate:total_items }}`.
   -
     name: search_score
     type: float
@@ -85,6 +105,11 @@ variables:
     name: result_type
     type: string
     description: The type of result. e.g. `entry`, `term`, `asset`, etc.
+  -
+    name: search_snippets
+    type: array
+    description: >
+      .
   -
     name: _highlightResult
     type: array
@@ -101,7 +126,11 @@ An overview on how to _configure_ search, indexing, and the query form can be fo
 
 On a search result page, you can loop through the results of the search like they were entries. You'll have access to all the data of all the content of your search results returned so you can format them any way you wish.
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ search:results }}
 
   {{ if no_results }}
@@ -117,6 +146,25 @@ On a search result page, you can loop through the results of the search like the
 
 {{ /search:results }}
 ```
+::tab blade
+```blade
+<s:search:results as="results">
+  @forelse($results as $result)
+    <a href="{{ $result->url }}" class="result">
+      <h2>{{ $result->title }}</h2>
+      <p>{{ Statamic::modify($result->content)->truncate(240) }}</p>
+    </a>
+  @empty
+    <h2>No results.</h2>
+  @endforelse
+</s:search:results>
+```
+
+:::tip
+When using Blade, make sure to alias your search results if you want to use variables like `$no_results`!
+:::
+
+::
 
 ## Search Forms
 
@@ -136,9 +184,19 @@ want to be searchable, the tag will convert your results into full objects (entr
 
 There is an overhead associated with this though, so if all you need is to display values that are in the index, you may disable supplementing.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ search:results supplement_data="false" }}
 ```
+::tab blade
+```blade
+<s:search:results supplement_data="false">
+  ...
+</s:search:results>
+```
+::
 
 This has a few caveats:
 
@@ -147,3 +205,72 @@ This has a few caveats:
   index the `status` field, or add `status:is=""` to your tag to prevent the filtering.
 - When using multiple sites, the search tag will filter items for the current site. If you haven't indexed the `site` field, you will get no results. Either
   index the `site` field, or add `site:is=""` to your tag to prevent the filtering.
+- You won't be able to use variables like `result_type` and `search_score`.
+
+## Contextual Keyword Snippets
+
+This feature works slightly differently depending on the driver you're using.
+
+
+### Comb / Local
+::tabs
+::tab antlers
+```
+{{ search:results }}
+  {{ search_snippets:title | implode(' … ') | mark }}
+{{ /search:results }}
+```
+::tab blade
+```blade
+<s:search:results as="results">
+  @foreach ($results as $result)
+    {!! Statamic::modify($result->search_snippets['title'])->implode(' … ')->mark() !!}
+  @endforeach
+</s:search:results>
+```
+::
+
+### Algolia
+Highlights are typically always available via `search_highlights`. The more powerful feature, [snippets](https://www.algolia.com/doc/api-reference/api-parameters/attributesToSnippet/), are available via `search_snippets` if you configure your index to use them. For example:
+
+```php
+'indexes' => [
+    'default' => [
+        'driver' => 'algolia',
+        'settings' => [ // [tl! **:start]
+            'attributesToSnippet' => [
+                'title:40',
+                'teaser:40',
+            ],
+            'highlightPreTag' => '<mark>',
+            'highlightPostTag' => '</mark>',
+        ], // [tl! **:end]
+    ],
+]
+```
+
+::tabs
+
+::tab antlers
+```antlers
+{{ search:results }}
+  {{ search_snippets:title:value }}
+  or
+  {{ search_highlights:title:value }}
+{{ /search:results }}
+```
+::tab blade
+```blade
+<s:search:results as="results">
+  @foreach ($results as $result)
+    {{ $result->search_snippets['title']['value'] }}
+    or
+    {{ $result->search_highlights['title']['value'] }}
+  @endforeach
+</s:search:results>
+```
+
+:::tip
+Calling `$result->searchSnippets()` without any arguments returns an array with all search snippets!
+:::
+::
diff --git a/content/collections/tags/section.md b/content/collections/tags/section.md
index 409bda4e1..d24f841d8 100644
--- a/content/collections/tags/section.md
+++ b/content/collections/tags/section.md
@@ -18,7 +18,10 @@ Most commonly this section/yield approach is used to create a global area in you
 
 In the example below, everything within the `section:sidebar` tag will _not_ be rendered in the template, but rather in the layout.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 // The Template
 
 <h1>{{ title }}</h1>
@@ -33,7 +36,7 @@ In the example below, everything within the `section:sidebar` tag will _not_ be
 {{ /section:sidebar }}
 ```
 
-```
+```antlers
 // The Layout
 <html>
   <head>
@@ -50,6 +53,41 @@ In the example below, everything within the `section:sidebar` tag will _not_ be
 </html>
 ```
 
+::tab blade
+```blade
+// The Template
+@extends('layout')
+
+<h1>{{ $title }}</h1>
+{!! $content !!}
+
+@section('sidebar')
+  <h2>About the Author</h2>
+  <div>
+    {{ $author['name'] }}
+  </div>
+  {{ $author['bio'] }}
+@endsection
+```
+
+```blade
+// The Layout
+<html>
+  <head>
+    <title>{{ $title }} | {{ $site_name }}</title>
+  </head>
+  <body>
+    <article>
+      {!! $template_content !!}
+    </article>
+    <aside>
+      @yield('sidebar')
+    </aside>
+  </body>
+</html>
+```
+::
+
 ## Related Reading
 
 If you haven't read up on [templates and layouts](/views), you should. It's relevant.
diff --git a/content/collections/tags/session-dump.md b/content/collections/tags/session-dump.md
index de42e95fc..ea1e1ad6c 100644
--- a/content/collections/tags/session-dump.md
+++ b/content/collections/tags/session-dump.md
@@ -6,9 +6,22 @@ stage: 5
 id: d1ef36ac-7d21-40b2-a7fc-b53a0be3c79c
 ---
 ## Example
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ session:dump }}
 ```
+::tab blade
+```blade
+{{-- Using session() helper and PHP --}}
+@php(dump(session()->all()))
+
+{{-- Using Antlers Blade Components --}}
+<s:session:dump />
+```
+::
 
 <figure>
     <img src="/img/session-dump.png" alt="Screenshot of the output of a session:dump tag.">
diff --git a/content/collections/tags/session-flash.md b/content/collections/tags/session-flash.md
index d115c932d..240725d5b 100644
--- a/content/collections/tags/session-flash.md
+++ b/content/collections/tags/session-flash.md
@@ -7,28 +7,88 @@ id: 29957a36-a15a-4fd0-9342-b829b6235fea
 ---
 ## Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session:flash message="You did it!" }}
 ```
+::tab blade
+```blade
+{{-- Using PHP --}}
+@php(session()->flash('message', 'You did it!'))
+
+{{-- Using Antlers Blade Components --}}
+<s:session:flash message="You did it!" />
+```
+::
 
 The next (and only next) request will then have that variable available.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session:message }} // You did it!
 ```
+::tab blade
+```blade
+{{-- Using PHP --}}
+@php(session()->get('message'))
+
+{{-- Using Antlers Blade Components --}}
+<s:session:message />
+```
+::
 
 ## Multiple Variables
 
 You can set multiple variables at once and reference interpolated data (references to variables).
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ session:flash success="true" :clicked="order_button" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:session:flash
+  success="true"
+  :clicked="$order_button"
+/>
+
+{{-- Using PHP --}}
+<?php
+  session()->flash('success');
+  session()->flash('clicked', $order_button);
+?>
+```
+::
+
 
 ## Setting Array Data
 
 Array data can be set with dot notation.
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ session:flash likes.snow_cones="true" likes.italian_ice="false" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:session:flash
+  likes.snow_cones="true"
+  likes.italian_ice="false"
+/>
+
+{{-- Using PHP --}}
+<?php
+  session()->flash('likes.snow_cones');
+  session()->flash('likes.italian_ice', false);
+?>
+```
+::
+
diff --git a/content/collections/tags/session-flush.md b/content/collections/tags/session-flush.md
index bb913052c..0159ffdd2 100644
--- a/content/collections/tags/session-flush.md
+++ b/content/collections/tags/session-flush.md
@@ -7,9 +7,21 @@ id: 1f522665-9fc2-4c9f-9594-04a518c51b39
 ---
 ## Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session:flush }}
 ```
+::tab blade
+```blade
+{{-- Using Statamic Antlers Components --}}
+<s:session:flush />
+
+{{-- Using PHP --}}
+@php(session()->flush())
+```
+::
 
 That's all there is to it. How you use it is up to you. You may want to tuck this away behind an `if` statement or a unique URL.
 
diff --git a/content/collections/tags/session-forget.md b/content/collections/tags/session-forget.md
index 7478de33f..c0f8b67be 100644
--- a/content/collections/tags/session-forget.md
+++ b/content/collections/tags/session-forget.md
@@ -8,9 +8,22 @@ id: be024503-9796-4f2f-9c75-548e2ea09cec
 ## Example
 
 Pass multiple keys by delimiting them with a pipe.
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ session:forget keys="likes|referral" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:session:forget keys="likes|referral" />
+
+{{-- Using the session() helper --}}
+@php(session()->forget(['likes', 'referral']))
+```
+::
 
 :::tip
 The **entire** session can be wiped with the [session:flush](/tags/session-flush) tag. Always wipe and flush, folks.
diff --git a/content/collections/tags/session-has.md b/content/collections/tags/session-has.md
index 15e075f9f..83c3e143d 100644
--- a/content/collections/tags/session-has.md
+++ b/content/collections/tags/session-has.md
@@ -12,8 +12,19 @@ related_entries:
 
 This is a very simple tag designed to be used in a condition statement. You may check to see if a key has been set (most likely by the [session:set](/tags/session-set) tag) in the session. It returns either `true` or `false`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if {session:has key="entered_survey"} }}
     <p>You already filled out the survey. Thanks for your feedback!</p>
 {{ /if }}
 ```
+::tab blade
+```blade
+{{-- We can use the session() helper in Blade --}}
+@if (session()->has('entered_survery'))
+  <p>You have already filled out the survey. Thanks for your feedback!</p>
+@endif
+```
+::
diff --git a/content/collections/tags/session-set.md b/content/collections/tags/session-set.md
index 2771ac904..aa229ce27 100644
--- a/content/collections/tags/session-set.md
+++ b/content/collections/tags/session-set.md
@@ -8,45 +8,95 @@ id: 90796c5b-6b11-4b02-9e6b-fd70211c825a
 
 This can be used for many different things. For example, you could set a variable on the form success page if a user has filled out a special survey form.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session:set entered_survey="true" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:session:set entered_survey="true" />
+
+{{-- Using session() helper --}}
+@php(session()->put('entered_survey', true))
+```
+::
 
 Later you could decide to show a message instead of the form if the user has already filled it out.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session }}
     {{ if entered_survey }}
         <p>You already filled out the form.</p>
     {{ /if }}
 {{ /session }}
 ```
+::tab blade
+```blade
+@if (session()->get('entered_survey'))
+  <p>You already filled out the form.</p>
+@endif
+```
+::
 
 ## Multiple Variables
 
 You can set multiple variables at once and reference interpolated data (references to variables).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session:set likes="hats" :visited="url" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:session:set likes="hats" :visited="url" />
+```
+::
 
 ## Tag Pair
 
 This tag is also available as a pair, which can be used to immediately display set data.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session:set likes="boomboxes" }}
     <p>You like {{ likes }}, huh?</p>
 {{ /session:set }}
 ```
+::tab blade
+```blade
+<s:session:set likes="boomboxes">
+  <p>You like {{ $likes }}, huh?</p>
+</s:session:set>
+```
+::
 
 ## Setting Array Data
 
 Array data can be set with dot notation.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session:set likes.books="true" likes.hats="true" }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:session:set likes.books="true" likes.hats="true" />
+```
+::
 
 ## Forgetting Data
 
diff --git a/content/collections/tags/session.md b/content/collections/tags/session.md
index 7355a2f31..3357e711e 100644
--- a/content/collections/tags/session.md
+++ b/content/collections/tags/session.md
@@ -9,11 +9,21 @@ id: c15836c2-808d-4260-9d01-e5a569da5b5a
 
 You can use `{{ session }}` as a tag pair to access all the data inside your user's session.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session }}
     {{ message }}
 {{ /session }}
 ```
+::tab blade
+```blade
+<s:session>
+  {{ $message }}
+</s:session>
+```
+::
 
 ```.output
 Welcome to the session.
@@ -21,9 +31,21 @@ Welcome to the session.
 
 You can also retrieve single variables with a single tag syntax.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session:message }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:session:message />
+
+{{-- Using session() helper --}}
+{{ session()->get('message') }}
+```
+::
 
 ## Setting and Forgetting
 
@@ -33,11 +55,21 @@ You can set data with [session:set](/tags/session-set), flash data with [session
 
 You can check if data is set in a session with [session:has](/tags/session-has).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if {session:has key="has_voted"} === true }}
   You already voted. Thank you!
 {{ /if }}
 ```
+::tab blade
+```blade
+@if (session()->has('has_voted') === true)
+  You already voted. Thank you!
+@endif
+```
+::
 
 ## Debugging
 
@@ -47,10 +79,20 @@ If you want to peek into the session and check the data, do so with with [sessio
 
 If you need extra markup around your session data, you can _alias_ a new child array variable.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ session as="sesh" }}
   {{ sesh }}
     {{ message }}
   {{ /sesh }}
 {{ /session }}
 ```
+::tab blade
+```blade
+{{-- Using the session() helper and PHP --}}
+@php($sesh = session()->all())
+```
+::
+
diff --git a/content/collections/tags/svg.md b/content/collections/tags/svg.md
index 2466bbd21..823353cd0 100644
--- a/content/collections/tags/svg.md
+++ b/content/collections/tags/svg.md
@@ -14,6 +14,10 @@ parameters:
       - `resources`
       - `public/svg`
       - `public`
+  -
+    name: sanitize
+    type: boolean
+    description: Determines whether the SVG should be sanitized before being output. Defaults to `true`.
   -
     name: '*'
     type: string
@@ -30,7 +34,10 @@ To make dev life easier, this tag collapses whitespace automatically and can set
 
 ## Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 // Using resources/svg/circle.svg
 {{ svg src="circle" class="fill-current text-teal" }}
 
@@ -40,6 +47,18 @@ To make dev life easier, this tag collapses whitespace automatically and can set
 // Using a variable `promo_graphic` (defined in your blueprint)
 {{ svg :src="promo_graphic" class="fill-current text-orange" }}
 ```
+::tab blade
+```blade
+// Using resources/svg/circle.svg
+<s:svg src="circle" class="fill-current text-teal" />
+
+// Using public/img/icons/square
+<s:svg src="img/icons/square" class="fill-current text-mint" />
+
+// Using a variable `promo_graphic` (defined in your blueprint)
+<s:svg :src="$promo_graphic" class="fill-current text-orange" />
+```
+::
 
 ```html
 <svg class="fill-current text-teal" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
diff --git a/content/collections/tags/switch.md b/content/collections/tags/switch.md
index 67aadb292..6e7abe8e4 100644
--- a/content/collections/tags/switch.md
+++ b/content/collections/tags/switch.md
@@ -14,7 +14,7 @@ id: 8b558556-a08b-4134-b77d-102b4fb34060
 ---
 ## Overview
 
-The switch tag is most often used to write HTML classes in your markup to help style lists and grids of items. While CSS has gained a lot of features in recent years with CSS selectors like `nth-of-type`, the switch tag is remains more relevant than ever, especially in combination with utility frameworks like [TailwindCSS](https://tailwindcss.com).
+The switch tag is most often used to write HTML classes in your markup to help style lists and grids of items. While CSS has gained a lot of features in recent years with CSS selectors like `nth-of-type`, the switch tag is more relevant than ever, especially in combination with utility frameworks like [TailwindCSS](https://tailwindcss.com).
 
 ## Examples
 
@@ -22,7 +22,10 @@ Here are a few ideas on what you can do with the switch tag.
 
 ### Set alternating background color for table rows
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <table>
   {{ collection:shows }}
     <tr class="{{ switch between='bg-white|bg-grey-100' }}">
@@ -32,10 +35,25 @@ Here are a few ideas on what you can do with the switch tag.
   {{ /collection:shows }}
 </table>
 ```
+::tab blade
+```blade
+<table>
+  <s:collection:shows>
+    <tr class="{{ Statamic::tag('switch')->between('bg-white|bg-grey-100') }}">
+     <th>{{ $title }}</th>
+     <td>{{ $rating }}</td>
+    </tr>
+  </s:collection:shows>
+</table>
+```
+::
 
 ### Reverse every other pair of items with `flex-direction: row-reverse`
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ features }}
   <div class="flex {{ switch between='flex-row|flex-row-reverse' }}">
     <div class="w-1/2 px-4 m-2">
@@ -46,6 +64,19 @@ Here are a few ideas on what you can do with the switch tag.
   </div>
 {{ /features }}
 ```
+::tab blade
+```blade
+@foreach ($features as $feature)
+  <div class="flex {{ Statamic::tag('switch')->between('flex-row|flex-row-reverse') }}">
+    <div class="w-1/2 px-4 m-2">
+      <h2>{{ $feature->feature_name }}</h2>
+      <div>{{ $feature->description }}</div>
+    </div>
+    <img src="{{ $feature->feature_screenshot }}" class="w-1/2 m-2">
+  </div>
+@endforeach
+```
+::
 
 ## Multiple Instances
 
@@ -53,10 +84,19 @@ You can have multiple instances of the switch tag in a single view and they won'
 
 If you want to have multiple, identical switch tags you can add an extra parameter to keep track of which is which.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ switch between="even|odd" for="gallery" }}
 {{ switch between="even|odd" for="footer" }}
 ```
+::tab blade
+```blade
+{{ Statamic::tag('switch')->between('even|odd')->for('gallery') }}
+{{ Statamic::tag('switch')->between('even|odd')->for('footer') }}
+```
+::
 
 ## Repeating Values
 
@@ -64,14 +104,31 @@ If you have a lot of redundancy in your `between` parameter, you can simplify it
 
 For example, if you'd like to set the background of every 10th element to purple, you could set the first value to white 9 times followed by purple 1 time.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ switch between="bg-white:9|bg-purple" }}
 ```
+::tab blade
+```blade
+{{ Statamic::tag('switch')->between('bg-white:9|bg-purple') }}
+```
+::
 
 :::tip
 If you're using [TailwindCSS's JIT mode](https://tailwindcss.com/docs/just-in-time-mode) or you purge your CSS on production, you might notice any classes **only in your switch tag** are missing. Add spaces around the pipes to make sure JIT picks them up.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ switch between="bg-white | bg-purple" }}
 ```
+::tab blade
+```blade
+{{ Statamic::tag('switch')->between('bg-white | bg-purple') }}
+```
+::
+
 :::
diff --git a/content/collections/tags/taxonomy-count.md b/content/collections/tags/taxonomy-count.md
new file mode 100644
index 000000000..44b0d3561
--- /dev/null
+++ b/content/collections/tags/taxonomy-count.md
@@ -0,0 +1,40 @@
+---
+title: "Taxonomy:Count"
+description: Fetches the number of terms in a taxonomy
+intro: |
+  This tag is a clone of the [taxonomy tag](/tags/taxonomy) but with one big difference: it only returns the total number of terms that match your set of filters.
+parent_tag: ba832b71-a567-491c-b1a3-3b3fae214703
+parameters:
+  -
+    name: in|from
+    type: string
+    description: >
+      The taxonomy in which to count terms.
+  -
+    name: "*"
+    type: inherit
+    description: 'All parameters available on the [taxonomy tag](/tags/taxonomy) are available.'
+stage: 4
+id: b32c0902-9642-4625-b4bc-de68fa8dfee2
+---
+## Overview
+
+This tag's only purpose is to fetch the number of the terms in a taxonomy that match your set of filtering parameters without the need for a tag pair/loop.
+
+## Example
+
+```
+There are {{ taxonomy:count in="tags" }} tags in this site.
+```
+
+```html
+There are 6201 tags in this site.
+```
+
+You could do the same thing inside a regular taxonomy tag by aliasing the results to a single variable and using the [count modifier](/modifiers/count).
+
+```
+{{ taxonomy:tags as="terms" }}
+There are {{ terms | count }} tags in this site.
+{{ /taxonomy:tags }}
+```
diff --git a/content/collections/tags/taxonomy.md b/content/collections/tags/taxonomy.md
index b4a42b886..68df4fcc5 100644
--- a/content/collections/tags/taxonomy.md
+++ b/content/collections/tags/taxonomy.md
@@ -90,41 +90,89 @@ id: ba832b71-a567-491c-b1a3-3b3fae214703
 
 A basic example would be to loop through the terms in a tags taxonomy and link to each individual tag:
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 <ul>
 {{ taxonomy from="tags" }}
     <li><a href="{{ url }}">{{ title }}</a></li>
 {{ /taxonomy }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+<s:taxonomy from="tags">
+  <li><a href="{{ $url }}">{{ $title }}</a></li>
+</s:taxonomy>
+</ul>
+```
+::
 
 You can also use the shorthand syntax for this. We prefer this style ourselves.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
 {{ taxonomy:tags }}
     <li><a href="{{ url }}">{{ title }}</a></li>
 {{ /taxonomy:tags }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+<s:taxonomy:tags>
+  <li><a href="{{ $url }}">{{ $title }}</a></li>
+</s:taxonomy:tags>
+</ul>
+```
+::
 
 If you'd like to fetch tags from multiple taxonomies, you'll need to use the standard syntax.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ taxonomy from="tags|categories" }}
 ```
+::tab blade
+```blade
+<s:taxonomy from="tags|categories">
+
+</s:taxonomy>
+```
+::
 
 To get terms from _all_ taxonomies, use the wildcard `*`. You may also exclude taxonomies when doing this.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ taxonomy from="*" not_from="tags" }}
 ```
+::tab blade
+```blade
+<s:taxonomy from="*" not_from="tags">
+
+</s:taxonomy>
+```
+::
 
 ## Entries
 
 The `taxonomy` tag allows you to iterate over taxonomy terms, but in each iteration, you also have access to all the corresponding content.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ taxonomy:categories }}
   <h2>{{ title }}</h2>
   <ul>
@@ -134,6 +182,18 @@ The `taxonomy` tag allows you to iterate over taxonomy terms, but in each iterat
   </ul>
 {{ /taxonomy:categories }}
 ```
+::tab blade
+```blade
+<s:taxonomy:categories>
+  <h2>{{ $title }}</h2>
+  <ul>
+    @foreach ($entries as $entry)
+      <li><a href="{{ $entry->url }}">{{ $entry->title }}</a></li>
+    @endforeach
+  </ul>
+</s:taxonomy:categories>
+```
+::
 
 ```html
 <h2>News</h2>
@@ -161,9 +221,22 @@ There are a couple of ways to filter your taxonomy terms. There's the conditions
 
 Want to get entries where the title has the words "awesome" and "thing", and "joe" is the author? You can write it how you'd say it:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ taxonomy:tags title:contains="awesome" title:contains="thing" author:is="joe" }}
 ```
+::tab blade
+```blade
+<s:taxonomy:tags
+  title:contains="awesome"
+  title:contains="thing"
+  author:is="joe"
+>
+</s:taxonomy:tags>
+```
+::
 
 There are a bunch of conditions available to you, like `:is`, `:isnt`, `:contains`, `:starts_with`, and `:is_before`. There are many more than that. In fact, there's a whole page dedicated to [conditions - check them out][conditions].
 
diff --git a/content/collections/tags/trans.md b/content/collections/tags/trans.md
index a30bc048b..5de40c09a 100644
--- a/content/collections/tags/trans.md
+++ b/content/collections/tags/trans.md
@@ -29,7 +29,7 @@ There's also a [modifier](/modifiers/trans) version that you may prefer.
 
 ## Usage
 
-Get the `bar` string from the `resources/lang/en/foo.php` translation file (where `en` is the current locale).
+Get the `bar` string from the `lang/en/foo.php` translation file (where `en` is the current locale).
 
 ```php
 <?php
@@ -40,9 +40,17 @@ return [
 ];
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ trans:foo.bar }} or {{ trans key="foo.bar" }}
 ```
+::tab blade
+```blade
+{{ trans('foo.bar') or {{ __('foo.bar') }}
+```
+::
 
 ```html
 Bar!
@@ -52,9 +60,17 @@ Bar!
 
 Any additional tag parameters will be treated as parameters that should be replaced in the string.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ trans:foo.welcome name="Bob" }}
 ```
+::tab blade
+```blade
+{{ trans('foo.welcome', ['name' => 'Bob']) }}
+```
+::
 
 ```html
 Welcome, Bob!
@@ -64,9 +80,17 @@ Welcome, Bob!
 
 To pluralize, use the `trans_choice` tag with a `count` parameter.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ trans_choice:foo.apples count="2" }}
 ```
+::tab blade
+```blade
+{{ trans_choice('foo.apples', 2) }}
+```
+::
 
 ```html
 There are 2 apples
diff --git a/content/collections/tags/user-can.md b/content/collections/tags/user-can.md
index a6b366867..d54090419 100644
--- a/content/collections/tags/user-can.md
+++ b/content/collections/tags/user-can.md
@@ -1,7 +1,7 @@
 ---
 title: User:Can
 description: Checks if a user has a specific permission
-intro: Anything inside the `user:can` tag will only be rendered f the user has the specified permission.
+intro: Anything inside the `user:can` tag will only be rendered if the user has the specified permission.
 parameters:
   -
     name: permission|do
@@ -19,11 +19,34 @@ User tags are designed for sites that have areas or features behind a login. The
 
 Let's say we want a link to edit the current entry in the control panel if the user has the `edit faq entries` permission.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:can do="edit faq entries" }}
     <a href="{{ edit_url }}">Edit this Page</a>
 {{ /user:can }}
 ```
+::tab blade
+```blade
+{{-- Using user methods --}}
+@if (auth()->user()?->can('edit blog entries'))
+  ...
+@endif
+
+{{-- Using Fluent Tags --}}
+@if (Statamic::tag('user:can')->do('edit blog entries')->fetch())
+  ...
+@endif
+
+{{-- Using Antlers Blade Components --}}
+<s:user:can
+  do="edit blog entries"
+>
+  ...
+</s:user:can>
+```
+::
 
 ## Super Users
 
@@ -33,11 +56,34 @@ Let's say we want a link to edit the current entry in the control panel if the u
 
 We also support the negative use case using `{{ user:cant }}` tags.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:cant do="anything" }}
   <p>Aww, I'm sure that's not true! 😊</p>
 {{ /user:cant }}
 ```
+::tab blade
+```blade
+{{-- Using user methods --}}
+@if (auth()->user()?->cant('do anything'))
+  <p>Aww, I'm sure that's not true! 😊</p>
+@endif
+
+{{-- Using Fluent Tags --}}
+@if (Statamic::tag('user:cant')->do('anything')->fetch())
+  <p>Aww, I'm sure that's not true! 😊</p>
+@endif
+
+{{-- Using Antlers Blade Components --}}
+<s:user:cant
+  do="anything"
+>
+  <p>Aww, I'm sure that's not true! 😊</p>
+</s:user:cant>
+```
+::
 
 ## Permissions List
 
diff --git a/content/collections/tags/user-forgot_password_form.md b/content/collections/tags/user-forgot_password_form.md
index 1c6603833..42bd22ac4 100644
--- a/content/collections/tags/user-forgot_password_form.md
+++ b/content/collections/tags/user-forgot_password_form.md
@@ -58,7 +58,10 @@ Unless you set a `redirect` parameter, the user will be redirected back to the *
 
 ## Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:forgot_password_form reset_url="/reset-password" }}
 
     {{ if errors }}
@@ -82,6 +85,32 @@ Unless you set a `redirect` parameter, the user will be redirected back to the *
 
 {{ /user:forgot_password_form }}
 ```
+::tab blade
+```blade
+<s:user:forgot_password_form
+  reset_url="/reset-password"
+>
+  @if ($errors)
+    <div class="bg-red-300 text-white p-2">
+      @foreach ($errors as $error)
+        {{ $error }}<br>
+      @endforeach
+    </div>
+  @endif
+
+  @if ($success)
+    <div class="bg-green-300 text-white p-2">
+      {{ $success }}<br>
+    </div>
+  @endif
+
+  <label>Email</label>
+  <input type="text" name="email" value="{{ old('email') }}" />
+
+  <button type="submit">Send Reset Email</button>
+</s:user:forgot_password_form>
+```
+::
 
 The email will contain a link to the URL specified in the `reset_url` parameter, along with extra query parameters. On that URL you must have a [user:reset_password_form](/tags/user-reset_password_form) tag to finish the task and let the user set their new password.
 
diff --git a/content/collections/tags/user-groups.md b/content/collections/tags/user-groups.md
index a5d58c84a..3e642b6f4 100644
--- a/content/collections/tags/user-groups.md
+++ b/content/collections/tags/user-groups.md
@@ -26,20 +26,58 @@ The User Groups tag fetches lists of the user groups on your site so you can do
 
 A simple example is to loop through all the groups and list them by handle:
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 <ul>
 {{ user_groups }}
     <li>{{ handle }}</li>
 {{ /user_groups }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+<s:user_groups>
+  <li>{{ $handle }}</li>
+</s:user_groups>
+</ul>
+
+{{-- Aliasing the groups. --}}
+<s:user_groups
+  as="groups"
+>
+  ...
+
+  @foreach ($groups as $group)
+    ...
+  @endforeach
+
+  ...
+</s:user_groups>
+```
+::
 
 ## Filtering
 
 If you only want a specific group or groups, you can pass their handle(s) using the `handle` parameter.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user_groups handle="group_1|group_2" }}
   // cool stuff goes here
 {{ /user_groups }}
 ```
+::tab blade
+```blade
+<s:user_groups
+  handle="group_1|group_2"
+>
+  // cool stuff goes here
+</s:user_groups>
+```
+::
diff --git a/content/collections/tags/user-in.md b/content/collections/tags/user-in.md
index f4d914b21..7ba23c524 100644
--- a/content/collections/tags/user-in.md
+++ b/content/collections/tags/user-in.md
@@ -17,7 +17,10 @@ User tags are designed for sites that have areas or features behind a login. The
 
 Let's say we want show a list of downloadable PDFs if the user is in a `coaches` group.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:in group="coaches" }}
 <ul>
   {{ assets in="pdf" }}
@@ -26,16 +29,37 @@ Let's say we want show a list of downloadable PDFs if the user is in a `coaches`
 </ul>
 {{ /user:in }}
 ```
+::tab blade
+```blade
+<s:user:in group="coaches">
+<ul>
+  <s:assets in="pdf">
+    <li><a href="{{ $url }}">{{ $title }}</a></li>
+  </s:assets>
+</ul>
+</s:user:in>
+```
+::
 
 ## Not In
 
 We also support the negative use case using the `{{ user:not_in }}` tag.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:not_in group="coaches" }}
   <p>Hello, sportsball players!</p>
 {{ /user:not_in }}
 ```
+::tab blade
+```blade
+<s:user:not_in group="coaches">
+  <p>Hello, sportsball players!</p>
+</s:user:not_in>
+```
+::
 
 ## Super Users
 
diff --git a/content/collections/tags/user-is.md b/content/collections/tags/user-is.md
index b8186b689..ebfdeb2b7 100644
--- a/content/collections/tags/user-is.md
+++ b/content/collections/tags/user-is.md
@@ -1,7 +1,7 @@
 ---
 title: User:Is
 description: Checks if a user has a specific role
-intro: Anything inside the `user:is` tag will only be rendered if the user is has a specific role.
+intro: Anything inside the `user:is` tag will only be rendered if the user has a specific role.
 parameters:
   -
     name: role|roles
@@ -11,29 +11,63 @@ id: 8c7f38bb-ee6f-43ee-b775-4eeae0a87bf3
 ---
 ## Overview
 
-User tags are designed for sites that have areas or features behind a login. The `{{ user:is }}` tag is used to check if the currently logged in user has a one or more specific [roles](/users#permissions).
+User tags are designed for sites that have areas or features behind a login. The `user:is` tag is used to check if the currently logged in user has a one or more specific [roles](/users#permissions).
 
 ## Example
 
 We want to show some content on a page especially for `authors`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:is role="author" }}
 <div class="markdown">
     {{ content }}
 </div>
 {{ /user:is }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:user:is role="author">
+  <div class="markdown">
+    {{ $content }}
+  </div>
+</s:user:is>
+
+{{-- Using Fluent Tags --}}
+@if (Statamic::tag('user:is')->role('author')->fetch())
+  ...
+@endif
+```
+::
 
 ### Isn't
 
-We also support the negative use case using `{{ user:isnt }}` tags.
+We also support the negative use case using `user:isnt` tags.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:isnt role="author" }}
     <a href="/apply">Apply to be an author!</a>
 {{ /user:isnt }}
 ```
+::tab blade
+```blade
+{{-- Using Antlers Blade Components --}}
+<s:user:isnt role="author">
+  <a href="/apply">Apply to be an author!</a>
+</s:user:isnt>
+
+{{-- Using Fluent Tags --}}
+@if (Statamic::tag('user:isnt')->role('author')->fetch())
+  ...
+@endif
+```
+::
 
 ## Super Users
 
diff --git a/content/collections/tags/user-login_form.md b/content/collections/tags/user-login_form.md
index c3d209639..fa2069a83 100644
--- a/content/collections/tags/user-login_form.md
+++ b/content/collections/tags/user-login_form.md
@@ -45,7 +45,10 @@ The tag will render the opening and closing `<form>` HTML elements for you. The
 
 ### Example
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:login_form }}
 
     {{ if errors }}
@@ -72,3 +75,30 @@ The tag will render the opening and closing `<form>` HTML elements for you. The
 
 {{ /user:login_form }}
 ```
+::tab blade
+```blade
+<s:user:login_form>
+  @if ($errors)
+    <div class="bg-red-300 text-white p-2">
+      @foreach ($errors as $error)
+        {{ $error }}<br>
+      @endforeach
+    </div>
+  @endif
+
+  @if ($success)
+    <div class="bg-green-300 text-white p-2">
+      {{ $success }}<br>
+    </div>
+  @endif
+
+  <label>Email</label>
+  <input type="email" name="email" value="{{ old('email') }}" />
+
+  <label>Password</label>
+  <input type="password" name="password" value="{{ old('password') }}" />
+
+  <button type="submit">Log in</button>
+</s:user:login_form>
+```
+::
diff --git a/content/collections/tags/user-logout.md b/content/collections/tags/user-logout.md
index 68d02ff59..8ccbfa88f 100644
--- a/content/collections/tags/user-logout.md
+++ b/content/collections/tags/user-logout.md
@@ -15,11 +15,22 @@ stage: 3
 
 ## Example {#example}
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ if should_logout_for_whatever_reason }}
   {{ user:logout redirect="/somewhere" }}
 {{ /if }}
 ```
+::tab blade
+```blade
+@if ($should_logout_for_whatever_reason)
+  <s:user:logout redirect="/somewhere" />
+@endif
+```
+::
 
 This will immediately log a user out and redirect to `/somewhere` if the condition is met.
 
diff --git a/content/collections/tags/user-logout_url.md b/content/collections/tags/user-logout_url.md
index 91d367e50..7ecc63696 100644
--- a/content/collections/tags/user-logout_url.md
+++ b/content/collections/tags/user-logout_url.md
@@ -14,6 +14,15 @@ stage: 3
 ---
 ## Example {#example}
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 <a href="{{ user:logout_url }}">Log out</a>
 ```
+::tab blade
+```blade
+<a href="{{ Statamic::tag('user:logout_url')->fetch() }}">Log out</a>
+```
+::
diff --git a/content/collections/tags/user-password_form.md b/content/collections/tags/user-password_form.md
new file mode 100644
index 000000000..3320f6574
--- /dev/null
+++ b/content/collections/tags/user-password_form.md
@@ -0,0 +1,166 @@
+---
+id: d592bbbf-9bf4-4043-80bb-158e0da497f7
+blueprint: tag
+title: 'User:Password_Form'
+description: 'Creates a user password update form'
+parameters:
+  -
+    name: redirect
+    type: string
+    description: |
+      Where the user should be taken after successfully saving.
+  -
+    name: error_redirect
+    type: string
+    description: |
+      The same as `redirect`, but for failed a failed submission.
+  -
+    name: allow_request_redirect
+    type: boolean
+    description: 'When set to true, the `redirect` and `error_redirect` parameters will get overridden by `redirect` and `error_redirect` query parameters in the URL.'
+  -
+    name: 'HTML Attributes'
+    type: null
+    description: |
+      Set HTML attributes as if you were in an HTML element. For example, `class="required" id="profile-form"`.
+variables:
+  -
+    name: fields
+    type: array
+    description: |
+      An array of available fields for [dynamic rendering](#dynamic-rendering).
+  -
+    name: errors
+    type: array
+    description: 'An array of validation errors.'
+  -
+    name: error
+    type: array
+    description: 'An array of validation errors indexed by field names. Suitable for targeting fields. eg. `{{ error:email }}`'
+  -
+    name: old
+    type: array
+    description: 'An array of previously submitted values.'
+  -
+    name: success
+    type: string
+    description: 'A success message.'
+---
+## Overview
+
+User tags are designed for sites that have areas or features behind a login. The `user:password_form` tag allows your users to change their password.
+
+The tag will render the opening and closing `<form>` HTML elements for you.
+
+### Example
+
+A basic user password form, with validation errors.
+
+
+::tabs
+
+::tab antlers
+```antlers
+{{ user:password_form }}
+
+    {{ if errors }}
+        <div class="bg-red-300 text-white p-2">
+            {{ errors }}
+                {{ value }}<br>
+            {{ /errors }}
+        </div>
+    {{ /if }}
+
+    {{ if success }}
+        <div class="bg-green-300 text-white p-2">
+            {{ success }}<br>
+        </div>
+    {{ /if }}
+
+    <label>Current Password</label>
+    <input type="password" name="current_password" />
+
+    <label>New Password</label>
+    <input type="password" name="password" />
+
+    <label>Confirm Password</label>
+    <input type="password" name="password_confirmation" />
+
+    <button type="submit">Save</button>
+
+{{ /user:password_form }}
+```
+::tab blade
+```blade
+<s:user:password_form>
+  @if ($errors)
+    <div class="bg-red-300 text-white p-2">
+      @foreach ($errors as $error)
+        {{ $error }}<br>
+      @endforeach
+    </div>
+  @endif
+
+  @if ($success)
+    <div class="bg-green-300 text-white p-2">
+      {{ $success }}<br>
+    </div>
+  @endif
+
+  <label>Current Password</label>
+  <input type="password" name="current_password" />
+
+  <label>New Password</label>
+  <input type="password" name="password" />
+
+  <label>Confirm Password</label>
+  <input type="password" name="password_confirmation" />
+
+  <button type="submit">Save</button>
+</s:user:password_form>
+```
+::
+
+## Dynamic Rendering
+
+Instead of hardcoding individual fields, you may loop through the `fields` array to render fields more dynamically.
+
+
+::tabs
+
+::tab antlers
+```antlers
+{{ fields }}
+    <div class="p-2">
+        <label>{{ display }}</label>
+        <div class="p-1">{{ field }}</div>
+        {{ if error }}
+            <p class="text-gray-500">{{ error }}</p>
+        {{ /if }}
+    </div>
+{{ /fields }}
+```
+::tab blade
+```blade
+<s:user:password_form>
+
+  @foreach ($fields as $field)
+    <div class="p-2">
+      <label>{{ $field['display'] }}</label>
+      <div class="p-1">{!! $field['field'] !!}</div>
+      @if ($field['error'])
+        <p class="text-gray-500">{{ $field['error'] }}</p>
+      @endif
+    </div>
+  @endforeach
+
+</s:user:password_form>
+```
+::
+
+Each item in the `fields` array contains `type`, `display` and `handle`, which are configurable from the `user` blueprint.
+
+You will also find the field's `old` input on unsuccessful submission, as well as an `error` message when relevant.
+
+Finally, the `field` value contains a pre-rendered form input.  Using this will intelligently render inputs as inputs, textareas as textareas, and snozzberries as snozzberries.  You can customize these pre-rendered templates by running `php artisan vendor:publish --tag=statamic-forms`, which will expose editable templates in your `views/vendor/statamic/forms/fields` folder.
+
diff --git a/content/collections/tags/user-profile.md b/content/collections/tags/user-profile.md
index 742f09a19..f76ac9e79 100755
--- a/content/collections/tags/user-profile.md
+++ b/content/collections/tags/user-profile.md
@@ -2,7 +2,6 @@
 title: User:Profile
 description: Fetches user data.
 intro: Fetching user data made easy.
-stage: 4
 parameters:
   -
     name: id
@@ -51,7 +50,7 @@ variables:
 id: 3be76d15-dee7-4619-a4cb-4a343e93c677
 ---
 ## Overview
-The `{{ user:profile }}` tag has access to all of a user's basic data. Passwords and hashes are _not_ available through this tag.
+The `user:profile` tag has access to all of a user's basic data. Passwords and hashes are _not_ available through this tag.
 
 :::tip
 This will default to the currently logged in user if none are specified.
@@ -60,17 +59,34 @@ This will default to the currently logged in user if none are specified.
 
 ## Shorthand
 
-You can use `{{ user }}` and drop the `:profile` bit off if you prefer.
+You can use `user` and drop the `:profile` bit off if you prefer.
 
 ## Examples
 
 To output the currently logged in user's details, you can do this:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user }}
   The current user's name is {{ name }}.
 {{ /user }}
 ```
+::tab blade
+```blade
+<s:user>
+  The current user's name is {{ $name }}.
+</s:user>
+
+{{-- Aliasing the user. --}}
+<s:user
+  as="user"
+>
+  The current user's name is {{ $user->name }}.
+</s:user>
+```
+::
 
 Or perhaps you'd like to show user profile pages. Assuming your users have a `username` field, you could create a wildcard route like this:
 
@@ -80,15 +96,42 @@ Route::statamic('users/{username}', 'users.show');
 
 Then when visiting `/users/chuck`, for example, you could display Chuck's details like this:
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ user:profile field="username" :value="segment_2" }}
   {{ first_name }} {{ last_name }}
 {{ /user:profile }}
 ```
+::tab blade
+```blade
+<s:user:profile
+  field="username"
+  :value="$segment_2 ?? null"
+>
+  {{ $first_name }} {{ $last_name }}
+</s:user:profile>
+```
+::
+
 Or to find a user by email:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:profile :email="email" }}
   {{ first_name }} {{ last_name }}
 {{ /user:profile }}
 ```
+::tab blade
+```blade
+<s:user:profile
+  :email="$email"
+>
+  {{ $first_name }} {{ $last_name }}
+</s:user:profile>
+```
+::
diff --git a/content/collections/tags/user-profile_form.md b/content/collections/tags/user-profile_form.md
new file mode 100644
index 000000000..c7682e309
--- /dev/null
+++ b/content/collections/tags/user-profile_form.md
@@ -0,0 +1,152 @@
+---
+id: 7906225a-9460-4759-8677-20a63a6204b0
+blueprint: tag
+title: 'User:Profile_Form'
+description: 'Creates user profile edit forms'
+parameters:
+  -
+    name: redirect
+    type: string
+    description: |
+      Where the user should be taken after successfully saving.
+  -
+    name: error_redirect
+    type: string
+    description: |
+      The same as `redirect`, but for failed form submissions.
+  -
+    name: allow_request_redirect
+    type: boolean
+    description: 'When set to true, the `redirect` and `error_redirect` parameters will get overridden by `redirect` and `error_redirect` query parameters in the URL.'
+  -
+    name: 'HTML Attributes'
+    type: null
+    description: |
+      Set HTML attributes as if you were in an HTML element. For example, `class="required" id="profile-form"`.
+variables:
+  -
+    name: fields
+    type: array
+    description: |
+      An array of available fields for [dynamic rendering](#dynamic-rendering).
+  -
+    name: errors
+    type: array
+    description: 'An array of validation errors.'
+  -
+    name: error
+    type: array
+    description: 'An array of validation errors indexed by field names. Suitable for targeting fields. eg. `{{ error:email }}`'
+  -
+    name: old
+    type: array
+    description: 'An array of previously submitted values.'
+  -
+    name: success
+    type: string
+    description: 'A success message.'
+---
+## Overview
+
+User tags are designed for sites that have areas or features behind a login. The `user:profile_form` tag helps you build a user profile edit form for existing users based on your user [Blueprint](/blueprints).
+
+The tag will render the opening and closing `<form>` HTML elements for you.
+
+### Example
+
+A basic profile edit form, with validation errors.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ user:profile_form }}
+
+    {{ if errors }}
+        <div class="bg-red-300 text-white p-2">
+            {{ errors }}
+                {{ value }}<br>
+            {{ /errors }}
+        </div>
+    {{ /if }}
+
+    {{ if success }}
+        <div class="bg-green-300 text-white p-2">
+            {{ success }}<br>
+        </div>
+    {{ /if }}
+
+    <label>Email</label>
+    <input type="email" name="email" value="{{ old:email }}" />
+
+    <label>Bio</label>
+    <textarea name="bio">{{ old:bio }}</textarea>
+
+    <label>Job Title</label>
+    <input type="text" name="title" value="{{ old:title }}" />
+
+    <button type="submit">Save</button>
+
+{{ /user:profile_form }}
+```
+::tab blade
+```blade
+
+```
+::
+
+## Blueprints Fields
+
+You may add edit fields for any that exist in the `user.yaml` blueprint.
+
+Any submitted data that does _not_ exist in the blueprint will be completely ignored.
+
+Additional fields will be validated as per your blueprint `validate` rules.
+
+:::tip Note
+The `user:profile_form` tag doesn't currently support uploading Assets.
+:::
+
+## Dynamic Rendering
+
+Instead of hardcoding individual fields, you may loop through the `fields` array to render fields more dynamically.
+
+
+::tabs
+
+::tab antlers
+```antlers
+{{ fields }}
+    <div class="p-2">
+        <label>{{ display }}</label>
+        <div class="p-1">{{ field }}</div>
+        {{ if error }}
+            <p class="text-gray-500">{{ error }}</p>
+        {{ /if }}
+    </div>
+{{ /fields }}
+```
+::tab blade
+```blade
+<s:user:profile_form>
+
+  @foreach ($fields as $field)
+    <div class="p-2">
+      <label>{{ $field['display'] }}</label>
+      <div class="p-1">{!! $field['field'] !!}</div>
+      @if ($field['error'])
+        <p class="text-gray-500">{{ $field['error'] }}</p>
+      @endif
+    </div>
+  @endforeach
+
+</s:user:profile_form>
+```
+::
+
+Each item in the `fields` array contains `type`, `display` and `handle`, which are configurable from the `user` blueprint.
+
+You will also find the field's `old` input on unsuccessful submission, as well as an `error` message when relevant.
+
+Finally, the `field` value contains a pre-rendered form input.  Using this will intelligently render inputs as inputs, textareas as textareas, and snozzberries as snozzberries.  You can customize these pre-rendered templates by running `php artisan vendor:publish --tag=statamic-forms`, which will expose editable templates in your `views/vendor/statamic/forms/fields` folder.
+
diff --git a/content/collections/tags/user-register_form.md b/content/collections/tags/user-register_form.md
index 396bd1bbe..0b6644de0 100644
--- a/content/collections/tags/user-register_form.md
+++ b/content/collections/tags/user-register_form.md
@@ -1,7 +1,6 @@
 ---
 title: User:Register_Form
 description: Creates user registration forms
-stage: 2
 parameters:
   -
     name: redirect
@@ -57,7 +56,10 @@ The tag will render the opening and closing `<form>` HTML elements for you. The
 
 A basic registration form, with validation errors.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:register_form }}
 
     {{ if errors }}
@@ -87,6 +89,36 @@ A basic registration form, with validation errors.
 
 {{ /user:register_form }}
 ```
+::tab blade
+```blade
+<s:user:register_form>
+  @if ($errors)
+    <div class="bg-red-300 text-white p-2">
+      @foreach ($errors as $error)
+        {{ $error }}<br>
+      @endforeach
+    </div>
+  @endif
+
+  @if ($success)
+    <div class="bg-green-300 text-white p-2">
+      {{ $success }}<br>
+    </div>
+  @endif
+
+  <label>Email</label>
+  <input type="email" name="email" value="{{ old('email') }}" />
+
+  <label>Password</label>
+  <input type="password" name="password" />
+
+  <label>Password Confirmation</label>
+  <input type="password" name="password_confirmation" />
+
+  <button>Register</button>
+</s:user:register_form>
+```
+::
 
 ## Password Rules
 
@@ -114,7 +146,10 @@ Additional fields will be validated as per your blueprint `validate` rules.
 
 Instead of hardcoding individual fields, you may loop through the `fields` array to render fields more dynamically.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ fields }}
     <div class="p-2">
         <label>{{ display }}</label>
@@ -125,6 +160,24 @@ Instead of hardcoding individual fields, you may loop through the `fields` array
     </div>
 {{ /fields }}
 ```
+::tab blade
+```blade
+<s:user:register_form>
+
+  @foreach ($fields as $field)
+    <div class="p-2">
+      <label>{{ $field['display'] }}</label>
+      <div class="p-1">{!! $field['field'] !!}</div>
+
+      @if ($field['error'])
+        <p class="text-gray-500">{{ $field['error'] }}</p>
+      @endif
+    </div>
+  @endforeach
+
+</s:user:register_form>
+```
+::
 
 Each item in the `fields` array contains `type`, `display` and `handle`, which are configurable from the `user` blueprint.
 
@@ -137,3 +190,8 @@ Finally, the `field` value contains a pre-rendered form input.  Using this will
 Most of the time, new members will need some roles assigned to them so that they can do different things on your site. You can configure the default `new_user_roles` in your `config/statamic/users.php` config. When a user successfully registers as a member, their account will automatically be assigned the roles in this list.
 
 It’s best to remember that these are _starting_ roles for the user. You can later either manually add roles to users in their files, update their account through the Control Panel, or have add-ons automatically add or remove roles as needed when users perform certain tasks.
+
+## Honeypot
+
+If you want to protect your registration form from spam bots you can specify the handle of a [honeypot field](/forms#honeypot) in `config/statamic/users.php` using the `registration_form_honeypot_field` key.
+
diff --git a/content/collections/tags/user-reset_password_form.md b/content/collections/tags/user-reset_password_form.md
index a9cbfdc59..00456693c 100644
--- a/content/collections/tags/user-reset_password_form.md
+++ b/content/collections/tags/user-reset_password_form.md
@@ -11,6 +11,11 @@ parameters:
       form is successfully submitted. Leaving
       this blank will keep the user on the
       same page.
+  -
+    name: error_redirect
+    type: string
+    description: >
+      The same as `redirect`, but for failed validation errors.
 variables:
   -
     name: success
@@ -33,7 +38,11 @@ After a user has put their email address into the [user:forgot_password_form](/t
 
 ## Example
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ user:reset_password_form }}
 
     {{ if success }}
@@ -69,6 +78,37 @@ After a user has put their email address into the [user:forgot_password_form](/t
 
 {{ /user:reset_password_form }}
 ```
+::tab blade
+```blade
+<s:user:reset_password_form>
+  @if ($success)
+    <p class="alert alert-success">Password has been reset.</p>
+  @elseif ($url_invalid)
+    <p class="alert alert-danger">This reset URL is invalid.</p>
+  @else
+
+    @if ($errors)
+      <div class="alert alert-danger">
+        @foreach ($errors as $error)
+          {{ $error }}<br>
+        @endforeach
+      </div>
+    @endif
+
+    <label>E-Mail</label>
+    <input type="email" name="email" />
+
+    <label>Password</label>
+    <input type="password" name="password" />
+
+    <label>Password Confirmation</label>
+    <input type="password" name="password_confirmation" />
+
+    <button>Submit</button>
+  @endif
+</s:user:reset_password_form>
+```
+::
 
 ## Arriving at this URL
 
diff --git a/content/collections/tags/user-roles.md b/content/collections/tags/user-roles.md
index e18c1e1b4..172d9194c 100644
--- a/content/collections/tags/user-roles.md
+++ b/content/collections/tags/user-roles.md
@@ -26,20 +26,57 @@ The User Roles tag fetches lists of the user roles on your site so you can do wh
 
 A simple example is to loop through all the roles and list them by handle:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <ul>
 {{ user_roles }}
     <li>{{ handle }}</li>
 {{ /user_roles }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+<s:user_roles>
+  <li>{{ $handle }}</li>
+</s:user_roles>
+</ul>
+
+{{-- Aliasing the roles. --}}
+<s:user_roles
+  as="roles"
+>
+  ...
+
+  @foreach ($roles as $role)
+    ...
+  @endforeach
+
+  ...
+</s:user_roles>
+```
+::
 
 ## Filtering
 
 If you only want a specific role or roles, you can pass their handle(s) using the `handle` parameter.
 
-```
-{{ user_roles handle="group_1|group_2" }}
+::tabs
+
+::tab antlers
+```antlers
+{{ user_roles handle="role_1|role_2" }}
   // cool stuff goes here
 {{ /user_roles }}
 ```
+::tab blade
+```blade
+<s:user_roles
+  handle="role_1|role_2"
+>
+  // cool stuff goes here
+</s:user_roles>
+```
+::
diff --git a/content/collections/tags/users.md b/content/collections/tags/users.md
index e0796fff3..c85b289e7 100644
--- a/content/collections/tags/users.md
+++ b/content/collections/tags/users.md
@@ -3,7 +3,7 @@ id: 878f0dd7-2d31-479c-b58d-bc60685fa7d2
 blueprint: tag
 title: Users
 description: 'Fetch, filter, and iterate over Users and their data.'
-intro: 'Anything inside the `user:in` tag will only be rendered if the user is in the specified group.'
+intro: 'The users tag can be used to fetch, filter, and iterate over Users and their data.'
 parameters:
   -
     name: group
@@ -75,17 +75,30 @@ variables:
 ---
 ## Overview
 
-The Users tag works very much like the [Collection Tag](/tags/collection). It fetches, filters, sorts, groups, and manipulates lists of your users so you can whatever you want with them.
+The Users tag works very much like the [Collection Tag](/tags/collection). It fetches, filters, sorts, groups, and manipulates lists of your users so you can do whatever you want with them.
 
 A simple example is to loop through all the users and list them by name:
 
-```
+
+::tabs
+
+::tab antlers
+```antlers
 <ul>
 {{ users }}
     <li>{{ name }}</li>
 {{ /users }}
 </ul>
 ```
+::tab blade
+```blade
+<ul>
+<s:users>
+  <li>{{ $name }}</li>
+</s:users>
+</ul>
+```
+::
 
 ## Filtering
 
@@ -95,9 +108,22 @@ You can filter you users by group, role, field, or even custom filter class if y
 
 Want to avoid listing users who have the words "hipster" and "coffee" in their bio?
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ users bio:doesnt_contain="hipster" bio:doesnt_contain="coffee" }}
 ```
+::tab blade
+```blade
+<s:users
+  bio:doesnt_contain="hipster"
+  bio:doesnt_contain="coffee"
+>
+  ...
+</s:users>
+```
+::
 
 There are a whole pile of conditions available to you, like `:is`, `:isnt`, `:contains`, `:starts_with`, and `:is_before`. Check out this page [dedicated to conditions](/conditions).
 
@@ -105,25 +131,61 @@ There are a whole pile of conditions available to you, like `:is`, `:isnt`, `:co
 
 Doing something custom or complicated? You can create [query scopes](/extending/query-scopes-and-filters) to narrow down those results with the `query_scope` or `filter` parameter:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ users query_scope="your_query_scope" }}
 ```
+::tab blade
+```blade
+<s:users
+  query_scope="your_query_scope"
+>
+  ...
+</s:users>
+```
+::
 
 ### Examples
 
 #### Only super users
 
+::tabs
+
+::tab antlers
+```antlers
+{{ users super:is="true" }}
+  // these people are powerful
+{{ /users }}
 ```
-{{ user super:is="true" }}
+::tab blade
+```blade
+<s:users
+  super:is="true"
+>
   // these people are powerful
-{{ /user }}
+</s:users>
 ```
+::
 
 #### Exclude users with gmail email address
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ users email:doesnt_end_with="@gmail.com" }}
   // cool stuff goes here
 {{ /users }}
 ```
+::tab blade
+```blade
+<s:users
+  email:doesnt_end_with="@gmail.com"
+>
+  // cool stuff goes here
+</s:users>
+```
+::
 
diff --git a/content/collections/tags/vite-content.md b/content/collections/tags/vite-content.md
new file mode 100644
index 000000000..afe3c47bc
--- /dev/null
+++ b/content/collections/tags/vite-content.md
@@ -0,0 +1,78 @@
+---
+id: 6f6bff0a-074e-4706-8427-669ad951e8e0
+blueprint: tag
+title: Vite:Content
+description: 'Returns the contents of a Vite asset'
+intro: 'This tag is used in tandem with the Vite build tool to return the contents of CSS and JavaScript files.'
+parameters:
+  -
+    name: src
+    type: string
+    description: |
+      The path to the file, relative to your project root. You may pass multiple files and paths.
+  -
+    name: directory
+    type: string
+    description: |
+      The path to the desired build directory, relative to the `public` directory. Defaults to `build`.
+---
+The `vite:content` tag allows you to output the contents of a Vite asset. This is useful if you need to inline the contents of a CSS or JavaScript file.
+
+::tabs
+
+::tab antlers
+```antlers
+<style>
+    {{ vite:content src="resources/css/app.css" }}
+</style>
+
+<script>
+    {{ vite:content src="resources/js/app.js" }}
+</script>
+```
+::tab blade
+```blade
+// Using Antlers Blade components.
+<style>
+  <s:vite:content src="resources/css/app.css" />
+</style>
+
+<script>
+  <s:vite:content src="resources/js/app.js" />
+</script>
+
+// Using Blade directives.
+@use('Illuminate\Support\Facades\Vite')
+
+<style>
+  {!! Vite::content('resources/css/app.css') !!}
+</style>
+
+<script>
+  {!! Vite::content('resources/js/app.js') !!}
+</script>
+```
+::
+
+:::warning Psst!
+The `vite:content` tag will only output the contents of "built" assets. This means that changes made while running `npm run dev` will not be reflected in the output.
+:::
+
+If you need to, you can also specify a custom build directory.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ vite src="resources/css/tailwind.css|resources/js/site.js" directory="bundle" }}
+```
+::tab blade
+```blade
+<s:vite
+  src="resources/css/tailwind.css|resources/js/site.js"
+  directory="bundle"
+/>
+```
+::
+
+When using these options, please make sure to also adjust your `vite.config.js` file. More about advanced customization can be found in [Laravel's Vite docs](https://laravel.com/docs/12.x/vite#advanced-customization).
diff --git a/content/collections/tags/vite.md b/content/collections/tags/vite.md
index b61308735..6636e39ec 100644
--- a/content/collections/tags/vite.md
+++ b/content/collections/tags/vite.md
@@ -2,7 +2,7 @@
 id: aeec964c-ab02-48d1-997c-8f1e331204a3
 blueprint: tag
 title: Vite
-description: 'Returns the path to a versioned Mix file'
+description: 'Returns the path to Vite assets'
 intro: 'This tag is used in tandem with the Vite build tool to return the path to CSS and JavaScript files.'
 parameters:
   -
@@ -23,11 +23,19 @@ parameters:
 ---
 The `vite` tag is a wrapper around [Laravel's Vite integration](https://laravel.com/docs/vite). It is essentially an Antlers version of the `@vite` Blade directive.
 
-You should pass in both the css and javascript paths, and it will output the appropriate html tags.
+You should pass in both the CSS and JavaScript paths, and it will output the appropriate html tags.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ vite src="resources/js/app.js|resources/css/app.css" }}
 ```
+::tab blade
+```blade
+<s:vite src="resources/js/app.js|resources/css/app.css" />
+```
+::
 
 If you are running in development mode by running `npm run dev`, it will handle hot-reloading (e.g. save a css file, your page will update automatically without you refreshing).
 
@@ -46,7 +54,90 @@ Otherwise, it will use the compiled assets, which you would have done by running
 
 Additionally, you can set custom locations for the build directory and hot file.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ vite src="resources/css/tailwind.css|resources/js/site.js" directory="bundle" hot="storage/vite.hot" }}
 ```
-When using these options, please make sure to also adjust your `vite.config.js` file. More about advanced customization can be found in [Laravel's Vite docs](https://laravel.com/docs/9.x/vite#advanced-customization).
+::tab blade
+```blade
+<s:vite
+  src="resources/css/tailwind.css|resources/js/site.js"
+  directory="bundle"
+  hot="storage/vite.hot"
+/>
+```
+::
+
+When using these options, please make sure to also adjust your `vite.config.js` file. More about advanced customization can be found in [Laravel's Vite docs](https://laravel.com/docs/12.x/vite#advanced-customization).
+
+## Processing Static Assets With Vite
+
+To process static assets in your Antlers files with Vite, as described in the [Laravel's Vite Docs](https://laravel.com/docs/master/vite#blade-processing-static-assets), you should use:
+
+::tabs
+
+::tab antlers
+```antlers
+<img src="{{ vite:asset src="resources/images/logo.png" }}">
+```
+::tab blade
+```blade
+<img src="{{ Vite::asset('resources/images/logo.png') }}">
+```
+::
+
+## Arbitrary Attributes
+
+If you need to include additional attributes in your script and style tags, such as the `data-turbo-track` attribute, you can pass them as parameters using the `attr:` prefix:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ vite
+  src="foo.js|bar.css"
+  attr:data-turbo-track="reload"
+  attr:async="true"
+}}
+```
+::tab blade
+```blade
+<s:vite
+  src="foo.js|bar.css"
+  attr:data-turbo-track="reload"
+  attr:async="true"
+/>
+```
+::
+
+You can also provide attributes that are specific to script or style tags:
+
+::tabs
+
+::tab antlers
+```antlers
+{{ vite
+  src="foo.js|bar.css"
+
+  attr:script:data-turbo-track="reload"
+  attr:script:async="true"
+
+  attr:style:data-turbo-track="reload"
+  attr:style:integrity="false"
+}}
+```
+::tab blade
+```blade
+<s:vite
+  src="foo.js|bar.css"
+
+  attr:script:data-turbo-track="reload"
+  attr:script:async="true"
+
+  attr:style:data-turbo-track="reload"
+  attr:style:integrity="false"
+/>
+```
+::
\ No newline at end of file
diff --git a/content/collections/tags/yield.md b/content/collections/tags/yield.md
index 8c5e0a009..b4a483545 100644
--- a/content/collections/tags/yield.md
+++ b/content/collections/tags/yield.md
@@ -18,7 +18,10 @@ Most commonly this section/yield approach is used to create a global area in you
 
 In the example below, everything within the `section:sidebar` tag will _not_ be rendered in the template, but rather in the layout.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 // The Template
 
 <h1>{{ title }}</h1>
@@ -49,12 +52,51 @@ In the example below, everything within the `section:sidebar` tag will _not_ be
   </body>
 </html>
 ```
+::tab blade
+```blade
+// The template
+@extends('layout')
+
+<h1>{{ $title }}</h1>
+{!! $content !!}
+
+@section('sidebar')
+  <h2>About the Author</h2>
+
+  <div>
+    {{ $author['name'] }}
+  </div>
+  {{ $author['bio'] }}
+@stop
+```
+
+```blade
+// The Layout
+<html>
+  <head>
+    <title>{{ $title }} | {{ $site_name }}</title>
+  </head>
+  <body>
+    <article>
+      {!! $template_content !!}
+    </article>
+    <aside>
+      @yield('sidebar')
+    </aside>
+  </body>
+</html>
+```
+::
+
 
 ## Fallback Content
 
 If no section is being pushed into the yield, you may display fallback content by using the tag as a pair.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <aside>
   {{ yield:sidebar }}
     <img src="/img/CLIPPY.GIF">
@@ -62,6 +104,27 @@ If no section is being pushed into the yield, you may display fallback content b
   {{ /yield:sidebar }}
 </aside>
 ```
+::tab blade
+```blade
+// The Layout
+<aside>
+  @section('sidebar')
+    <img src="/img/CLIPPY.GIF">
+    <p>Hi! It looks like you're building a website. Would you like help?</p>
+  @show
+</aside>
+```
+
+```blade
+// The Template
+@extends('layout')
+
+// The following would override the default content:
+@section('sidebar')
+  I would override the default!
+@endsection
+```
+::
 
 ## Related Reading
 
diff --git a/content/collections/tips.yaml b/content/collections/tips.yaml
index 507592690..bcb5e7043 100644
--- a/content/collections/tips.yaml
+++ b/content/collections/tips.yaml
@@ -1,5 +1,5 @@
 title: 'Tips & Tricks'
-template: default
+template: page
 layout: layout
 mount: b6c40452-8da0-4f03-a53c-714cc3338b9d
 revisions: false
diff --git a/content/collections/tips/storing-entries-in-a-database.md b/content/collections/tips/building-your-own-entries-repository.md
similarity index 96%
rename from content/collections/tips/storing-entries-in-a-database.md
rename to content/collections/tips/building-your-own-entries-repository.md
index 1b6439df8..512725681 100644
--- a/content/collections/tips/storing-entries-in-a-database.md
+++ b/content/collections/tips/building-your-own-entries-repository.md
@@ -1,7 +1,7 @@
 ---
 id: 853b6690-c1fc-46bc-b865-e61a33d14563
-title: 'Storing Entries in a Database'
-intro: 'Statamic stores your content in "flat files" by default, but its data layer is completely driver-driven – giving you the ability to store content **anywhere**. In this article we''ll show you how to store entries in a database with [Laravel Eloquent](https://laravel.com/docs/8.x/eloquent).'
+title: 'Building your own Entries Repository'
+intro: 'Statamic stores your content in "flat files" by default, but its data layer is completely driver-driven – giving you the ability to store content **anywhere**. In this article we''ll show you how to store entries in a database with [Laravel Eloquent](https://laravel.com/docs/12.x/eloquent).'
 template: page
 categories:
   - development
@@ -9,16 +9,19 @@ categories:
   - laravel
 updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
 updated_at: 1622821277
+related_entries:
+    - 4238bce4-a94b-4d07-96fa-ea77c1d8e48d
 ---
 ## Overview
 
 Statamic uses a [repository pattern](/extending/repositories) to interact with your site or application's data. Statamic's core flat file implementation uses the [Stache](/stache) driver, but you can extend and build your own drivers to work with data stored just about anywhere, from MongoDB and [Firebase](https://firebase.google.com/) to a shoebox with a good REST API.
 
+
 ### Why would you want to do this?
 
-The flat file pattern is amazing for a whole pile of reasons. However, if you're going to be working with a huge amount of data (tens of thousands, millions, gazillions, etc), it has its limitations. This is where databases come in.
+The flat file pattern is amazing for a whole pile of reasons. However, if you're going to be working with a huge amount of data (tens of thousands, millions, gazillions, etc), it has its limitations. This is where another storage layer, like a database comes in.
 
-The ability to trading flexibility for scalability without changing platforms is a powerful feature.
+The ability to trade flexibility for scalability without changing platforms is a powerful feature.
 
 
 ## What we're building
@@ -27,14 +30,14 @@ In this article we'll be creating a package that contains an Eloquent powered re
 
 You can check out the finished product on [GitHub][repo], and even use it as a template to jumpstart your own project.
 
+:::tip
+If you're looking to store your entries (or anything else for that matter) in a traditional database, look no further than the [official Eloquent Driver](https://github.com/statamic/eloquent-driver).
+:::
+
 For the sake of brevity, we're going to focus only on **entries** for this article. In most cases, entries are the content type with the most records, making them the most likely candidate for needing a database.
 
 Everything you learn here can be applied to Taxonomies, GlobalSets, and all other content types.
 
-:::tip
-If you want to store your entries in a database and don't want to learn **how** to do it, you can just jump over to the [package](https://github.com/statamic/eloquent-driver) itself.
-:::
-
 ## Database Schema
 
 One of Statamic's great features is being able to throw data of any type into an entry and without needing to create corresponding columns in a database.  But here we are in database land, and we need a table and some columns.
@@ -241,7 +244,7 @@ public function register()
 
 ## The Model
 
-Since we're using Eloquent, we need a [model](https://laravel.com/docs/8.x/eloquent#defining-models). Let's set one up.
+Since we're using Eloquent, we need a [model](https://laravel.com/docs/12.x/eloquent#generating-model-classes). Let's set one up.
 
 ``` php
 <?php
diff --git a/content/collections/tips/content-security-policy.md b/content/collections/tips/content-security-policy.md
new file mode 100644
index 000000000..03ab1388d
--- /dev/null
+++ b/content/collections/tips/content-security-policy.md
@@ -0,0 +1,121 @@
+---
+id: a3fab450-3ce1-451c-b51d-cfc79bafd317
+blueprint: tips
+title: 'Content Security Policy'
+template: page
+intro: Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, including Cross-Site Scripting (XSS) and data injection attacks. These attacks are used for everything from data theft, to site defacement, to malware distribution.
+---
+
+## What is a Content Security Policy (CSP)?
+
+That intro is straight out of the [MDN documentation][mdn]. If you don't know about CSP, that's a great resource to check out!
+
+In a nutshell, it prevents against malicious JavaScript. On a content managed website, especially on one where you may accept input from untrusted users, you may want to consider implementing a CSP to prevent unwanted JavaScript being executed.
+
+## How to use it in Statamic
+
+Statamic doesn't come with any CSP out of the box, but since it's a Laravel application, it's quite simple to add your own.
+
+The simplest way to do this is to add a `meta` tag to your `head`.
+
+```html
+<meta http-equiv="Content-Security-Policy" content="..." />
+```
+
+(Replace the `...` with the appropriate value - more on that [below](#what-values-to-use))
+
+You may also opt to use a middleware to add a header. If you do this, you'll want to prevent applying it to Control Panel routes, since Statamic needs to be able to run inline JavaScript. You can add it to the `web` middleware group, which your front-end will use but the Control Panel won't.
+
+```php
+// app/Http/Kernel.php [tl! focus]
+
+protected $middlewareGroups = [ // [tl! focus]
+    'web' => [ // [tl! focus]
+        \App\Http\Middleware\EncryptCookies::class,
+        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+        \Illuminate\Session\Middleware\StartSession::class,
+        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
+        \App\Http\Middleware\VerifyCsrfToken::class,
+        \Illuminate\Routing\Middleware\SubstituteBindings::class,
+        \App\Http\Middleware\ContentSecurityPolicy::class, // [tl! ++ focus]
+    ], // [tl! focus]
+]; // [tl! focus]
+```
+```php
+<?php // app/Http/Middleware/ContentSecurityPolicy.php
+
+namespace App\Http\Middleware;
+
+class ContentSecurityPolicy
+{
+    public function handle($request, Closure $next)
+    {
+        return $next($request)
+            ->header('Content-Security-Policy', "...");
+    }
+}
+```
+
+You may even use a package such as [Laravel CSP by Spatie](https://github.com/spatie/laravel-csp).
+
+## An example of what it protects against
+
+We all know that you shouldn't trust user input. That's why we say that you should use the [sanitize modifier](/modifiers/sanitize) whenever outputting something from the user.
+
+Sanitizing works well to protect you from user's popping `<script>` tags and other HTML in blocks of text. But let's take a look at a situation where you are populating a link with a user-provided URL:
+
+```yaml
+my_link: http://example.com
+```
+
+::tabs
+
+::tab antlers
+```antlers
+<a href="{{ my_link | sanitize }}">My Link</a>
+```
+::tab blade
+```blade
+{{-- Blade sanitizes output by default --}}
+<a href="{{ $my_link }}">My Link</a>
+
+{{-- Using the sanitize modifier with Blade's unescaped syntax --}}
+{!! Statamic::modify($my_link)->sanitize() !!}
+```
+::
+
+This is fine if they provide a real URL, but what about something sneakier:
+
+```yaml
+my_link: 'javascript:sneakyStuff()'
+```
+
+Now they've put JavaScript into your template. Even if you sanitize the `my_link` variable, it won't matter since there's no HTML to escape. That's where CSP comes in handy.
+
+If you click that link without a CSP, it will run `sneakyStuff()`. Oh no!
+
+If you have it enabled, you'll get an error message like `Refused to run the JavaScript URL because it violates the following Content Security Policy`. You've just protected yourself.
+
+
+## What values to use
+
+In the examples above, you'll see `...` as a placeholder value, and you'll want to use the appropriate policy for your use case. You can find out exactly what works for you by consulting the [MDN documentation][mdn].
+
+But, you can start with these:
+
+- Only allow `<script src="">` tags with URLs on your own site:
+  ```
+  script-src 'self'
+  ```
+- Only allow `<script src="">` tags with URLs from your own site, or from `unpkg.com`:
+  ```
+  script-src 'self' unpkg.com
+  ```
+- Only allow `<script src="">` tags with URLs from your own site, or from `unpkg.com`, and `unsafe-eval` [which is required for Alpine.js to work](https://alpinejs.dev/advanced/csp).
+  ```
+  script-src 'self' unpkg.com 'unsafe-eval'
+  ```
+
+
+
+[mdn]: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
diff --git a/content/collections/tips/converting-from-single-to-multi-site.md b/content/collections/tips/converting-from-single-to-multi-site.md
index 86a412f5b..e4bc20043 100644
--- a/content/collections/tips/converting-from-single-to-multi-site.md
+++ b/content/collections/tips/converting-from-single-to-multi-site.md
@@ -1,6 +1,6 @@
 ---
 id: e1da92af-a0d8-40bb-9417-52675fad5e1f
-title: 'Converting from Single to Multi-site'
+title: 'Converting from Single to Multi-Site'
 template: page
 categories:
   - development
@@ -9,55 +9,65 @@ categories:
 updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
 updated_at: 1622821029
 ---
-## Move files
+## Automated Conversion
 
-:::tip
-This can be automated using the following command:
+We recommend using the following command to convert from a single to [multi-site](/multi-site) installation:
 
-```shell
+``` shell
 php please multisite
 ```
 
-It's important to run the command **before** making changes to the config file.
-:::
+## Manual Conversion
 
-2. For each collection:
-    - Move all entries into a directory named after the first site's handle. (eg. `content/collections/blog/*.md` into `content/collections/blog/default/*.md`)
+If you wish to better understand how to manually convert from a single to multi-site installation, the steps are as follows.
+
+### Enable Multisite Config
+
+First, enable `multisite` in your `config/statamic/system.php`:
+
+``` php
+'multisite' => true,
+```
+
+### Adding New Sites
+
+Next, you can add new sites through the control panel at `/cp/sites`, or directly in your `resources/sites.yaml` file:
+
+``` yaml
+default:
+  name: First Site
+  url: /
+  locale: en_US
+second:
+  name: Second Site
+  url: /second/
+  locale: en_US
+```
+
+By default, the first site handle is named `default`, but feel free to rename it. This handle will be used below.
+
+### Update Default Site Content
+
+Now you'll need to update your default site content file & folder structure, so that Statamic knows where to find it, now that you've enabled multi-site.
+
+1. For each collection:
+    - Move all entries into a directory named after your default site's handle. (eg. `content/collections/blog/*.md` into `content/collections/blog/default/*.md`)
     - Add a `sites` array to the collection's yaml file with each site you want the entries to be available in.
-3. For each structure:
-    - Take the `root` and `tree` variables, and move them in a file in a subdirectory named after the first site's handle. (eg. `content/structures/pages.yaml` to `content/structures/default/pages.yaml`)
+2. For each tree structure:
+    - Take the `root` and `tree` variables, and move them in a file in a subdirectory named after your default site's handle. (eg. `content/trees/navigation/pages.yaml` to `content/trees/navigation/default/pages.yaml`)
     - Add a `sites` array to the root structure's yaml file with each site you want the structure to be available in.
-4. For each global set:
-    - Take the values inside the `data` array, and move them to the top level in a file in a subdirectory named after the first site's handle. (eg. `content/globals/pages.yaml` to `content/globals/default/pages.yaml`)
+3. For each global set:
+    - Take the values inside the `data` array, and move them to the top level in a file in a subdirectory named after the default site's handle. (eg. `content/globals/pages.yaml` to `content/globals/default/pages.yaml`)
     - Add a `sites` array to the root global's yaml file with each site you want the global to be available in.
-5. Clear the cache:
-  ``` shell
-  php artisan cache:clear
-  ```
 
 At this point, your content will be available in the default site. You will need to localize each piece of content by following the steps in its respective documentation.
 
-**If you don't add the `sites` to the respective container files, the site selector will not be visible in the control panel.**
+_**Note:** If you don't add the `sites` to the respective container files, the site selector will not be visible in the control panel._
 
-## Update config
+### Clear The Cache
 
-Add the new site to your `config/statamic/sites.php` config.
+Finally, clear your cache!
 
-``` php
-return [
-    'sites' => [
-        'default' => [
-            'name' => 'First site',
-            'locale' => 'en_US',
-            'url' => '/',
-        ],
-        'second' => [
-            'name' => 'Second site',
-            'locale' => 'en_US',
-            'url' => '/second/',
-        ],
-    ]
-];
+``` shell
+php artisan cache:clear
 ```
-
-By default, the first site is named `default`, but feel free to rename it.
diff --git a/content/collections/tips/disabling-cp-authentication.md b/content/collections/tips/disabling-cp-authentication.md
new file mode 100644
index 000000000..bb695abfa
--- /dev/null
+++ b/content/collections/tips/disabling-cp-authentication.md
@@ -0,0 +1,18 @@
+---
+id: b47a6f6c-37bf-4269-9930-9096ee21891a
+blueprint: tips
+title: 'Disabling Control Panel Authentication'
+intro: 'BYO login page.'
+template: page
+---
+In some cases, you may want to disable the Control Panel's authentication pages (login, forgot password, etc.) This could be handy if you are building that part of your app yourself.
+
+1. In `config/statamic/cp.php`, disable the authentication features.
+   ```php
+   'auth' => [
+     'enabled' => false,
+     'redirect_to' => '/your-login-page'
+   ]
+   ```
+
+The Control Panel will still require an authorized user. This just allows you to provide your own login flow.
diff --git a/content/collections/tips/excluding-the-control-panel-from-maintenance-mode.md b/content/collections/tips/excluding-the-control-panel-from-maintenance-mode.md
index 5c41363f6..e8427b774 100644
--- a/content/collections/tips/excluding-the-control-panel-from-maintenance-mode.md
+++ b/content/collections/tips/excluding-the-control-panel-from-maintenance-mode.md
@@ -28,13 +28,26 @@ php artisan up
 
 ## Excluding URLs
 
-URLs that should remain "up" while in maintenance mode can be defined in your `app/Http/Middleware/PreventRequestsDuringMaintenance.php` file. Assuming your control panel uses the default `/cp` URL, use the following config to exclude it:
+It's possible to specify URLs that should remain "up" while your application is in maintenance mode. For most applications, you can define these in your app's `bootstrap/app.php` file:
 
 ```php
-// app/Http/Middleware/PreventRequestsDuringMaintenance.php
+return Application::configure(basePath: dirname(__DIR__))
+    ->withRouting()
+    ->withMiddleware(function (Middleware $middleware) { // [tl! focus]
+        $middleware->preventRequestsDuringMaintenance(except: [ // [tl! focus]
+            '/cp*' // [tl! focus]
+        ]); // [tl! focus]
+    }) // [tl! focus]
+```
+
+In this example, the Control Panel will be available while the rest of your application is "down".
 
+:::hint
+For older applications, without the `Application::configure()` API in the `bootstrap/app.php` file, you can instead define exclusions in the `app/Http/Middleware/PreventRequestsDuringMaintenance.php` file:
+
+```php
 protected $except = [
-    '/cp',
-    '/cp/*'
+    '/cp*'
 ];
 ```
+:::
diff --git a/content/collections/docs/workflow.md b/content/collections/tips/git-workflow.md
similarity index 93%
rename from content/collections/docs/workflow.md
rename to content/collections/tips/git-workflow.md
index 0005dff99..3c7c3508e 100644
--- a/content/collections/docs/workflow.md
+++ b/content/collections/tips/git-workflow.md
@@ -1,9 +1,9 @@
 ---
-id: f703b2eb-ad29-4e28-b778-20b00dc5f2b4
-blueprint: page
-title: Workflow
+id: b46adc3b-c4de-4148-a388-c8ff498ae9c9
+blueprint: tips
+title: 'Git Workflow'
 intro: 'A good workflow revolving around git to manage your deployments is a key factor in a pain-free and efficient project.'
-parent: c4f17d05-78bd-41bf-8e06-8dd52f6ec154
+template: page
 ---
 Given a properly configured VPS solution (like Laravel Forge or similar), your typical deployment workflow would normally look like this:
 
@@ -48,4 +48,4 @@ Whatever the reason, you can ignore the `content` directory in your `.gitignore`
 
 - [Gitflow Workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) – When working with a team (and even when by yourself) it's a good practice to follow a standardized workflow for working with git. We recommend Gitflow.
 
-- [Zero Downtime Deployment Tips](/tips/zero-downtime-deployments#understanding-zero-downtime-deployment-file-structure) - If you plan on using a zero downtime deployment tool like [Envoyer](https://envoyer.io/), [Deployer](https://deployer.org/), etc. be sure to read our tips & tricks guide.
+- [Zero Downtime Deployment Tips](/tips/zero-downtime-deployments#understanding-zero-downtime-deployment-file-structure) - If you plan on using a zero downtime deployment tool like [Envoyer](https://envoyer.io/), [Deployer](https://deployer.org/), etc. be sure to read our tips & tricks guide.
\ No newline at end of file
diff --git a/content/collections/tips/how-to-enable-statamic-pro.md b/content/collections/tips/how-to-enable-statamic-pro.md
index 4428a6ad9..c0c30d678 100644
--- a/content/collections/tips/how-to-enable-statamic-pro.md
+++ b/content/collections/tips/how-to-enable-statamic-pro.md
@@ -5,12 +5,14 @@ title: 'How to Enable Statamic Pro'
 intro: 'A fresh Statamic install starts in Solo edition mode. Here''s how to enable Pro mode and unlock every feature Statamic has.'
 template: page
 ---
-A fresh Statamic install starts in Solo edition mode. You can enable Pro at any time in your `config/statamic/editions.php` file:
+A fresh Statamic install starts in Solo edition mode. You can enable Pro in your `.env` file at any time by running:
 
-``` php
-'pro' => true,
+``` shell
+php please pro:enable
 ```
 
+You can also set `pro` to `true` in `config/statamic/editions.php` for all environments (which you may need to do for older installations of Statamic where the above command doesn't exist).
+
 Once you've opted in, many additional features become be available.
 
 ## Trying Pro Mode {#trial-mode}
@@ -23,7 +25,7 @@ While in trial mode you are also able to try out any commercial [addons](https:/
 
 Once it’s time to launch your site on a public domain, there are a few things you need to do:
 
-- [Create a Site](#sites) on statamic.com and enter the appropriate domain(s).
+- [Create a Site](https://statamic.com/account/sites/create) on statamic.com and enter the appropriate domain(s).
 - Purchase a license of [Statamic Pro](https://statamic.com/pricing) (and any paid addons) and attach them to your Site.
 - Add your Site's license key to your environment file in production.
 
diff --git a/content/collections/tips/importing-content.md b/content/collections/tips/importing-content.md
new file mode 100644
index 000000000..a5c24a8e0
--- /dev/null
+++ b/content/collections/tips/importing-content.md
@@ -0,0 +1,99 @@
+---
+id: c52a611e-2694-4a70-a974-75934d178017
+title: 'Importing Existing Content'
+intro: "After configuring collections and blueprints, you'll likely want to import content from an existing CMS into Statamic. This guide walks you through the various options."
+template: page
+---
+## Overview
+
+After configuring your collections and blueprints in Statamic, your next step will likely be to import existing content into Statamic from a previous CMS.
+
+This guide walks through the process of importing content using our first-party Importer addon, as well how you can build your own importer using repositories.
+
+## Importer Addon (recommended)
+
+To make the process of importing content super easy, we've built a first-party [Importer addon](https://github.com/statamic/importer). The addon allows you to import entries, taxonomies and users. It provides an easy-to-use UI for mapping data to blueprint fields.
+
+1. To get started, install the Importer addon using Composer:
+    ```bash
+    composer require statamic/importer
+    ```
+2. Before importing anything, you should review the [Preperation steps](#preparation) detailed in the addon's documentation.
+3. In the Control Panel, under `Utilities > Importer`, you can create an import. You'll be asked to give it a name, upload the file you wish to import and tell it where the data should be imported.
+4. You can then map fields from your blueprint to fields/columns in your file. You will also need to specify a "Unique Key", which the Importer will use to determine if the item already exists in Statamic.
+5. All that's left to do is click "Import" and watch the magic happen! ✨
+
+For more detailed instructions on how the Importer works, please see the [addon's documentation](https://statamic.com/addons/statamic/importer/docs).
+
+## Build your own importer
+
+If you need more flexibility around how the import happens, or would just prefer to handle it yourself, then you can build your own importer.
+
+1. Create a new command to house the importer:
+    ```bash
+    php artisan make:command ImportCommand
+    ```
+2. In that command, you'll need to get the content you're wanting to import. This could be from a JSON file, a spreadsheet or some kind of external API. It's up to you.
+3. Now, for the exciting bit, importing the content!
+
+    You can loop through the content and create entries for eeach item. Statamic provides an [entry repository](https://statamic.dev/repositories/entry-repository), which allows you to programatically create entries. Here's an example:
+
+    ```php
+    <?php
+
+    namespace App\Console\Commands;
+
+    use Illuminate\Console\Command;
+    use Illuminate\Support\Str;
+    use Statamic\Facades\Entry;
+
+    class ImportCommand extends Command
+    {
+        /**
+        * The name and signature of the console command.
+        *
+        * @var string
+        */
+        protected $signature = 'app:import';
+
+        /**
+        * The console command description.
+        *
+        * @var string
+        */
+        protected $description = 'Imports content into Statamic.';
+
+        /**
+        * Execute the console command.
+        */
+        public function handle() // [tl! focus:start]
+        {
+            // Get your content...
+            $teamMembers = [
+                ['name' => 'Josh Lyman', 'role' => 'Deputy Chief of Staff'],
+                ['name' => 'CJ Cregg', 'role' => 'Press Secretary'],
+                ['name' => 'Toby Ziegler', 'role' => 'Communications Director'],
+                ['name' => 'Sam Seaborn', 'role' => 'Deputy Communications Director'],
+            ];
+
+            // Loop through each item and create a new entry using the Entry facade...
+            foreach ($teamMembers as $member) {
+                $entry = Entry::make()
+                    ->collection('team')
+                    ->slug(Str::slug($member['name']))
+                    ->data([
+                        'name' => $member['name'],
+                        'role' => $member['role'],
+                    ]);
+
+                $entry->save();
+            }
+        }  // [tl! focus:end]
+    }
+    ```
+4. Then, simply run the command to import the content:
+    ```
+    php artisan app:import
+    ```
+
+If you need to import other content, like taxonomy terms or users, please review the docs on [Repositories](https://statamic.dev/reference/repositories).
diff --git a/content/collections/tips/localizing-entries.md b/content/collections/tips/localizing-entries.md
index 0bedc6237..28b02fd5d 100644
--- a/content/collections/tips/localizing-entries.md
+++ b/content/collections/tips/localizing-entries.md
@@ -99,6 +99,10 @@ If you want to delete an origin, you need to make a decision on how to handle an
 
 ![](/img/tips/delete-localization-modal.png)
 
+:::note
+When a user doesn't have access to the sites an entry is localized into, deleting it will detach the localizations.
+:::
+
 ### Option 1: Delete
 
 If you no longer need the localized version, then you can choose to just delete them.
diff --git a/content/collections/tips/localizing-globals.md b/content/collections/tips/localizing-globals.md
index 6e691e9e0..733d5bcde 100644
--- a/content/collections/tips/localizing-globals.md
+++ b/content/collections/tips/localizing-globals.md
@@ -13,14 +13,9 @@ You can use the `php please multisite` to automate converting from a single to a
 
 ## Defining Sites
 
-When using [multiple sites](/multi-site), you'll need to specify in the globals's YAML file which sites this collection can be used in.
+When using [multiple sites](/multi-site), you'll need to specify in the Control Panel which sites this global set can be used in.
 
-``` yaml
-# content/collections/blog.yaml
-sites:
-  - en
-  - fr
-```
+![/img/globals-site-config.png](/img/globals-site-config.png)
 
 ## Folder Structure
 
diff --git a/content/collections/tips/optimizing-assets.md b/content/collections/tips/optimizing-assets.md
index 2dca3f99a..8cc5cf73b 100644
--- a/content/collections/tips/optimizing-assets.md
+++ b/content/collections/tips/optimizing-assets.md
@@ -12,6 +12,9 @@ updated_at: 1622821191
 :::tip
 **This only Applies to Statamic 3.1+**
 :::
+:::tip
+**If you are looking at optimisation due to performance issues it may be worth taking a look at the [performance section of the Nav tag](https://statamic.dev/tags/nav#performance)**
+:::
 
 Statamic's asset system allows you to point at a directory either locally or a remote service like Amazon S3.
 
diff --git a/content/collections/tips/recursive-nav-examples.md b/content/collections/tips/recursive-nav-examples.md
index a58e6754b..6de319c04 100644
--- a/content/collections/tips/recursive-nav-examples.md
+++ b/content/collections/tips/recursive-nav-examples.md
@@ -24,6 +24,9 @@ Maybe you would like to render a footer hierarchy, with top level pages as `<h3>
 
 We can do this by performing a `depth` check to decide how to render the current item based on it's depth in the nav structure:
 
+::tabs
+
+::tab antlers
 ```antlers
 <div class="flex">
     {{ nav }}
@@ -42,6 +45,27 @@ We can do this by performing a `depth` check to decide how to render the current
     {{ /nav }}
 </div>
 ```
+::tab blade
+```blade
+<div class="flex">
+  <s:nav>
+    @if ($depth == 1)
+      <div class="mx-10">
+        <h3 class="mb-2">{{ $title }}</h3>
+
+        @if (count($children) > 0)
+          <ul>@recursive_children</ul>
+        @endif
+      </div>
+    @elseif ($depth == 2)
+      <li class="my-1">
+        <a href="{{ $url }}">{{ $title }}</a>
+      </li>
+    @endif
+  </s:nav>
+</div>
+```
+::
 
 ## Sidebar Nav Example
 
@@ -53,6 +77,9 @@ Or maybe you would like to render a sidebar style nav as a `<ul>`, while applyin
 
 Here we dynamically insert a CSS class based on the current item's `depth` in the nav structure:
 
+::tabs
+
+::tab antlers
 ```antlers
 ---
 nav_classes:
@@ -76,3 +103,26 @@ nav_classes:
     {{ /nav }}
 </ul>
 ```
+::tab blade
+```blade
+<ul class="nav">
+  <s:nav>
+    <li>
+      <span @class([
+        'text-gray-900 font-bold'=> $depth == 1,
+        'text-gray-800 ml-3'=> $depth == 2,
+        'text-gray-500 ml-6 text-sm'=> $depth == 3,
+      ])>{{ $title }}</span>
+
+      @if (count($children) > 0)
+        <ul @class([
+          'mb-4' => $depth == 1
+        ])>
+          @recursive_children
+        </ul>
+      @endif
+    </li>
+  </s:nav>
+</ul>
+```
+::
\ No newline at end of file
diff --git a/content/collections/tips/reserved-words.md b/content/collections/tips/reserved-words.md
index f26f42ba7..d54fc5937 100644
--- a/content/collections/tips/reserved-words.md
+++ b/content/collections/tips/reserved-words.md
@@ -6,11 +6,13 @@ categories:
   - development
   - troubleshooting
 ---
-## As Field Names
+## Reserved Field Handles
 
 This is the list of reserved words you shouldn't use as field names, in addition to the names of Statamic's [Tags](/tags) and [contextual variables](/variables).
 
+- `blueprint`
 - `content_type`
+- `count`
 - `elseif`
 - `endif`
 - `endunless`
@@ -20,9 +22,17 @@ This is the list of reserved words you shouldn't use as field names, in addition
 - `reference`
 - `resource`
 - `save`
+- `site`
 - `status`
+- `path`
+- `private`
+- `publish`
+- `published`
+- `route`
 - `unless`
-- `value`
+- `uri`
+- `url`
+
 
 :::warning
 Some of these _may_ work as field names in some circumstances, but can have unintended consequences, like overriding global data, behaviors, or creating issues with Vue components inside the Control Panel.
@@ -34,15 +44,23 @@ Some of these _may_ work as field names in some circumstances, but can have unin
 - `global` with any datatype storing data as an array when there is _also_ a global field of the same name.
 - `type` inside a Replicator set. The type is the handle of the set.
 
-## As Form Fields
+### Entries
+
+- `order`
+- `origin`
+- `parent`
 
+### Forms
+
+- `date`
 - `message`
 - `messages`
 
-## As Taxonomy Group Names
+## Taxonomy Handles
+
 - `register`
 
-## As Wildcard Variables in Statamic Routes
+## Reserved Wildcards in Statamic Routes
 
 - `entry`
 - `taxonomy`
diff --git a/content/collections/tips/setting-default-listing-columns.md b/content/collections/tips/setting-default-listing-columns.md
new file mode 100644
index 000000000..836e10dc3
--- /dev/null
+++ b/content/collections/tips/setting-default-listing-columns.md
@@ -0,0 +1,48 @@
+---
+id: 62656a00-d225-4906-8387-de780476497e
+title: 'Setting Default Columns on Listing Tables'
+intro: ''
+template: page
+categories:
+  - development
+updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
+updated_at: 1700749977
+---
+Statamic allows you to configure "default preferences" that apply to all users. This enables you to specify the columns and the default order they are shown in on the Listing Tables.
+
+Currently, there's no UI for setting default preferences for the listing tables. However, you can easily do this by modifying some friendly YAML files.
+
+1. First, find the relevant listing table and click the "Customize Columns" button. It'll open up a modal, enabling you to specify the columns you want to show in the listing table. You can re-order columns from here too.
+
+<figure>
+    <img src="/img/tips/customize-columns.png" alt="Columns customizer">
+</figure>
+
+Repeat this step for any other collections or taxonomies you want to set default columns for.
+
+2. Once you're happy, open your user's YAML file. You'll find a `preferences` key containing the columns you just specified:
+
+```yaml
+preferences:
+  collections:
+    articles:
+      columns:
+        - title
+        - date
+        - status
+```
+
+If you're [storing users in a database](/tips/storing-users-in-a-database), you'll need to convert the JSON data from the `preferences` column in your `users` table to YAML. You can use an app like [JSON to YAML](https://www.bairesdev.com/tools/json2yaml/) to do this.
+
+3. Next, create a new file called `resources/preferences.yaml`. Copy the contents of the `preferences` array into this new file, resulting in it looking pretty similar to this:
+
+```yaml
+collections:
+  articles:
+    columns:
+      - title
+      - date
+      - status
+```
+
+4. Finally, if you clear your user's `preferences` array or login as a different user, the default columns will be displayed just as you specified them. 🎉
diff --git a/content/collections/tips/storing-content-in-a-database.md b/content/collections/tips/storing-content-in-a-database.md
new file mode 100644
index 000000000..cad6281eb
--- /dev/null
+++ b/content/collections/tips/storing-content-in-a-database.md
@@ -0,0 +1,47 @@
+---
+id: 61d9e659-10e4-4eed-94b0-c5e639493dfd
+title: 'Storing Content in a Database'
+intro: 'Statamic stores your content in "flat files" by default, however, as you scale, you might reach a point where a traditional database might work better. In this short article, we''ll show you how to move your entries (& other content) into a database.'
+template: page
+categories:
+  - development
+  - database
+  - laravel
+updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
+updated_at: 1622821277
+related_entries:
+    - 4238bce4-a94b-4d07-96fa-ea77c1d8e48d
+---
+## Overview
+
+When you create a new Statamic site, it will ask if you want to store content in flat files or in a database. If you change your mind, maybe for performance or workflow reasons, it's really easy to switch.
+
+## Moving content to the database
+1. First things first, ensure your database is configured correctly. By default, Statamic sites are configured to use a SQLite database. However, [you're free to change this](https://laravel.com/docs/master/database#configuration) in your `.env`:
+    ```
+    DB_CONNECTION=sqlite
+    # DB_HOST=127.0.0.1
+    # DB_PORT=3306
+    # DB_DATABASE=laravel
+    # DB_USERNAME=root
+    # DB_PASSWORD=
+    ```
+2. Run `php please install:eloquent-driver`. It'll install the [Eloquent Driver](https://github.com/statamic/eloquent-driver) addon, publish it's configuration file and prompt you to select the repositories you wish to move to the database.
+
+    You might find it useful to keep "configuration" repositories as flat files, whilst storing the actual content in the database. For example: moving `entries` to the database but leaving `collections` flat-file.
+
+3. And that's you done! Wasn't that easy?
+
+## Change your mind?
+If you change your mind about moving content to the database, you can always move it back. Just use one of the following commands to export your content back into flat-files:
+
+- Assets: `php please eloquent:export-assets`
+- Blueprints and Fieldsets: `php please eloquent:export-blueprints`
+- Collections: `php please eloquent:export-collections`
+- Entries: `php please eloquent:export-entries`
+- Forms: `php please eloquent:export-forms`
+- Globals: `php please eloquent:export-globals`
+- Navs: `php please eloquent:export-navs`
+- Revisions: `php please eloquent:export-revisions`
+- Taxonomies: `php please eloquent:export-taxonomies`
+- Sites: `php please eloquent:export-sites`
diff --git a/content/collections/tips/storing-laravel-users-in-files.md b/content/collections/tips/storing-laravel-users-in-files.md
index 5ce8c6308..08aa85748 100644
--- a/content/collections/tips/storing-laravel-users-in-files.md
+++ b/content/collections/tips/storing-laravel-users-in-files.md
@@ -22,11 +22,4 @@ If you've installed Statamic into an existing Laravel application, it will be ex
             'driver' => 'statamic',
         ],
     ],
-   ```
-3. Uncomment the `users` store in `config/statamic/stache.php`.
-    ``` php
-    'users' => [
-        'class' => Stores\UsersStore::class,
-        'directory' => base_path('users'),
-    ],
-    ```
+   ```
\ No newline at end of file
diff --git a/content/collections/tips/storing-users-in-a-database.md b/content/collections/tips/storing-users-in-a-database.md
index 4ff92b9c1..4d5088ded 100644
--- a/content/collections/tips/storing-users-in-a-database.md
+++ b/content/collections/tips/storing-users-in-a-database.md
@@ -19,13 +19,94 @@ If you installed Statamic using the `statamic new` command, or created a project
 Statamic comes with an Eloquent driver to make the transition as seamless as possible.
 
 1. Ensure you have a [database configured](https://laravel.com/docs/database#configuration).
-2. In `config/statamic/users.php`, change `repository` to `eloquent`.
-3. In `config/auth.php`, comment out the `statamic` provider, and uncomment the `eloquent` provider.
-4. Run the `php please auth:migration` command to generates the migration for the role and user group pivot tables.
-5. If you've customized your `user` blueprint, edit the migration so it includes those fields as columns, or create a new migration to add them.
-6. Run `php artisan migrate`
-7. Run a command to migrate your file based users into the database.
-8. (optional) If you are using the Statamic forgot password form, add the following method to your User model
+1. In your user model, cast the preferences column to json.
+    ```php
+    class User extends Authenticatable
+    {
+        protected function casts(): array // [tl! focus]
+        { // [tl! focus]
+            return [ // [tl! focus]
+                'preferences' => 'json', // [tl! ++] [tl! focus]
+            ]; // [tl! focus]
+        } // [tl! focus]
+
+        // ...
+    }
+    ```
+1. If you plan to import existing file based users, you'll need to use UUIDs for the primary key. You can do this by adding a trait to your user model:
+    ```php
+    class User extends Authenticatable
+    {
+        use \Illuminate\Database\Eloquent\Concerns\HasUuids; // [tl! ++] [tl! focus]
+
+        // ...
+    }
+    ```
+1. In `config/statamic/users.php`, use the Eloquent repository.
+    ```php
+    'repository' => 'file', // [tl! --]
+    'repository' => 'eloquent', // [tl! ++]
+    ```
+1. In `config/auth.php`, use the Eloquent provider:
+    ```php
+    'providers' => [
+        'users' => [
+            'driver' => 'statamic', // [tl! --]
+            'driver' => 'eloquent', // [tl! ++]
+            'model' => App\Models\User::class, // [tl! ++]
+        ]
+    ]
+    ```
+1. Generate a migration for the role and user group pivot tables.
+    ```cli
+    php please auth:migration
+    ```
+    - If you're planning to import existing file based users, edit the migration to change the `id` & `user_id` columns to the `uuid` type.
+        ```php
+        Schema::table('users', function (Blueprint $table) {
+            $table->uuid('id')->change(); // [tl! ++] [tl! **]
+            $table->boolean('super')->default(false);
+            $table->string('avatar')->nullable();
+            $table->json('preferences')->nullable();
+            $table->timestamp('last_login')->nullable();
+            $table->string('password')->nullable()->change();
+        });
+
+        Schema::create('role_user', function (Blueprint $table) {
+            $table->increments('id');
+            $table->foreignId('user_id')->constrained('users')->cascadeOnDelete();  // [tl! --] [tl! **]
+            $table->uuid('user_id');  // [tl! ++] [tl! **]
+            $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();  // [tl! ++] [tl! **]
+            $table->string('role_id');
+        });
+
+        Schema::create('group_user', function (Blueprint $table) {
+            $table->increments('id');
+            $table->foreignId('user_id')->constrained('users')->cascadeOnDelete();  // [tl! --] [tl! **]
+            $table->uuid('user_id');  // [tl! ++] [tl! **]
+            $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();  // [tl! ++] [tl! **]
+            $table->string('group_id');
+        });
+        ```
+    - If you're using the `database` session driver and using UUIDs as the primary key for users, make sure to update the `user_id` column in the `sessions` table.
+        ```php
+        Schema::table('sessions', function (Blueprint $table) {  // [tl! ++] [tl! **]
+            $table->foreignUuid('user_id')->nullable()->change();  // [tl! ++] [tl! **]
+        });  // [tl! ++] [tl! **]
+        ```
+    - If you've customized your `user` blueprint, edit the migration so it includes those fields as columns. You can also create a new migration file by running `php artisan make:migration`. You'll have to manually edit the migration file to reflect your changes. Read up on [Laravel database migrations here](https://laravel.com/docs/12.x/migrations).
+        ```php
+        $table->string('some_field');
+        ```
+1. Run the migrations:
+    ```cli
+    php artisan migrate
+    ```
+1. If you have existing file based users, import them:
+    ```cli
+    php please eloquent:import-users
+    ```
+1. If you are using the Statamic forgot password form, add the following method to your User model
     ```php
     public function sendPasswordResetNotification($token)
     {
@@ -33,9 +114,6 @@ Statamic comes with an Eloquent driver to make the transition as seamless as pos
     }
     ```
 
-:::tip
-**Simon Hamp** has a good [starter migration script](https://gist.github.com/simonhamp/a2b9113c100e5194db53298162f1dde0) you can start from and customize for your own needs.
-:::
 ## In an existing Laravel app
 
 If you've installed Statamic into an existing Laravel app, it will already be configured to use the Eloquent driver.
@@ -49,7 +127,7 @@ You will need to run migrations to prepare your database for Statamic's user, pa
     ```php
     'activations' => [
         'provider' => 'users',
-        'table' => 'password_activations',
+        'table' => 'password_activation_tokens',
         'expire' => 4320,
         'throttle' => 60,
     ],
@@ -72,7 +150,7 @@ You will need to run migrations to prepare your database for Statamic's user, pa
     php please auth:migration
     php artisan migrate
     ```
-3. (optional) If you are using the Statamic forgot password form, add the following method to your User model
+4. Optional: If you are using the Statamic forgot password form, add the following method to your User model
     ```php
     public function sendPasswordResetNotification($token)
     {
@@ -80,9 +158,32 @@ You will need to run migrations to prepare your database for Statamic's user, pa
     }
     ```
 
-:::tip
-When using `sqlite` or `mysql` as your database driver, make sure to `composer require doctrine/dbal`. We change the `users` table in our auth migrations and therefore [require](https://laravel.com/docs/master/migrations#modifying-columns) the `doctrine/dbal` to run the migrations without errors.
-:::
-
 
 This assumes you are happy to use our opinionated setup. If you need something more custom you can [create your own user driver](/tips/storing-users-somewhere-custom).
+
+## Roles and Groups (optional)
+
+By default, roles and groups are stored in flat files. If you would like to store them in the database instead, follow these steps:
+
+1. Specify the `roles` and `groups` tables in the `config/statamic/users.php` config file. 
+
+    ```php
+    'tables' => [
+        'users' => 'users',
+        'role_user' => 'role_user',
+        'roles' => false, // [tl! --]
+        'roles' => 'roles', // [tl! ++]
+        'group_user' => 'group_user',
+        'groups' => false, // [tl! --]
+        'groups' => 'groups', // [tl! ++]
+    ],
+    ```
+   
+2. Run `php please auth:migration` to generate the required migrations for the `roles` and `groups` tables. This will create two migrations in the `database/migrations` directory. You can delete the duplicate the `statamic_auth_table` migration.
+3. Run the migrations using `php artisan migrate`.
+4. Finally, if you have existing file based roles and groups, you can import them using these commands:
+
+    ```shell
+    php please eloquent:import-roles
+    php please eloquent:import-groups
+    ```
\ No newline at end of file
diff --git a/content/collections/tips/using-an-independent-authentication-guard.md b/content/collections/tips/using-an-independent-authentication-guard.md
index d9fef684e..6bd9367cd 100644
--- a/content/collections/tips/using-an-independent-authentication-guard.md
+++ b/content/collections/tips/using-an-independent-authentication-guard.md
@@ -8,38 +8,23 @@ categories:
 updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
 updated_at: 1622821437
 ---
-By default, Statamic comes configured to use the default auth guard.
+By default, Statamic comes configured to use the default auth guard. This means that your application's users will also be considered Statamic users.
 
-This means that any users will be considered Statamic's users.
+If your application's users won't be interacting with Statamic and only a few users will actually be using the Control Panel, it might make sense for you to store your application's users in a database and your Statamic users in YAML files.
 
-An example wanting to change this could be if your application's users would not be interacting with Statamic, and only one or a few users would be using the Control Panel. It would be possible to keep your Statamic users in yaml files, and your app's users in a database.
+To separate Statamic's users from those of your Laravel application, you'll need to setup two user guards & two user providers in your `config/auth.php` config file.
 
-If you'd like Statamic to use its own guards, you can configure it that way in your config files.
-
-```php
-// config/statamic/users.php
-
-'guards' => [
-    'cp' => 'statamic', // the guard when using the cp
-    'web' => 'statamic', // the guard when using Statamic frontend routes
-],
-```
-
-Any non-Statamic routes (e.g. any routes you've manually added to routes/web.php) will be unaffected by the above config. They'll be using whatever your "default" guard is.
+You'll need one user guard & user provider for your Eloquent users and another for your Statamic users:
 
 ```php
 // config/auth.php
 
-'defaults' => [
-  'guard' => 'web',
-  'passwords' => 'users',
-],
-
 'guards' => [
     'web' => [
         'driver' => 'session',
         'provider' => 'users',
     ],
+
     'statamic' => [
         'driver' => 'session',
         'provider' => 'statamic',
@@ -49,11 +34,75 @@ Any non-Statamic routes (e.g. any routes you've manually added to routes/web.php
 'providers' => [
     'users' => [
         'driver' => 'eloquent',
-        'model' => \App\User::class,
+        'model' => \App\Models\User::class,
     ],
+
     'statamic' => [
         'driver' => 'statamic',
     ],
 ],
 ```
-In this example we'll use the custom `statamic` auth guard to authenticate users using the statamic driver. Following the steps in [Storing Laravel Users in Files](https://statamic.dev/tips/storing-laravel-users-in-files) we can have some users stored in the database and Statamic users stored in files.
+
+In the above example, the  `statamic`  guard is used to authenticate users using Statamic's flat-file driver and the `web` guard is used to authenticate users using Laravel's built-in Eloquent driver.
+
+While you're in the `config/auth.php` file, ensure you have separate brokers for each of the providers. Two for Statamic and one for Eloquent. Statamic separates the concepts of resets and activations where Eloquent doesn't by default.
+
+```php
+'passwords' => [
+	'resets' => [
+		'provider' => 'users',
+		'table' => 'password_reset_tokens',
+		'expire' => 60,
+		'throttle' => 60,
+	],
+
+	'statamic_resets' => [ // [tl! ++:start]
+		'provider' => 'statamic',
+		'table' => 'password_resets',
+		'expire' => 60,
+		'throttle' => 60,
+	],
+
+	'statamic_activations' => [
+		'provider' => 'statamic',
+		'table' => 'password_activations',
+		'expire' => 4320,
+		'throttle' => 60,
+	], // [tl! ++:end]
+],
+```
+
+Next, in Statamic's `users.php` configuration file, you'll want to configure which user guard should be used on the frontend and which should be used for the Control Panel:
+
+In the example below, we're using the `statamic` driver for Control Panel users and the `web` driver for frontend users.
+
+```php
+// config/statamic/users.php
+
+'guards' => [
+    'cp' => 'statamic',
+    'web' => 'web',
+],
+```
+
+You should also ensure the `passwords` is setup to point to the correct reset & activation configs:
+
+```php
+'passwords' => [
+	'resets' => 'statamic_resets',
+	'activations' => 'statamic_activations',
+],
+```
+
+## Non-Statamic routes
+
+It's worth noting that any non-Statamic routes (eg. any you've manually added in your `routes/web.php` file) will be unaffected by the config changes
+
+These routes will use whichever guard you have set to as the "default" in your `config/auth.php` file:
+
+```php
+'defaults' => [
+  'guard' => 'web',
+  'passwords' => 'resets',
+],
+```
diff --git a/content/collections/tips/zero-downtime-deployments.md b/content/collections/tips/zero-downtime-deployments.md
index 228ebc46a..03062a853 100644
--- a/content/collections/tips/zero-downtime-deployments.md
+++ b/content/collections/tips/zero-downtime-deployments.md
@@ -35,7 +35,7 @@ After a successful deployment, the `current` folder is then symlinked to the lat
 
 ## Cache storage
 
-Statamic's content management heavily relies on caching, and sometimes it's necessary for the [Stache](/stache) to store absolute file paths in your app's cache. This can lead to deployment errors when while users are hitting your frontend, since each release [exists in a separate timestamped folder](#understanding-zero-downtime-deployment-file-structure).
+Statamic's content management heavily relies on caching, and sometimes it's necessary for the [Stache](/stache) to store absolute file paths in your app's cache. This can lead to deployment errors when users are hitting your frontend, since each release [exists in a separate timestamped folder](#understanding-zero-downtime-deployment-file-structure).
 
 The solution is simple. Just as you should never share a cache between different websites, you should never share a cache between your deployed releases.
 
@@ -88,7 +88,7 @@ cd {{ release }}
 git init
 git remote add origin git@github.com:your/remote-repository.git
 git fetch
-git branch --track master origin/master
+git branch --track main origin/main
 git reset HEAD
 ```
 
@@ -117,11 +117,17 @@ When adding these deployment hooks, be mindful of the order in which these thing
 
 ### Committing form submissions
 
-If you plan on committing form submissions, you will need to store them outside of the shared `storage` folder. You can customize your form submissions path in `config/statamic/forms.php`:
+If you plan on committing form submissions, you will need to store them outside of the shared `storage` directory. 
+
+To customize where form submissions are stored, add a `form-submissions` array to your `config/statamic/stache.php` config file:
 
 ```php
-'submissions' => storage_path('forms'), // [tl! --]
-'submissions' => base_path('forms'), // [tl! ++]
+'stores' => [
+    'form-submissions' => [ // [tl! ++]
+        'class' => \Statamic\Stache\Stores\SubmissionsStore::class, // [tl! ++]
+        'directory' => base_path('forms'), // [tl! ++]
+    ], // [tl! ++]
+],
 ```
 
 After doing this, you will also need to update the tracked path for your submissions in `config/statamic/git.php`:
diff --git a/content/collections/troubleshooting/assets-missing-urls.md b/content/collections/troubleshooting/assets-missing-urls.md
index ab1c8cf6f..7a093cefb 100644
--- a/content/collections/troubleshooting/assets-missing-urls.md
+++ b/content/collections/troubleshooting/assets-missing-urls.md
@@ -16,11 +16,29 @@ You might have something like this:
 my_asset_field:
   - path/to/image.jpg
 ```
-```
+
+::tabs
+
+::tab antlers
+```antlers
 {{ my_asset_field }}
-    <img src="{{ url }}" alt="{{ alt }}" width="{{ width }}" height="{{ height }}" />
+  <img
+    src="{{ url }}" alt="{{ alt }}"
+    width="{{ width }}" height="{{ height }}"
+  />
 {{ /my_asset_field }}
 ```
+::tab blade
+```blade
+@foreach ($my_asset_field as $asset)
+  <img
+    src="{{ $asset->url }}" alt="{{ $asset->alt }}"
+    width="{{ $asset->width }}" height="{{ $asset->height }}"
+  />
+@endforeach
+```
+::
+
 ```html
 <img src="" alt="An image" width="100" height="150" />
 ```
diff --git a/content/collections/troubleshooting/command-not-found-statamic.md b/content/collections/troubleshooting/command-not-found-statamic.md
index 114242cbd..a3bddb0f4 100644
--- a/content/collections/troubleshooting/command-not-found-statamic.md
+++ b/content/collections/troubleshooting/command-not-found-statamic.md
@@ -30,20 +30,24 @@ You can solve this by adding Composer's `bin` directory to your `PATH` (sometime
 
 ## MacOS or Linux
 
-Find out what shell you're using by running `echo $SHELL`.
+1. You'll need to find Composer's global directory. This is usually somewhere in your home directory. This command will output the absolute path:
+    ``` shell
+    composer global config bin-dir --absolute
+    ```
 
-- If it's `bash`, create a `~/.bashrc` file.
-- If it's `zsh`, create a `~/.zshrc` file.
+2. Identify which shell you're using. You can determine this by running `echo $SHELL`.
+3. Next, you'll need to add Composer's `bin` directory to your shell `rc` file. Feel free to create the file if it doesn't already exist.
+    - If you're using `bash`, this will be  `~/.bashrc`
+    - If you're using `zsh`, this will be `~/.zshrc`
 
-Then add this to the end of it:
-
-``` shell
-export PATH=${PATH}:~/.composer/vendor/bin
-```
+    ``` shell
+    # Replace the path below with the path identified in step 1
+    export PATH="/Users/me/.composer/vendor/bin/":$PATH
+    ```
 
 To test it, open a _new_ terminal window and run `echo $PATH`. You should see the composer directory at the end.
 
-## Windows 10
+## Windows
 
 To add to your `PATH` on Windows, it requires you to click through some things. Ryan Hoffman has written [an article](https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/) with screenshots to walk you through it.
 
diff --git a/content/collections/troubleshooting/control-panel-page-expired.md b/content/collections/troubleshooting/control-panel-page-expired.md
new file mode 100644
index 000000000..1725d466e
--- /dev/null
+++ b/content/collections/troubleshooting/control-panel-page-expired.md
@@ -0,0 +1,35 @@
+---
+id: 3faef3ae-8673-42ba-901b-a1d7eb3db4b7
+blueprint: troubleshooting
+title: '"419 Page Expired" error when logging into the Control Panel'
+categories:
+  - troubleshooting
+template: page
+---
+There are a few common reasons why you might encounter a "419 Page Expired" error when attempting to login to the Control Panel.
+
+## Database session driver
+The most common reason you'll see this error is if you're using the [`database` session driver](https://laravel.com/docs/session#database).
+
+The `user_id` column on the `sessions` table expects an integer value. However, because Statamic uses UUIDs for user IDs, the session row is saved incorrectly, causing the 419 error.
+
+You can workaround this by changing the `user_id` column to a string/varchar:
+
+```php
+Schema::create('sessions', function (Blueprint $table) {
+    $table->string('id')->primary();
+    $table->foreignId('user_id')->nullable()->index(); // [tl! remove]
+    $table->string('user_id')->nullable()->index(); // [tl! add]
+    $table->string('ip_address', 45)->nullable();
+    $table->text('user_agent')->nullable();
+    $table->longText('payload');
+    $table->integer('last_activity')->index();
+});
+```
+
+## Browser Autofill
+Another potential cause for this issue might be interference by your browser's autocomplete, or an extension which provides similar functionality (like 1Password).
+
+When it autocompletes your login details, it might also be changing the value of the hidden `_token` input, which is used for storing your [CSRF token](https://laravel.com/docs/master/csrf#main-content).
+
+To rule this out, you could try disabling all browser extensions, or logging in to the Control Panel using a different browser.
diff --git a/content/collections/troubleshooting/email-not-sending.md b/content/collections/troubleshooting/email-not-sending.md
new file mode 100644
index 000000000..be27c200a
--- /dev/null
+++ b/content/collections/troubleshooting/email-not-sending.md
@@ -0,0 +1,34 @@
+---
+id: 577004ae-5fa4-4535-b34f-cd8e7f721cbb
+blueprint: troubleshooting
+title: 'Email not sending'
+intro: Email can be difficult to debug when it seems like you've set everything up correctly.
+template: page
+categories:
+  - troubleshooting
+updated_by: 3a60f79d-8381-4def-a970-5df62f0f5d56
+updated_at: 1622821385
+---
+## Email Test Utility
+The most basic way to test that email is working is to use the Email utility in the control panel.
+
+Head to Utilities > Email. In there you can see all your mail related settings. Maybe you can spot an incorrect setting.
+
+On this page you can also send a test email. If you do that and see a success message but no email, here's some suggestions:
+
+## Queue
+One thing you may want to check is that if you've configured a queue, that the queue is actually running.
+
+The success message could mean that it was successfully queued, but the lack of any email is because the queued job was never executed.
+
+Locally, run the queue worker:
+
+```shell
+php artisan queue:listen
+```
+
+Or on production, make sure you a worker configured to run the `queue:work` command.
+
+## Horizon
+
+If you're using Laravel Horizon, make sure that you didn't just `composer require` it, but that you also installed it using `artisan horizon:install`.  
diff --git a/content/collections/troubleshooting/missing-control-panel-assets.md b/content/collections/troubleshooting/missing-control-panel-assets.md
new file mode 100644
index 000000000..ea862e77e
--- /dev/null
+++ b/content/collections/troubleshooting/missing-control-panel-assets.md
@@ -0,0 +1,59 @@
+---
+id: 6056f7d0-f767-496d-a8b0-e1242f69faa2
+blueprint: troubleshooting
+title: 'Missing Control Panel Assets (Vite manifest not found)'
+template: page
+categories:
+  - troubleshooting
+---
+You've just installed Statamic and are ready to jump into the Control Panel. You head to `/cp` and are met with a `Vite manifest not found` error.
+
+![](/img/vite-manifest-not-found.png)
+
+The most likely reason for this is that **you have Composer plugins disabled**.
+
+There may be a number of reasons why they are disabled, such as:
+- You answered no when it asked if you want to trust the plugin
+- You have them disabled in your global composer config
+- Your Docker setup doesn't allow them 
+
+Regardless, you'll need to at least enable one. When installing or updating Statamic via Composer, we use the `pixelfear/composer-dist-plugin` plugin to copy the assets into the appropriate location.
+
+1. You may explicitly allow it by adding the following to your `composer.json`.
+
+    ```json
+    {
+        "name": "statamic/statamic",
+        "require": {},
+        "autoload": {},
+        "config": { // [tl! **]
+            "optimize-autoloader": true,
+            "preferred-install": "dist",
+            "sort-packages": true,
+            "allow-plugins": { // [tl! **]
+                "pestphp/pest-plugin": true,
+                "php-http/discovery": true,
+                "pixelfear/composer-dist-plugin": true // [tl! ** ++]
+            } // [tl! **]
+        }, // [tl! **]
+        "minimum-stability": "dev",
+        "prefer-stable": true
+    }
+    ```
+
+2. Delete the `vendor/statamic/cms` directory. This will force Composer to re-download Statamic in the next step.
+    ```bash
+    rm -rf vendor/statamic/cms   
+    ```
+3. Update Statamic
+    ```bash
+    composer update statamic/cms
+    ```
+
+:::tip
+For Docker specifically, you may be able to avoid this in the future by adding this to your `Dockerfile` before any `composer` commands:
+
+```dockerfile
+ENV COMPOSER_ALLOW_SUPERUSER=1
+```
+:::
diff --git a/content/collections/variables.yaml b/content/collections/variables.yaml
index e71d33561..ea7781ec1 100644
--- a/content/collections/variables.yaml
+++ b/content/collections/variables.yaml
@@ -1,5 +1,5 @@
 title: Variables
-template: variables.show
+template: page
 layout: layout
 mount: 03cf195b-2030-43c1-a6f3-039fa55ffd6a
 taxonomies:
diff --git a/content/collections/variables/basename.md b/content/collections/variables/basename.md
index a4957bf89..869c479c4 100644
--- a/content/collections/variables/basename.md
+++ b/content/collections/variables/basename.md
@@ -7,9 +7,17 @@ title: Basename
 ---
 The basename of the asset, which is the filename _with_ the extension.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ basename }}
 ```
+::tab blade
+```blade
+{{ $basename }}
+```
+::
 
 ```html
 black-bear-cubs.jpg
diff --git a/content/collections/variables/collection.md b/content/collections/variables/collection.md
index 73f355096..500ecc71c 100644
--- a/content/collections/variables/collection.md
+++ b/content/collections/variables/collection.md
@@ -7,9 +7,17 @@ title: Collection
 ---
 Get the name of the collection the entry belongs to.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ collection }}
 ```
+::tab blade
+```blade
+{{ $collection }}
+```
+::
 
 ```html
 blog
diff --git a/content/collections/variables/config.md b/content/collections/variables/config.md
index b9d209728..5fb449dea 100644
--- a/content/collections/variables/config.md
+++ b/content/collections/variables/config.md
@@ -9,12 +9,28 @@ Statamic (and Laravel) have many config files in the `config` directory. Each fi
 
 For example, if you want to check whether the Control Panel is enabled, you could use:
 
+::tabs
+
+::tab antlers
 ``` antlers
 {{ config:statamic:cp:enabled }}
 ```
+::tab blade
+```blade
+{{ config('statamic.cp.enabled') }}
+```
+::
 
 To retrieve from the `config/app.php` you would:
 
+::tabs
+
+::tab antlers
 ``` antlers
 {{ config:app:variable_you_want }}
 ```
+::tab blade
+```blade
+{{ config('statamic.app.variable_you_want') }}
+```
+::
diff --git a/content/collections/variables/csrf_field.md b/content/collections/variables/csrf_field.md
index f5a14bdec..ae273898a 100644
--- a/content/collections/variables/csrf_field.md
+++ b/content/collections/variables/csrf_field.md
@@ -9,9 +9,20 @@ A helper to output the CSRF token inside a hidden field named `_token` from the
 
 POST requests in Statamic will be keeping an eye out for a `_token` value.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ csrf_field }}
 ```
+::tab blade
+```blade
+{!! $csrf_field !!}
+
+-- or --
+{!! csrf_field() !!}
+```
+::
 
 ```
 <input type="hidden" name="_token" value="csrftokenhere" />
diff --git a/content/collections/variables/csrf_token.md b/content/collections/variables/csrf_token.md
index 8d15b8195..473c84209 100644
--- a/content/collections/variables/csrf_token.md
+++ b/content/collections/variables/csrf_token.md
@@ -7,6 +7,18 @@ title: 'CSRF Token'
 ---
 Output the CSRF token from the session.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ csrf_token }}
 ```
+::tab blade
+```blade
+{{ $csrf_token }}
+
+-- or --
+
+{{ csrf_token() }}
+```
+::
diff --git a/content/collections/variables/current_layout.md b/content/collections/variables/current_layout.md
new file mode 100644
index 000000000..a37354c8e
--- /dev/null
+++ b/content/collections/variables/current_layout.md
@@ -0,0 +1,25 @@
+---
+id: 2f00c834-213d-4156-b3a0-5e249a71dc22
+blueprint: variables
+types:
+  - system
+  - content
+title: Current Layout
+---
+The name of the layout currently in use.
+
+::tabs
+
+::tab antlers
+```antlers
+{{ current_layout }}
+```
+::tab blade
+```blade
+{{ $current_layout }}
+```
+::
+
+```html
+layouts.blog
+```
diff --git a/content/collections/variables/current_template.md b/content/collections/variables/current_template.md
index 143f0cf18..58cd318da 100644
--- a/content/collections/variables/current_template.md
+++ b/content/collections/variables/current_template.md
@@ -8,9 +8,17 @@ title: Current Template
 ---
 The name of the template currently in use.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ current_template }}
 ```
+::tab blade
+```blade
+{{ $current_template }}
+```
+::
 
 ```html
 blog.index
diff --git a/content/collections/variables/current_uri.md b/content/collections/variables/current_uri.md
index 15a5ab383..9ae1c7e21 100644
--- a/content/collections/variables/current_uri.md
+++ b/content/collections/variables/current_uri.md
@@ -7,9 +7,17 @@ title: 'Current Uri'
 ---
 The current URI (URL without domain).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ current_uri }}
 ```
+::tab blade
+```blade
+{{ $current_uri }}
+```
+::
 
 ```html
 /variables
diff --git a/content/collections/variables/current_url.md b/content/collections/variables/current_url.md
index c643b540d..8d24558d1 100644
--- a/content/collections/variables/current_url.md
+++ b/content/collections/variables/current_url.md
@@ -7,10 +7,18 @@ title: 'Current Url'
 ---
 The current URL.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ current_url }}
 ```
+::tab blade
+```blade
+{{ $current_url }}
+```
+::
 
 ```html
-https://docs.statamic.com/variables
+https://statamic.dev/variables/current_url
 ```
diff --git a/content/collections/variables/current_user.md b/content/collections/variables/current_user.md
index 87c355818..b6c0a926b 100644
--- a/content/collections/variables/current_user.md
+++ b/content/collections/variables/current_user.md
@@ -5,11 +5,19 @@ title: 'Current User'
 ---
 The current user.
 
-```
+::tabs
+::tab antlers
+```antlers
 {{ current_user }} {{ name }} {{ /current_user }}
 
 {{ current_user:email }}
 ```
+::tab blade
+```blade
+{{ $current_user['name'] }}
+
+{{ $current_user['email'] }}
+```
 
 ```html
 Example User
diff --git a/content/collections/variables/date.md b/content/collections/variables/date.md
index 2e1ae1071..64bdbc8b1 100644
--- a/content/collections/variables/date.md
+++ b/content/collections/variables/date.md
@@ -10,9 +10,17 @@ Get the date of the entry. This will be a `Carbon` instance.
 However if you use it in your template as-is, it will get converted to a string using the format defined in your
 system settings.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date }}
 ```
+::tab blade
+```blade
+{{ $date }}
+```
+::
 
 ```html
 February 16, 2016
diff --git a/content/collections/variables/datestamp.md b/content/collections/variables/datestamp.md
index 33ff98a78..cb331be19 100644
--- a/content/collections/variables/datestamp.md
+++ b/content/collections/variables/datestamp.md
@@ -9,9 +9,17 @@ Get the timestamp of the entry. This will be an integer.
 
 Alias of `timestamp`. Maybe calling it a datestamp makes more sense to you if you aren't using time-based entries.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ datestamp }}
 ```
+::tab blade
+```blade
+{{ $datestamp }}
+```
+::
 
 ```html
 1425772800
diff --git a/content/collections/variables/datestring.md b/content/collections/variables/datestring.md
index a0f790650..0cf875761 100644
--- a/content/collections/variables/datestring.md
+++ b/content/collections/variables/datestring.md
@@ -7,9 +7,17 @@ title: Datestring
 ---
 Get the pre-formatted date of the entry as a string.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ date }}
 ```
+::tab blade
+```blade
+{{ $date }}
+```
+::
 
 ```html
 February 16, 2016
diff --git a/content/collections/variables/edit_url.md b/content/collections/variables/edit_url.md
index a2f4e6a77..5ae99c780 100644
--- a/content/collections/variables/edit_url.md
+++ b/content/collections/variables/edit_url.md
@@ -5,13 +5,21 @@ types:
   - content
 title: 'Edit Url'
 ---
-Get the URL to edit a the current page or entry in the Control Panel, if there is one (for example, there is no `edit_url` for a template route).
+Get the URL to edit the current page or entry in the Control Panel, if there is one (for example, there is no `edit_url` for a template route).
 
 The user will need to login and have permissions, so it's probably best if used in conjunction with [permissions checks](/tags/user-can).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <a href="{{ edit_url }}">Edit this page</a>
 ```
+::tab blade
+```blade
+<a href="{{ $edit_url }}">Edit this page</a>
+```
+::
 
 ```html
 <a href="/cp/pages/edit/about-ye-old-me">Edit this page</a>
diff --git a/content/collections/variables/entries_count.md b/content/collections/variables/entries_count.md
index b012770af..92331fbf8 100644
--- a/content/collections/variables/entries_count.md
+++ b/content/collections/variables/entries_count.md
@@ -7,9 +7,17 @@ title: 'Entries Count'
 ---
 Get the number of entries that use this taxonomy term.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 There are {{ entries_count }} 'news' entries.
 ```
+::tab blade
+```blade
+There are {{ $entries_count }} 'news' entries.
+```
+::
 
 ```html
 There are 85 'news' entries.
diff --git a/content/collections/variables/environment.md b/content/collections/variables/environment.md
index 4d0ce47d3..cd1ae5054 100644
--- a/content/collections/variables/environment.md
+++ b/content/collections/variables/environment.md
@@ -9,9 +9,17 @@ Outputs the current environment.
 
 This will be the value of `APP_ENV` in your `.env` file. If you haven't set that, then it will output the default of `production`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ environment }}
 ```
+::tab blade
+```blade
+{{ $environment }}
+```
+::
 
 ```html
 production
diff --git a/content/collections/variables/extension.md b/content/collections/variables/extension.md
index 264d00f9e..22c8b3a77 100644
--- a/content/collections/variables/extension.md
+++ b/content/collections/variables/extension.md
@@ -7,9 +7,17 @@ title: Extension
 ---
 The file extension of the asset.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ extension }}
 ```
+::tab blade
+```blade
+{{ $extension }}
+```
+::
 
 ```html
 jpg
diff --git a/content/collections/variables/filename.md b/content/collections/variables/filename.md
index 7e68236ed..66d59b62f 100644
--- a/content/collections/variables/filename.md
+++ b/content/collections/variables/filename.md
@@ -7,9 +7,17 @@ title: Filename
 ---
 The filename of the asset, without the extension.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ filename }}
 ```
+::tab blade
+```blade
+{{ $filename }}
+```
+::
 
 ```html
 black-bear-cubs
diff --git a/content/collections/variables/focus.md b/content/collections/variables/focus.md
index 188105f2e..fdae48a56 100644
--- a/content/collections/variables/focus.md
+++ b/content/collections/variables/focus.md
@@ -7,9 +7,17 @@ title: Focus
 ---
 The focal point of the asset, defaulting to center (`50-50`).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ focus }}
 ```
+::tab blade
+```blade
+{{ $focus }}
+```
+::
 
 ```html
 50-30
@@ -17,10 +25,20 @@ The focal point of the asset, defaulting to center (`50-50`).
 
 You may want to use this in CSS with either the [background_position](/modifiers/background_position) modifier, or just by using the [focus_css](/variables/focus_css) variable.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 background-position: {{ focus | background_position }};
 background-position: {{ focus_css }};
 ```
+::tab blade
+```blade
+
+background-position: {{ Statamic::modify($focus)->backgroundPosition() }};
+background-position: {{ $focus_css }};
+```
+::
 
 ```html
 background-position: 50% 30%;
diff --git a/content/collections/variables/focus_css.md b/content/collections/variables/focus_css.md
index c7c7da49c..eef96b01d 100644
--- a/content/collections/variables/focus_css.md
+++ b/content/collections/variables/focus_css.md
@@ -7,9 +7,17 @@ title: 'Focus Css'
 ---
 The focal point of the asset, in a format suitable for the background-position CSS property, if one has been set.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ focus_css }}
 ```
+::tab blade
+```blade
+{{ $focus_css }}
+```
+::
 
 ```html
 50% 30%
diff --git a/content/collections/variables/get.md b/content/collections/variables/get.md
index cc7b11424..6cd41bf98 100644
--- a/content/collections/variables/get.md
+++ b/content/collections/variables/get.md
@@ -10,7 +10,10 @@ An array of `GET` variables that come from any query strings present in the curr
 
 Example URL: `/about?show=pants&hide=jeggings`
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ get:show }}
 
 {{ get }}
@@ -19,6 +22,15 @@ Example URL: `/about?show=pants&hide=jeggings`
 {{ /get }}
 
 ```
+::tab blade
+```blade
+{{ $get['show'] ?? '' }}
+
+-- or --
+
+{{ request()->get('show') }}
+```
+::
 
 ```html
 pants
@@ -29,7 +41,19 @@ jeggings
 
 Be sure to escape these values with the `sanitize` modifier if you plan to use them in output in production.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <!-- Because let's face it. You really *should* sanitize your jeggings. -->
 {{ get:jeggings | sanitize }}
 ```
+::tab blade
+```blade
+{{ request()->get('jeggings') }}
+
+-- or --
+
+{!! Statamic::modify(request()->get('jeggings'))->sanitize() !!}
+```
+::
diff --git a/content/collections/variables/has_timestamp.md b/content/collections/variables/has_timestamp.md
index a7cf8be52..92beac207 100644
--- a/content/collections/variables/has_timestamp.md
+++ b/content/collections/variables/has_timestamp.md
@@ -7,13 +7,25 @@ title: 'Has Timestamp'
 ---
 A boolean for whether or not an entry is time-based.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if has_timestamp }}
     {{ date format="F jS, Y g:i a" }}
 {{ else }}
     {{ date format="F jS, Y" }}
 {{ /if }}
 ```
+::tab blade
+```blade
+@if ($has_timestamp)
+  {{ $date->format('F jS, Y g:i a' )}}
+@else
+  {{ $date->format('F jS, Y') }}
+@endif
+```
+::
 
 ```html
 January 1st, 2016 11:30 am
diff --git a/content/collections/variables/height.md b/content/collections/variables/height.md
index da64c9d83..66fe924a7 100644
--- a/content/collections/variables/height.md
+++ b/content/collections/variables/height.md
@@ -7,9 +7,17 @@ title: Height
 ---
 The height of an image asset, in pixels.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ height }}
 ```
+::tab blade
+```blade
+{{ $height }}
+```
+::
 
 ```html
 643
diff --git a/content/collections/variables/homepage.md b/content/collections/variables/homepage.md
index d6f6b9f97..a47fb1bfc 100644
--- a/content/collections/variables/homepage.md
+++ b/content/collections/variables/homepage.md
@@ -7,9 +7,17 @@ title: Homepage
 ---
 The URL of the homepage. Usually (but not always) the same as `{{ site:url }}`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ homepage }}
 ```
+::tab blade
+```blade
+{{ $homepage }}
+```
+::
 
 ```html
 https://docs.statamic.com/
diff --git a/content/collections/variables/id.md b/content/collections/variables/id.md
index bc3dddcd7..22c1cb382 100644
--- a/content/collections/variables/id.md
+++ b/content/collections/variables/id.md
@@ -8,9 +8,17 @@ title: Id
 The ID is the identifier of the content. It's usually a long number that you wouldn't want to show anyone.
 However it's super handy to pass into other tags.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ id }}
 ```
+::tab blade
+```blade
+{{ $page->id }}
+```
+::
 
 ```html
 0020c540-d4cd-11e5-a837-0800200c9a66
diff --git a/content/collections/variables/is_homepage.md b/content/collections/variables/is_homepage.md
index e14c90798..ec867b0eb 100644
--- a/content/collections/variables/is_homepage.md
+++ b/content/collections/variables/is_homepage.md
@@ -7,8 +7,18 @@ title: Is Homepage
 ---
 Whether you're on the homepage.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if is_homepage }} Home sweet home {{ /if }}
 ```
+::tab blade
+```blade
+@if ($is_homepage)
+  Home sweet home
+@endif
+```
+::
 
 If you're using [multiple sites](/multi-site), this will be true if you're on the homepage for any configured site.
diff --git a/content/collections/variables/is_image.md b/content/collections/variables/is_image.md
index 31c7d4414..bc006a12b 100644
--- a/content/collections/variables/is_image.md
+++ b/content/collections/variables/is_image.md
@@ -7,10 +7,22 @@ title: 'Is Image'
 ---
 A boolean for whether the asset is an image.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if is_image }}
     <img src="{{ url }}" />
 {{ else }}
     <a href="{{ url }}">Download</a>
 {{ /if }}
 ```
+::tab blade
+```blade
+@if ($is_image)
+  <img src="{{ $url }}" />
+@else
+  <a href="{{ $url }}">Download</a>
+@endif
+```
+::
\ No newline at end of file
diff --git a/content/collections/variables/is_video.md b/content/collections/variables/is_video.md
index e36e76a4f..78292a1e4 100644
--- a/content/collections/variables/is_video.md
+++ b/content/collections/variables/is_video.md
@@ -5,7 +5,10 @@ id: 89e75dec-7f33-4217-b040-2c2a18de5d83
 ---
 A boolean for whether the asset is an video.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if is_video }}
     <video controls>
         <source src="{{ url }}" type="video/mp4">
@@ -15,5 +18,16 @@ A boolean for whether the asset is an video.
     <a href="{{ url }}">Download</a>
 {{ /if }}
 ```
-
+::tab blade
+```blade
+@if ($is_video)
+  <video controls>
+    <source src="{{ $url }}" type="video/mp4">
+    Sorry, your browser doesn't support embedded videos.
+  </video>
+@else
+  <a href="{{ $url }}">Download</a>
+@endif
+```
+::
 
diff --git a/content/collections/variables/last_modified.md b/content/collections/variables/last_modified.md
index 52e110780..532946aa8 100644
--- a/content/collections/variables/last_modified.md
+++ b/content/collections/variables/last_modified.md
@@ -9,3 +9,15 @@ The last modified time for the content file, or the asset.
 
 Note that this is the timestamp for the file itself, not for when the content was published or updated. For example,
 if you were to use git to deploy this file and it gets written on a server, the last modified time will be different.
+
+::tabs
+
+::tab
+```antlers
+{{ last_modified }}
+```
+::tab blade
+```blade
+{{ $page->last_modified }}
+```
+::
\ No newline at end of file
diff --git a/content/collections/variables/last_segment.md b/content/collections/variables/last_segment.md
index cf3e602f1..e027b713a 100644
--- a/content/collections/variables/last_segment.md
+++ b/content/collections/variables/last_segment.md
@@ -9,9 +9,17 @@ Since you don't always know how many segments your URL will have, you can always
 
 Example URL: `/nestled/safely/under/our/tree`
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ last_segment }}
 ```
+::tab blade
+```blade
+{{ $last_segment }}
+```
+::
 
 ```html
 tree
diff --git a/content/collections/variables/live_preview.md b/content/collections/variables/live_preview.md
new file mode 100644
index 000000000..03fc6b141
--- /dev/null
+++ b/content/collections/variables/live_preview.md
@@ -0,0 +1,17 @@
+---
+id: e722fd36-1aa5-4e91-8eeb-8b759accf4d2
+blueprint: variables
+types:
+  - system
+title: 'Live Preview'
+related_entries:
+  - cdffd2c9-cf42-495d-a8f1-f416ddfddc29
+---
+
+A boolean for whether the current page is being viewed in [Live Preview](/live-preview).
+
+```antlers
+{{ if live_preview }}
+    <div>If you are seeing this, you're in Live Preview 😎</div>
+{{ /if }}
+```
diff --git a/content/collections/variables/logged_in.md b/content/collections/variables/logged_in.md
index 75725f75d..d3cab3c4f 100644
--- a/content/collections/variables/logged_in.md
+++ b/content/collections/variables/logged_in.md
@@ -7,6 +7,14 @@ title: 'Logged In'
 ---
 Whether the visitor is logged in.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if logged_in }} Welcome back! {{ /if }}
 ```
+::tab blade
+```blade
+@if ($logged_in) Welcome back! @endif
+```
+::
diff --git a/content/collections/variables/now.md b/content/collections/variables/now.md
index 65efd404b..f3866d964 100644
--- a/content/collections/variables/now.md
+++ b/content/collections/variables/now.md
@@ -7,9 +7,21 @@ title: Now
 ---
 The current date/time. If you use it on its own, it will be formatted using the default time format. If you pass it into a tag parameter or modifier, it will be treated as the `Carbon` instance.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ now }}
 ```
+::tab blade
+```blade
+{{ $now }}
+
+-- or --
+
+{{ now() }}
+```
+::
 
 ```html
 December 30th 2015
diff --git a/content/collections/variables/old.md b/content/collections/variables/old.md
index 7e9aae4e5..6e07286c3 100644
--- a/content/collections/variables/old.md
+++ b/content/collections/variables/old.md
@@ -13,7 +13,10 @@ Instead of making your users re-type everything, you may use `{{ old:[field_name
 
 When using the `{{ user:login_form }}` to login, upon entering incorrect credentials, you will be shown the same page. You can use the `{{ old:[field_name] }}` tags to maintain the values like so:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ user:login_form }}
 
     {{ if errors }}
@@ -31,3 +34,21 @@ When using the `{{ user:login_form }}` to login, upon entering incorrect credent
 
 {{ /user:login_form }}
 ```
+::tab blade
+```blade
+<s:user:login_form>
+  @if (count($errors) > 0)
+    ...
+  @endif
+
+  <label>Username</label>
+  <input type="text" name="username" value="{{ old('username') }}" />
+
+  <label>Password</label>
+  <input type="password" name="password" value="{{ old('password') }}" />
+
+  <button>Log in</button>
+
+</s:user:login_form>
+```
+::
\ No newline at end of file
diff --git a/content/collections/variables/order.md b/content/collections/variables/order.md
index e396bb675..ae2bc9966 100644
--- a/content/collections/variables/order.md
+++ b/content/collections/variables/order.md
@@ -9,9 +9,17 @@ Get the order key of the content. It's what's at the beginning of the filename.
 
 For pages this could be a number. For entries it could be a number or a date string (2015-01-02).
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ order }}
 ```
+::tab blade
+```blade
+{{ $order }}
+```
+::
 
 ```html
 1
diff --git a/content/collections/variables/order_type.md b/content/collections/variables/order_type.md
index b2051813b..dd6b36733 100644
--- a/content/collections/variables/order_type.md
+++ b/content/collections/variables/order_type.md
@@ -7,9 +7,17 @@ title: 'Order Type'
 ---
 Get the order type of an entry. This could be `date`, `alphabetical`, or `number`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ order_type }}
 ```
+::tab blade
+```blade
+{{ $order_type }}
+```
+::
 
 ```html
 {{ number }}
diff --git a/content/collections/variables/path.md b/content/collections/variables/path.md
index fea7614d5..d08c7d436 100644
--- a/content/collections/variables/path.md
+++ b/content/collections/variables/path.md
@@ -7,9 +7,17 @@ title: Path
 ---
 The path to the file, relative to the asset container.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ path }}
 ```
+::tab blade
+```blade
+{{ $path }}
+```
+::
 
 ```html
 img/black-bear-cubs.jpg
diff --git a/content/collections/variables/permalink.md b/content/collections/variables/permalink.md
index 0c7f350a4..e437c23ab 100644
--- a/content/collections/variables/permalink.md
+++ b/content/collections/variables/permalink.md
@@ -7,9 +7,17 @@ title: Permalink
 ---
 Get the absolute URL to the content. This will include your site URL.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ permalink }}
 ```
+::tab blade
+```blade
+{{ $permalink }}
+```
+::
 
 ```html
 http://example.com/posts/bacon
diff --git a/content/collections/variables/post.md b/content/collections/variables/post.md
index 40f5bf3e2..318414a00 100644
--- a/content/collections/variables/post.md
+++ b/content/collections/variables/post.md
@@ -16,13 +16,23 @@ An array of sanitized `POST` variables that come from any form data present for
 </form>
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ post }}
   {{ first_name }} {{ last_name }}
 {{ /post }}
 
 Mr. {{ post:last_name }}
 ```
+::tab blade
+```blade
+{{ request()->post('first_name') }} {{ request()->post('last_name') }}
+
+Mr. {{ request()->post('last_name') }}
+```
+::
 
 ```html
 Niles Peppertrout
diff --git a/content/collections/variables/published.md b/content/collections/variables/published.md
index 93cf0bd46..93eaa7e4c 100644
--- a/content/collections/variables/published.md
+++ b/content/collections/variables/published.md
@@ -7,10 +7,22 @@ title: Published
 ---
 A boolean that specifies whether the content is published. Or "live", or "not a draft".
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ if published }}
     Published!
 {{ else }}
     Draft
 {{ /if }}
 ```
+::tab blade
+```blade
+@if ($published)
+  Published!
+@else
+  Draft
+@endif
+```
+::
\ No newline at end of file
diff --git a/content/collections/variables/segment_x.md b/content/collections/variables/segment_x.md
index 0f210364a..d09977854 100644
--- a/content/collections/variables/segment_x.md
+++ b/content/collections/variables/segment_x.md
@@ -9,9 +9,17 @@ Given "x", any segment number, will return the value of that particular URL segm
 
 Example URL: `/put/that/cookie/down`
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ segment_3 }}
 ```
+::tab blade
+```blade
+{{ $segment_3 }}
+```
+::
 
 ```html
 cookie
diff --git a/content/collections/variables/site.md b/content/collections/variables/site.md
index 5762fe796..6114e68f2 100644
--- a/content/collections/variables/site.md
+++ b/content/collections/variables/site.md
@@ -27,9 +27,17 @@ It's a `Statamic\Sites\Site` object and can be used as a single tag or tag pair.
 
 As a single tag, it will output the handle of the site:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ site }}
 ```
+::tab blade
+```blade
+{{ $site }}
+```
+::
 
 ```html
 default
@@ -37,7 +45,10 @@ default
 
 As a tag pair, you can access additional information:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ site }}
     {{ handle }}
     {{ name }}
@@ -51,6 +62,19 @@ As a tag pair, you can access additional information:
     {{ /attributes }}
 {{ /site }}
 ```
+::tab blade
+```blade
+{{ $site->handle }}
+{{ $site->name }}
+{{ $site->locale }}
+{{ $site->short_locale }}
+{{ $site->url }}
+{{ $site->permalink }}
+{{ $site->direction }}
+
+{{ $site->attributes['foo'] }}
+```
+::
 
 ```html
 default
@@ -65,10 +89,19 @@ bar
 
 You can also access those variables directly as single tags:
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ site:name }}
 {{ site:attributes:foo }}
 ```
+::tab blade
+```blade
+{{ $site->name }}
+{{ $site->attributes['foo'] }}
+```
+::
 
 ```html
 My Statamic Site
diff --git a/content/collections/variables/sites.md b/content/collections/variables/sites.md
index 5490130a3..2cc79c5a7 100644
--- a/content/collections/variables/sites.md
+++ b/content/collections/variables/sites.md
@@ -7,32 +7,28 @@ title: Sites
 ---
 A collection containing all the configured sites as `Statamic\Sites\Site` objects which you can loop over using a tag pair.
 
-``` php
-// config/statamic/sites.php
-
-'sites' => [
-    'english' => [
-        'name' => 'English Site',
-        'locale' => 'en_US',
-        'url' => 'http://mysite.com/',
-        'direction' => 'ltr',
-        'attributes' => [
-            'foo' => 'bar',
-        ]
-    ],
-    'french' => [
-        'name' => 'French Site',
-        'locale' => 'en_FR',
-        'url' => 'http://mysite.com.fr/',
-        'direction' => 'ltr',
-        'attributes' => [
-            'foo' => 'baz',
-        ]
-    ]
-]
+```yaml
+# resources/sites.yaml
+english:
+  name: English Site
+  url: 'http://mysite.com/'
+  locale: en_US
+  direction: ltr
+  attributes:
+    foo: bar
+french:
+  name: French Site
+  url: 'http://mysite.com.fr/'
+  locale: en_FR
+  direction: ltr
+  attributes:
+    foo: baz
 ```
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ sites }}
     {{ handle }}
     {{ name }}
@@ -46,6 +42,21 @@ A collection containing all the configured sites as `Statamic\Sites\Site` object
 
 {{ /sites }}
 ```
+::tab blade
+```blade
+@foreach ($sites as $site)
+  {{ $site->handle }}
+  {{ $site->name }}
+  {{ $site->locale }}
+  {{ $site->short_locale }}
+  {{ $site->url }}
+  {{ $site->permalink }}
+  {{ $site->direction }}
+
+  {{ $site->attributes['foo'] }}
+@endforeach
+```
+::
 
 ```html
 english
diff --git a/content/collections/variables/size.md b/content/collections/variables/size.md
index a7b9df172..ff70b595e 100644
--- a/content/collections/variables/size.md
+++ b/content/collections/variables/size.md
@@ -7,11 +7,21 @@ title: Size
 ---
 The file size of the asset, in an appropriate human-readable format.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ assets:files }}
     {{ size }}
 {{ /assets:files }}
 ```
+::tab blade
+```blade
+<s:assets:files>
+  {{ $size }}
+</s:assets:files>
+```
+::
 
 ```html
 11 B
diff --git a/content/collections/variables/size_bytes.md b/content/collections/variables/size_bytes.md
index 1d67b9512..31fdff970 100644
--- a/content/collections/variables/size_bytes.md
+++ b/content/collections/variables/size_bytes.md
@@ -7,9 +7,17 @@ title: 'Size Bytes'
 ---
 The file size of the asset, in bytes. Also available as `size_b`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ size_bytes }}
 ```
+::tab blade
+```blade
+{{ $size_bytes }}
+```
+::
 
 ```html
 130754
diff --git a/content/collections/variables/size_gigabytes.md b/content/collections/variables/size_gigabytes.md
index 6b0d348bc..8dc7eb74c 100644
--- a/content/collections/variables/size_gigabytes.md
+++ b/content/collections/variables/size_gigabytes.md
@@ -7,9 +7,17 @@ title: 'Size Gigabytes'
 ---
 The file size of the asset, in gigabytes. Also available as `size_gb`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ size_gigabytes }}
 ```
+::tab blade
+```blade
+{{ $size_gigabytes }}
+```
+::
 
 ```html
 0.00
diff --git a/content/collections/variables/size_kilobytes.md b/content/collections/variables/size_kilobytes.md
index 3ca2a6011..8d8c73526 100644
--- a/content/collections/variables/size_kilobytes.md
+++ b/content/collections/variables/size_kilobytes.md
@@ -7,9 +7,17 @@ title: 'Size Kilobytes'
 ---
 The file size of the asset, in kilobytes. Also available as `size_kb`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ size_kilobytes }}
 ```
+::tab blade
+```blade
+{{ $size_kiobytes }}
+```
+::
 
 ```html
 127.69
diff --git a/content/collections/variables/size_megabytes.md b/content/collections/variables/size_megabytes.md
index efb5c4ff1..554839750 100644
--- a/content/collections/variables/size_megabytes.md
+++ b/content/collections/variables/size_megabytes.md
@@ -7,9 +7,17 @@ title: 'Size Megabytes'
 ---
 The file size of the asset, in megabytes. Also available as `size_mb`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ size_megabytes }}
 ```
+::tab blade
+```blade
+{{ $size_megabytes }}
+```
+::
 
 ```html
 0.12
diff --git a/content/collections/variables/slug.md b/content/collections/variables/slug.md
index fce91d13d..49c39f39d 100644
--- a/content/collections/variables/slug.md
+++ b/content/collections/variables/slug.md
@@ -7,10 +7,19 @@ title: Slug
 ---
 A slug is the string that identifies your content. It usually sits at the end of the URL.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 <h1>{{ title }}</h1>
 {{ slug }}
 ```
+::tab blade
+```blade
+<h1>{{ $title }}</h1>
+{{ $slug }}
+```
+::
 
 ```html
 <h1>My Thoughts on Bacon</h1>
diff --git a/content/collections/variables/taxonomy.md b/content/collections/variables/taxonomy.md
index dac6e8851..d120075eb 100644
--- a/content/collections/variables/taxonomy.md
+++ b/content/collections/variables/taxonomy.md
@@ -7,9 +7,17 @@ title: Taxonomy
 ---
 Get the name of the taxonomy the term belongs to.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ taxonomy }}
 ```
+::tab blade
+```blade
+{{ $taxonomy }}
+```
+::
 
 ```html
 categories
diff --git a/content/collections/variables/timestamp.md b/content/collections/variables/timestamp.md
index ab6acaff9..6a5d8926c 100644
--- a/content/collections/variables/timestamp.md
+++ b/content/collections/variables/timestamp.md
@@ -9,9 +9,17 @@ Get the timestamp of the entry. This will be an integer.
 
 Alias of `datestamp`.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ timestamp }}
 ```
+::tab blade
+```blade
+{{ $timestamp }}
+```
+::
 
 ```html
 1425772800
diff --git a/content/collections/variables/url.md b/content/collections/variables/url.md
index e40e868e5..8c6c40ce0 100644
--- a/content/collections/variables/url.md
+++ b/content/collections/variables/url.md
@@ -7,9 +7,17 @@ title: Url
 ---
 Get the URL to the content. This is relative and will _not_ include your site URL.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ url }}
 ```
+::tab blade
+```blade
+{{ $url }}
+```
+::
 
 ```html
 /posts/bacon
diff --git a/content/collections/variables/width.md b/content/collections/variables/width.md
index 50993e4fc..ded1cd0a5 100644
--- a/content/collections/variables/width.md
+++ b/content/collections/variables/width.md
@@ -7,9 +7,17 @@ title: Width
 ---
 The width of an image asset, in pixels.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ width }}
 ```
+::tab blade
+```blade
+{{ $width }}
+```
+::
 
 ```html
 900
diff --git a/content/collections/variables/xml_header.md b/content/collections/variables/xml_header.md
index 423f2659c..cd1de8182 100644
--- a/content/collections/variables/xml_header.md
+++ b/content/collections/variables/xml_header.md
@@ -9,9 +9,17 @@ Simply outputs an XML Header tag.
 
 Statamic's template parser will encode `<?` and `?>` because they are PHP tags. Silly XML. This global will get you around that.
 
-```
+::tabs
+
+::tab antlers
+```antlers
 {{ xml_header }}
 ```
+::tab blade
+```blade
+{{ $xml_header }}
+```
+::
 
 ```html
 <?xml version="1.0" encoding="utf-8" ?>
diff --git a/content/collections/widgets.yaml b/content/collections/widgets.yaml
index 407f026c6..bb86f00bb 100644
--- a/content/collections/widgets.yaml
+++ b/content/collections/widgets.yaml
@@ -1,5 +1,5 @@
 title: Widgets
-template: widgets/show
+template: page
 layout: layout
 mount: 565f0285-43b1-41d2-935c-e52ad00c012c
 revisions: false
diff --git a/content/collections/widgets/collection.md b/content/collections/widgets/collection.md
index 99fc557a3..b8d217dba 100644
--- a/content/collections/widgets/collection.md
+++ b/content/collections/widgets/collection.md
@@ -13,7 +13,12 @@ options:
     name: width
     type: int
     required: false
-    description: 'Width of dashboard area as a percentage.'
+    description: 'Width of dashboard area as a percentage. Accepts `25`, `33`, `50`, `66`, `75` and `100`.'
+  -
+    name: sites
+    type: array
+    required: false
+    description: 'Determines the sites in which this widget should be displayed.'
   -
     name: limit
     type: int
@@ -24,6 +29,16 @@ options:
     type: string
     required: false
     description: 'Sort and order by field name. E.g. `''title:desc''`. Defaults to the collection''s settings.'
+  -
+    name: fields
+    type: array
+    required: false
+    description: 'An array of field handles to be displayed as columns in the widget.'
+  -
+    name: title
+    type: string
+    required: false
+    description: 'The title of the widget. Defaults to the collection name.'
 screenshot: widgets/collection.png
 nav_title: Collection
 ---
diff --git a/content/collections/widgets/form.md b/content/collections/widgets/form.md
index 9911dca3f..3dfe5e75e 100644
--- a/content/collections/widgets/form.md
+++ b/content/collections/widgets/form.md
@@ -14,7 +14,12 @@ options:
     name: width
     type: int
     required: false
-    description: 'Width of dashboard area as a percentage.'
+    description: 'Width of dashboard area as a percentage. Accepts `25`, `33`, `50`, `66`, `75` and `100`.'
+  -
+    name: sites
+    type: array
+    required: false
+    description: 'Determines the sites in which this widget should be displayed.'
   -
     name: limit
     type: int
@@ -25,6 +30,11 @@ options:
     type: array
     required: false
     description: 'An array of field handles to include in the list.'
+  -
+    name: title
+    type: string
+    required: false
+    description: 'The title of the widget. Defaults to the form name.'
 screenshot: widgets/form.png
 ---
 ## Configuring
diff --git a/content/collections/widgets/updater.md b/content/collections/widgets/updater.md
index 526f678b4..dcd458bce 100644
--- a/content/collections/widgets/updater.md
+++ b/content/collections/widgets/updater.md
@@ -10,7 +10,12 @@ options:
     name: width
     type: int
     required: false
-    description: 'Width of dashboard area as a percentage.'
+    description: 'Width of dashboard area as a percentage. Accepts `25`, `33`, `50`, `66`, `75` and `100`.'
+  -
+    name: sites
+    type: array
+    required: false
+    description: 'Determines the sites in which this widget should be displayed.'
 ---
 ## Configuring
 
@@ -24,5 +29,6 @@ Widgets can be added to the dashboard by modifying the `widgets` array in the `c
   [ // [tl! focus:start]
       'type' => 'updater',
       'width' => 100,
+      'sites' => ['en', 'de', 'fr'],
   ], // [tl! focus:end]
 ],
diff --git a/content/globals/global.yaml b/content/globals/global.yaml
index a104ea91c..23cc090ba 100644
--- a/content/globals/global.yaml
+++ b/content/globals/global.yaml
@@ -1,55 +1,60 @@
-id: 02174866-a776-4fea-b7e0-935980d9cf1c
 title: Globals
 data:
   pro_badges:
-    - magnum
-    - mrt
-    - miyagi
-    - rocky
-    - sigourney
-    - freddie
+    -
+      id: m8q1g335
+      artwork: pro-badges/artwork/pro-doc-brown.jpg
+      icon: pro-badges/icons/pro-sheriff-badge.png
+      type: pro_badge
+      enabled: true
+    -
+      id: m8q1napf
+      artwork: pro-badges/artwork/pro-marty-mcfly.jpg
+      icon: pro-badges/icons/pro-sheriff-badge.png
+      type: pro_badge
+      enabled: true
   experimental_badges:
     - doc
     - hackerman
     - rick
   powered_by:
     - 'the sweat of Rambo'
-    - 'Michael McDonald''s beard'
-    - 'MacGyver''s paperclip collection'
-    - 'Mr. T''s mohawk'
-    - 'Hulk Hogan''s triceps'
-    - 'E.T.''s glowing finger'
+    - "Michael McDonald's beard"
+    - "MacGyver's paperclip collection"
+    - "Mr. T's mohawk"
+    - "Hulk Hogan's triceps"
+    - "E.T.'s glowing finger"
     - 'the memory of John Candy'
     - 'the Jamaican bobsled team'
-    - 'Rick Moranis''s glasses'
+    - "Rick Moranis's glasses"
     - 'the power of Greyskull'
-    - 'David Hasselhoff''s smile'
-    - 'Weird Al''s purple accordion'
-    - 'Michael Jackson''s glove'
-    - 'Alf''s back hair'
-    - 'Zack Morris''s cell phone battery'
-    - 'Mr. Roger''s red cardigan'
-    - 'Uncle Jesse''s hairspray'
-    - 'the eye of Rocky''s tiger'
-    - 'Blockbuster''s 2-for-1 nights'
-    - 'Kevin Mccallister''s Talkboy'
-    - 'Michelle Tanner''s catch phrases'
-    - 'John McClane''s undershirt'
-    - 'John Hammond''s cane'
+    - "David Hasselhoff's smile"
+    - "Weird Al's purple accordion"
+    - "Michael Jackson's glove"
+    - "Alf's back hair"
+    - "Zack Morris's cell phone battery"
+    - "Mr. Roger's red cardigan"
+    - "Uncle Jesse's hairspray"
+    - "the eye of Rocky's tiger"
+    - "Blockbuster's 2-for-1 nights"
+    - "Kevin Mccallister's Talkboy"
+    - "Michelle Tanner's catch phrases"
+    - "John McClane's undershirt"
+    - "John Hammond's cane"
     - 'a Festivus pole'
-    - 'Pheobe''s smelly cat'
+    - "Pheobe's smelly cat"
     - 'the Binford 6100'
-    - 'DJ Jazzy Jeff''s turntable'
+    - "DJ Jazzy Jeff's turntable"
     - 'Hi-C Ecto Cooler'
     - 'the Kool-Aid man'
-    - 'Harry''s gold tooth'
-    - 'Double Dare''s physical challenge'
-    - 'Daniel Larusso''s headband'
+    - "Harry's gold tooth"
+    - "Double Dare's physical challenge"
+    - "Daniel Larusso's headband"
     - 'the presidential fitness test'
-    - 'Marty McFly''s orange vest'
-    - 'Ferris Bueller''s Ferrari'
-    - 'Forrest Gump''s box of chocolates'
-    - 'a Speak N'' Spell with fresh batteries'
+    - "Marty McFly's orange vest"
+    - "Ferris Bueller's Ferrari"
+    - "Forrest Gump's box of chocolates"
+    - "a Speak N' Spell with fresh batteries"
     - 'the Kobayashi porcelain mug'
     - 'an amp that goes to 11'
     - 'the Men in Black flashy thing'
@@ -57,30 +62,30 @@ data:
     - 'an unbroken Super Soaker 200'
     - 'an old pair of Moon Shoes'
     - 'a pair of never-worn Reebok pumps'
-    - 'Tommy Pickle''s screwdriver'
+    - "Tommy Pickle's screwdriver"
     - 'a bottle of Flintstone vitamins'
     - 'Fruit by the Foot'
     - 'two cases of Surge'
     - 'a fully fed, adult Tamagotchi'
-    - 'a pair of Will Smith''s high-tops'
+    - "a pair of Will Smith's high-tops"
     - 'a tube of Pogs'
     - 'a binder full of Garbage Pail Kids'
     - 'Peanut, the royal-blue Beanie Baby'
     - 'your secret Lisa Frank Trapper Keeper'
-    - 'Teddy Ruxpin''s voice box'
+    - "Teddy Ruxpin's voice box"
     - 'a bin of mangled G.I. Joes'
     - 'an ewok snuggling baby Yoda'
     - 'a mint condition Street Fighter II arcade cabinet'
     - 'two Nintendo Power Gloves'
     - 'a rechargable Gameboy magnifier light'
-    - 'a rogue, sentient Speak ''N Spell'
+    - "a rogue, sentient Speak 'N Spell"
     - 'a Michael Jordan rookie card'
     - 'an unwashed Chicago Bulls jersey'
-    - 'Ross & Rachael''s break'
-    - 'Gunther''s extra wide neck tie'
-    - 'Jerry''s puffy shirt'
-    - 'Al Borland''s flannel collection'
-    - 'Buffy''s Dagger of Lex'
-    - 'Xena''s Sword'
-    - 'Fraiser''s Rothko painting'
-    - 'Chandler''s oversized dress shirts'
+    - "Ross & Rachael's break"
+    - "Gunther's extra wide neck tie"
+    - "Jerry's puffy shirt"
+    - "Al Borland's flannel collection"
+    - "Buffy's Dagger of Lex"
+    - "Xena's Sword"
+    - "Fraiser's Rothko painting"
+    - "Chandler's oversized dress shirts"
diff --git a/content/trees/collections/docs.yaml b/content/trees/collections/docs.yaml
index 64ad31c62..8319e3588 100644
--- a/content/trees/collections/docs.yaml
+++ b/content/trees/collections/docs.yaml
@@ -14,6 +14,10 @@ tree:
         entry: 4947cda2-d17d-4289-ab37-1f4f64bfa1d4
       -
         entry: a1d1a50e-fb42-4a9e-b03f-59dc47f21dc2
+      -
+        entry: e077f513-45c1-4eff-ba87-210340dd6f54
+      -
+        entry: 91e8f239-2f99-47bc-b4dd-3518cd3e36ae
       -
         entry: ec130472-4f44-4e7e-8dce-71d0c93e8fef
       -
@@ -21,6 +25,8 @@ tree:
   -
     entry: ab08f409-8bbe-4ede-b421-d05777d292f7
     children:
+      -
+        entry: 61c8db2d-f7bf-4829-bafd-f8a4db5a9a57
       -
         entry: 2093f557-8d4a-4baf-bf5c-cbbf584acd3b
       -
@@ -33,6 +39,8 @@ tree:
         entry: f8bac6fc-401c-4f0e-b338-386e332c91b8
       -
         entry: d4a54957-9863-471a-a188-d06b0e0cd48d
+      -
+        entry: 48c60d99-04e7-47f6-9576-aee1401fcb50
   -
     entry: 24a9c9d8-d607-4117-9806-738668c173cd
   -
@@ -40,18 +48,18 @@ tree:
     children:
       -
         entry: 8fd95af9-f635-45bb-a3d1-1fa1db7be4a2
+      -
+        entry: 68d936b0-b1b0-431d-bbe0-a8356decf251
       -
         entry: cf38dba4-5cce-4b81-a2f5-e82665e4e11f
       -
         entry: 79d022e5-8fb0-4d20-955d-801e0edafa61
-      -
-        entry: 4b468a3a-08c2-4114-9daa-47cf99125d27
       -
         entry: 7f809a5e-e555-4ccc-8488-d7310ff8c89c
       -
         entry: 01ab4b2b-bee2-4697-b3c6-cb129d783589
       -
-        entry: f703b2eb-ad29-4e28-b778-20b00dc5f2b4
+        entry: 94c521e3-bacb-45e3-b385-00bad3cac401
   -
     entry: e6f05019-6bdd-488e-ba45-39ae7ea5cee7
   -
@@ -89,8 +97,6 @@ tree:
     entry: 93cf3f23-24c4-4722-a6e2-5b369e952a3b
   -
     entry: 84100772-18e4-4a22-8759-219b242a320c
-  -
-    entry: dcf80ee6-209e-45aa-af42-46bbe01996e2
   -
     entry: c7816387-ebc4-4204-b5f2-8e7073a4db8b
   -
@@ -146,8 +152,8 @@ tree:
         entry: 9c703f43-30de-4f65-98bb-2b89f80012b7
       -
         entry: c51a5de8-4b02-4240-8195-3ff7987c43cf
-  -
-    entry: a66f3e5f-5a60-44c4-8c1d-a9d9692366c0
+      -
+        entry: 512cbb65-0091-47e2-a3b6-c42aae64349e
   -
     entry: 83145e6c-45d2-4e9c-a412-48a81f144224
   -
@@ -188,9 +194,25 @@ tree:
     entry: d0e99506-d01d-484c-884f-46dfc4dcf4c5
   -
     entry: 1d1920fb-604c-4ac1-8c99-f0de44abc06b
-  -
-    entry: 8ecc72e1-f1b7-4708-bf61-8fb98073da64
   -
     entry: 268d444c-88e3-4b52-bfc6-165749ef3ec1
   -
     entry: d37b2af2-f2bf-493a-9345-7087fb5929ce
+  -
+    entry: e947dc19-9a8a-44c2-911c-171d1f196c91
+  -
+    entry: 124cb9e8-b5e0-4af6-8271-98ca6b0131b4
+  -
+    entry: 0327afd5-469b-4119-a75e-2bfe9389eb05
+  -
+    entry: 2ce74b48-d3cc-4b8a-a8d4-f514c0b1d6ff
+  -
+    entry: 452c268b-b885-4deb-8e46-1cc3ebc66e4f
+  -
+    entry: c9ee871c-002b-48d7-b845-1abac58de337
+  -
+    entry: 550e7bf1-de6e-40ba-9b06-b32d9119e436
+  -
+    entry: e8504150-db55-4986-b567-19c046cc03de
+  -
+    entry: 0df63f01-4b97-4c15-89a9-015c02ea3748
diff --git a/content/trees/collections/sections.yaml b/content/trees/collections/sections.yaml
index 5ac0af70d..bb387bf8d 100644
--- a/content/trees/collections/sections.yaml
+++ b/content/trees/collections/sections.yaml
@@ -3,7 +3,9 @@ tree:
     entry: 5ee53e1b-8933-4b2e-a72d-af09f2b32600
   -
     entry: 173b892f-7f5a-4b88-8830-f28d8f90265f
-  -
-    entry: 18bceaa7-64fb-4587-9e0e-b52e8de52f8e
   -
     entry: 3e260b43-aa71-43b6-832e-1ebf2f59f39b
+  -
+    entry: 72c7218e-1a9f-49a6-904d-ed8588e57869
+  -
+    entry: 18bceaa7-64fb-4587-9e0e-b52e8de52f8e
diff --git a/content/trees/navigation/docs.yaml b/content/trees/navigation/docs.yaml
index f24e0b067..a4cec8fc4 100644
--- a/content/trees/navigation/docs.yaml
+++ b/content/trees/navigation/docs.yaml
@@ -2,7 +2,14 @@ tree:
   -
     id: c872a03e-cae9-4c2e-81f9-3a2034a21adb
     title: 'Getting Started'
+    url: /
+    data:
+      navigation_image: navigation/computer.png
     children:
+      -
+        id: 7cc6dfce-6e71-4bfa-b2fd-609defcf02ad
+        title: 'Learn Statamic'
+        url: /
       -
         id: 0bbf1af8-f694-43bf-b8de-6d8c5977d3b7
         entry: 792644d2-8bd2-421d-a080-e0be7fca125c
@@ -25,6 +32,8 @@ tree:
   -
     id: 561b2475-a98a-498d-8cbe-2de46e8f5d06
     title: 'Core Concepts'
+    data:
+      navigation_image: navigation/triforce.png
     children:
       -
         id: f03ca036-43d5-4bcb-ba03-260732fdf163
@@ -63,10 +72,10 @@ tree:
   -
     id: 3c6081eb-746f-44f0-ae90-fffec9fdef9f
     title: 'Diving Deeper'
+    data:
+      navigation_image: navigation/sunglasses.png
+      image_width_override: 1.8em
     children:
-      -
-        id: 3f14ccd7-1f64-43c4-a340-124594e434f0
-        entry: a66f3e5f-5a60-44c4-8c1d-a9d9692366c0
       -
         id: 50484ca7-40d5-4504-9f8f-adc8d6557a19
         entry: 9b2f6f55-5355-4334-b90d-d1236fb58887
@@ -118,12 +127,18 @@ tree:
       -
         id: 716bb7b8-952a-45b7-9c20-24c4e0a24e43
         entry: ffa24da8-3fee-4fc9-a81b-fcae8917bd74
+      -
+        id: a6408363-0492-4df1-86a1-98cef1205f54
+        entry: 0df63f01-4b97-4c15-89a9-015c02ea3748
       -
         id: 29526fd0-a0a1-11ec-b230-0800200c9a66
         entry: 268d444c-88e3-4b52-bfc6-165749ef3ec1
   -
     id: 0cbb901d-581c-433f-b873-1256c70d2f5c
     title: Frontend
+    data:
+      navigation_image: navigation/nike-air-jordans.png
+      image_width_override: 1.8em
     children:
       -
         id: 6482b878-b8eb-4114-886e-dc8c9eb277b8
@@ -179,6 +194,8 @@ tree:
   -
     id: 1a3486df-4c42-447e-bd1e-0f4d048cf63e
     title: 'Control Panel'
+    data:
+      navigation_image: navigation/rubiks-cube.png
     children:
       -
         id: 8b7e584d-91ba-46f0-a5f5-feccb02a70ed
@@ -221,6 +238,9 @@ tree:
   -
     id: 54d885ee-1b58-41ed-9268-baca6e83e9e8
     title: Addons
+    data:
+      navigation_image: navigation/lego.png
+      image_width_override: 1.8em
     children:
       -
         id: dae0a662-0a66-4a4f-8d2a-b63c2eaf8f65
@@ -229,6 +249,9 @@ tree:
   -
     id: 6e285cb4-23db-4817-abc6-1c76a08def33
     title: 'Starter Kits'
+    data:
+      navigation_image: navigation/indiana-jones.png
+      image_width_override: 1.8em
     children:
       -
         id: a4591991-324c-4678-9993-a735d09269ed
@@ -237,13 +260,25 @@ tree:
       -
         id: a6efd593-b837-46c8-8a36-7bd4b509cf0c
         entry: c51a5de8-4b02-4240-8195-3ff7987c43cf
+      -
+        id: c00f0b6d-2cae-4707-af04-a62cf78a2ca8
+        entry: 512cbb65-0091-47e2-a3b6-c42aae64349e
       -
         id: f36f50e5-1935-4203-8c02-4d71965a4d2c
         entry: 9c703f43-30de-4f65-98bb-2b89f80012b7
   -
     id: ae5c17c7-dbde-489f-a1ef-50ac1206a44f
     title: Resources
+    data:
+      navigation_image: navigation/toucan.png
+      image_width_override: 2.25em
     children:
+      -
+        id: 02927095-6b41-4832-aaa6-3d2ca40c9eee
+        entry: e947dc19-9a8a-44c2-911c-171d1f196c91
+      -
+        id: 5bc6420e-de7b-4574-822c-0f3a1470b24e
+        entry: 550e7bf1-de6e-40ba-9b06-b32d9119e436
       -
         id: 2cfa8593-cb18-4370-aa24-8c2408b59c87
         entry: 0efc0286-bfb1-4d54-8a94-8589b35adf88
@@ -253,6 +288,9 @@ tree:
       -
         id: bfc8f09a-19f7-46af-88bc-a30dc504a71d
         entry: 56fadb93-b846-4867-ad73-4f721cc940c2
+      -
+        id: 95b57069-5325-4603-8a37-56000633d14f
+        entry: c9ee871c-002b-48d7-b845-1abac58de337
       -
         id: 585e9861-1e2b-4dd2-9bef-61109f867660
         entry: b6c40452-8da0-4f03-a53c-714cc3338b9d
diff --git a/content/trees/navigation/extending_docs.yaml b/content/trees/navigation/extending_docs.yaml
index 92728e68d..07315d4ee 100644
--- a/content/trees/navigation/extending_docs.yaml
+++ b/content/trees/navigation/extending_docs.yaml
@@ -5,6 +5,9 @@ tree:
   -
     id: c21a6b97-f7a1-47cf-9356-f3a9a2954050
     title: Front-end
+    data:
+      navigation_image: navigation/nike-air-jordans.png
+      image_width_override: 2.1em
     children:
       -
         id: 9d692c0e-df82-463d-af3c-b355a28d91dc
@@ -21,6 +24,8 @@ tree:
   -
     id: affc2001-e4f5-4e06-9e00-58dd88edbb6e
     title: 'Control Panel'
+    data:
+      navigation_image: navigation/rubiks-cube.png
     children:
       -
         id: d5214ec3-c89f-4889-8f14-ed2b65a899d6
@@ -39,14 +44,20 @@ tree:
         entry: 785ffa10-8b63-44b1-9da3-3837250cacbe
       -
         id: 0cdd7170-92ad-11ed-b05e-0800200c9a66
-        url: /preferences#adding-fields
+        url: '/preferences#adding-fields'
         title: Preferences
       -
         id: 9e649d17-d0b2-48a9-abf4-534c38c0c7ce
         entry: ba2e6172-b4dc-443b-8230-b770dec1423c
+      -
+        id: f0e082dc-70e7-413a-8d92-4fab03ea447b
+        entry: 41e386b3-9df9-4d28-9338-8005399f953c
       -
         id: 7e4f5154-4499-40a4-929a-92fb81f10bb8
         entry: aa6e0a79-9d3f-493b-92c9-df4d2257bc64
+      -
+        id: 270cf2ba-ceb6-499d-b1f0-e548a1aed282
+        entry: d0668b6e-915b-46da-863e-51fec54b02e2
       -
         id: 044b4ef5-5809-4bde-8988-ca680199926d
         entry: b4b46ceb-9feb-4587-8f0d-2080511bf9e3
@@ -59,6 +70,9 @@ tree:
   -
     id: 73354789-cbf2-4bee-ab86-b289d748a64d
     title: Javascript
+    data:
+      navigation_image: navigation/joystick.png
+      image_width_override: 1.75em
     children:
       -
         id: b598494b-6e08-4d10-8fb7-7fd6f20a4a20
@@ -98,11 +112,13 @@ tree:
         entry: e2577828-504b-490b-a8b6-10991ae8a0b6
       -
         id: 37a82f80-92ad-11ed-b05e-0800200c9a66
-        url: /preferences#using-javascript
+        url: '/preferences#using-javascript'
         title: Preferences
   -
     id: a6b12519-6352-452b-9daf-b7dd76880fb2
     title: 'Core & Data'
+    data:
+      navigation_image: navigation/triforce.png
     children:
       -
         id: 2a1a9358-2ad6-40d0-9022-78257abc64a9
@@ -122,6 +138,9 @@ tree:
       -
         id: 48880724-6101-45a8-9286-5ee646645583
         entry: 6843f6e9-ac62-4128-8d50-887560f201ca
+      -
+        id: 10747789-6efc-427b-bd68-fbf0d5b704db
+        entry: 900414a8-f73a-46f0-82bd-b607767f5d5d
       -
         id: ae81c6b6-e582-44a4-a1e8-b85de3e06635
         entry: fd34ca35-57d1-4d28-97f9-ba6801656b39
@@ -135,7 +154,17 @@ tree:
     id: ba853a27-7829-4663-83e0-b762a96d109a
     title: Addons
     url: /extending/addons
+    data:
+      navigation_image: navigation/lego.png
+      image_width_override: 2.1em
     children:
       -
         id: 9519cca9-4afd-4143-b949-090f209a57e4
         entry: 5bd75435-806e-458b-872e-7528f24df7e6
+      -
+        id: a7f60530-f033-11ed-afc5-0800200c9a66
+        entry: 5f26a634-19ae-4413-8b9e-1ed9c2c76bb0
+        title: Vite
+      -
+        id: c08f0634-c324-4320-a698-e5098eaaf6a1
+        entry: 15db07e8-6e83-4b6e-89bb-d050b5d2c823
diff --git a/content/trees/navigation/reference.yaml b/content/trees/navigation/reference.yaml
index cfd57d745..3c42805e2 100644
--- a/content/trees/navigation/reference.yaml
+++ b/content/trees/navigation/reference.yaml
@@ -2,18 +2,51 @@ tree:
   -
     id: 25143313-bcc5-4897-a16f-16b4b4fb42b4
     entry: 5a8fe626-b073-41fc-8da4-264b54837600
+    data:
+      navigation_image: navigation/fieldtypes.png
+      navigation_image_dark_mode: navigation/fieldtypes-dark-mode.png
+      image_width_override: 2.4em
+      tile_image: tiles/fieldtypes.png
+      tile_image_dark_mode: tiles/fieldtypes-dark-mode.png
+      hue_rotate: hue_rotate_2
   -
     id: 6241c501-22d8-420d-8202-46c152c3a4d7
     entry: a4bc698a-5971-474d-a19c-0c43c0d641b9
+    title: Modifiers
+    data:
+      navigation_image: navigation/eyes.png
+      image_width_override: 2.4em
+      tile_image: tiles/modifiers.png
+      hue_rotate: hue_rotate_1
   -
     id: da835fbd-8687-4c91-abaa-d59bc88dbdd2
     entry: 082e1db7-7b52-4b92-a8bf-4c51ce7d741c
+    data:
+      navigation_image: tiles/repositories.png
+      image_width_override: 2.5em
+      tile_image: tiles/repositories.png
+      hue_rotate: hue_rotate_1
   -
     id: 4066b00a-98c2-4bbb-b762-f6f5d0835d78
     entry: 710810c7-f710-4364-a6e4-cedf8c292d88
+    data:
+      navigation_image: tiles/tags.png
+      image_width_override: 2.5em
+      tile_image: tiles/tags.png
+      hue_rotate: hue_rotate_2
   -
     id: f12c6a80-2078-4d59-b3bc-c7970cfe791d
     entry: 03cf195b-2030-43c1-a6f3-039fa55ffd6a
+    data:
+      navigation_image: tiles/variables.png
+      image_width_override: 2.75em
+      tile_image: tiles/variables.png
+      hue_rotate: hue_rotate_2
   -
     id: 43aa419f-3855-42f5-bd74-acf8925989ea
     entry: 565f0285-43b1-41d2-935c-e52ad00c012c
+    data:
+      navigation_image: tiles/widgets.png
+      image_width_override: 2.5em
+      tile_image: tiles/widgets.png
+      hue_rotate: hue_rotate_2
diff --git a/resources/lang/en/auth.php b/lang/en/auth.php
similarity index 100%
rename from resources/lang/en/auth.php
rename to lang/en/auth.php
diff --git a/resources/lang/en/pagination.php b/lang/en/pagination.php
similarity index 100%
rename from resources/lang/en/pagination.php
rename to lang/en/pagination.php
diff --git a/resources/lang/en/passwords.php b/lang/en/passwords.php
similarity index 100%
rename from resources/lang/en/passwords.php
rename to lang/en/passwords.php
diff --git a/resources/lang/en/validation.php b/lang/en/validation.php
similarity index 100%
rename from resources/lang/en/validation.php
rename to lang/en/validation.php
diff --git a/package-lock.json b/package-lock.json
index aa8b32bfd..be3f107ec 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,10896 +1,2053 @@
 {
+    "name": "docs",
+    "lockfileVersion": 3,
     "requires": true,
-    "lockfileVersion": 1,
-    "dependencies": {
-        "@algolia/autocomplete-core": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.2.2.tgz",
-            "integrity": "sha512-JOQaURze45qVa8OOFDh+ozj2a/ObSRsVyz6Zd0aiBeej+RSTqrr1hDVpGNbbXYLW26G5ujuc9QIdH+rBHn95nw==",
-            "requires": {
-                "@algolia/autocomplete-shared": "1.2.2"
+    "packages": {
+        "": {
+            "dependencies": {
+                "@docsearch/js": "^3.0.0-alpha.40",
+                "dayjs": "^1.10.7",
+                "meilisearch-docsearch": "^0.7.1"
+            },
+            "devDependencies": {
+                "@alpinejs/intersect": "^3.14.1",
+                "@alpinejs/persist": "^3.14.1",
+                "@vitejs/plugin-vue2": "^2.3.1",
+                "alpinejs": "^3.2.4",
+                "autoprefixer": "^10.4.20",
+                "axios": "^0.30",
+                "laravel-vite-plugin": "^1.0.5",
+                "lodash": "^4.17.19",
+                "postcss": "^8.4.47",
+                "postcss-import": "^15.1.0",
+                "postcss-nesting": "^12.1.5",
+                "vite": "5.4.11"
             }
         },
-        "@algolia/autocomplete-preset-algolia": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.2.tgz",
-            "integrity": "sha512-AZkh+bAMaJDzMZTelFOXJTJqkp5VPGH8W3n0B+Ggce7DdozlMRsDLguKTCQAkZ0dJ1EbBPyFL5ztL/JImB137Q==",
-            "requires": {
-                "@algolia/autocomplete-shared": "1.2.2"
+        "node_modules/@algolia/autocomplete-core": {
+            "version": "1.17.9",
+            "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz",
+            "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==",
+            "dependencies": {
+                "@algolia/autocomplete-plugin-algolia-insights": "1.17.9",
+                "@algolia/autocomplete-shared": "1.17.9"
             }
         },
-        "@algolia/autocomplete-shared": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.2.tgz",
-            "integrity": "sha512-mLTl7d2C1xVVazHt/bqh9EE/u2lbp5YOxLDdcjILXmUqOs5HH1D4SuySblXaQG1uf28FhTqMGp35qE5wJQnqAw=="
-        },
-        "@algolia/cache-browser-local-storage": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.5.tgz",
-            "integrity": "sha512-cfX2rEKOtuuljcGI5DMDHClwZHdDqd2nT2Ohsc8aHtBiz6bUxKVyIqxr2gaC6tU8AgPtrTVBzcxCA+UavXpKww==",
-            "requires": {
-                "@algolia/cache-common": "4.10.5"
+        "node_modules/@algolia/autocomplete-plugin-algolia-insights": {
+            "version": "1.17.9",
+            "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz",
+            "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==",
+            "dependencies": {
+                "@algolia/autocomplete-shared": "1.17.9"
+            },
+            "peerDependencies": {
+                "search-insights": ">= 1 < 3"
             }
         },
-        "@algolia/cache-common": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.5.tgz",
-            "integrity": "sha512-1mClwdmTHll+OnHkG+yeRoFM17kSxDs4qXkjf6rNZhoZGXDvfYLy3YcZ1FX4Kyz0DJv8aroq5RYGBDsWkHj6Tw=="
-        },
-        "@algolia/cache-in-memory": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.5.tgz",
-            "integrity": "sha512-+ciQnfIGi5wjMk02XhEY8fmy2pzy+oY1nIIfu8LBOglaSipCRAtjk6WhHc7/KIbXPiYzIwuDbM2K1+YOwSGjwA==",
-            "requires": {
-                "@algolia/cache-common": "4.10.5"
+        "node_modules/@algolia/autocomplete-preset-algolia": {
+            "version": "1.17.9",
+            "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz",
+            "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==",
+            "dependencies": {
+                "@algolia/autocomplete-shared": "1.17.9"
+            },
+            "peerDependencies": {
+                "@algolia/client-search": ">= 4.9.1 < 6",
+                "algoliasearch": ">= 4.9.1 < 6"
             }
         },
-        "@algolia/client-account": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.5.tgz",
-            "integrity": "sha512-I9UkSS2glXm7RBZYZIALjBMmXSQbw/fI/djPcBHxiwXIheNIlqIFl2SNPkvihpPF979BSkzjqdJNRPhE1vku3Q==",
-            "requires": {
-                "@algolia/client-common": "4.10.5",
-                "@algolia/client-search": "4.10.5",
-                "@algolia/transporter": "4.10.5"
+        "node_modules/@algolia/autocomplete-shared": {
+            "version": "1.17.9",
+            "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz",
+            "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==",
+            "peerDependencies": {
+                "@algolia/client-search": ">= 4.9.1 < 6",
+                "algoliasearch": ">= 4.9.1 < 6"
             }
         },
-        "@algolia/client-analytics": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.5.tgz",
-            "integrity": "sha512-h2owwJSkovPxzc+xIsjY1pMl0gj+jdVwP9rcnGjlaTY2fqHbSLrR9yvGyyr6305LvTppxsQnfAbRdE/5Z3eFxw==",
-            "requires": {
-                "@algolia/client-common": "4.10.5",
-                "@algolia/client-search": "4.10.5",
-                "@algolia/requester-common": "4.10.5",
-                "@algolia/transporter": "4.10.5"
+        "node_modules/@algolia/client-abtesting": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.23.2.tgz",
+            "integrity": "sha512-EudQGeYEzviwqPH8WoqP5VTQssE/PW6sEdL0zzOyKt2bWnWoUp5Rnm67sCbxYDR44JpUchbkul0PfWrSYsBPjQ==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@algolia/client-common": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.5.tgz",
-            "integrity": "sha512-21FAvIai5qm8DVmZHm2Gp4LssQ/a0nWwMchAx+1hIRj1TX7OcdW6oZDPyZ8asQdvTtK7rStQrRnD8a95SCUnzA==",
-            "requires": {
-                "@algolia/requester-common": "4.10.5",
-                "@algolia/transporter": "4.10.5"
+        "node_modules/@algolia/client-analytics": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.23.2.tgz",
+            "integrity": "sha512-zmJrkZqWFu+ft+VRcttZZJhw5ElkhBtOArRzQOu9sRnrSSodBOdPRhAfvu8tG93Hv67wh5qQaTBwLxM58AxuMg==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@algolia/client-personalization": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.5.tgz",
-            "integrity": "sha512-nH+IyFKBi8tCyzGOanJTbXC5t4dspSovX3+ABfmwKWUYllYzmiQNFUadpb3qo+MLA3jFx5IwBesjneN6dD5o3w==",
-            "requires": {
-                "@algolia/client-common": "4.10.5",
-                "@algolia/requester-common": "4.10.5",
-                "@algolia/transporter": "4.10.5"
+        "node_modules/@algolia/client-common": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.23.2.tgz",
+            "integrity": "sha512-xaE6o4BMdqYBe0iB7JjX6G9/Qeqx6TSs9T4d6VJ0JHPsEyklSwIbKRiomPeYD7vzt2P4t45Io6QBhifOUP+0qg==",
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@algolia/client-search": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.5.tgz",
-            "integrity": "sha512-1eQFMz9uodrc5OM+9HeT+hHcfR1E1AsgFWXwyJ9Q3xejA2c1c4eObGgOgC9ZoshuHHdptaTN1m3rexqAxXRDBg==",
-            "requires": {
-                "@algolia/client-common": "4.10.5",
-                "@algolia/requester-common": "4.10.5",
-                "@algolia/transporter": "4.10.5"
+        "node_modules/@algolia/client-insights": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.23.2.tgz",
+            "integrity": "sha512-F85hpMszbr5ZGt8gFdl7WOugELRF4z3R1nD9n3t7PZ/2alV7IR75UQY8/jMQDwij/lrnVaKbLeIvKKy6K7ncZw==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@algolia/logger-common": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.5.tgz",
-            "integrity": "sha512-gRJo9zt1UYP4k3woEmZm4iuEBIQd/FrArIsjzsL/b+ihNoOqIxZKTSuGFU4UUZOEhvmxDReiA4gzvQXG+TMTmA=="
-        },
-        "@algolia/logger-console": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.5.tgz",
-            "integrity": "sha512-4WfIbn4253EDU12u9UiYvz+QTvAXDv39mKNg9xSoMCjKE5szcQxfcSczw2byc6pYhahOJ9PmxPBfs1doqsdTKQ==",
-            "requires": {
-                "@algolia/logger-common": "4.10.5"
+        "node_modules/@algolia/client-personalization": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.23.2.tgz",
+            "integrity": "sha512-TuGaGKiQvQqFNR4c3Vdl+JBe6dkEPmRzVyIdWLrurOPEmFmVCKRxtSnLr0TVFl6de/JfDAXuchvtvLHFxv9P2A==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@algolia/requester-browser-xhr": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.5.tgz",
-            "integrity": "sha512-53/MURQEqtK+bGdfq4ITSPwTh5hnADU99qzvpAINGQveUFNSFGERipJxHjTJjIrjFz3vxj5kKwjtxDnU6ygO9g==",
-            "requires": {
-                "@algolia/requester-common": "4.10.5"
+        "node_modules/@algolia/client-query-suggestions": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.23.2.tgz",
+            "integrity": "sha512-fg2tZf7Sf51Icjfrea0dnfbfwlJ7kXMcRsWSJN3DZhEi/Y4mMmK9L0Cq8sby6HDzxy5T8xEWNWC3TMx5FvrJ6w==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@algolia/requester-common": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.5.tgz",
-            "integrity": "sha512-UkVa1Oyuj6NPiAEt5ZvrbVopEv1m/mKqjs40KLB+dvfZnNcj+9Fry4Oxnt15HMy/HLORXsx4UwcthAvBuOXE9Q=="
-        },
-        "@algolia/requester-node-http": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.5.tgz",
-            "integrity": "sha512-aNEKVKXL4fiiC+bS7yJwAHdxln81ieBwY3tsMCtM4zF9f5KwCzY2OtN4WKEZa5AAADVcghSAUdyjs4AcGUlO5w==",
-            "requires": {
-                "@algolia/requester-common": "4.10.5"
+        "node_modules/@algolia/client-search": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.23.2.tgz",
+            "integrity": "sha512-XiTjt0qgsJk9OqvDpMwTgUaPAYNSQcMILRfSYiorgiyc71yYM7Lq1vRSVxhB0m51mrViWj4rIR6kSiJRXebqvQ==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@algolia/transporter": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.5.tgz",
-            "integrity": "sha512-F8DLkmIlvCoMwSCZA3FKHtmdjH3o5clbt0pi2ktFStVNpC6ZDmY307HcK619bKP5xW6h8sVJhcvrLB775D2cyA==",
-            "requires": {
-                "@algolia/cache-common": "4.10.5",
-                "@algolia/logger-common": "4.10.5",
-                "@algolia/requester-common": "4.10.5"
+        "node_modules/@algolia/ingestion": {
+            "version": "1.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.23.2.tgz",
+            "integrity": "sha512-7ClIghvUFZTomBipD8Kor9Z5llcAM3lHUBG3VFOvUsOxOJcaMMONlBXyoFDfI1na+u14lVaGehY2oIEfY1eB0w==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@babel/code-frame": {
-            "version": "7.12.11",
-            "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
-            "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
-            "dev": true,
-            "requires": {
-                "@babel/highlight": "^7.10.4"
+        "node_modules/@algolia/monitoring": {
+            "version": "1.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.23.2.tgz",
+            "integrity": "sha512-kF7KKd0iIIlaD70flFS+8+DNxRvIzrG9A22iWG5LDX225Kl6pITroq+qIUweqqyyoqJBYuIXKZGDGtnahEwQxw==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@babel/compat-data": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
-            "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
-            "dev": true
-        },
-        "@babel/core": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz",
-            "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==",
-            "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.14.5",
-                "@babel/generator": "^7.15.0",
-                "@babel/helper-compilation-targets": "^7.15.0",
-                "@babel/helper-module-transforms": "^7.15.0",
-                "@babel/helpers": "^7.14.8",
-                "@babel/parser": "^7.15.0",
-                "@babel/template": "^7.14.5",
-                "@babel/traverse": "^7.15.0",
-                "@babel/types": "^7.15.0",
-                "convert-source-map": "^1.7.0",
-                "debug": "^4.1.0",
-                "gensync": "^1.0.0-beta.2",
-                "json5": "^2.1.2",
-                "semver": "^6.3.0",
-                "source-map": "^0.5.0"
+        "node_modules/@algolia/recommend": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.23.2.tgz",
+            "integrity": "sha512-nAgS2O5ww8J4fgW6GAiybAdr0uH7MV74srPdx51cPJRpQBEge4WnYBaOWx1/a53qI0xwNtQudnEyBGUzsSYaAw==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
             },
+            "engines": {
+                "node": ">= 14.0.0"
+            }
+        },
+        "node_modules/@algolia/requester-browser-xhr": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.23.2.tgz",
+            "integrity": "sha512-yw6IzgQcwr4cZuoQCEoQui9G0rhVRGCyhPhW+gmrXe6oVr4qB50FV6mWGLA170+iqGVjPn/DVuOhExjBzcViTQ==",
             "dependencies": {
-                "@babel/code-frame": {
-                    "version": "7.14.5",
-                    "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
-                    "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/highlight": "^7.14.5"
-                    }
-                },
-                "@babel/helper-validator-identifier": {
-                    "version": "7.14.9",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-                    "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
-                    "dev": true
-                },
-                "@babel/highlight": {
-                    "version": "7.14.5",
-                    "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
-                    "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/helper-validator-identifier": "^7.14.5",
-                        "chalk": "^2.0.0",
-                        "js-tokens": "^4.0.0"
-                    }
-                },
-                "semver": {
-                    "version": "6.3.0",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-                    "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-                    "dev": true
-                },
-                "source-map": {
-                    "version": "0.5.7",
-                    "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-                    "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-                    "dev": true
-                }
+                "@algolia/client-common": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@babel/generator": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz",
-            "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.15.0",
-                "jsesc": "^2.5.1",
-                "source-map": "^0.5.0"
+        "node_modules/@algolia/requester-fetch": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.23.2.tgz",
+            "integrity": "sha512-8rmSybTwIqmGx3P0qkOEUkkyeIewglaKq6yUnxnVkBJbd4USfIZsw9cME1YUEHeZI7aOhTQg9QteUHSKXclF5A==",
+            "dependencies": {
+                "@algolia/client-common": "5.23.2"
             },
+            "engines": {
+                "node": ">= 14.0.0"
+            }
+        },
+        "node_modules/@algolia/requester-node-http": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.23.2.tgz",
+            "integrity": "sha512-IHpUiW3d3oVE5tCYqQN7X71/EbXI7f8WxU85eWW1UYEWEknqW3csdGctyIW7+qMHFfxeDymI1Wln/gGHHIXLIw==",
             "dependencies": {
-                "source-map": {
-                    "version": "0.5.7",
-                    "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-                    "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-                    "dev": true
-                }
+                "@algolia/client-common": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@babel/helper-annotate-as-pure": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz",
-            "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==",
+        "node_modules/@alpinejs/intersect": {
+            "version": "3.14.9",
+            "resolved": "https://registry.npmjs.org/@alpinejs/intersect/-/intersect-3.14.9.tgz",
+            "integrity": "sha512-6LLIqrESA5kxuTbDJshtItfHmZoiiDOpf8lOeRrNtYjSj/FkggDpnjD+ZFGF5btEOVSpWic2VmG2BejR/aMxDw==",
+            "dev": true
+        },
+        "node_modules/@alpinejs/persist": {
+            "version": "3.14.9",
+            "resolved": "https://registry.npmjs.org/@alpinejs/persist/-/persist-3.14.9.tgz",
+            "integrity": "sha512-Td9hWEUtFFguYCRjXhq06sDultW21wXUnVro7YWJm+vjGu/nV/v3hepOXyYVjkGvH/F+zjx5UkzWXXzr3UiQ/w==",
+            "dev": true
+        },
+        "node_modules/@babel/helper-string-parser": {
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+            "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.14.5"
+            "peer": true,
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/helper-builder-binary-assignment-operator-visitor": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz",
-            "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==",
+        "node_modules/@babel/helper-validator-identifier": {
+            "version": "7.25.9",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+            "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
             "dev": true,
-            "requires": {
-                "@babel/helper-explode-assignable-expression": "^7.14.5",
-                "@babel/types": "^7.14.5"
+            "peer": true,
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/helper-compilation-targets": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz",
-            "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==",
+        "node_modules/@babel/parser": {
+            "version": "7.27.0",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
+            "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
             "dev": true,
-            "requires": {
-                "@babel/compat-data": "^7.15.0",
-                "@babel/helper-validator-option": "^7.14.5",
-                "browserslist": "^4.16.6",
-                "semver": "^6.3.0"
-            },
+            "peer": true,
             "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A=="
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                },
-                "semver": {
-                    "version": "6.3.0",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-                    "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-                    "dev": true
-                }
+                "@babel/types": "^7.27.0"
+            },
+            "bin": {
+                "parser": "bin/babel-parser.js"
+            },
+            "engines": {
+                "node": ">=6.0.0"
             }
         },
-        "@babel/helper-create-class-features-plugin": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz",
-            "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==",
+        "node_modules/@babel/types": {
+            "version": "7.27.0",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
+            "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
             "dev": true,
-            "requires": {
-                "@babel/helper-annotate-as-pure": "^7.14.5",
-                "@babel/helper-function-name": "^7.14.5",
-                "@babel/helper-member-expression-to-functions": "^7.15.0",
-                "@babel/helper-optimise-call-expression": "^7.14.5",
-                "@babel/helper-replace-supers": "^7.15.0",
-                "@babel/helper-split-export-declaration": "^7.14.5"
+            "peer": true,
+            "dependencies": {
+                "@babel/helper-string-parser": "^7.25.9",
+                "@babel/helper-validator-identifier": "^7.25.9"
+            },
+            "engines": {
+                "node": ">=6.9.0"
             }
         },
-        "@babel/helper-create-regexp-features-plugin": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz",
-            "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==",
+        "node_modules/@csstools/selector-resolve-nested": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz",
+            "integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==",
             "dev": true,
-            "requires": {
-                "@babel/helper-annotate-as-pure": "^7.14.5",
-                "regexpu-core": "^4.7.1"
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools"
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools"
+                }
+            ],
+            "engines": {
+                "node": "^14 || ^16 || >=18"
+            },
+            "peerDependencies": {
+                "postcss-selector-parser": "^6.0.13"
             }
         },
-        "@babel/helper-define-polyfill-provider": {
-            "version": "0.2.3",
-            "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz",
-            "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==",
+        "node_modules/@csstools/selector-specificity": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
+            "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
             "dev": true,
-            "requires": {
-                "@babel/helper-compilation-targets": "^7.13.0",
-                "@babel/helper-module-imports": "^7.12.13",
-                "@babel/helper-plugin-utils": "^7.13.0",
-                "@babel/traverse": "^7.13.0",
-                "debug": "^4.1.1",
-                "lodash.debounce": "^4.0.8",
-                "resolve": "^1.14.2",
-                "semver": "^6.1.2"
-            },
-            "dependencies": {
-                "resolve": {
-                    "version": "1.20.0",
-                    "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
-                    "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
-                    "dev": true,
-                    "requires": {
-                        "is-core-module": "^2.2.0",
-                        "path-parse": "^1.0.6"
-                    }
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools"
                 },
-                "semver": {
-                    "version": "6.3.0",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-                    "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-                    "dev": true
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools"
                 }
+            ],
+            "engines": {
+                "node": "^14 || ^16 || >=18"
+            },
+            "peerDependencies": {
+                "postcss-selector-parser": "^6.0.13"
             }
         },
-        "@babel/helper-explode-assignable-expression": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz",
-            "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.14.5"
-            }
+        "node_modules/@docsearch/css": {
+            "version": "3.9.0",
+            "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz",
+            "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA=="
         },
-        "@babel/helper-function-name": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz",
-            "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-get-function-arity": "^7.14.5",
-                "@babel/template": "^7.14.5",
-                "@babel/types": "^7.14.5"
+        "node_modules/@docsearch/js": {
+            "version": "3.9.0",
+            "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.9.0.tgz",
+            "integrity": "sha512-4bKHcye6EkLgRE8ze0vcdshmEqxeiJM77M0JXjef7lrYZfSlMunrDOCqyLjiZyo1+c0BhUqA2QpFartIjuHIjw==",
+            "dependencies": {
+                "@docsearch/react": "3.9.0",
+                "preact": "^10.0.0"
             }
         },
-        "@babel/helper-get-function-arity": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz",
-            "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.14.5"
+        "node_modules/@docsearch/react": {
+            "version": "3.9.0",
+            "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz",
+            "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==",
+            "dependencies": {
+                "@algolia/autocomplete-core": "1.17.9",
+                "@algolia/autocomplete-preset-algolia": "1.17.9",
+                "@docsearch/css": "3.9.0",
+                "algoliasearch": "^5.14.2"
+            },
+            "peerDependencies": {
+                "@types/react": ">= 16.8.0 < 20.0.0",
+                "react": ">= 16.8.0 < 20.0.0",
+                "react-dom": ">= 16.8.0 < 20.0.0",
+                "search-insights": ">= 1 < 3"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "react": {
+                    "optional": true
+                },
+                "react-dom": {
+                    "optional": true
+                },
+                "search-insights": {
+                    "optional": true
+                }
             }
         },
-        "@babel/helper-hoist-variables": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz",
-            "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==",
+        "node_modules/@esbuild/aix-ppc64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+            "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+            "cpu": [
+                "ppc64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "aix"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/android-arm": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+            "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+            "cpu": [
+                "arm"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/android-arm64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+            "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/android-x64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+            "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "android"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/darwin-arm64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+            "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/darwin-x64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+            "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/freebsd-arm64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+            "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "freebsd"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/freebsd-x64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+            "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "freebsd"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/linux-arm": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+            "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+            "cpu": [
+                "arm"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/linux-arm64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+            "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/linux-ia32": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+            "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+            "cpu": [
+                "ia32"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/linux-loong64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+            "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+            "cpu": [
+                "loong64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/linux-mips64el": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+            "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+            "cpu": [
+                "mips64el"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/linux-ppc64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+            "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+            "cpu": [
+                "ppc64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/linux-riscv64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+            "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+            "cpu": [
+                "riscv64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/linux-s390x": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+            "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+            "cpu": [
+                "s390x"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/linux-x64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+            "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/netbsd-x64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+            "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "netbsd"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/openbsd-x64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+            "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "openbsd"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/sunos-x64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+            "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "sunos"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/win32-arm64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+            "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "win32"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/win32-ia32": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+            "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+            "cpu": [
+                "ia32"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "win32"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@esbuild/win32-x64": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+            "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "win32"
+            ],
+            "engines": {
+                "node": ">=12"
+            }
+        },
+        "node_modules/@rollup/rollup-android-arm-eabi": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz",
+            "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==",
+            "cpu": [
+                "arm"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "android"
+            ]
+        },
+        "node_modules/@rollup/rollup-android-arm64": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz",
+            "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "android"
+            ]
+        },
+        "node_modules/@rollup/rollup-darwin-arm64": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz",
+            "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ]
+        },
+        "node_modules/@rollup/rollup-darwin-x64": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz",
+            "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ]
+        },
+        "node_modules/@rollup/rollup-freebsd-arm64": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz",
+            "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "freebsd"
+            ]
+        },
+        "node_modules/@rollup/rollup-freebsd-x64": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz",
+            "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "freebsd"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz",
+            "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==",
+            "cpu": [
+                "arm"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz",
+            "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==",
+            "cpu": [
+                "arm"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-arm64-gnu": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz",
+            "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-arm64-musl": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz",
+            "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz",
+            "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==",
+            "cpu": [
+                "loong64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz",
+            "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==",
+            "cpu": [
+                "ppc64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz",
+            "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==",
+            "cpu": [
+                "riscv64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-riscv64-musl": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz",
+            "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==",
+            "cpu": [
+                "riscv64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-s390x-gnu": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz",
+            "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==",
+            "cpu": [
+                "s390x"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-x64-gnu": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz",
+            "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-linux-x64-musl": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz",
+            "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "linux"
+            ]
+        },
+        "node_modules/@rollup/rollup-win32-arm64-msvc": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz",
+            "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==",
+            "cpu": [
+                "arm64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "win32"
+            ]
+        },
+        "node_modules/@rollup/rollup-win32-ia32-msvc": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz",
+            "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==",
+            "cpu": [
+                "ia32"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "win32"
+            ]
+        },
+        "node_modules/@rollup/rollup-win32-x64-msvc": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz",
+            "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==",
+            "cpu": [
+                "x64"
+            ],
+            "dev": true,
+            "optional": true,
+            "os": [
+                "win32"
+            ]
+        },
+        "node_modules/@types/estree": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
+            "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+            "dev": true
+        },
+        "node_modules/@vitejs/plugin-vue2": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.3.3.tgz",
+            "integrity": "sha512-qexY6+bbwY8h0AZerzUuGywNTi0cLOkbiSbggr0R3WEW95iB2hblQFyv4MAkkc2vm4gZN1cO5kzT1Kp6xlVzZw==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.14.5"
+            "engines": {
+                "node": "^14.18.0 || >= 16.0.0"
+            },
+            "peerDependencies": {
+                "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
+                "vue": "^2.7.0-0"
             }
         },
-        "@babel/helper-member-expression-to-functions": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz",
-            "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==",
+        "node_modules/@vue/compiler-sfc": {
+            "version": "2.7.16",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
+            "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.15.0"
+            "peer": true,
+            "dependencies": {
+                "@babel/parser": "^7.23.5",
+                "postcss": "^8.4.14",
+                "source-map": "^0.6.1"
+            },
+            "optionalDependencies": {
+                "prettier": "^1.18.2 || ^2.0.0"
             }
         },
-        "@babel/helper-module-imports": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
-            "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
+        "node_modules/@vue/reactivity": {
+            "version": "3.1.5",
+            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
+            "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.14.5"
+            "dependencies": {
+                "@vue/shared": "3.1.5"
             }
         },
-        "@babel/helper-module-transforms": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz",
-            "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-imports": "^7.14.5",
-                "@babel/helper-replace-supers": "^7.15.0",
-                "@babel/helper-simple-access": "^7.14.8",
-                "@babel/helper-split-export-declaration": "^7.14.5",
-                "@babel/helper-validator-identifier": "^7.14.9",
-                "@babel/template": "^7.14.5",
-                "@babel/traverse": "^7.15.0",
-                "@babel/types": "^7.15.0"
-            },
+        "node_modules/@vue/shared": {
+            "version": "3.1.5",
+            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
+            "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==",
+            "dev": true
+        },
+        "node_modules/algoliasearch": {
+            "version": "5.23.2",
+            "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.23.2.tgz",
+            "integrity": "sha512-IhKP22Czzg8Y9HaF6aIb5aAHK2HBj4VAzLLnKEPUnxqDwxpryH9sXbm0NkeY7Cby9GlF81wF+AG/VulKDFBphg==",
             "dependencies": {
-                "@babel/helper-validator-identifier": {
-                    "version": "7.14.9",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-                    "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
-                    "dev": true
-                }
+                "@algolia/client-abtesting": "5.23.2",
+                "@algolia/client-analytics": "5.23.2",
+                "@algolia/client-common": "5.23.2",
+                "@algolia/client-insights": "5.23.2",
+                "@algolia/client-personalization": "5.23.2",
+                "@algolia/client-query-suggestions": "5.23.2",
+                "@algolia/client-search": "5.23.2",
+                "@algolia/ingestion": "1.23.2",
+                "@algolia/monitoring": "1.23.2",
+                "@algolia/recommend": "5.23.2",
+                "@algolia/requester-browser-xhr": "5.23.2",
+                "@algolia/requester-fetch": "5.23.2",
+                "@algolia/requester-node-http": "5.23.2"
+            },
+            "engines": {
+                "node": ">= 14.0.0"
             }
         },
-        "@babel/helper-optimise-call-expression": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz",
-            "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==",
+        "node_modules/alpinejs": {
+            "version": "3.14.9",
+            "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.14.9.tgz",
+            "integrity": "sha512-gqSOhTEyryU9FhviNqiHBHzgjkvtukq9tevew29fTj+ofZtfsYriw4zPirHHOAy9bw8QoL3WGhyk7QqCh5AYlw==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.14.5"
+            "dependencies": {
+                "@vue/reactivity": "~3.1.1"
             }
         },
-        "@babel/helper-plugin-utils": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
-            "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
+        "node_modules/asynckit": {
+            "version": "0.4.0",
+            "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+            "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
             "dev": true
         },
-        "@babel/helper-remap-async-to-generator": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz",
-            "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==",
+        "node_modules/autoprefixer": {
+            "version": "10.4.21",
+            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+            "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
             "dev": true,
-            "requires": {
-                "@babel/helper-annotate-as-pure": "^7.14.5",
-                "@babel/helper-wrap-function": "^7.14.5",
-                "@babel/types": "^7.14.5"
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/postcss/"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "dependencies": {
+                "browserslist": "^4.24.4",
+                "caniuse-lite": "^1.0.30001702",
+                "fraction.js": "^4.3.7",
+                "normalize-range": "^0.1.2",
+                "picocolors": "^1.1.1",
+                "postcss-value-parser": "^4.2.0"
+            },
+            "bin": {
+                "autoprefixer": "bin/autoprefixer"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14"
+            },
+            "peerDependencies": {
+                "postcss": "^8.1.0"
             }
         },
-        "@babel/helper-replace-supers": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz",
-            "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==",
+        "node_modules/axios": {
+            "version": "0.30.0",
+            "resolved": "https://registry.npmjs.org/axios/-/axios-0.30.0.tgz",
+            "integrity": "sha512-Z4F3LjCgfjZz8BMYalWdMgAQUnEtKDmpwNHjh/C8pQZWde32TF64cqnSeyL3xD/aTIASRU30RHTNzRiV/NpGMg==",
             "dev": true,
-            "requires": {
-                "@babel/helper-member-expression-to-functions": "^7.15.0",
-                "@babel/helper-optimise-call-expression": "^7.14.5",
-                "@babel/traverse": "^7.15.0",
-                "@babel/types": "^7.15.0"
+            "dependencies": {
+                "follow-redirects": "^1.15.4",
+                "form-data": "^4.0.0",
+                "proxy-from-env": "^1.1.0"
             }
         },
-        "@babel/helper-simple-access": {
-            "version": "7.14.8",
-            "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz",
-            "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==",
+        "node_modules/browserslist": {
+            "version": "4.24.4",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+            "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.14.8"
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/browserslist"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/browserslist"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "dependencies": {
+                "caniuse-lite": "^1.0.30001688",
+                "electron-to-chromium": "^1.5.73",
+                "node-releases": "^2.0.19",
+                "update-browserslist-db": "^1.1.1"
+            },
+            "bin": {
+                "browserslist": "cli.js"
+            },
+            "engines": {
+                "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
             }
         },
-        "@babel/helper-skip-transparent-expression-wrappers": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz",
-            "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==",
+        "node_modules/call-bind-apply-helpers": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+            "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.14.5"
+            "dependencies": {
+                "es-errors": "^1.3.0",
+                "function-bind": "^1.1.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "@babel/helper-split-export-declaration": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz",
-            "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==",
+        "node_modules/caniuse-lite": {
+            "version": "1.0.30001709",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001709.tgz",
+            "integrity": "sha512-NgL3vUTnDrPCZ3zTahp4fsugQ4dc7EKTSzwQDPEel6DMoMnfH2jhry9n2Zm8onbSR+f/QtKHFOA+iAQu4kbtWA==",
             "dev": true,
-            "requires": {
-                "@babel/types": "^7.14.5"
-            }
-        },
-        "@babel/helper-validator-identifier": {
-            "version": "7.12.11",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
-            "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
-            "dev": true
-        },
-        "@babel/helper-validator-option": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
-            "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
-            "dev": true
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/browserslist"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ]
         },
-        "@babel/helper-wrap-function": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz",
-            "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==",
+        "node_modules/combined-stream": {
+            "version": "1.0.8",
+            "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+            "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
             "dev": true,
-            "requires": {
-                "@babel/helper-function-name": "^7.14.5",
-                "@babel/template": "^7.14.5",
-                "@babel/traverse": "^7.14.5",
-                "@babel/types": "^7.14.5"
+            "dependencies": {
+                "delayed-stream": "~1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.8"
             }
         },
-        "@babel/helpers": {
-            "version": "7.15.3",
-            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz",
-            "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==",
+        "node_modules/cssesc": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+            "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
             "dev": true,
-            "requires": {
-                "@babel/template": "^7.14.5",
-                "@babel/traverse": "^7.15.0",
-                "@babel/types": "^7.15.0"
+            "bin": {
+                "cssesc": "bin/cssesc"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/highlight": {
-            "version": "7.10.4",
-            "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-            "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-validator-identifier": "^7.10.4",
-                "chalk": "^2.0.0",
-                "js-tokens": "^4.0.0"
-            }
+        "node_modules/csstype": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+            "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
         },
-        "@babel/parser": {
-            "version": "7.15.3",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz",
-            "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==",
-            "dev": true
+        "node_modules/dayjs": {
+            "version": "1.11.13",
+            "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+            "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
         },
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz",
-            "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==",
+        "node_modules/delayed-stream": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+            "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5",
-                "@babel/plugin-proposal-optional-chaining": "^7.14.5"
+            "engines": {
+                "node": ">=0.4.0"
             }
         },
-        "@babel/plugin-proposal-async-generator-functions": {
-            "version": "7.14.9",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz",
-            "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==",
+        "node_modules/dunder-proto": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+            "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-remap-async-to-generator": "^7.14.5",
-                "@babel/plugin-syntax-async-generators": "^7.8.4"
+            "dependencies": {
+                "call-bind-apply-helpers": "^1.0.1",
+                "es-errors": "^1.3.0",
+                "gopd": "^1.2.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "@babel/plugin-proposal-class-properties": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz",
-            "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==",
+        "node_modules/electron-to-chromium": {
+            "version": "1.5.130",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.130.tgz",
+            "integrity": "sha512-Ou2u7L9j2XLZbhqzyX0jWDj6gA8D3jIfVzt4rikLf3cGBa0VdReuFimBKS9tQJA4+XpeCxj1NoWlfBXzbMa9IA==",
+            "dev": true
+        },
+        "node_modules/es-define-property": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+            "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
             "dev": true,
-            "requires": {
-                "@babel/helper-create-class-features-plugin": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "@babel/plugin-proposal-class-static-block": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz",
-            "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==",
+        "node_modules/es-errors": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+            "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
             "dev": true,
-            "requires": {
-                "@babel/helper-create-class-features-plugin": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-class-static-block": "^7.14.5"
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "@babel/plugin-proposal-dynamic-import": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz",
-            "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==",
+        "node_modules/es-object-atoms": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+            "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+            "dependencies": {
+                "es-errors": "^1.3.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "@babel/plugin-proposal-export-namespace-from": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz",
-            "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==",
+        "node_modules/es-set-tostringtag": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+            "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+            "dev": true,
+            "dependencies": {
+                "es-errors": "^1.3.0",
+                "get-intrinsic": "^1.2.6",
+                "has-tostringtag": "^1.0.2",
+                "hasown": "^2.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/esbuild": {
+            "version": "0.21.5",
+            "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+            "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+            "dev": true,
+            "hasInstallScript": true,
+            "bin": {
+                "esbuild": "bin/esbuild"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "optionalDependencies": {
+                "@esbuild/aix-ppc64": "0.21.5",
+                "@esbuild/android-arm": "0.21.5",
+                "@esbuild/android-arm64": "0.21.5",
+                "@esbuild/android-x64": "0.21.5",
+                "@esbuild/darwin-arm64": "0.21.5",
+                "@esbuild/darwin-x64": "0.21.5",
+                "@esbuild/freebsd-arm64": "0.21.5",
+                "@esbuild/freebsd-x64": "0.21.5",
+                "@esbuild/linux-arm": "0.21.5",
+                "@esbuild/linux-arm64": "0.21.5",
+                "@esbuild/linux-ia32": "0.21.5",
+                "@esbuild/linux-loong64": "0.21.5",
+                "@esbuild/linux-mips64el": "0.21.5",
+                "@esbuild/linux-ppc64": "0.21.5",
+                "@esbuild/linux-riscv64": "0.21.5",
+                "@esbuild/linux-s390x": "0.21.5",
+                "@esbuild/linux-x64": "0.21.5",
+                "@esbuild/netbsd-x64": "0.21.5",
+                "@esbuild/openbsd-x64": "0.21.5",
+                "@esbuild/sunos-x64": "0.21.5",
+                "@esbuild/win32-arm64": "0.21.5",
+                "@esbuild/win32-ia32": "0.21.5",
+                "@esbuild/win32-x64": "0.21.5"
+            }
+        },
+        "node_modules/escalade": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+            "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+            "engines": {
+                "node": ">=6"
             }
         },
-        "@babel/plugin-proposal-json-strings": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz",
-            "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==",
+        "node_modules/follow-redirects": {
+            "version": "1.15.9",
+            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+            "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-json-strings": "^7.8.3"
+            "funding": [
+                {
+                    "type": "individual",
+                    "url": "https://github.com/sponsors/RubenVerborgh"
+                }
+            ],
+            "engines": {
+                "node": ">=4.0"
+            },
+            "peerDependenciesMeta": {
+                "debug": {
+                    "optional": true
+                }
             }
         },
-        "@babel/plugin-proposal-logical-assignment-operators": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz",
-            "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==",
+        "node_modules/form-data": {
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
+            "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+            "dependencies": {
+                "asynckit": "^0.4.0",
+                "combined-stream": "^1.0.8",
+                "es-set-tostringtag": "^2.1.0",
+                "mime-types": "^2.1.12"
+            },
+            "engines": {
+                "node": ">= 6"
             }
         },
-        "@babel/plugin-proposal-nullish-coalescing-operator": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz",
-            "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==",
+        "node_modules/fraction.js": {
+            "version": "4.3.7",
+            "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+            "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+            "engines": {
+                "node": "*"
+            },
+            "funding": {
+                "type": "patreon",
+                "url": "https://github.com/sponsors/rawify"
             }
         },
-        "@babel/plugin-proposal-numeric-separator": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz",
-            "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==",
+        "node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
             }
         },
-        "@babel/plugin-proposal-object-rest-spread": {
-            "version": "7.14.7",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz",
-            "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==",
+        "node_modules/function-bind": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+            "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
             "dev": true,
-            "requires": {
-                "@babel/compat-data": "^7.14.7",
-                "@babel/helper-compilation-targets": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-                "@babel/plugin-transform-parameters": "^7.14.5"
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "@babel/plugin-proposal-optional-catch-binding": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz",
-            "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==",
+        "node_modules/get-intrinsic": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+            "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+            "dependencies": {
+                "call-bind-apply-helpers": "^1.0.2",
+                "es-define-property": "^1.0.1",
+                "es-errors": "^1.3.0",
+                "es-object-atoms": "^1.1.1",
+                "function-bind": "^1.1.2",
+                "get-proto": "^1.0.1",
+                "gopd": "^1.2.0",
+                "has-symbols": "^1.1.0",
+                "hasown": "^2.0.2",
+                "math-intrinsics": "^1.1.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "@babel/plugin-proposal-optional-chaining": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz",
-            "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==",
+        "node_modules/get-proto": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+            "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5",
-                "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+            "dependencies": {
+                "dunder-proto": "^1.0.1",
+                "es-object-atoms": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "@babel/plugin-proposal-private-methods": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz",
-            "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==",
+        "node_modules/gopd": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+            "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
             "dev": true,
-            "requires": {
-                "@babel/helper-create-class-features-plugin": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "@babel/plugin-proposal-private-property-in-object": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz",
-            "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==",
+        "node_modules/has-symbols": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+            "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
             "dev": true,
-            "requires": {
-                "@babel/helper-annotate-as-pure": "^7.14.5",
-                "@babel/helper-create-class-features-plugin": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "@babel/plugin-proposal-unicode-property-regex": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz",
-            "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==",
+        "node_modules/has-tostringtag": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+            "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
             "dev": true,
-            "requires": {
-                "@babel/helper-create-regexp-features-plugin": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "dependencies": {
+                "has-symbols": "^1.0.3"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "@babel/plugin-syntax-async-generators": {
-            "version": "7.8.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-            "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+        "node_modules/hasown": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+            "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.8.0"
+            "dependencies": {
+                "function-bind": "^1.1.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "@babel/plugin-syntax-class-properties": {
-            "version": "7.12.13",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
-            "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+        "node_modules/is-core-module": {
+            "version": "2.16.1",
+            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+            "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.12.13"
+            "dependencies": {
+                "hasown": "^2.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "@babel/plugin-syntax-class-static-block": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
-            "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+        "node_modules/laravel-vite-plugin": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.2.0.tgz",
+            "integrity": "sha512-R0pJ+IcTVeqEMoKz/B2Ij57QVq3sFTABiFmb06gAwFdivbOgsUtuhX6N2MGLEArajrS3U5JbberzwOe7uXHMHQ==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "dependencies": {
+                "picocolors": "^1.0.0",
+                "vite-plugin-full-reload": "^1.1.0"
+            },
+            "bin": {
+                "clean-orphaned-assets": "bin/clean.js"
+            },
+            "engines": {
+                "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+            },
+            "peerDependencies": {
+                "vite": "^5.0.0 || ^6.0.0"
             }
         },
-        "@babel/plugin-syntax-dynamic-import": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-            "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+        "node_modules/lodash": {
+            "version": "4.17.21",
+            "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+            "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+            "dev": true
+        },
+        "node_modules/math-intrinsics": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+            "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.8.0"
+            "engines": {
+                "node": ">= 0.4"
             }
         },
-        "@babel/plugin-syntax-export-namespace-from": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
-            "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.8.3"
+        "node_modules/meilisearch": {
+            "version": "0.49.0",
+            "resolved": "https://registry.npmjs.org/meilisearch/-/meilisearch-0.49.0.tgz",
+            "integrity": "sha512-oMJ/e6Or6cz2+owcEKeB11p2OWiWW9NmssqOZC/KIwQB0sBGKLJ7RCpYzf+GhUIZIZ9FRYZ419ox3RGebVQX5g=="
+        },
+        "node_modules/meilisearch-docsearch": {
+            "version": "0.7.1",
+            "resolved": "https://registry.npmjs.org/meilisearch-docsearch/-/meilisearch-docsearch-0.7.1.tgz",
+            "integrity": "sha512-57VfY01JpQ5+wLNSEjkmo8/Km25II+oqPIqiAXt2O/dfN5OiLqEwtdhP2dE12V9kb19FtIoJ+l4DIYv33nGmgg==",
+            "dependencies": {
+                "meilisearch": "0.49.0",
+                "solid-js": "1.9.5"
             }
         },
-        "@babel/plugin-syntax-json-strings": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-            "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+        "node_modules/mime-db": {
+            "version": "1.52.0",
+            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+            "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.8.0"
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "@babel/plugin-syntax-logical-assignment-operators": {
-            "version": "7.10.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
-            "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+        "node_modules/mime-types": {
+            "version": "2.1.35",
+            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+            "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.10.4"
+            "dependencies": {
+                "mime-db": "1.52.0"
+            },
+            "engines": {
+                "node": ">= 0.6"
             }
         },
-        "@babel/plugin-syntax-nullish-coalescing-operator": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-            "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+        "node_modules/nanoid": {
+            "version": "3.3.11",
+            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+            "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.8.0"
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "bin": {
+                "nanoid": "bin/nanoid.cjs"
+            },
+            "engines": {
+                "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
             }
         },
-        "@babel/plugin-syntax-numeric-separator": {
-            "version": "7.10.4",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-            "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+        "node_modules/node-releases": {
+            "version": "2.0.19",
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+            "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+            "dev": true
+        },
+        "node_modules/normalize-range": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+            "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.10.4"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "@babel/plugin-syntax-object-rest-spread": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-            "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+        "node_modules/path-parse": {
+            "version": "1.0.7",
+            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+            "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+            "dev": true
+        },
+        "node_modules/picocolors": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+            "dev": true
+        },
+        "node_modules/picomatch": {
+            "version": "2.3.1",
+            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.8.0"
+            "engines": {
+                "node": ">=8.6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/jonschlinkert"
             }
         },
-        "@babel/plugin-syntax-optional-catch-binding": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-            "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+        "node_modules/pify": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+            "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.8.0"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "@babel/plugin-syntax-optional-chaining": {
-            "version": "7.8.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-            "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+        "node_modules/postcss": {
+            "version": "8.5.3",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+            "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.8.0"
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/postcss/"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/postcss"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "dependencies": {
+                "nanoid": "^3.3.8",
+                "picocolors": "^1.1.1",
+                "source-map-js": "^1.2.1"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14"
             }
         },
-        "@babel/plugin-syntax-private-property-in-object": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
-            "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+        "node_modules/postcss-import": {
+            "version": "15.1.0",
+            "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+            "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "dependencies": {
+                "postcss-value-parser": "^4.0.0",
+                "read-cache": "^1.0.0",
+                "resolve": "^1.1.7"
+            },
+            "engines": {
+                "node": ">=14.0.0"
+            },
+            "peerDependencies": {
+                "postcss": "^8.0.0"
             }
         },
-        "@babel/plugin-syntax-top-level-await": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
-            "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+        "node_modules/postcss-nesting": {
+            "version": "12.1.5",
+            "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.5.tgz",
+            "integrity": "sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools"
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools"
+                }
+            ],
+            "dependencies": {
+                "@csstools/selector-resolve-nested": "^1.1.0",
+                "@csstools/selector-specificity": "^3.1.1",
+                "postcss-selector-parser": "^6.1.0"
+            },
+            "engines": {
+                "node": "^14 || ^16 || >=18"
+            },
+            "peerDependencies": {
+                "postcss": "^8.4"
             }
         },
-        "@babel/plugin-transform-arrow-functions": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz",
-            "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==",
+        "node_modules/postcss-selector-parser": {
+            "version": "6.1.2",
+            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+            "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "dependencies": {
+                "cssesc": "^3.0.0",
+                "util-deprecate": "^1.0.2"
+            },
+            "engines": {
+                "node": ">=4"
             }
         },
-        "@babel/plugin-transform-async-to-generator": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz",
-            "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-imports": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-remap-async-to-generator": "^7.14.5"
+        "node_modules/postcss-value-parser": {
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+            "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+            "dev": true
+        },
+        "node_modules/preact": {
+            "version": "10.26.4",
+            "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.4.tgz",
+            "integrity": "sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==",
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/preact"
             }
         },
-        "@babel/plugin-transform-block-scoped-functions": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz",
-            "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==",
+        "node_modules/prettier": {
+            "version": "2.8.8",
+            "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+            "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "optional": true,
+            "peer": true,
+            "bin": {
+                "prettier": "bin-prettier.js"
+            },
+            "engines": {
+                "node": ">=10.13.0"
+            },
+            "funding": {
+                "url": "https://github.com/prettier/prettier?sponsor=1"
             }
         },
-        "@babel/plugin-transform-block-scoping": {
-            "version": "7.15.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz",
-            "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==",
+        "node_modules/proxy-from-env": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+            "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+            "dev": true
+        },
+        "node_modules/read-cache": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+            "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "dependencies": {
+                "pify": "^2.3.0"
             }
         },
-        "@babel/plugin-transform-classes": {
-            "version": "7.14.9",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz",
-            "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==",
+        "node_modules/resolve": {
+            "version": "1.22.10",
+            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+            "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
             "dev": true,
-            "requires": {
-                "@babel/helper-annotate-as-pure": "^7.14.5",
-                "@babel/helper-function-name": "^7.14.5",
-                "@babel/helper-optimise-call-expression": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-replace-supers": "^7.14.5",
-                "@babel/helper-split-export-declaration": "^7.14.5",
-                "globals": "^11.1.0"
+            "dependencies": {
+                "is-core-module": "^2.16.0",
+                "path-parse": "^1.0.7",
+                "supports-preserve-symlinks-flag": "^1.0.0"
+            },
+            "bin": {
+                "resolve": "bin/resolve"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "@babel/plugin-transform-computed-properties": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz",
-            "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==",
+        "node_modules/rollup": {
+            "version": "4.39.0",
+            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz",
+            "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "dependencies": {
+                "@types/estree": "1.0.7"
+            },
+            "bin": {
+                "rollup": "dist/bin/rollup"
+            },
+            "engines": {
+                "node": ">=18.0.0",
+                "npm": ">=8.0.0"
+            },
+            "optionalDependencies": {
+                "@rollup/rollup-android-arm-eabi": "4.39.0",
+                "@rollup/rollup-android-arm64": "4.39.0",
+                "@rollup/rollup-darwin-arm64": "4.39.0",
+                "@rollup/rollup-darwin-x64": "4.39.0",
+                "@rollup/rollup-freebsd-arm64": "4.39.0",
+                "@rollup/rollup-freebsd-x64": "4.39.0",
+                "@rollup/rollup-linux-arm-gnueabihf": "4.39.0",
+                "@rollup/rollup-linux-arm-musleabihf": "4.39.0",
+                "@rollup/rollup-linux-arm64-gnu": "4.39.0",
+                "@rollup/rollup-linux-arm64-musl": "4.39.0",
+                "@rollup/rollup-linux-loongarch64-gnu": "4.39.0",
+                "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0",
+                "@rollup/rollup-linux-riscv64-gnu": "4.39.0",
+                "@rollup/rollup-linux-riscv64-musl": "4.39.0",
+                "@rollup/rollup-linux-s390x-gnu": "4.39.0",
+                "@rollup/rollup-linux-x64-gnu": "4.39.0",
+                "@rollup/rollup-linux-x64-musl": "4.39.0",
+                "@rollup/rollup-win32-arm64-msvc": "4.39.0",
+                "@rollup/rollup-win32-ia32-msvc": "4.39.0",
+                "@rollup/rollup-win32-x64-msvc": "4.39.0",
+                "fsevents": "~2.3.2"
             }
         },
-        "@babel/plugin-transform-destructuring": {
-            "version": "7.14.7",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz",
-            "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+        "node_modules/search-insights": {
+            "version": "2.17.3",
+            "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz",
+            "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==",
+            "peer": true
+        },
+        "node_modules/seroval": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.2.1.tgz",
+            "integrity": "sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw==",
+            "engines": {
+                "node": ">=10"
             }
         },
-        "@babel/plugin-transform-dotall-regex": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz",
-            "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-create-regexp-features-plugin": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5"
+        "node_modules/seroval-plugins": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.2.1.tgz",
+            "integrity": "sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw==",
+            "engines": {
+                "node": ">=10"
+            },
+            "peerDependencies": {
+                "seroval": "^1.0"
             }
         },
-        "@babel/plugin-transform-duplicate-keys": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz",
-            "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+        "node_modules/solid-js": {
+            "version": "1.9.5",
+            "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.5.tgz",
+            "integrity": "sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==",
+            "dependencies": {
+                "csstype": "^3.1.0",
+                "seroval": "^1.1.0",
+                "seroval-plugins": "^1.1.0"
             }
         },
-        "@babel/plugin-transform-exponentiation-operator": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz",
-            "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==",
+        "node_modules/source-map": {
+            "version": "0.6.1",
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
             "dev": true,
-            "requires": {
-                "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "peer": true,
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "@babel/plugin-transform-for-of": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz",
-            "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==",
+        "node_modules/source-map-js": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+            "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
             "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "engines": {
+                "node": ">=0.10.0"
             }
         },
-        "@babel/plugin-transform-function-name": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz",
-            "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==",
+        "node_modules/supports-preserve-symlinks-flag": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+            "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
             "dev": true,
-            "requires": {
-                "@babel/helper-function-name": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5"
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "@babel/plugin-transform-literals": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz",
-            "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-member-expression-literals": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz",
-            "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-modules-amd": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz",
-            "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-transforms": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "babel-plugin-dynamic-import-node": "^2.3.3"
-            }
-        },
-        "@babel/plugin-transform-modules-commonjs": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz",
-            "integrity": "sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-transforms": "^7.15.0",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-simple-access": "^7.14.8",
-                "babel-plugin-dynamic-import-node": "^2.3.3"
-            }
-        },
-        "@babel/plugin-transform-modules-systemjs": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz",
-            "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-hoist-variables": "^7.14.5",
-                "@babel/helper-module-transforms": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-validator-identifier": "^7.14.5",
-                "babel-plugin-dynamic-import-node": "^2.3.3"
-            },
-            "dependencies": {
-                "@babel/helper-validator-identifier": {
-                    "version": "7.14.9",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-                    "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
-                    "dev": true
-                }
-            }
-        },
-        "@babel/plugin-transform-modules-umd": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz",
-            "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-transforms": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-named-capturing-groups-regex": {
-            "version": "7.14.9",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz",
-            "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-create-regexp-features-plugin": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-new-target": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz",
-            "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-object-super": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz",
-            "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-replace-supers": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-parameters": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz",
-            "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-property-literals": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz",
-            "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-regenerator": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz",
-            "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==",
-            "dev": true,
-            "requires": {
-                "regenerator-transform": "^0.14.2"
-            }
-        },
-        "@babel/plugin-transform-reserved-words": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz",
-            "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-runtime": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz",
-            "integrity": "sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-module-imports": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "babel-plugin-polyfill-corejs2": "^0.2.2",
-                "babel-plugin-polyfill-corejs3": "^0.2.2",
-                "babel-plugin-polyfill-regenerator": "^0.2.2",
-                "semver": "^6.3.0"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "6.3.0",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-                    "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-                    "dev": true
-                }
-            }
-        },
-        "@babel/plugin-transform-shorthand-properties": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz",
-            "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-spread": {
-            "version": "7.14.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz",
-            "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-sticky-regex": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz",
-            "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-template-literals": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz",
-            "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-typeof-symbol": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz",
-            "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-unicode-escapes": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz",
-            "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/plugin-transform-unicode-regex": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz",
-            "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-create-regexp-features-plugin": "^7.14.5",
-                "@babel/helper-plugin-utils": "^7.14.5"
-            }
-        },
-        "@babel/preset-env": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz",
-            "integrity": "sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==",
-            "dev": true,
-            "requires": {
-                "@babel/compat-data": "^7.15.0",
-                "@babel/helper-compilation-targets": "^7.15.0",
-                "@babel/helper-plugin-utils": "^7.14.5",
-                "@babel/helper-validator-option": "^7.14.5",
-                "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5",
-                "@babel/plugin-proposal-async-generator-functions": "^7.14.9",
-                "@babel/plugin-proposal-class-properties": "^7.14.5",
-                "@babel/plugin-proposal-class-static-block": "^7.14.5",
-                "@babel/plugin-proposal-dynamic-import": "^7.14.5",
-                "@babel/plugin-proposal-export-namespace-from": "^7.14.5",
-                "@babel/plugin-proposal-json-strings": "^7.14.5",
-                "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5",
-                "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5",
-                "@babel/plugin-proposal-numeric-separator": "^7.14.5",
-                "@babel/plugin-proposal-object-rest-spread": "^7.14.7",
-                "@babel/plugin-proposal-optional-catch-binding": "^7.14.5",
-                "@babel/plugin-proposal-optional-chaining": "^7.14.5",
-                "@babel/plugin-proposal-private-methods": "^7.14.5",
-                "@babel/plugin-proposal-private-property-in-object": "^7.14.5",
-                "@babel/plugin-proposal-unicode-property-regex": "^7.14.5",
-                "@babel/plugin-syntax-async-generators": "^7.8.4",
-                "@babel/plugin-syntax-class-properties": "^7.12.13",
-                "@babel/plugin-syntax-class-static-block": "^7.14.5",
-                "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-                "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-                "@babel/plugin-syntax-json-strings": "^7.8.3",
-                "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
-                "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-                "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-                "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-                "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-                "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-                "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
-                "@babel/plugin-syntax-top-level-await": "^7.14.5",
-                "@babel/plugin-transform-arrow-functions": "^7.14.5",
-                "@babel/plugin-transform-async-to-generator": "^7.14.5",
-                "@babel/plugin-transform-block-scoped-functions": "^7.14.5",
-                "@babel/plugin-transform-block-scoping": "^7.14.5",
-                "@babel/plugin-transform-classes": "^7.14.9",
-                "@babel/plugin-transform-computed-properties": "^7.14.5",
-                "@babel/plugin-transform-destructuring": "^7.14.7",
-                "@babel/plugin-transform-dotall-regex": "^7.14.5",
-                "@babel/plugin-transform-duplicate-keys": "^7.14.5",
-                "@babel/plugin-transform-exponentiation-operator": "^7.14.5",
-                "@babel/plugin-transform-for-of": "^7.14.5",
-                "@babel/plugin-transform-function-name": "^7.14.5",
-                "@babel/plugin-transform-literals": "^7.14.5",
-                "@babel/plugin-transform-member-expression-literals": "^7.14.5",
-                "@babel/plugin-transform-modules-amd": "^7.14.5",
-                "@babel/plugin-transform-modules-commonjs": "^7.15.0",
-                "@babel/plugin-transform-modules-systemjs": "^7.14.5",
-                "@babel/plugin-transform-modules-umd": "^7.14.5",
-                "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9",
-                "@babel/plugin-transform-new-target": "^7.14.5",
-                "@babel/plugin-transform-object-super": "^7.14.5",
-                "@babel/plugin-transform-parameters": "^7.14.5",
-                "@babel/plugin-transform-property-literals": "^7.14.5",
-                "@babel/plugin-transform-regenerator": "^7.14.5",
-                "@babel/plugin-transform-reserved-words": "^7.14.5",
-                "@babel/plugin-transform-shorthand-properties": "^7.14.5",
-                "@babel/plugin-transform-spread": "^7.14.6",
-                "@babel/plugin-transform-sticky-regex": "^7.14.5",
-                "@babel/plugin-transform-template-literals": "^7.14.5",
-                "@babel/plugin-transform-typeof-symbol": "^7.14.5",
-                "@babel/plugin-transform-unicode-escapes": "^7.14.5",
-                "@babel/plugin-transform-unicode-regex": "^7.14.5",
-                "@babel/preset-modules": "^0.1.4",
-                "@babel/types": "^7.15.0",
-                "babel-plugin-polyfill-corejs2": "^0.2.2",
-                "babel-plugin-polyfill-corejs3": "^0.2.2",
-                "babel-plugin-polyfill-regenerator": "^0.2.2",
-                "core-js-compat": "^3.16.0",
-                "semver": "^6.3.0"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "6.3.0",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-                    "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-                    "dev": true
-                }
-            }
-        },
-        "@babel/preset-modules": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
-            "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-plugin-utils": "^7.0.0",
-                "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
-                "@babel/plugin-transform-dotall-regex": "^7.4.4",
-                "@babel/types": "^7.4.4",
-                "esutils": "^2.0.2"
-            }
-        },
-        "@babel/runtime": {
-            "version": "7.15.3",
-            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz",
-            "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==",
-            "dev": true,
-            "requires": {
-                "regenerator-runtime": "^0.13.4"
-            }
-        },
-        "@babel/template": {
-            "version": "7.14.5",
-            "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz",
-            "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==",
-            "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.14.5",
-                "@babel/parser": "^7.14.5",
-                "@babel/types": "^7.14.5"
-            },
-            "dependencies": {
-                "@babel/code-frame": {
-                    "version": "7.14.5",
-                    "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
-                    "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/highlight": "^7.14.5"
-                    }
-                },
-                "@babel/helper-validator-identifier": {
-                    "version": "7.14.9",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-                    "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
-                    "dev": true
-                },
-                "@babel/highlight": {
-                    "version": "7.14.5",
-                    "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
-                    "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/helper-validator-identifier": "^7.14.5",
-                        "chalk": "^2.0.0",
-                        "js-tokens": "^4.0.0"
-                    }
-                }
-            }
-        },
-        "@babel/traverse": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz",
-            "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==",
-            "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.14.5",
-                "@babel/generator": "^7.15.0",
-                "@babel/helper-function-name": "^7.14.5",
-                "@babel/helper-hoist-variables": "^7.14.5",
-                "@babel/helper-split-export-declaration": "^7.14.5",
-                "@babel/parser": "^7.15.0",
-                "@babel/types": "^7.15.0",
-                "debug": "^4.1.0",
-                "globals": "^11.1.0"
-            },
-            "dependencies": {
-                "@babel/code-frame": {
-                    "version": "7.14.5",
-                    "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
-                    "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/highlight": "^7.14.5"
-                    }
-                },
-                "@babel/helper-validator-identifier": {
-                    "version": "7.14.9",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-                    "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
-                    "dev": true
-                },
-                "@babel/highlight": {
-                    "version": "7.14.5",
-                    "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
-                    "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/helper-validator-identifier": "^7.14.5",
-                        "chalk": "^2.0.0",
-                        "js-tokens": "^4.0.0"
-                    }
-                }
-            }
-        },
-        "@babel/types": {
-            "version": "7.15.0",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz",
-            "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-validator-identifier": "^7.14.9",
-                "to-fast-properties": "^2.0.0"
-            },
-            "dependencies": {
-                "@babel/helper-validator-identifier": {
-                    "version": "7.14.9",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-                    "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
-                    "dev": true
-                }
-            }
-        },
-        "@csstools/convert-colors": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz",
-            "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==",
-            "dev": true
-        },
-        "@discoveryjs/json-ext": {
-            "version": "0.5.3",
-            "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz",
-            "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==",
-            "dev": true
-        },
-        "@docsearch/css": {
-            "version": "3.0.0-alpha.40",
-            "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.40.tgz",
-            "integrity": "sha512-PrOTPgJMl+Iji1zOH0+J0PEDMriJ1teGxbgll7o4h8JrvJW6sJGqQw7/bLW7enWiFaxbJMK76w1yyPNLFHV7Qg=="
-        },
-        "@docsearch/js": {
-            "version": "3.0.0-alpha.40",
-            "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.0.0-alpha.40.tgz",
-            "integrity": "sha512-0ysRM0jk1KAbw/QsHPHIKoa7OeCm2Mwz0JgcPnhWRvvA28dzP+f6OIsL6eGu3VJR043tH9OrvVf/FnvLtTtZtw==",
-            "requires": {
-                "@docsearch/react": "3.0.0-alpha.40",
-                "preact": "^10.0.0"
-            }
-        },
-        "@docsearch/react": {
-            "version": "3.0.0-alpha.40",
-            "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.40.tgz",
-            "integrity": "sha512-aKxnu7sgpP1R7jtgOV/pZdJEHXx6Ts+jnS9U/ejSUS2BMUpwQI5SA3oLs1BA5TA9kIViJ5E+rrjh0VsbcsJ6sQ==",
-            "requires": {
-                "@algolia/autocomplete-core": "1.2.2",
-                "@algolia/autocomplete-preset-algolia": "1.2.2",
-                "@docsearch/css": "3.0.0-alpha.40",
-                "algoliasearch": "^4.0.0"
-            }
-        },
-        "@fullhuman/postcss-purgecss": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-2.2.0.tgz",
-            "integrity": "sha512-q4zYAn8L9olA5uneaLhxkHRBoug9dnAqytbdX9R5dbzSORobhYr1yGR2JN3Q1UMd5RB0apm1NvJekHaymal/BQ==",
-            "dev": true,
-            "requires": {
-                "postcss": "7.0.28",
-                "purgecss": "^2.2.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.28",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.28.tgz",
-                    "integrity": "sha512-YU6nVhyWIsVtlNlnAj1fHTsUKW5qxm3KEgzq2Jj6KTEFOTK8QWR12eIDvrlWhiSTK8WIBFTBhOJV4DY6dUuEbw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "@jridgewell/gen-mapping": {
-            "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
-            "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
-            "dev": true,
-            "requires": {
-                "@jridgewell/set-array": "^1.0.1",
-                "@jridgewell/sourcemap-codec": "^1.4.10",
-                "@jridgewell/trace-mapping": "^0.3.9"
-            }
-        },
-        "@jridgewell/resolve-uri": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-            "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
-            "dev": true
-        },
-        "@jridgewell/set-array": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
-            "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
-            "dev": true
-        },
-        "@jridgewell/source-map": {
-            "version": "0.3.2",
-            "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
-            "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
-            "dev": true,
-            "requires": {
-                "@jridgewell/gen-mapping": "^0.3.0",
-                "@jridgewell/trace-mapping": "^0.3.9"
-            }
-        },
-        "@jridgewell/sourcemap-codec": {
-            "version": "1.4.14",
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-            "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
-            "dev": true
-        },
-        "@jridgewell/trace-mapping": {
-            "version": "0.3.14",
-            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
-            "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
-            "dev": true,
-            "requires": {
-                "@jridgewell/resolve-uri": "^3.0.3",
-                "@jridgewell/sourcemap-codec": "^1.4.10"
-            }
-        },
-        "@nodelib/fs.scandir": {
-            "version": "2.1.5",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-            "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-            "dev": true,
-            "requires": {
-                "@nodelib/fs.stat": "2.0.5",
-                "run-parallel": "^1.1.9"
-            },
-            "dependencies": {
-                "@nodelib/fs.stat": {
-                    "version": "2.0.5",
-                    "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-                    "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-                    "dev": true
-                }
-            }
-        },
-        "@nodelib/fs.stat": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-            "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-            "dev": true
-        },
-        "@nodelib/fs.walk": {
-            "version": "1.2.8",
-            "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-            "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-            "dev": true,
-            "requires": {
-                "@nodelib/fs.scandir": "2.1.5",
-                "fastq": "^1.6.0"
-            }
-        },
-        "@socket.io/component-emitter": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
-            "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
-            "dev": true
-        },
-        "@trysound/sax": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz",
-            "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==",
-            "dev": true
-        },
-        "@types/babel__core": {
-            "version": "7.1.15",
-            "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz",
-            "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==",
-            "dev": true,
-            "requires": {
-                "@babel/parser": "^7.1.0",
-                "@babel/types": "^7.0.0",
-                "@types/babel__generator": "*",
-                "@types/babel__template": "*",
-                "@types/babel__traverse": "*"
-            }
-        },
-        "@types/babel__generator": {
-            "version": "7.6.3",
-            "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
-            "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.0.0"
-            }
-        },
-        "@types/babel__template": {
-            "version": "7.4.1",
-            "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
-            "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
-            "dev": true,
-            "requires": {
-                "@babel/parser": "^7.1.0",
-                "@babel/types": "^7.0.0"
-            }
-        },
-        "@types/babel__traverse": {
-            "version": "7.14.2",
-            "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz",
-            "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==",
-            "dev": true,
-            "requires": {
-                "@babel/types": "^7.3.0"
-            }
-        },
-        "@types/clean-css": {
-            "version": "4.2.5",
-            "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.5.tgz",
-            "integrity": "sha512-NEzjkGGpbs9S9fgC4abuBvTpVwE3i+Acu9BBod3PUyjDVZcNsGx61b8r2PphR61QGPnn0JHVs5ey6/I4eTrkxw==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*",
-                "source-map": "^0.6.0"
-            }
-        },
-        "@types/cookie": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
-            "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
-            "dev": true
-        },
-        "@types/cors": {
-            "version": "2.8.12",
-            "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
-            "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==",
-            "dev": true
-        },
-        "@types/eslint": {
-            "version": "7.28.0",
-            "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz",
-            "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==",
-            "dev": true,
-            "requires": {
-                "@types/estree": "*",
-                "@types/json-schema": "*"
-            }
-        },
-        "@types/eslint-scope": {
-            "version": "3.7.1",
-            "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz",
-            "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==",
-            "dev": true,
-            "requires": {
-                "@types/eslint": "*",
-                "@types/estree": "*"
-            }
-        },
-        "@types/estree": {
-            "version": "0.0.50",
-            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
-            "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
-            "dev": true
-        },
-        "@types/glob": {
-            "version": "7.1.4",
-            "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz",
-            "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==",
-            "dev": true,
-            "requires": {
-                "@types/minimatch": "*",
-                "@types/node": "*"
-            }
-        },
-        "@types/http-proxy": {
-            "version": "1.17.7",
-            "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz",
-            "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*"
-            }
-        },
-        "@types/imagemin": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.1.tgz",
-            "integrity": "sha512-xEn5+M3lDBtI3JxLy6eU3ksoVurygnlG7OYhTqJfGGP4PcvYnfn+IABCmMve7ziM/SneHDm5xgJFKC8hCYPicw==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*"
-            }
-        },
-        "@types/imagemin-gifsicle": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz",
-            "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==",
-            "dev": true,
-            "requires": {
-                "@types/imagemin": "*"
-            }
-        },
-        "@types/imagemin-mozjpeg": {
-            "version": "8.0.1",
-            "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz",
-            "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==",
-            "dev": true,
-            "requires": {
-                "@types/imagemin": "*"
-            }
-        },
-        "@types/imagemin-optipng": {
-            "version": "5.2.1",
-            "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz",
-            "integrity": "sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==",
-            "dev": true,
-            "requires": {
-                "@types/imagemin": "*"
-            }
-        },
-        "@types/imagemin-svgo": {
-            "version": "8.0.1",
-            "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz",
-            "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==",
-            "dev": true,
-            "requires": {
-                "@types/imagemin": "*",
-                "@types/svgo": "^1"
-            }
-        },
-        "@types/json-schema": {
-            "version": "7.0.9",
-            "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
-            "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
-            "dev": true
-        },
-        "@types/minimatch": {
-            "version": "3.0.5",
-            "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
-            "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
-            "dev": true
-        },
-        "@types/node": {
-            "version": "16.7.1",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.1.tgz",
-            "integrity": "sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A==",
-            "dev": true
-        },
-        "@types/parse-json": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
-            "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
-            "dev": true
-        },
-        "@types/retry": {
-            "version": "0.12.1",
-            "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz",
-            "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==",
-            "dev": true
-        },
-        "@types/svgo": {
-            "version": "1.3.6",
-            "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz",
-            "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==",
-            "dev": true
-        },
-        "@vue/reactivity": {
-            "version": "3.2.6",
-            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.6.tgz",
-            "integrity": "sha512-8vIDD2wpCnYisNNZjmcIj+Rixn0uhZNY3G1vzlgdVdLygeRSuFjkmnZk6WwvGzUWpKfnG0e/NUySM3mVi59hAA==",
-            "requires": {
-                "@vue/shared": "3.2.6"
-            }
-        },
-        "@vue/shared": {
-            "version": "3.2.6",
-            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.6.tgz",
-            "integrity": "sha512-uwX0Qs2e6kdF+WmxwuxJxOnKs/wEkMArtYpHSm7W+VY/23Tl8syMRyjnzEeXrNCAP0/8HZxEGkHJsjPEDNRuHw=="
-        },
-        "@webassemblyjs/ast": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
-            "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/helper-numbers": "1.11.1",
-                "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
-            }
-        },
-        "@webassemblyjs/floating-point-hex-parser": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
-            "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
-            "dev": true
-        },
-        "@webassemblyjs/helper-api-error": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
-            "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
-            "dev": true
-        },
-        "@webassemblyjs/helper-buffer": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
-            "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
-            "dev": true
-        },
-        "@webassemblyjs/helper-numbers": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
-            "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/floating-point-hex-parser": "1.11.1",
-                "@webassemblyjs/helper-api-error": "1.11.1",
-                "@xtuc/long": "4.2.2"
-            }
-        },
-        "@webassemblyjs/helper-wasm-bytecode": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
-            "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
-            "dev": true
-        },
-        "@webassemblyjs/helper-wasm-section": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
-            "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.11.1",
-                "@webassemblyjs/helper-buffer": "1.11.1",
-                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
-                "@webassemblyjs/wasm-gen": "1.11.1"
-            }
-        },
-        "@webassemblyjs/ieee754": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
-            "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
-            "dev": true,
-            "requires": {
-                "@xtuc/ieee754": "^1.2.0"
-            }
-        },
-        "@webassemblyjs/leb128": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
-            "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
-            "dev": true,
-            "requires": {
-                "@xtuc/long": "4.2.2"
-            }
-        },
-        "@webassemblyjs/utf8": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
-            "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
-            "dev": true
-        },
-        "@webassemblyjs/wasm-edit": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
-            "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.11.1",
-                "@webassemblyjs/helper-buffer": "1.11.1",
-                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
-                "@webassemblyjs/helper-wasm-section": "1.11.1",
-                "@webassemblyjs/wasm-gen": "1.11.1",
-                "@webassemblyjs/wasm-opt": "1.11.1",
-                "@webassemblyjs/wasm-parser": "1.11.1",
-                "@webassemblyjs/wast-printer": "1.11.1"
-            }
-        },
-        "@webassemblyjs/wasm-gen": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
-            "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.11.1",
-                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
-                "@webassemblyjs/ieee754": "1.11.1",
-                "@webassemblyjs/leb128": "1.11.1",
-                "@webassemblyjs/utf8": "1.11.1"
-            }
-        },
-        "@webassemblyjs/wasm-opt": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
-            "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.11.1",
-                "@webassemblyjs/helper-buffer": "1.11.1",
-                "@webassemblyjs/wasm-gen": "1.11.1",
-                "@webassemblyjs/wasm-parser": "1.11.1"
-            }
-        },
-        "@webassemblyjs/wasm-parser": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
-            "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.11.1",
-                "@webassemblyjs/helper-api-error": "1.11.1",
-                "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
-                "@webassemblyjs/ieee754": "1.11.1",
-                "@webassemblyjs/leb128": "1.11.1",
-                "@webassemblyjs/utf8": "1.11.1"
-            }
-        },
-        "@webassemblyjs/wast-printer": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
-            "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
-            "dev": true,
-            "requires": {
-                "@webassemblyjs/ast": "1.11.1",
-                "@xtuc/long": "4.2.2"
-            }
-        },
-        "@webpack-cli/configtest": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz",
-            "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==",
-            "dev": true
-        },
-        "@webpack-cli/info": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz",
-            "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==",
-            "dev": true,
-            "requires": {
-                "envinfo": "^7.7.3"
-            }
-        },
-        "@webpack-cli/serve": {
-            "version": "1.5.2",
-            "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.2.tgz",
-            "integrity": "sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw==",
-            "dev": true
-        },
-        "@xtuc/ieee754": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-            "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-            "dev": true
-        },
-        "@xtuc/long": {
-            "version": "4.2.2",
-            "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-            "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
-            "dev": true
-        },
-        "accepts": {
-            "version": "1.3.7",
-            "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
-            "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
-            "dev": true,
-            "requires": {
-                "mime-types": "~2.1.24",
-                "negotiator": "0.6.2"
-            }
-        },
-        "acorn": {
-            "version": "8.4.1",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
-            "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
-            "dev": true
-        },
-        "acorn-import-assertions": {
-            "version": "1.7.6",
-            "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz",
-            "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==",
-            "dev": true
-        },
-        "acorn-node": {
-            "version": "1.8.2",
-            "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
-            "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
-            "dev": true,
-            "requires": {
-                "acorn": "^7.0.0",
-                "acorn-walk": "^7.0.0",
-                "xtend": "^4.0.2"
-            },
-            "dependencies": {
-                "acorn": {
-                    "version": "7.4.1",
-                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-                    "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
-                    "dev": true
-                }
-            }
-        },
-        "acorn-walk": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
-            "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
-            "dev": true
-        },
-        "adjust-sourcemap-loader": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz",
-            "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==",
-            "dev": true,
-            "requires": {
-                "loader-utils": "^2.0.0",
-                "regex-parser": "^2.2.11"
-            },
-            "dependencies": {
-                "emojis-list": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-                    "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-                    "dev": true
-                },
-                "loader-utils": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-                    "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-                    "dev": true,
-                    "requires": {
-                        "big.js": "^5.2.2",
-                        "emojis-list": "^3.0.0",
-                        "json5": "^2.1.2"
-                    }
-                }
-            }
-        },
-        "aggregate-error": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
-            "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
-            "dev": true,
-            "requires": {
-                "clean-stack": "^2.0.0",
-                "indent-string": "^4.0.0"
-            }
-        },
-        "ajv": {
-            "version": "6.12.6",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-            "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-            "dev": true,
-            "requires": {
-                "fast-deep-equal": "^3.1.1",
-                "fast-json-stable-stringify": "^2.0.0",
-                "json-schema-traverse": "^0.4.1",
-                "uri-js": "^4.2.2"
-            }
-        },
-        "ajv-keywords": {
-            "version": "3.5.2",
-            "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
-            "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
-            "dev": true
-        },
-        "algoliasearch": {
-            "version": "4.10.5",
-            "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.5.tgz",
-            "integrity": "sha512-KmH2XkiN+8FxhND4nWFbQDkIoU6g2OjfeU9kIv4Lb+EiOOs3Gpp7jvd+JnatsCisAZsnWQdjd7zVlW7I/85QvQ==",
-            "requires": {
-                "@algolia/cache-browser-local-storage": "4.10.5",
-                "@algolia/cache-common": "4.10.5",
-                "@algolia/cache-in-memory": "4.10.5",
-                "@algolia/client-account": "4.10.5",
-                "@algolia/client-analytics": "4.10.5",
-                "@algolia/client-common": "4.10.5",
-                "@algolia/client-personalization": "4.10.5",
-                "@algolia/client-search": "4.10.5",
-                "@algolia/logger-common": "4.10.5",
-                "@algolia/logger-console": "4.10.5",
-                "@algolia/requester-browser-xhr": "4.10.5",
-                "@algolia/requester-common": "4.10.5",
-                "@algolia/requester-node-http": "4.10.5",
-                "@algolia/transporter": "4.10.5"
-            }
-        },
-        "alphanum-sort": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
-            "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
-            "dev": true
-        },
-        "alpinejs": {
-            "version": "3.2.4",
-            "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.2.4.tgz",
-            "integrity": "sha512-nUHI7QarOyqFX1vKTP5MC54yBFh9/J+YyxE50aP3lb6aZGxwX0HIPGVuAwy2SXQFP45P4/jKHv1LOuvRp/etiQ==",
-            "requires": {
-                "@vue/reactivity": "^3.0.2"
-            }
-        },
-        "ansi-escapes": {
-            "version": "4.3.2",
-            "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
-            "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
-            "dev": true,
-            "requires": {
-                "type-fest": "^0.21.3"
-            }
-        },
-        "ansi-html": {
-            "version": "0.0.7",
-            "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
-            "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
-            "dev": true
-        },
-        "ansi-regex": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-            "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-            "dev": true
-        },
-        "ansi-styles": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-            "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-            "dev": true,
-            "requires": {
-                "color-convert": "^1.9.0"
-            }
-        },
-        "anymatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-            "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
-            "dev": true,
-            "requires": {
-                "normalize-path": "^3.0.0",
-                "picomatch": "^2.0.4"
-            }
-        },
-        "arg": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
-            "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==",
-            "dev": true
-        },
-        "arity-n": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz",
-            "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=",
-            "dev": true
-        },
-        "array-flatten": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
-            "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
-            "dev": true
-        },
-        "array-union": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-            "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-            "dev": true
-        },
-        "asn1.js": {
-            "version": "5.4.1",
-            "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
-            "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
-            "dev": true,
-            "requires": {
-                "bn.js": "^4.0.0",
-                "inherits": "^2.0.1",
-                "minimalistic-assert": "^1.0.0",
-                "safer-buffer": "^2.1.0"
-            },
-            "dependencies": {
-                "bn.js": {
-                    "version": "4.12.0",
-                    "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-                    "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-                    "dev": true
-                }
-            }
-        },
-        "assert": {
-            "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
-            "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
-            "dev": true,
-            "requires": {
-                "object-assign": "^4.1.1",
-                "util": "0.10.3"
-            },
-            "dependencies": {
-                "inherits": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-                    "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
-                    "dev": true
-                },
-                "util": {
-                    "version": "0.10.3",
-                    "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
-                    "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "2.0.1"
-                    }
-                }
-            }
-        },
-        "async-each-series": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
-            "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==",
-            "dev": true
-        },
-        "atob": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
-            "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
-            "dev": true
-        },
-        "autoprefixer": {
-            "version": "10.3.2",
-            "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.2.tgz",
-            "integrity": "sha512-RHKq0YCvhxAn9987n0Gl6lkzLd39UKwCkUPMFE0cHhxU0SvcTjBxWG/CtkZ4/HvbqK9U5V8j03nAcGBlX3er/Q==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.16.8",
-                "caniuse-lite": "^1.0.30001251",
-                "colorette": "^1.3.0",
-                "fraction.js": "^4.1.1",
-                "normalize-range": "^0.1.2",
-                "postcss-value-parser": "^4.1.0"
-            },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==",
-                    "dev": true
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
-                    "dev": true
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                },
-                "postcss-value-parser": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-                    "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
-                    "dev": true
-                }
-            }
-        },
-        "axios": {
-            "version": "0.21.2",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.2.tgz",
-            "integrity": "sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==",
-            "dev": true,
-            "requires": {
-                "follow-redirects": "^1.14.0"
-            }
-        },
-        "babel-loader": {
-            "version": "8.2.2",
-            "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz",
-            "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==",
-            "dev": true,
-            "requires": {
-                "find-cache-dir": "^3.3.1",
-                "loader-utils": "^1.4.0",
-                "make-dir": "^3.1.0",
-                "schema-utils": "^2.6.5"
-            },
-            "dependencies": {
-                "emojis-list": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-                    "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-                    "dev": true
-                },
-                "json5": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-                    "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-                    "dev": true,
-                    "requires": {
-                        "minimist": "^1.2.0"
-                    }
-                },
-                "loader-utils": {
-                    "version": "1.4.0",
-                    "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-                    "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
-                    "dev": true,
-                    "requires": {
-                        "big.js": "^5.2.2",
-                        "emojis-list": "^3.0.0",
-                        "json5": "^1.0.1"
-                    }
-                }
-            }
-        },
-        "babel-plugin-dynamic-import-node": {
-            "version": "2.3.3",
-            "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
-            "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
-            "dev": true,
-            "requires": {
-                "object.assign": "^4.1.0"
-            }
-        },
-        "babel-plugin-polyfill-corejs2": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz",
-            "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==",
-            "dev": true,
-            "requires": {
-                "@babel/compat-data": "^7.13.11",
-                "@babel/helper-define-polyfill-provider": "^0.2.2",
-                "semver": "^6.1.1"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "6.3.0",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-                    "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-                    "dev": true
-                }
-            }
-        },
-        "babel-plugin-polyfill-corejs3": {
-            "version": "0.2.4",
-            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz",
-            "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-define-polyfill-provider": "^0.2.2",
-                "core-js-compat": "^3.14.0"
-            }
-        },
-        "babel-plugin-polyfill-regenerator": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz",
-            "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==",
-            "dev": true,
-            "requires": {
-                "@babel/helper-define-polyfill-provider": "^0.2.2"
-            }
-        },
-        "balanced-match": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-            "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-            "dev": true
-        },
-        "base64-js": {
-            "version": "1.5.1",
-            "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
-            "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
-            "dev": true
-        },
-        "base64id": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
-            "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
-            "dev": true
-        },
-        "batch": {
-            "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-            "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
-            "dev": true
-        },
-        "big.js": {
-            "version": "5.2.2",
-            "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-            "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
-            "dev": true
-        },
-        "binary-extensions": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-            "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-            "dev": true
-        },
-        "bn.js": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
-            "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==",
-            "dev": true
-        },
-        "body-parser": {
-            "version": "1.19.0",
-            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
-            "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
-            "dev": true,
-            "requires": {
-                "bytes": "3.1.0",
-                "content-type": "~1.0.4",
-                "debug": "2.6.9",
-                "depd": "~1.1.2",
-                "http-errors": "1.7.2",
-                "iconv-lite": "0.4.24",
-                "on-finished": "~2.3.0",
-                "qs": "6.7.0",
-                "raw-body": "2.4.0",
-                "type-is": "~1.6.17"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-                    "dev": true
-                }
-            }
-        },
-        "bonjour": {
-            "version": "3.5.0",
-            "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
-            "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
-            "dev": true,
-            "requires": {
-                "array-flatten": "^2.1.0",
-                "deep-equal": "^1.0.1",
-                "dns-equal": "^1.0.0",
-                "dns-txt": "^2.0.2",
-                "multicast-dns": "^6.0.1",
-                "multicast-dns-service-types": "^1.1.0"
-            }
-        },
-        "boolbase": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-            "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
-            "dev": true
-        },
-        "brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-            "dev": true,
-            "requires": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-            }
-        },
-        "braces": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-            "dev": true,
-            "requires": {
-                "fill-range": "^7.0.1"
-            }
-        },
-        "brorand": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
-            "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
-            "dev": true
-        },
-        "browser-sync": {
-            "version": "2.27.10",
-            "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.10.tgz",
-            "integrity": "sha512-xKm+6KJmJu6RuMWWbFkKwOCSqQOxYe3nOrFkKI5Tr/ZzjPxyU3pFShKK3tWnazBo/3lYQzN7fzjixG8fwJh1Xw==",
-            "dev": true,
-            "requires": {
-                "browser-sync-client": "^2.27.10",
-                "browser-sync-ui": "^2.27.10",
-                "bs-recipes": "1.3.4",
-                "bs-snippet-injector": "^2.0.1",
-                "chokidar": "^3.5.1",
-                "connect": "3.6.6",
-                "connect-history-api-fallback": "^1",
-                "dev-ip": "^1.0.1",
-                "easy-extender": "^2.3.4",
-                "eazy-logger": "3.1.0",
-                "etag": "^1.8.1",
-                "fresh": "^0.5.2",
-                "fs-extra": "3.0.1",
-                "http-proxy": "^1.18.1",
-                "immutable": "^3",
-                "localtunnel": "^2.0.1",
-                "micromatch": "^4.0.2",
-                "opn": "5.3.0",
-                "portscanner": "2.2.0",
-                "qs": "6.2.3",
-                "raw-body": "^2.3.2",
-                "resp-modifier": "6.0.2",
-                "rx": "4.1.0",
-                "send": "0.16.2",
-                "serve-index": "1.9.1",
-                "serve-static": "1.13.2",
-                "server-destroy": "1.0.1",
-                "socket.io": "^4.4.1",
-                "ua-parser-js": "1.0.2",
-                "yargs": "^17.3.1"
-            },
-            "dependencies": {
-                "ansi-regex": {
-                    "version": "5.0.1",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-                    "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-                    "dev": true
-                },
-                "cliui": {
-                    "version": "8.0.1",
-                    "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
-                    "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
-                    "dev": true,
-                    "requires": {
-                        "string-width": "^4.2.0",
-                        "strip-ansi": "^6.0.1",
-                        "wrap-ansi": "^7.0.0"
-                    }
-                },
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "fs-extra": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
-                    "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.2",
-                        "jsonfile": "^3.0.0",
-                        "universalify": "^0.1.0"
-                    }
-                },
-                "http-errors": {
-                    "version": "1.6.3",
-                    "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-                    "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
-                    "dev": true,
-                    "requires": {
-                        "depd": "~1.1.2",
-                        "inherits": "2.0.3",
-                        "setprototypeof": "1.1.0",
-                        "statuses": ">= 1.4.0 < 2"
-                    }
-                },
-                "inherits": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-                    "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-                    "dev": true
-                },
-                "mime": {
-                    "version": "1.4.1",
-                    "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
-                    "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
-                    "dev": true
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-                    "dev": true
-                },
-                "qs": {
-                    "version": "6.2.3",
-                    "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz",
-                    "integrity": "sha512-AY4g8t3LMboim0t6XWFdz6J5OuJ1ZNYu54SXihS/OMpgyCqYmcAJnWqkNSOjSjWmq3xxy+GF9uWQI2lI/7tKIA==",
-                    "dev": true
-                },
-                "send": {
-                    "version": "0.16.2",
-                    "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
-                    "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
-                    "dev": true,
-                    "requires": {
-                        "debug": "2.6.9",
-                        "depd": "~1.1.2",
-                        "destroy": "~1.0.4",
-                        "encodeurl": "~1.0.2",
-                        "escape-html": "~1.0.3",
-                        "etag": "~1.8.1",
-                        "fresh": "0.5.2",
-                        "http-errors": "~1.6.2",
-                        "mime": "1.4.1",
-                        "ms": "2.0.0",
-                        "on-finished": "~2.3.0",
-                        "range-parser": "~1.2.0",
-                        "statuses": "~1.4.0"
-                    }
-                },
-                "serve-static": {
-                    "version": "1.13.2",
-                    "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
-                    "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
-                    "dev": true,
-                    "requires": {
-                        "encodeurl": "~1.0.2",
-                        "escape-html": "~1.0.3",
-                        "parseurl": "~1.3.2",
-                        "send": "0.16.2"
-                    }
-                },
-                "setprototypeof": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-                    "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-                    "dev": true
-                },
-                "statuses": {
-                    "version": "1.4.0",
-                    "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
-                    "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
-                    "dev": true
-                },
-                "string-width": {
-                    "version": "4.2.3",
-                    "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-                    "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-                    "dev": true,
-                    "requires": {
-                        "emoji-regex": "^8.0.0",
-                        "is-fullwidth-code-point": "^3.0.0",
-                        "strip-ansi": "^6.0.1"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "6.0.1",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-                    "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^5.0.1"
-                    }
-                },
-                "yargs": {
-                    "version": "17.6.2",
-                    "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz",
-                    "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==",
-                    "dev": true,
-                    "requires": {
-                        "cliui": "^8.0.1",
-                        "escalade": "^3.1.1",
-                        "get-caller-file": "^2.0.5",
-                        "require-directory": "^2.1.1",
-                        "string-width": "^4.2.3",
-                        "y18n": "^5.0.5",
-                        "yargs-parser": "^21.1.1"
-                    }
-                },
-                "yargs-parser": {
-                    "version": "21.1.1",
-                    "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
-                    "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
-                    "dev": true
-                }
-            }
-        },
-        "browser-sync-client": {
-            "version": "2.27.10",
-            "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.10.tgz",
-            "integrity": "sha512-KCFKA1YDj6cNul0VsA28apohtBsdk5Wv8T82ClOZPZMZWxPj4Ny5AUbrj9UlAb/k6pdxE5HABrWDhP9+cjt4HQ==",
-            "dev": true,
-            "requires": {
-                "etag": "1.8.1",
-                "fresh": "0.5.2",
-                "mitt": "^1.1.3",
-                "rxjs": "^5.5.6",
-                "typescript": "^4.6.2"
-            }
-        },
-        "browser-sync-ui": {
-            "version": "2.27.10",
-            "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.10.tgz",
-            "integrity": "sha512-elbJILq4Uo6OQv6gsvS3Y9vRAJlWu+h8j0JDkF0X/ua+3S6SVbbiWnZc8sNOFlG7yvVGIwBED3eaYQ0iBo1Dtw==",
-            "dev": true,
-            "requires": {
-                "async-each-series": "0.1.1",
-                "connect-history-api-fallback": "^1",
-                "immutable": "^3",
-                "server-destroy": "1.0.1",
-                "socket.io-client": "^4.4.1",
-                "stream-throttle": "^0.1.3"
-            }
-        },
-        "browser-sync-webpack-plugin": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/browser-sync-webpack-plugin/-/browser-sync-webpack-plugin-2.3.0.tgz",
-            "integrity": "sha512-MDvuRrTCtoL11dTdwMymo9CNJvYxJoW67gOO61cThfzHNX40S5WcBU+0bVQ86ll7r7aNpNgyzxF7RtnXMTDbyA==",
-            "dev": true,
-            "requires": {
-                "lodash": "^4"
-            }
-        },
-        "browserify-aes": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
-            "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
-            "dev": true,
-            "requires": {
-                "buffer-xor": "^1.0.3",
-                "cipher-base": "^1.0.0",
-                "create-hash": "^1.1.0",
-                "evp_bytestokey": "^1.0.3",
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.0.1"
-            }
-        },
-        "browserify-cipher": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
-            "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
-            "dev": true,
-            "requires": {
-                "browserify-aes": "^1.0.4",
-                "browserify-des": "^1.0.0",
-                "evp_bytestokey": "^1.0.0"
-            }
-        },
-        "browserify-des": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
-            "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
-            "dev": true,
-            "requires": {
-                "cipher-base": "^1.0.1",
-                "des.js": "^1.0.0",
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.1.2"
-            }
-        },
-        "browserify-rsa": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
-            "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
-            "dev": true,
-            "requires": {
-                "bn.js": "^5.0.0",
-                "randombytes": "^2.0.1"
-            }
-        },
-        "browserify-sign": {
-            "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
-            "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
-            "dev": true,
-            "requires": {
-                "bn.js": "^5.1.1",
-                "browserify-rsa": "^4.0.1",
-                "create-hash": "^1.2.0",
-                "create-hmac": "^1.1.7",
-                "elliptic": "^6.5.3",
-                "inherits": "^2.0.4",
-                "parse-asn1": "^5.1.5",
-                "readable-stream": "^3.6.0",
-                "safe-buffer": "^5.2.0"
-            },
-            "dependencies": {
-                "readable-stream": {
-                    "version": "3.6.0",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-                    "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "^2.0.3",
-                        "string_decoder": "^1.1.1",
-                        "util-deprecate": "^1.0.1"
-                    }
-                },
-                "safe-buffer": {
-                    "version": "5.2.1",
-                    "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-                    "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-                    "dev": true
-                }
-            }
-        },
-        "browserify-zlib": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
-            "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
-            "dev": true,
-            "requires": {
-                "pako": "~1.0.5"
-            }
-        },
-        "browserslist": {
-            "version": "4.19.1",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
-            "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
-            "dev": true,
-            "requires": {
-                "caniuse-lite": "^1.0.30001286",
-                "electron-to-chromium": "^1.4.17",
-                "escalade": "^3.1.1",
-                "node-releases": "^2.0.1",
-                "picocolors": "^1.0.0"
-            },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001295",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001295.tgz",
-                    "integrity": "sha512-lSP16vcyC0FEy0R4ECc9duSPoKoZy+YkpGkue9G4D81OfPnliopaZrU10+qtPdT8PbGXad/PNx43TIQrOmJZSQ==",
-                    "dev": true
-                },
-                "electron-to-chromium": {
-                    "version": "1.4.32",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.32.tgz",
-                    "integrity": "sha512-7QRVfMlccTFs7cZV3lB0k9Wcm6R6F+w1yBPX+xBAlAP/1oJIstxTev3A4r8REnUUAFph/cIB8y/EBU7PDbJTQw==",
-                    "dev": true
-                },
-                "node-releases": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
-                    "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
-                    "dev": true
-                }
-            }
-        },
-        "bs-recipes": {
-            "version": "1.3.4",
-            "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
-            "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==",
-            "dev": true
-        },
-        "bs-snippet-injector": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz",
-            "integrity": "sha512-4u8IgB+L9L+S5hknOj3ddNSb42436gsnGm1AuM15B7CdbkpQTyVWgIM5/JUBiKiRwGOR86uo0Lu/OsX+SAlJmw==",
-            "dev": true
-        },
-        "buffer": {
-            "version": "4.9.2",
-            "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
-            "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
-            "dev": true,
-            "requires": {
-                "base64-js": "^1.0.2",
-                "ieee754": "^1.1.4",
-                "isarray": "^1.0.0"
-            }
-        },
-        "buffer-from": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
-            "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-            "dev": true
-        },
-        "buffer-indexof": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
-            "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
-            "dev": true
-        },
-        "buffer-xor": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
-            "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
-            "dev": true
-        },
-        "builtin-status-codes": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
-            "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
-            "dev": true
-        },
-        "bytes": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
-            "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
-            "dev": true
-        },
-        "call-bind": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-            "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-            "dev": true,
-            "requires": {
-                "function-bind": "^1.1.1",
-                "get-intrinsic": "^1.0.2"
-            }
-        },
-        "camel-case": {
-            "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
-            "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
-            "dev": true,
-            "requires": {
-                "pascal-case": "^3.1.2",
-                "tslib": "^2.0.3"
-            }
-        },
-        "camelcase": {
-            "version": "5.3.1",
-            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-            "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-            "dev": true
-        },
-        "camelcase-css": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
-            "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
-            "dev": true
-        },
-        "caniuse-api": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
-            "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.0.0",
-                "caniuse-lite": "^1.0.0",
-                "lodash.memoize": "^4.1.2",
-                "lodash.uniq": "^4.5.0"
-            }
-        },
-        "caniuse-lite": {
-            "version": "1.0.30000989",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz",
-            "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==",
-            "dev": true
-        },
-        "chalk": {
-            "version": "2.4.2",
-            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-            "dev": true,
-            "requires": {
-                "ansi-styles": "^3.2.1",
-                "escape-string-regexp": "^1.0.5",
-                "supports-color": "^5.3.0"
-            }
-        },
-        "charenc": {
-            "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
-            "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
-            "dev": true
-        },
-        "chokidar": {
-            "version": "3.5.2",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
-            "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
-            "dev": true,
-            "requires": {
-                "anymatch": "~3.1.2",
-                "braces": "~3.0.2",
-                "fsevents": "~2.3.2",
-                "glob-parent": "~5.1.2",
-                "is-binary-path": "~2.1.0",
-                "is-glob": "~4.0.1",
-                "normalize-path": "~3.0.0",
-                "readdirp": "~3.6.0"
-            }
-        },
-        "chrome-trace-event": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
-            "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
-            "dev": true
-        },
-        "ci-info": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz",
-            "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==",
-            "dev": true
-        },
-        "cipher-base": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
-            "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
-            "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.0.1"
-            }
-        },
-        "clean-css": {
-            "version": "5.1.5",
-            "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.5.tgz",
-            "integrity": "sha512-9dr/cU/LjMpU57PXlSvDkVRh0rPxJBXiBtD0+SgYt8ahTCsXtfKjCkNYgIoTC6mBg8CFr5EKhW3DKCaGMUbUfQ==",
-            "dev": true,
-            "requires": {
-                "source-map": "~0.6.0"
-            }
-        },
-        "clean-stack": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
-            "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
-            "dev": true
-        },
-        "cli-table3": {
-            "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz",
-            "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==",
-            "dev": true,
-            "requires": {
-                "colors": "^1.1.2",
-                "object-assign": "^4.1.0",
-                "string-width": "^4.2.0"
-            }
-        },
-        "cliui": {
-            "version": "7.0.4",
-            "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-            "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
-            "dev": true,
-            "requires": {
-                "string-width": "^4.2.0",
-                "strip-ansi": "^6.0.0",
-                "wrap-ansi": "^7.0.0"
-            }
-        },
-        "clone-deep": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
-            "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
-            "dev": true,
-            "requires": {
-                "is-plain-object": "^2.0.4",
-                "kind-of": "^6.0.2",
-                "shallow-clone": "^3.0.0"
-            }
-        },
-        "collect.js": {
-            "version": "4.28.6",
-            "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz",
-            "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==",
-            "dev": true
-        },
-        "color-convert": {
-            "version": "1.9.3",
-            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-            "dev": true,
-            "requires": {
-                "color-name": "1.1.3"
-            }
-        },
-        "color-name": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-            "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-            "dev": true
-        },
-        "colord": {
-            "version": "2.7.0",
-            "resolved": "https://registry.npmjs.org/colord/-/colord-2.7.0.tgz",
-            "integrity": "sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q==",
-            "dev": true
-        },
-        "colorette": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
-            "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
-            "dev": true
-        },
-        "colors": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
-            "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
-            "dev": true,
-            "optional": true
-        },
-        "commander": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-            "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-            "dev": true
-        },
-        "commondir": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-            "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
-            "dev": true
-        },
-        "compose-function": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz",
-            "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=",
-            "dev": true,
-            "requires": {
-                "arity-n": "^1.0.4"
-            }
-        },
-        "compressible": {
-            "version": "2.0.18",
-            "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
-            "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
-            "dev": true,
-            "requires": {
-                "mime-db": ">= 1.43.0 < 2"
-            }
-        },
-        "compression": {
-            "version": "1.7.4",
-            "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
-            "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
-            "dev": true,
-            "requires": {
-                "accepts": "~1.3.5",
-                "bytes": "3.0.0",
-                "compressible": "~2.0.16",
-                "debug": "2.6.9",
-                "on-headers": "~1.0.2",
-                "safe-buffer": "5.1.2",
-                "vary": "~1.1.2"
-            },
-            "dependencies": {
-                "bytes": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
-                    "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
-                    "dev": true
-                },
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-                    "dev": true
-                }
-            }
-        },
-        "concat": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz",
-            "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=",
-            "dev": true,
-            "requires": {
-                "commander": "^2.9.0"
-            },
-            "dependencies": {
-                "commander": {
-                    "version": "2.20.3",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-                    "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-                    "dev": true
-                }
-            }
-        },
-        "concat-map": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-            "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-            "dev": true
-        },
-        "connect": {
-            "version": "3.6.6",
-            "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
-            "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==",
-            "dev": true,
-            "requires": {
-                "debug": "2.6.9",
-                "finalhandler": "1.1.0",
-                "parseurl": "~1.3.2",
-                "utils-merge": "1.0.1"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "finalhandler": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
-                    "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==",
-                    "dev": true,
-                    "requires": {
-                        "debug": "2.6.9",
-                        "encodeurl": "~1.0.1",
-                        "escape-html": "~1.0.3",
-                        "on-finished": "~2.3.0",
-                        "parseurl": "~1.3.2",
-                        "statuses": "~1.3.1",
-                        "unpipe": "~1.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-                    "dev": true
-                },
-                "statuses": {
-                    "version": "1.3.1",
-                    "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
-                    "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==",
-                    "dev": true
-                }
-            }
-        },
-        "connect-history-api-fallback": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
-            "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
-            "dev": true
-        },
-        "consola": {
-            "version": "2.15.3",
-            "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
-            "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
-            "dev": true
-        },
-        "console-browserify": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
-            "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
-            "dev": true
-        },
-        "constants-browserify": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
-            "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
-            "dev": true
-        },
-        "content-disposition": {
-            "version": "0.5.3",
-            "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
-            "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
-            "dev": true,
-            "requires": {
-                "safe-buffer": "5.1.2"
-            }
-        },
-        "content-type": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-            "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
-            "dev": true
-        },
-        "convert-source-map": {
-            "version": "1.7.0",
-            "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
-            "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
-            "dev": true,
-            "requires": {
-                "safe-buffer": "~5.1.1"
-            }
-        },
-        "cookie": {
-            "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
-            "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
-            "dev": true
-        },
-        "cookie-signature": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-            "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
-            "dev": true
-        },
-        "core-js-compat": {
-            "version": "3.16.3",
-            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.16.3.tgz",
-            "integrity": "sha512-A/OtSfSJQKLAFRVd4V0m6Sep9lPdjD8bpN8v3tCCGwE0Tmh0hOiVDm9tw6mXmWOKOSZIyr3EkywPo84cJjGvIQ==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.16.8",
-                "semver": "7.0.0"
-            },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A=="
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                },
-                "semver": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
-                    "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
-                    "dev": true
-                }
-            }
-        },
-        "core-util-is": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-            "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-            "dev": true
-        },
-        "cors": {
-            "version": "2.8.5",
-            "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-            "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
-            "dev": true,
-            "requires": {
-                "object-assign": "^4",
-                "vary": "^1"
-            }
-        },
-        "cosmiconfig": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-            "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
-            "dev": true,
-            "requires": {
-                "@types/parse-json": "^4.0.0",
-                "import-fresh": "^3.2.1",
-                "parse-json": "^5.0.0",
-                "path-type": "^4.0.0",
-                "yaml": "^1.10.0"
-            }
-        },
-        "create-ecdh": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
-            "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
-            "dev": true,
-            "requires": {
-                "bn.js": "^4.1.0",
-                "elliptic": "^6.5.3"
-            },
-            "dependencies": {
-                "bn.js": {
-                    "version": "4.12.0",
-                    "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-                    "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-                    "dev": true
-                }
-            }
-        },
-        "create-hash": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
-            "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
-            "dev": true,
-            "requires": {
-                "cipher-base": "^1.0.1",
-                "inherits": "^2.0.1",
-                "md5.js": "^1.3.4",
-                "ripemd160": "^2.0.1",
-                "sha.js": "^2.4.0"
-            }
-        },
-        "create-hmac": {
-            "version": "1.1.7",
-            "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
-            "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
-            "dev": true,
-            "requires": {
-                "cipher-base": "^1.0.3",
-                "create-hash": "^1.1.0",
-                "inherits": "^2.0.1",
-                "ripemd160": "^2.0.0",
-                "safe-buffer": "^5.0.1",
-                "sha.js": "^2.4.8"
-            }
-        },
-        "cross-env": {
-            "version": "7.0.3",
-            "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
-            "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
-            "dev": true,
-            "requires": {
-                "cross-spawn": "^7.0.1"
-            }
-        },
-        "cross-spawn": {
-            "version": "7.0.3",
-            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-            "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-            "dev": true,
-            "requires": {
-                "path-key": "^3.1.0",
-                "shebang-command": "^2.0.0",
-                "which": "^2.0.1"
-            }
-        },
-        "crypt": {
-            "version": "0.0.2",
-            "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
-            "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
-            "dev": true
-        },
-        "crypto-browserify": {
-            "version": "3.12.0",
-            "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
-            "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
-            "dev": true,
-            "requires": {
-                "browserify-cipher": "^1.0.0",
-                "browserify-sign": "^4.0.0",
-                "create-ecdh": "^4.0.0",
-                "create-hash": "^1.1.0",
-                "create-hmac": "^1.1.0",
-                "diffie-hellman": "^5.0.0",
-                "inherits": "^2.0.1",
-                "pbkdf2": "^3.0.3",
-                "public-encrypt": "^4.0.0",
-                "randombytes": "^2.0.0",
-                "randomfill": "^1.0.3"
-            }
-        },
-        "css": {
-            "version": "2.2.4",
-            "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
-            "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
-            "dev": true,
-            "requires": {
-                "inherits": "^2.0.3",
-                "source-map": "^0.6.1",
-                "source-map-resolve": "^0.5.2",
-                "urix": "^0.1.0"
-            }
-        },
-        "css-blank-pseudo": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz",
-            "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.5"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "css-color-names": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz",
-            "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==",
-            "dev": true
-        },
-        "css-declaration-sorter": {
-            "version": "6.1.1",
-            "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz",
-            "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==",
-            "dev": true,
-            "requires": {
-                "timsort": "^0.3.0"
-            }
-        },
-        "css-has-pseudo": {
-            "version": "0.10.0",
-            "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz",
-            "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.6",
-                "postcss-selector-parser": "^5.0.0-rc.4"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "postcss-selector-parser": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-                    "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^2.0.0",
-                        "indexes-of": "^1.0.1",
-                        "uniq": "^1.0.1"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "css-loader": {
-            "version": "5.2.7",
-            "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz",
-            "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==",
-            "dev": true,
-            "requires": {
-                "icss-utils": "^5.1.0",
-                "loader-utils": "^2.0.0",
-                "postcss": "^8.2.15",
-                "postcss-modules-extract-imports": "^3.0.0",
-                "postcss-modules-local-by-default": "^4.0.0",
-                "postcss-modules-scope": "^3.0.0",
-                "postcss-modules-values": "^4.0.0",
-                "postcss-value-parser": "^4.1.0",
-                "schema-utils": "^3.0.0",
-                "semver": "^7.3.5"
-            },
-            "dependencies": {
-                "emojis-list": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-                    "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-                    "dev": true
-                },
-                "loader-utils": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-                    "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-                    "dev": true,
-                    "requires": {
-                        "big.js": "^5.2.2",
-                        "emojis-list": "^3.0.0",
-                        "json5": "^2.1.2"
-                    }
-                },
-                "schema-utils": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
-                    "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                },
-                "semver": {
-                    "version": "7.3.5",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-                    "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
-                    "dev": true,
-                    "requires": {
-                        "lru-cache": "^6.0.0"
-                    }
-                }
-            }
-        },
-        "css-prefers-color-scheme": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz",
-            "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.5"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "css-select": {
-            "version": "4.1.3",
-            "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
-            "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
-            "dev": true,
-            "requires": {
-                "boolbase": "^1.0.0",
-                "css-what": "^5.0.0",
-                "domhandler": "^4.2.0",
-                "domutils": "^2.6.0",
-                "nth-check": "^2.0.0"
-            }
-        },
-        "css-tree": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
-            "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
-            "dev": true,
-            "requires": {
-                "mdn-data": "2.0.14",
-                "source-map": "^0.6.1"
-            }
-        },
-        "css-unit-converter": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
-            "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==",
-            "dev": true
-        },
-        "css-what": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz",
-            "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==",
-            "dev": true
-        },
-        "cssdb": {
-            "version": "4.4.0",
-            "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz",
-            "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==",
-            "dev": true
-        },
-        "cssesc": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
-            "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
-            "dev": true
-        },
-        "cssnano": {
-            "version": "5.0.8",
-            "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.8.tgz",
-            "integrity": "sha512-Lda7geZU0Yu+RZi2SGpjYuQz4HI4/1Y+BhdD0jL7NXAQ5larCzVn+PUGuZbDMYz904AXXCOgO5L1teSvgu7aFg==",
-            "dev": true,
-            "requires": {
-                "cssnano-preset-default": "^5.1.4",
-                "is-resolvable": "^1.1.0",
-                "lilconfig": "^2.0.3",
-                "yaml": "^1.10.2"
-            }
-        },
-        "cssnano-preset-default": {
-            "version": "5.1.4",
-            "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.4.tgz",
-            "integrity": "sha512-sPpQNDQBI3R/QsYxQvfB4mXeEcWuw0wGtKtmS5eg8wudyStYMgKOQT39G07EbW1LB56AOYrinRS9f0ig4Y3MhQ==",
-            "dev": true,
-            "requires": {
-                "css-declaration-sorter": "^6.0.3",
-                "cssnano-utils": "^2.0.1",
-                "postcss-calc": "^8.0.0",
-                "postcss-colormin": "^5.2.0",
-                "postcss-convert-values": "^5.0.1",
-                "postcss-discard-comments": "^5.0.1",
-                "postcss-discard-duplicates": "^5.0.1",
-                "postcss-discard-empty": "^5.0.1",
-                "postcss-discard-overridden": "^5.0.1",
-                "postcss-merge-longhand": "^5.0.2",
-                "postcss-merge-rules": "^5.0.2",
-                "postcss-minify-font-values": "^5.0.1",
-                "postcss-minify-gradients": "^5.0.2",
-                "postcss-minify-params": "^5.0.1",
-                "postcss-minify-selectors": "^5.1.0",
-                "postcss-normalize-charset": "^5.0.1",
-                "postcss-normalize-display-values": "^5.0.1",
-                "postcss-normalize-positions": "^5.0.1",
-                "postcss-normalize-repeat-style": "^5.0.1",
-                "postcss-normalize-string": "^5.0.1",
-                "postcss-normalize-timing-functions": "^5.0.1",
-                "postcss-normalize-unicode": "^5.0.1",
-                "postcss-normalize-url": "^5.0.2",
-                "postcss-normalize-whitespace": "^5.0.1",
-                "postcss-ordered-values": "^5.0.2",
-                "postcss-reduce-initial": "^5.0.1",
-                "postcss-reduce-transforms": "^5.0.1",
-                "postcss-svgo": "^5.0.2",
-                "postcss-unique-selectors": "^5.0.1"
-            }
-        },
-        "cssnano-utils": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz",
-            "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==",
-            "dev": true
-        },
-        "csso": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
-            "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
-            "dev": true,
-            "requires": {
-                "css-tree": "^1.1.2"
-            }
-        },
-        "d": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
-            "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
-            "dev": true,
-            "requires": {
-                "es5-ext": "^0.10.50",
-                "type": "^1.0.1"
-            }
-        },
-        "dayjs": {
-            "version": "1.10.7",
-            "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz",
-            "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig=="
-        },
-        "de-indent": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
-            "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
-            "dev": true
-        },
-        "debug": {
-            "version": "4.3.2",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
-            "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
-            "dev": true,
-            "requires": {
-                "ms": "2.1.2"
-            }
-        },
-        "decode-uri-component": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
-            "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
-            "dev": true
-        },
-        "deep-equal": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
-            "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
-            "dev": true,
-            "requires": {
-                "is-arguments": "^1.0.4",
-                "is-date-object": "^1.0.1",
-                "is-regex": "^1.0.4",
-                "object-is": "^1.0.1",
-                "object-keys": "^1.1.1",
-                "regexp.prototype.flags": "^1.2.0"
-            }
-        },
-        "default-gateway": {
-            "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
-            "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
-            "dev": true,
-            "requires": {
-                "execa": "^5.0.0"
-            }
-        },
-        "define-lazy-prop": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
-            "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
-            "dev": true
-        },
-        "define-properties": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-            "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-            "dev": true,
-            "requires": {
-                "object-keys": "^1.0.12"
-            }
-        },
-        "defined": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
-            "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
-            "dev": true
-        },
-        "del": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
-            "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
-            "dev": true,
-            "requires": {
-                "globby": "^11.0.1",
-                "graceful-fs": "^4.2.4",
-                "is-glob": "^4.0.1",
-                "is-path-cwd": "^2.2.0",
-                "is-path-inside": "^3.0.2",
-                "p-map": "^4.0.0",
-                "rimraf": "^3.0.2",
-                "slash": "^3.0.0"
-            },
-            "dependencies": {
-                "globby": {
-                    "version": "11.0.4",
-                    "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
-                    "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
-                    "dev": true,
-                    "requires": {
-                        "array-union": "^2.1.0",
-                        "dir-glob": "^3.0.1",
-                        "fast-glob": "^3.1.1",
-                        "ignore": "^5.1.4",
-                        "merge2": "^1.3.0",
-                        "slash": "^3.0.0"
-                    }
-                },
-                "graceful-fs": {
-                    "version": "4.2.8",
-                    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
-                    "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
-                    "dev": true
-                }
-            }
-        },
-        "depd": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-            "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
-            "dev": true
-        },
-        "des.js": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
-            "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
-            "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "minimalistic-assert": "^1.0.0"
-            }
-        },
-        "destroy": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
-            "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
-            "dev": true
-        },
-        "detect-node": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
-            "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
-            "dev": true
-        },
-        "detective": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
-            "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
-            "dev": true,
-            "requires": {
-                "acorn-node": "^1.6.1",
-                "defined": "^1.0.0",
-                "minimist": "^1.1.1"
-            }
-        },
-        "dev-ip": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
-            "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==",
-            "dev": true
-        },
-        "didyoumean": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
-            "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
-            "dev": true
-        },
-        "diffie-hellman": {
-            "version": "5.0.3",
-            "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
-            "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
-            "dev": true,
-            "requires": {
-                "bn.js": "^4.1.0",
-                "miller-rabin": "^4.0.0",
-                "randombytes": "^2.0.0"
-            },
-            "dependencies": {
-                "bn.js": {
-                    "version": "4.12.0",
-                    "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-                    "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-                    "dev": true
-                }
-            }
-        },
-        "dir-glob": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-            "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-            "dev": true,
-            "requires": {
-                "path-type": "^4.0.0"
-            }
-        },
-        "dlv": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
-            "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
-            "dev": true
-        },
-        "dns-equal": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
-            "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
-            "dev": true
-        },
-        "dns-packet": {
-            "version": "1.3.4",
-            "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
-            "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
-            "dev": true,
-            "requires": {
-                "ip": "^1.1.0",
-                "safe-buffer": "^5.0.1"
-            }
-        },
-        "dns-txt": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
-            "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
-            "dev": true,
-            "requires": {
-                "buffer-indexof": "^1.0.0"
-            }
-        },
-        "dom-serializer": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
-            "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
-            "dev": true,
-            "requires": {
-                "domelementtype": "^2.0.1",
-                "domhandler": "^4.2.0",
-                "entities": "^2.0.0"
-            }
-        },
-        "domain-browser": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
-            "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
-            "dev": true
-        },
-        "domelementtype": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
-            "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
-            "dev": true
-        },
-        "domhandler": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
-            "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
-            "dev": true,
-            "requires": {
-                "domelementtype": "^2.2.0"
-            }
-        },
-        "domutils": {
-            "version": "2.7.0",
-            "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz",
-            "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==",
-            "dev": true,
-            "requires": {
-                "dom-serializer": "^1.0.1",
-                "domelementtype": "^2.2.0",
-                "domhandler": "^4.2.0"
-            }
-        },
-        "dot-case": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
-            "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
-            "dev": true,
-            "requires": {
-                "no-case": "^3.0.4",
-                "tslib": "^2.0.3"
-            }
-        },
-        "dotenv": {
-            "version": "10.0.0",
-            "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
-            "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
-            "dev": true
-        },
-        "dotenv-expand": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
-            "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
-            "dev": true
-        },
-        "easy-extender": {
-            "version": "2.3.4",
-            "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
-            "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
-            "dev": true,
-            "requires": {
-                "lodash": "^4.17.10"
-            }
-        },
-        "eazy-logger": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz",
-            "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==",
-            "dev": true,
-            "requires": {
-                "tfunk": "^4.0.0"
-            }
-        },
-        "ee-first": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-            "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
-            "dev": true
-        },
-        "elliptic": {
-            "version": "6.5.4",
-            "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
-            "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
-            "dev": true,
-            "requires": {
-                "bn.js": "^4.11.9",
-                "brorand": "^1.1.0",
-                "hash.js": "^1.0.0",
-                "hmac-drbg": "^1.0.1",
-                "inherits": "^2.0.4",
-                "minimalistic-assert": "^1.0.1",
-                "minimalistic-crypto-utils": "^1.0.1"
-            },
-            "dependencies": {
-                "bn.js": {
-                    "version": "4.12.0",
-                    "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-                    "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-                    "dev": true
-                }
-            }
-        },
-        "emoji-regex": {
-            "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-            "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-            "dev": true
-        },
-        "emojis-list": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
-            "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-            "dev": true
-        },
-        "encodeurl": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-            "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
-            "dev": true
-        },
-        "engine.io": {
-            "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz",
-            "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==",
-            "dev": true,
-            "requires": {
-                "@types/cookie": "^0.4.1",
-                "@types/cors": "^2.8.12",
-                "@types/node": ">=10.0.0",
-                "accepts": "~1.3.4",
-                "base64id": "2.0.0",
-                "cookie": "~0.4.1",
-                "cors": "~2.8.5",
-                "debug": "~4.3.1",
-                "engine.io-parser": "~5.0.3",
-                "ws": "~8.2.3"
-            },
-            "dependencies": {
-                "cookie": {
-                    "version": "0.4.2",
-                    "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
-                    "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
-                    "dev": true
-                },
-                "ws": {
-                    "version": "8.2.3",
-                    "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
-                    "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
-                    "dev": true
-                }
-            }
-        },
-        "engine.io-client": {
-            "version": "6.2.3",
-            "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz",
-            "integrity": "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==",
-            "dev": true,
-            "requires": {
-                "@socket.io/component-emitter": "~3.1.0",
-                "debug": "~4.3.1",
-                "engine.io-parser": "~5.0.3",
-                "ws": "~8.2.3",
-                "xmlhttprequest-ssl": "~2.0.0"
-            },
-            "dependencies": {
-                "ws": {
-                    "version": "8.2.3",
-                    "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
-                    "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
-                    "dev": true
-                }
-            }
-        },
-        "engine.io-parser": {
-            "version": "5.0.4",
-            "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
-            "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
-            "dev": true
-        },
-        "enhanced-resolve": {
-            "version": "5.8.2",
-            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz",
-            "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==",
-            "dev": true,
-            "requires": {
-                "graceful-fs": "^4.2.4",
-                "tapable": "^2.2.0"
-            },
-            "dependencies": {
-                "graceful-fs": {
-                    "version": "4.2.8",
-                    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
-                    "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
-                    "dev": true
-                }
-            }
-        },
-        "entities": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
-            "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
-            "dev": true
-        },
-        "envinfo": {
-            "version": "7.8.1",
-            "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
-            "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
-            "dev": true
-        },
-        "error-ex": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-            "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-            "dev": true,
-            "requires": {
-                "is-arrayish": "^0.2.1"
-            }
-        },
-        "es-module-lexer": {
-            "version": "0.7.1",
-            "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz",
-            "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==",
-            "dev": true
-        },
-        "es5-ext": {
-            "version": "0.10.53",
-            "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
-            "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
-            "dev": true,
-            "requires": {
-                "es6-iterator": "~2.0.3",
-                "es6-symbol": "~3.1.3",
-                "next-tick": "~1.0.0"
-            }
-        },
-        "es6-iterator": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
-            "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
-            "dev": true,
-            "requires": {
-                "d": "1",
-                "es5-ext": "^0.10.35",
-                "es6-symbol": "^3.1.1"
-            }
-        },
-        "es6-symbol": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
-            "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
-            "dev": true,
-            "requires": {
-                "d": "^1.0.1",
-                "ext": "^1.1.2"
-            }
-        },
-        "escalade": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-            "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
-            "dev": true
-        },
-        "escape-html": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-            "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
-            "dev": true
-        },
-        "escape-string-regexp": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-            "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-            "dev": true
-        },
-        "eslint-scope": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-            "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-            "dev": true,
-            "requires": {
-                "esrecurse": "^4.3.0",
-                "estraverse": "^4.1.1"
-            }
-        },
-        "esrecurse": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-            "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-            "dev": true,
-            "requires": {
-                "estraverse": "^5.2.0"
-            },
-            "dependencies": {
-                "estraverse": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
-                    "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
-                    "dev": true
-                }
-            }
-        },
-        "estraverse": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-            "dev": true
-        },
-        "esutils": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-            "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-            "dev": true
-        },
-        "etag": {
-            "version": "1.8.1",
-            "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-            "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
-            "dev": true
-        },
-        "eventemitter3": {
-            "version": "4.0.7",
-            "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
-            "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
-            "dev": true
-        },
-        "events": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-            "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
-            "dev": true
-        },
-        "evp_bytestokey": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
-            "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
-            "dev": true,
-            "requires": {
-                "md5.js": "^1.3.4",
-                "safe-buffer": "^5.1.1"
-            }
-        },
-        "execa": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
-            "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
-            "dev": true,
-            "requires": {
-                "cross-spawn": "^7.0.3",
-                "get-stream": "^6.0.0",
-                "human-signals": "^2.1.0",
-                "is-stream": "^2.0.0",
-                "merge-stream": "^2.0.0",
-                "npm-run-path": "^4.0.1",
-                "onetime": "^5.1.2",
-                "signal-exit": "^3.0.3",
-                "strip-final-newline": "^2.0.0"
-            }
-        },
-        "express": {
-            "version": "4.17.1",
-            "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
-            "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
-            "dev": true,
-            "requires": {
-                "accepts": "~1.3.7",
-                "array-flatten": "1.1.1",
-                "body-parser": "1.19.0",
-                "content-disposition": "0.5.3",
-                "content-type": "~1.0.4",
-                "cookie": "0.4.0",
-                "cookie-signature": "1.0.6",
-                "debug": "2.6.9",
-                "depd": "~1.1.2",
-                "encodeurl": "~1.0.2",
-                "escape-html": "~1.0.3",
-                "etag": "~1.8.1",
-                "finalhandler": "~1.1.2",
-                "fresh": "0.5.2",
-                "merge-descriptors": "1.0.1",
-                "methods": "~1.1.2",
-                "on-finished": "~2.3.0",
-                "parseurl": "~1.3.3",
-                "path-to-regexp": "0.1.7",
-                "proxy-addr": "~2.0.5",
-                "qs": "6.7.0",
-                "range-parser": "~1.2.1",
-                "safe-buffer": "5.1.2",
-                "send": "0.17.1",
-                "serve-static": "1.14.1",
-                "setprototypeof": "1.1.1",
-                "statuses": "~1.5.0",
-                "type-is": "~1.6.18",
-                "utils-merge": "1.0.1",
-                "vary": "~1.1.2"
-            },
-            "dependencies": {
-                "array-flatten": {
-                    "version": "1.1.1",
-                    "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-                    "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
-                    "dev": true
-                },
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-                    "dev": true
-                }
-            }
-        },
-        "ext": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
-            "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
-            "dev": true,
-            "requires": {
-                "type": "^2.0.0"
-            },
-            "dependencies": {
-                "type": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz",
-                    "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==",
-                    "dev": true
-                }
-            }
-        },
-        "fast-deep-equal": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-            "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-            "dev": true
-        },
-        "fast-glob": {
-            "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
-            "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
-            "dev": true,
-            "requires": {
-                "@nodelib/fs.stat": "^2.0.2",
-                "@nodelib/fs.walk": "^1.2.3",
-                "glob-parent": "^5.1.2",
-                "merge2": "^1.3.0",
-                "micromatch": "^4.0.4"
-            }
-        },
-        "fast-json-stable-stringify": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-            "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-            "dev": true
-        },
-        "fastest-levenshtein": {
-            "version": "1.0.12",
-            "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
-            "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
-            "dev": true
-        },
-        "fastq": {
-            "version": "1.12.0",
-            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz",
-            "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==",
-            "dev": true,
-            "requires": {
-                "reusify": "^1.0.4"
-            }
-        },
-        "faye-websocket": {
-            "version": "0.11.4",
-            "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
-            "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
-            "dev": true,
-            "requires": {
-                "websocket-driver": ">=0.5.1"
-            }
-        },
-        "figures": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-            "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
-            "dev": true,
-            "requires": {
-                "escape-string-regexp": "^1.0.5"
-            }
-        },
-        "file-loader": {
-            "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
-            "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
-            "dev": true,
-            "requires": {
-                "loader-utils": "^2.0.0",
-                "schema-utils": "^3.0.0"
-            },
-            "dependencies": {
-                "emojis-list": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-                    "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-                    "dev": true
-                },
-                "loader-utils": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-                    "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-                    "dev": true,
-                    "requires": {
-                        "big.js": "^5.2.2",
-                        "emojis-list": "^3.0.0",
-                        "json5": "^2.1.2"
-                    }
-                },
-                "schema-utils": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
-                    "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                }
-            }
-        },
-        "file-type": {
-            "version": "12.4.2",
-            "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz",
-            "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==",
-            "dev": true
-        },
-        "fill-range": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-            "dev": true,
-            "requires": {
-                "to-regex-range": "^5.0.1"
-            }
-        },
-        "finalhandler": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
-            "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
-            "dev": true,
-            "requires": {
-                "debug": "2.6.9",
-                "encodeurl": "~1.0.2",
-                "escape-html": "~1.0.3",
-                "on-finished": "~2.3.0",
-                "parseurl": "~1.3.3",
-                "statuses": "~1.5.0",
-                "unpipe": "~1.0.0"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-                    "dev": true
-                }
-            }
-        },
-        "find-cache-dir": {
-            "version": "3.3.1",
-            "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
-            "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
-            "dev": true,
-            "requires": {
-                "commondir": "^1.0.1",
-                "make-dir": "^3.0.2",
-                "pkg-dir": "^4.1.0"
-            }
-        },
-        "find-up": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-            "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-            "dev": true,
-            "requires": {
-                "locate-path": "^5.0.0",
-                "path-exists": "^4.0.0"
-            }
-        },
-        "flatten": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
-            "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
-            "dev": true
-        },
-        "follow-redirects": {
-            "version": "1.14.8",
-            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz",
-            "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==",
-            "dev": true
-        },
-        "forwarded": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
-            "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
-            "dev": true
-        },
-        "fraction.js": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz",
-            "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==",
-            "dev": true
-        },
-        "fresh": {
-            "version": "0.5.2",
-            "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-            "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
-            "dev": true
-        },
-        "fs-extra": {
-            "version": "10.0.0",
-            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
-            "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
-            "dev": true,
-            "requires": {
-                "graceful-fs": "^4.2.0",
-                "jsonfile": "^6.0.1",
-                "universalify": "^2.0.0"
-            },
-            "dependencies": {
-                "jsonfile": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-                    "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
-                    "dev": true,
-                    "requires": {
-                        "graceful-fs": "^4.1.6",
-                        "universalify": "^2.0.0"
-                    }
-                },
-                "universalify": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-                    "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
-                    "dev": true
-                }
-            }
-        },
-        "fs-monkey": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
-            "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
-            "dev": true
-        },
-        "fs.realpath": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-            "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-            "dev": true
-        },
-        "fsevents": {
-            "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-            "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-            "dev": true,
-            "optional": true
-        },
-        "function-bind": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-            "dev": true
-        },
-        "gensync": {
-            "version": "1.0.0-beta.2",
-            "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
-            "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
-            "dev": true
-        },
-        "get-caller-file": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-            "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-            "dev": true
-        },
-        "get-intrinsic": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
-            "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
-            "dev": true,
-            "requires": {
-                "function-bind": "^1.1.1",
-                "has": "^1.0.3",
-                "has-symbols": "^1.0.1"
-            }
-        },
-        "get-stream": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
-            "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
-            "dev": true
-        },
-        "glob": {
-            "version": "7.1.4",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
-            "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
-            "dev": true,
-            "requires": {
-                "fs.realpath": "^1.0.0",
-                "inflight": "^1.0.4",
-                "inherits": "2",
-                "minimatch": "^3.0.4",
-                "once": "^1.3.0",
-                "path-is-absolute": "^1.0.0"
-            }
-        },
-        "glob-parent": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-            "dev": true,
-            "requires": {
-                "is-glob": "^4.0.1"
-            }
-        },
-        "glob-to-regexp": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-            "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-            "dev": true
-        },
-        "globals": {
-            "version": "11.12.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
-            "dev": true
-        },
-        "globby": {
-            "version": "10.0.2",
-            "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz",
-            "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==",
-            "dev": true,
-            "requires": {
-                "@types/glob": "^7.1.1",
-                "array-union": "^2.1.0",
-                "dir-glob": "^3.0.1",
-                "fast-glob": "^3.0.3",
-                "glob": "^7.1.3",
-                "ignore": "^5.1.1",
-                "merge2": "^1.2.3",
-                "slash": "^3.0.0"
-            }
-        },
-        "graceful-fs": {
-            "version": "4.2.2",
-            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
-            "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
-            "dev": true
-        },
-        "growly": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
-            "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
-            "dev": true
-        },
-        "handle-thing": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
-            "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
-            "dev": true
-        },
-        "has": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-            "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-            "dev": true,
-            "requires": {
-                "function-bind": "^1.1.1"
-            }
-        },
-        "has-ansi": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-            "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
-            "dev": true,
-            "requires": {
-                "ansi-regex": "^2.0.0"
-            },
-            "dependencies": {
-                "ansi-regex": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-                    "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
-                    "dev": true
-                }
-            }
-        },
-        "has-flag": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-            "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-            "dev": true
-        },
-        "has-symbols": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
-            "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
-            "dev": true
-        },
-        "has-tostringtag": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-            "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
-            "dev": true,
-            "requires": {
-                "has-symbols": "^1.0.2"
-            }
-        },
-        "hash-base": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
-            "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
-            "dev": true,
-            "requires": {
-                "inherits": "^2.0.4",
-                "readable-stream": "^3.6.0",
-                "safe-buffer": "^5.2.0"
-            },
-            "dependencies": {
-                "readable-stream": {
-                    "version": "3.6.0",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-                    "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "^2.0.3",
-                        "string_decoder": "^1.1.1",
-                        "util-deprecate": "^1.0.1"
-                    }
-                },
-                "safe-buffer": {
-                    "version": "5.2.1",
-                    "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-                    "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-                    "dev": true
-                }
-            }
-        },
-        "hash-sum": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
-            "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
-            "dev": true
-        },
-        "hash.js": {
-            "version": "1.1.7",
-            "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
-            "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
-            "dev": true,
-            "requires": {
-                "inherits": "^2.0.3",
-                "minimalistic-assert": "^1.0.1"
-            }
-        },
-        "he": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
-            "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
-            "dev": true
-        },
-        "hmac-drbg": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
-            "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
-            "dev": true,
-            "requires": {
-                "hash.js": "^1.0.3",
-                "minimalistic-assert": "^1.0.0",
-                "minimalistic-crypto-utils": "^1.0.1"
-            }
-        },
-        "hpack.js": {
-            "version": "2.1.6",
-            "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
-            "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
-            "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "obuf": "^1.0.0",
-                "readable-stream": "^2.0.1",
-                "wbuf": "^1.1.0"
-            }
-        },
-        "html-entities": {
-            "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
-            "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==",
-            "dev": true
-        },
-        "html-loader": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz",
-            "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==",
-            "dev": true,
-            "requires": {
-                "html-minifier-terser": "^5.1.1",
-                "htmlparser2": "^4.1.0",
-                "loader-utils": "^2.0.0",
-                "schema-utils": "^3.0.0"
-            },
-            "dependencies": {
-                "emojis-list": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-                    "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-                    "dev": true
-                },
-                "loader-utils": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-                    "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-                    "dev": true,
-                    "requires": {
-                        "big.js": "^5.2.2",
-                        "emojis-list": "^3.0.0",
-                        "json5": "^2.1.2"
-                    }
-                },
-                "schema-utils": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
-                    "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                }
-            }
-        },
-        "html-minifier-terser": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
-            "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
-            "dev": true,
-            "requires": {
-                "camel-case": "^4.1.1",
-                "clean-css": "^4.2.3",
-                "commander": "^4.1.1",
-                "he": "^1.2.0",
-                "param-case": "^3.0.3",
-                "relateurl": "^0.2.7",
-                "terser": "^4.6.3"
-            },
-            "dependencies": {
-                "clean-css": {
-                    "version": "4.2.3",
-                    "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
-                    "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
-                    "dev": true,
-                    "requires": {
-                        "source-map": "~0.6.0"
-                    }
-                },
-                "commander": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
-                    "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
-                    "dev": true
-                },
-                "terser": {
-                    "version": "4.8.1",
-                    "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
-                    "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
-                    "dev": true,
-                    "requires": {
-                        "commander": "^2.20.0",
-                        "source-map": "~0.6.1",
-                        "source-map-support": "~0.5.12"
-                    },
-                    "dependencies": {
-                        "commander": {
-                            "version": "2.20.3",
-                            "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-                            "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-                            "dev": true
-                        }
-                    }
-                }
-            }
-        },
-        "html-tags": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
-            "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
-            "dev": true
-        },
-        "htmlparser2": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz",
-            "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==",
-            "dev": true,
-            "requires": {
-                "domelementtype": "^2.0.1",
-                "domhandler": "^3.0.0",
-                "domutils": "^2.0.0",
-                "entities": "^2.0.0"
-            },
-            "dependencies": {
-                "domhandler": {
-                    "version": "3.3.0",
-                    "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
-                    "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
-                    "dev": true,
-                    "requires": {
-                        "domelementtype": "^2.0.1"
-                    }
-                }
-            }
-        },
-        "http-deceiver": {
-            "version": "1.2.7",
-            "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
-            "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
-            "dev": true
-        },
-        "http-errors": {
-            "version": "1.7.2",
-            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
-            "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
-            "dev": true,
-            "requires": {
-                "depd": "~1.1.2",
-                "inherits": "2.0.3",
-                "setprototypeof": "1.1.1",
-                "statuses": ">= 1.5.0 < 2",
-                "toidentifier": "1.0.0"
-            },
-            "dependencies": {
-                "inherits": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-                    "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-                    "dev": true
-                }
-            }
-        },
-        "http-parser-js": {
-            "version": "0.5.3",
-            "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz",
-            "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==",
-            "dev": true
-        },
-        "http-proxy": {
-            "version": "1.18.1",
-            "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
-            "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
-            "dev": true,
-            "requires": {
-                "eventemitter3": "^4.0.0",
-                "follow-redirects": "^1.0.0",
-                "requires-port": "^1.0.0"
-            }
-        },
-        "http-proxy-middleware": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz",
-            "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==",
-            "dev": true,
-            "requires": {
-                "@types/http-proxy": "^1.17.5",
-                "http-proxy": "^1.18.1",
-                "is-glob": "^4.0.1",
-                "is-plain-obj": "^3.0.0",
-                "micromatch": "^4.0.2"
-            }
-        },
-        "https-browserify": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
-            "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
-            "dev": true
-        },
-        "human-signals": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-            "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-            "dev": true
-        },
-        "iconv-lite": {
-            "version": "0.4.24",
-            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-            "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-            "dev": true,
-            "requires": {
-                "safer-buffer": ">= 2.1.2 < 3"
-            }
-        },
-        "icss-utils": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
-            "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
-            "dev": true
-        },
-        "ieee754": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
-            "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
-            "dev": true
-        },
-        "ignore": {
-            "version": "5.1.8",
-            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
-            "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
-            "dev": true
-        },
-        "imagemin": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz",
-            "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==",
-            "dev": true,
-            "requires": {
-                "file-type": "^12.0.0",
-                "globby": "^10.0.0",
-                "graceful-fs": "^4.2.2",
-                "junk": "^3.1.0",
-                "make-dir": "^3.0.0",
-                "p-pipe": "^3.0.0",
-                "replace-ext": "^1.0.0"
-            }
-        },
-        "img-loader": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz",
-            "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==",
-            "dev": true,
-            "requires": {
-                "loader-utils": "^1.1.0"
-            }
-        },
-        "immutable": {
-            "version": "3.8.2",
-            "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
-            "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==",
-            "dev": true
-        },
-        "import-cwd": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz",
-            "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==",
-            "dev": true,
-            "requires": {
-                "import-from": "^3.0.0"
-            }
-        },
-        "import-fresh": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-            "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-            "dev": true,
-            "requires": {
-                "parent-module": "^1.0.0",
-                "resolve-from": "^4.0.0"
-            },
-            "dependencies": {
-                "resolve-from": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-                    "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-                    "dev": true
-                }
-            }
-        },
-        "import-from": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz",
-            "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==",
-            "dev": true,
-            "requires": {
-                "resolve-from": "^5.0.0"
-            }
-        },
-        "import-local": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
-            "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
-            "dev": true,
-            "requires": {
-                "pkg-dir": "^4.2.0",
-                "resolve-cwd": "^3.0.0"
-            }
-        },
-        "indent-string": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
-            "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
-            "dev": true
-        },
-        "indexes-of": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
-            "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
-            "dev": true
-        },
-        "inflight": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-            "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-            "dev": true,
-            "requires": {
-                "once": "^1.3.0",
-                "wrappy": "1"
-            }
-        },
-        "inherits": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-            "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-            "dev": true
-        },
-        "internal-ip": {
-            "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz",
-            "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==",
-            "dev": true,
-            "requires": {
-                "default-gateway": "^6.0.0",
-                "ipaddr.js": "^1.9.1",
-                "is-ip": "^3.1.0",
-                "p-event": "^4.2.0"
-            },
-            "dependencies": {
-                "ipaddr.js": {
-                    "version": "1.9.1",
-                    "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-                    "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
-                    "dev": true
-                }
-            }
-        },
-        "interpret": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
-            "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
-            "dev": true
-        },
-        "ip": {
-            "version": "1.1.5",
-            "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
-            "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
-            "dev": true
-        },
-        "ip-regex": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
-            "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
-            "dev": true
-        },
-        "ipaddr.js": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
-            "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==",
-            "dev": true
-        },
-        "is-absolute-url": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
-            "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
-            "dev": true
-        },
-        "is-arguments": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
-            "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
-            "dev": true,
-            "requires": {
-                "call-bind": "^1.0.2",
-                "has-tostringtag": "^1.0.0"
-            }
-        },
-        "is-arrayish": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-            "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-            "dev": true
-        },
-        "is-binary-path": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-            "dev": true,
-            "requires": {
-                "binary-extensions": "^2.0.0"
-            }
-        },
-        "is-core-module": {
-            "version": "2.6.0",
-            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
-            "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
-            "dev": true,
-            "requires": {
-                "has": "^1.0.3"
-            }
-        },
-        "is-date-object": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-            "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
-            "dev": true,
-            "requires": {
-                "has-tostringtag": "^1.0.0"
-            }
-        },
-        "is-docker": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
-            "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
-            "dev": true
-        },
-        "is-extglob": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-            "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-            "dev": true
-        },
-        "is-fullwidth-code-point": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-            "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-            "dev": true
-        },
-        "is-glob": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-            "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
-            "dev": true,
-            "requires": {
-                "is-extglob": "^2.1.1"
-            }
-        },
-        "is-ip": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz",
-            "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==",
-            "dev": true,
-            "requires": {
-                "ip-regex": "^4.0.0"
-            }
-        },
-        "is-number": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-            "dev": true
-        },
-        "is-number-like": {
-            "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
-            "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
-            "dev": true,
-            "requires": {
-                "lodash.isfinite": "^3.3.2"
-            }
-        },
-        "is-path-cwd": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
-            "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
-            "dev": true
-        },
-        "is-path-inside": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-            "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-            "dev": true
-        },
-        "is-plain-obj": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
-            "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
-            "dev": true
-        },
-        "is-plain-object": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-            "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-            "dev": true,
-            "requires": {
-                "isobject": "^3.0.1"
-            }
-        },
-        "is-regex": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-            "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
-            "dev": true,
-            "requires": {
-                "call-bind": "^1.0.2",
-                "has-tostringtag": "^1.0.0"
-            }
-        },
-        "is-resolvable": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
-            "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
-            "dev": true
-        },
-        "is-stream": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
-            "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-            "dev": true
-        },
-        "is-wsl": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
-            "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
-            "dev": true,
-            "requires": {
-                "is-docker": "^2.0.0"
-            }
-        },
-        "isarray": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-            "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-            "dev": true
-        },
-        "isexe": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-            "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-            "dev": true
-        },
-        "isobject": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-            "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-            "dev": true
-        },
-        "jest-worker": {
-            "version": "27.0.6",
-            "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz",
-            "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==",
-            "dev": true,
-            "requires": {
-                "@types/node": "*",
-                "merge-stream": "^2.0.0",
-                "supports-color": "^8.0.0"
-            },
-            "dependencies": {
-                "has-flag": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-                    "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-                    "dev": true
-                },
-                "supports-color": {
-                    "version": "8.1.1",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-                    "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^4.0.0"
-                    }
-                }
-            }
-        },
-        "js-tokens": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-            "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-            "dev": true
-        },
-        "jsesc": {
-            "version": "2.5.2",
-            "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-            "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
-            "dev": true
-        },
-        "json-parse-better-errors": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-            "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-            "dev": true
-        },
-        "json-parse-even-better-errors": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-            "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-            "dev": true
-        },
-        "json-schema-traverse": {
-            "version": "0.4.1",
-            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-            "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-            "dev": true
-        },
-        "json5": {
-            "version": "2.1.3",
-            "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
-            "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
-            "dev": true,
-            "requires": {
-                "minimist": "^1.2.5"
-            }
-        },
-        "jsonfile": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
-            "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==",
-            "dev": true,
-            "requires": {
-                "graceful-fs": "^4.1.6"
-            }
-        },
-        "junk": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
-            "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
-            "dev": true
-        },
-        "kind-of": {
-            "version": "6.0.3",
-            "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-            "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-            "dev": true
-        },
-        "klona": {
-            "version": "2.0.4",
-            "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz",
-            "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==",
-            "dev": true
-        },
-        "laravel-mix": {
-            "version": "6.0.28",
-            "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.28.tgz",
-            "integrity": "sha512-aF90/0MSWcwafvsnUUA6fjhQ21Y2ci1p1huyZKUJpzIBEpuO0qTu1smHxITsk0h/6UaflHKFp7F8jjKuMvVAtg==",
-            "dev": true,
-            "requires": {
-                "@babel/core": "^7.14.5",
-                "@babel/plugin-proposal-object-rest-spread": "^7.14.5",
-                "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-                "@babel/plugin-transform-runtime": "^7.14.5",
-                "@babel/preset-env": "^7.14.5",
-                "@babel/runtime": "^7.14.5",
-                "@types/babel__core": "^7.1.14",
-                "@types/clean-css": "^4.2.4",
-                "@types/imagemin-gifsicle": "^7.0.0",
-                "@types/imagemin-mozjpeg": "^8.0.0",
-                "@types/imagemin-optipng": "^5.2.0",
-                "@types/imagemin-svgo": "^8.0.0",
-                "autoprefixer": "^10.2.6",
-                "babel-loader": "^8.2.2",
-                "chalk": "^4.1.1",
-                "chokidar": "^3.5.1",
-                "clean-css": "^4.2.3 || ^5.1.2",
-                "cli-table3": "^0.6.0",
-                "collect.js": "^4.28.5",
-                "commander": "^7.2.0",
-                "concat": "^1.0.3",
-                "css-loader": "^5.2.6",
-                "cssnano": "^5.0.6",
-                "dotenv": "^10.0.0",
-                "dotenv-expand": "^5.1.0",
-                "file-loader": "^6.2.0",
-                "fs-extra": "^10.0.0",
-                "glob": "^7.1.7",
-                "html-loader": "^1.3.2",
-                "imagemin": "^7.0.1",
-                "img-loader": "^4.0.0",
-                "lodash": "^4.17.21",
-                "md5": "^2.3.0",
-                "mini-css-extract-plugin": "^1.6.0",
-                "node-libs-browser": "^2.2.1",
-                "postcss-load-config": "^3.0.1",
-                "postcss-loader": "^6.1.0",
-                "semver": "^7.3.5",
-                "strip-ansi": "^6.0.0",
-                "style-loader": "^2.0.0",
-                "terser": "^5.7.0",
-                "terser-webpack-plugin": "^5.1.3",
-                "vue-style-loader": "^4.1.3",
-                "webpack": "^5.38.1",
-                "webpack-cli": "^4.7.2",
-                "webpack-dev-server": "4.0.0-rc.1",
-                "webpack-merge": "^5.8.0",
-                "webpack-notifier": "^1.13.0",
-                "webpackbar": "^5.0.0-3",
-                "yargs": "^17.0.1"
-            },
-            "dependencies": {
-                "ansi-styles": {
-                    "version": "4.3.0",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-                    "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-                    "dev": true,
-                    "requires": {
-                        "color-convert": "^2.0.1"
-                    }
-                },
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
-                },
-                "color-convert": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-                    "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-                    "dev": true,
-                    "requires": {
-                        "color-name": "~1.1.4"
-                    }
-                },
-                "color-name": {
-                    "version": "1.1.4",
-                    "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-                    "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-                    "dev": true
-                },
-                "glob": {
-                    "version": "7.1.7",
-                    "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
-                    "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
-                    "dev": true,
-                    "requires": {
-                        "fs.realpath": "^1.0.0",
-                        "inflight": "^1.0.4",
-                        "inherits": "2",
-                        "minimatch": "^3.0.4",
-                        "once": "^1.3.0",
-                        "path-is-absolute": "^1.0.0"
-                    }
-                },
-                "has-flag": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-                    "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-                    "dev": true
-                },
-                "lodash": {
-                    "version": "4.17.21",
-                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-                    "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-                    "dev": true
-                },
-                "semver": {
-                    "version": "7.3.5",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-                    "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
-                    "dev": true,
-                    "requires": {
-                        "lru-cache": "^6.0.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "7.2.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-                    "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^4.0.0"
-                    }
-                }
-            }
-        },
-        "laravel-mix-purgecss": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/laravel-mix-purgecss/-/laravel-mix-purgecss-5.0.0.tgz",
-            "integrity": "sha512-4URem8XuQBiQQK2PkoLAdPWq/g6d1LLf+afrl7iTzT07ctNcpiofmmlgIWQnzwhv94wt/8xBY3wGZWosJoaGog==",
-            "dev": true,
-            "requires": {
-                "postcss-purgecss-laravel": "^0.1.1"
-            }
-        },
-        "lilconfig": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz",
-            "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==",
-            "dev": true
-        },
-        "limiter": {
-            "version": "1.1.5",
-            "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
-            "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==",
-            "dev": true
-        },
-        "lines-and-columns": {
-            "version": "1.1.6",
-            "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
-            "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
-            "dev": true
-        },
-        "loader-runner": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
-            "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
-            "dev": true
-        },
-        "loader-utils": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
-            "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
-            "dev": true,
-            "requires": {
-                "big.js": "^5.2.2",
-                "emojis-list": "^2.0.0",
-                "json5": "^1.0.1"
-            },
-            "dependencies": {
-                "json5": {
-                    "version": "1.0.1",
-                    "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-                    "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-                    "dev": true,
-                    "requires": {
-                        "minimist": "^1.2.0"
-                    }
-                }
-            }
-        },
-        "localtunnel": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz",
-            "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==",
-            "dev": true,
-            "requires": {
-                "axios": "0.21.4",
-                "debug": "4.3.2",
-                "openurl": "1.1.1",
-                "yargs": "17.1.1"
-            },
-            "dependencies": {
-                "axios": {
-                    "version": "0.21.4",
-                    "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
-                    "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
-                    "dev": true,
-                    "requires": {
-                        "follow-redirects": "^1.14.0"
-                    }
-                }
-            }
-        },
-        "locate-path": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-            "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-            "dev": true,
-            "requires": {
-                "p-locate": "^4.1.0"
-            }
-        },
-        "lodash": {
-            "version": "4.17.19",
-            "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
-            "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
-            "dev": true
-        },
-        "lodash._reinterpolate": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
-            "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
-            "dev": true
-        },
-        "lodash.debounce": {
-            "version": "4.0.8",
-            "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-            "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
-            "dev": true
-        },
-        "lodash.isfinite": {
-            "version": "3.3.2",
-            "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
-            "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==",
-            "dev": true
-        },
-        "lodash.memoize": {
-            "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-            "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
-            "dev": true
-        },
-        "lodash.template": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
-            "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
-            "dev": true,
-            "requires": {
-                "lodash._reinterpolate": "^3.0.0",
-                "lodash.templatesettings": "^4.0.0"
-            }
-        },
-        "lodash.templatesettings": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
-            "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
-            "dev": true,
-            "requires": {
-                "lodash._reinterpolate": "^3.0.0"
-            }
-        },
-        "lodash.topath": {
-            "version": "4.5.2",
-            "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz",
-            "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=",
-            "dev": true
-        },
-        "lodash.uniq": {
-            "version": "4.5.0",
-            "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-            "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
-            "dev": true
-        },
-        "lower-case": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
-            "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
-            "dev": true,
-            "requires": {
-                "tslib": "^2.0.3"
-            }
-        },
-        "lru-cache": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-            "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-            "dev": true,
-            "requires": {
-                "yallist": "^4.0.0"
-            }
-        },
-        "make-dir": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-            "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-            "dev": true,
-            "requires": {
-                "semver": "^6.0.0"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "6.3.0",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-                    "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-                    "dev": true
-                }
-            }
-        },
-        "map-age-cleaner": {
-            "version": "0.1.3",
-            "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
-            "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
-            "dev": true,
-            "requires": {
-                "p-defer": "^1.0.0"
-            }
-        },
-        "md5": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
-            "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
-            "dev": true,
-            "requires": {
-                "charenc": "0.0.2",
-                "crypt": "0.0.2",
-                "is-buffer": "~1.1.6"
-            },
-            "dependencies": {
-                "is-buffer": {
-                    "version": "1.1.6",
-                    "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-                    "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-                    "dev": true
-                }
-            }
-        },
-        "md5.js": {
-            "version": "1.3.5",
-            "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
-            "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
-            "dev": true,
-            "requires": {
-                "hash-base": "^3.0.0",
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.1.2"
-            }
-        },
-        "mdn-data": {
-            "version": "2.0.14",
-            "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
-            "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
-            "dev": true
-        },
-        "media-typer": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-            "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
-            "dev": true
-        },
-        "mem": {
-            "version": "8.1.1",
-            "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
-            "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==",
-            "dev": true,
-            "requires": {
-                "map-age-cleaner": "^0.1.3",
-                "mimic-fn": "^3.1.0"
-            },
-            "dependencies": {
-                "mimic-fn": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
-                    "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==",
-                    "dev": true
-                }
-            }
-        },
-        "memfs": {
-            "version": "3.2.2",
-            "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz",
-            "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==",
-            "dev": true,
-            "requires": {
-                "fs-monkey": "1.0.3"
-            }
-        },
-        "merge-descriptors": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-            "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
-            "dev": true
-        },
-        "merge-stream": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-            "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-            "dev": true
-        },
-        "merge2": {
-            "version": "1.4.1",
-            "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-            "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-            "dev": true
-        },
-        "methods": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-            "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
-            "dev": true
-        },
-        "micromatch": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
-            "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
-            "dev": true,
-            "requires": {
-                "braces": "^3.0.1",
-                "picomatch": "^2.2.3"
-            },
-            "dependencies": {
-                "picomatch": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
-                    "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
-                    "dev": true
-                }
-            }
-        },
-        "miller-rabin": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
-            "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
-            "dev": true,
-            "requires": {
-                "bn.js": "^4.0.0",
-                "brorand": "^1.0.1"
-            },
-            "dependencies": {
-                "bn.js": {
-                    "version": "4.12.0",
-                    "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-                    "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-                    "dev": true
-                }
-            }
-        },
-        "mime": {
-            "version": "1.6.0",
-            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
-            "dev": true
-        },
-        "mime-db": {
-            "version": "1.49.0",
-            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
-            "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
-            "dev": true
-        },
-        "mime-types": {
-            "version": "2.1.32",
-            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
-            "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
-            "dev": true,
-            "requires": {
-                "mime-db": "1.49.0"
-            }
-        },
-        "mimic-fn": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-            "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
-            "dev": true
-        },
-        "mini-css-extract-plugin": {
-            "version": "1.6.2",
-            "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz",
-            "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==",
-            "dev": true,
-            "requires": {
-                "loader-utils": "^2.0.0",
-                "schema-utils": "^3.0.0",
-                "webpack-sources": "^1.1.0"
-            },
-            "dependencies": {
-                "emojis-list": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-                    "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-                    "dev": true
-                },
-                "loader-utils": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-                    "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-                    "dev": true,
-                    "requires": {
-                        "big.js": "^5.2.2",
-                        "emojis-list": "^3.0.0",
-                        "json5": "^2.1.2"
-                    }
-                },
-                "schema-utils": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
-                    "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                }
-            }
-        },
-        "minimalistic-assert": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-            "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
-            "dev": true
-        },
-        "minimalistic-crypto-utils": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
-            "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
-            "dev": true
-        },
-        "minimatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-            "dev": true,
-            "requires": {
-                "brace-expansion": "^1.1.7"
-            }
-        },
-        "minimist": {
-            "version": "1.2.6",
-            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-            "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
-            "dev": true
-        },
-        "mitt": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz",
-            "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==",
-            "dev": true
-        },
-        "mkdirp": {
-            "version": "0.5.5",
-            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
-            "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-            "dev": true,
-            "requires": {
-                "minimist": "^1.2.5"
-            }
-        },
-        "modern-normalize": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz",
-            "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==",
-            "dev": true
-        },
-        "ms": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-            "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-            "dev": true
-        },
-        "multicast-dns": {
-            "version": "6.2.3",
-            "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
-            "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
-            "dev": true,
-            "requires": {
-                "dns-packet": "^1.3.1",
-                "thunky": "^1.0.2"
-            }
-        },
-        "multicast-dns-service-types": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
-            "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
-            "dev": true
-        },
-        "nanoid": {
-            "version": "3.1.25",
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
-            "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
-            "dev": true
-        },
-        "negotiator": {
-            "version": "0.6.2",
-            "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
-            "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
-            "dev": true
-        },
-        "neo-async": {
-            "version": "2.6.2",
-            "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
-            "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
-            "dev": true
-        },
-        "next-tick": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
-            "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
-            "dev": true
-        },
-        "no-case": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
-            "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
-            "dev": true,
-            "requires": {
-                "lower-case": "^2.0.2",
-                "tslib": "^2.0.3"
-            }
-        },
-        "node-emoji": {
-            "version": "1.11.0",
-            "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
-            "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==",
-            "dev": true,
-            "requires": {
-                "lodash": "^4.17.21"
-            },
-            "dependencies": {
-                "lodash": {
-                    "version": "4.17.21",
-                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-                    "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-                    "dev": true
-                }
-            }
-        },
-        "node-forge": {
-            "version": "0.10.0",
-            "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
-            "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
-            "dev": true
-        },
-        "node-libs-browser": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
-            "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
-            "dev": true,
-            "requires": {
-                "assert": "^1.1.1",
-                "browserify-zlib": "^0.2.0",
-                "buffer": "^4.3.0",
-                "console-browserify": "^1.1.0",
-                "constants-browserify": "^1.0.0",
-                "crypto-browserify": "^3.11.0",
-                "domain-browser": "^1.1.1",
-                "events": "^3.0.0",
-                "https-browserify": "^1.0.0",
-                "os-browserify": "^0.3.0",
-                "path-browserify": "0.0.1",
-                "process": "^0.11.10",
-                "punycode": "^1.2.4",
-                "querystring-es3": "^0.2.0",
-                "readable-stream": "^2.3.3",
-                "stream-browserify": "^2.0.1",
-                "stream-http": "^2.7.2",
-                "string_decoder": "^1.0.0",
-                "timers-browserify": "^2.0.4",
-                "tty-browserify": "0.0.0",
-                "url": "^0.11.0",
-                "util": "^0.11.0",
-                "vm-browserify": "^1.0.1"
-            },
-            "dependencies": {
-                "punycode": {
-                    "version": "1.4.1",
-                    "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-                    "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-                    "dev": true
-                }
-            }
-        },
-        "node-notifier": {
-            "version": "9.0.1",
-            "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz",
-            "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==",
-            "dev": true,
-            "requires": {
-                "growly": "^1.3.0",
-                "is-wsl": "^2.2.0",
-                "semver": "^7.3.2",
-                "shellwords": "^0.1.1",
-                "uuid": "^8.3.0",
-                "which": "^2.0.2"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "7.3.5",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-                    "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
-                    "dev": true,
-                    "requires": {
-                        "lru-cache": "^6.0.0"
-                    }
-                },
-                "uuid": {
-                    "version": "8.3.2",
-                    "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-                    "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-                    "dev": true
-                }
-            }
-        },
-        "normalize-path": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-            "dev": true
-        },
-        "normalize-range": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-            "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
-            "dev": true
-        },
-        "normalize-url": {
-            "version": "6.1.0",
-            "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
-            "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
-            "dev": true
-        },
-        "npm-run-path": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-            "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-            "dev": true,
-            "requires": {
-                "path-key": "^3.0.0"
-            }
-        },
-        "nth-check": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
-            "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
-            "dev": true,
-            "requires": {
-                "boolbase": "^1.0.0"
-            }
-        },
-        "num2fraction": {
-            "version": "1.2.2",
-            "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
-            "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
-            "dev": true
-        },
-        "object-assign": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-            "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-            "dev": true
-        },
-        "object-hash": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
-            "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
-            "dev": true
-        },
-        "object-is": {
-            "version": "1.1.5",
-            "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
-            "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
-            "dev": true,
-            "requires": {
-                "call-bind": "^1.0.2",
-                "define-properties": "^1.1.3"
-            }
-        },
-        "object-keys": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-            "dev": true
-        },
-        "object.assign": {
-            "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
-            "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
-            "dev": true,
-            "requires": {
-                "call-bind": "^1.0.0",
-                "define-properties": "^1.1.3",
-                "has-symbols": "^1.0.1",
-                "object-keys": "^1.1.1"
-            }
-        },
-        "obuf": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
-            "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
-            "dev": true
-        },
-        "on-finished": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-            "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
-            "dev": true,
-            "requires": {
-                "ee-first": "1.1.1"
-            }
-        },
-        "on-headers": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
-            "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
-            "dev": true
-        },
-        "once": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-            "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-            "dev": true,
-            "requires": {
-                "wrappy": "1"
-            }
-        },
-        "onetime": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
-            "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
-            "dev": true,
-            "requires": {
-                "mimic-fn": "^2.1.0"
-            }
-        },
-        "open": {
-            "version": "8.2.1",
-            "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz",
-            "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==",
-            "dev": true,
-            "requires": {
-                "define-lazy-prop": "^2.0.0",
-                "is-docker": "^2.1.1",
-                "is-wsl": "^2.2.0"
-            }
-        },
-        "openurl": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
-            "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==",
-            "dev": true
-        },
-        "opn": {
-            "version": "5.3.0",
-            "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
-            "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
-            "dev": true,
-            "requires": {
-                "is-wsl": "^1.1.0"
-            },
-            "dependencies": {
-                "is-wsl": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
-                    "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
-                    "dev": true
-                }
-            }
-        },
-        "os-browserify": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
-            "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
-            "dev": true
-        },
-        "p-defer": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
-            "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
-            "dev": true
-        },
-        "p-event": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
-            "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
-            "dev": true,
-            "requires": {
-                "p-timeout": "^3.1.0"
-            }
-        },
-        "p-finally": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-            "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
-            "dev": true
-        },
-        "p-limit": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-            "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-            "dev": true,
-            "requires": {
-                "p-try": "^2.0.0"
-            }
-        },
-        "p-locate": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-            "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-            "dev": true,
-            "requires": {
-                "p-limit": "^2.2.0"
-            }
-        },
-        "p-map": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
-            "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
-            "dev": true,
-            "requires": {
-                "aggregate-error": "^3.0.0"
-            }
-        },
-        "p-pipe": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz",
-            "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==",
-            "dev": true
-        },
-        "p-retry": {
-            "version": "4.6.1",
-            "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz",
-            "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==",
-            "dev": true,
-            "requires": {
-                "@types/retry": "^0.12.0",
-                "retry": "^0.13.1"
-            }
-        },
-        "p-timeout": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
-            "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
-            "dev": true,
-            "requires": {
-                "p-finally": "^1.0.0"
-            }
-        },
-        "p-try": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-            "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-            "dev": true
-        },
-        "pako": {
-            "version": "1.0.11",
-            "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
-            "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
-            "dev": true
-        },
-        "param-case": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
-            "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
-            "dev": true,
-            "requires": {
-                "dot-case": "^3.0.4",
-                "tslib": "^2.0.3"
-            }
-        },
-        "parent-module": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-            "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-            "dev": true,
-            "requires": {
-                "callsites": "^3.0.0"
-            },
-            "dependencies": {
-                "callsites": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-                    "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-                    "dev": true
-                }
-            }
-        },
-        "parse-asn1": {
-            "version": "5.1.6",
-            "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
-            "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
-            "dev": true,
-            "requires": {
-                "asn1.js": "^5.2.0",
-                "browserify-aes": "^1.0.0",
-                "evp_bytestokey": "^1.0.0",
-                "pbkdf2": "^3.0.3",
-                "safe-buffer": "^5.1.1"
-            }
-        },
-        "parse-json": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-            "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-            "dev": true,
-            "requires": {
-                "@babel/code-frame": "^7.0.0",
-                "error-ex": "^1.3.1",
-                "json-parse-even-better-errors": "^2.3.0",
-                "lines-and-columns": "^1.1.6"
-            }
-        },
-        "parseurl": {
-            "version": "1.3.3",
-            "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-            "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
-            "dev": true
-        },
-        "pascal-case": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
-            "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
-            "dev": true,
-            "requires": {
-                "no-case": "^3.0.4",
-                "tslib": "^2.0.3"
-            }
-        },
-        "path-browserify": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
-            "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
-            "dev": true
-        },
-        "path-exists": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-            "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-            "dev": true
-        },
-        "path-is-absolute": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-            "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-            "dev": true
-        },
-        "path-key": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-            "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-            "dev": true
-        },
-        "path-parse": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-            "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
-            "dev": true
-        },
-        "path-to-regexp": {
-            "version": "0.1.7",
-            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-            "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
-            "dev": true
-        },
-        "path-type": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-            "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-            "dev": true
-        },
-        "pbkdf2": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
-            "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
-            "dev": true,
-            "requires": {
-                "create-hash": "^1.1.2",
-                "create-hmac": "^1.1.4",
-                "ripemd160": "^2.0.1",
-                "safe-buffer": "^5.0.1",
-                "sha.js": "^2.4.8"
-            }
-        },
-        "picocolors": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
-            "dev": true
-        },
-        "picomatch": {
-            "version": "2.2.2",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
-            "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
-            "dev": true
-        },
-        "pkg-dir": {
-            "version": "4.2.0",
-            "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-            "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-            "dev": true,
-            "requires": {
-                "find-up": "^4.0.0"
-            }
-        },
-        "portfinder": {
-            "version": "1.0.28",
-            "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
-            "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
-            "dev": true,
-            "requires": {
-                "async": "^2.6.2",
-                "debug": "^3.1.1",
-                "mkdirp": "^0.5.5"
-            },
-            "dependencies": {
-                "async": {
-                    "version": "2.6.4",
-                    "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
-                    "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
-                    "dev": true,
-                    "requires": {
-                        "lodash": "^4.17.14"
-                    }
-                },
-                "debug": {
-                    "version": "3.2.7",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-                    "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                }
-            }
-        },
-        "portscanner": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz",
-            "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==",
-            "dev": true,
-            "requires": {
-                "async": "^2.6.0",
-                "is-number-like": "^1.0.3"
-            },
-            "dependencies": {
-                "async": {
-                    "version": "2.6.4",
-                    "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
-                    "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
-                    "dev": true,
-                    "requires": {
-                        "lodash": "^4.17.14"
-                    }
-                }
-            }
-        },
-        "postcss": {
-            "version": "8.3.6",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
-            "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
-            "dev": true,
-            "requires": {
-                "colorette": "^1.2.2",
-                "nanoid": "^3.1.23",
-                "source-map-js": "^0.6.2"
-            },
-            "dependencies": {
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-attribute-case-insensitive": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz",
-            "integrity": "sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2",
-                "postcss-selector-parser": "^5.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "postcss-selector-parser": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-                    "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^2.0.0",
-                        "indexes-of": "^1.0.1",
-                        "uniq": "^1.0.1"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-calc": {
-            "version": "8.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz",
-            "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==",
-            "dev": true,
-            "requires": {
-                "postcss-selector-parser": "^6.0.2",
-                "postcss-value-parser": "^4.0.2"
-            }
-        },
-        "postcss-color-functional-notation": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz",
-            "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2",
-                "postcss-values-parser": "^2.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-color-gray": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz",
-            "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==",
-            "dev": true,
-            "requires": {
-                "@csstools/convert-colors": "^1.4.0",
-                "postcss": "^7.0.5",
-                "postcss-values-parser": "^2.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-color-hex-alpha": {
-            "version": "5.0.3",
-            "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz",
-            "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.14",
-                "postcss-values-parser": "^2.0.1"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-color-mod-function": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz",
-            "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==",
-            "dev": true,
-            "requires": {
-                "@csstools/convert-colors": "^1.4.0",
-                "postcss": "^7.0.2",
-                "postcss-values-parser": "^2.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-color-rebeccapurple": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz",
-            "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2",
-                "postcss-values-parser": "^2.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-colormin": {
-            "version": "5.2.0",
-            "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz",
-            "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.16.6",
-                "caniuse-api": "^3.0.0",
-                "colord": "^2.0.1",
-                "postcss-value-parser": "^4.1.0"
-            },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A=="
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                }
-            }
-        },
-        "postcss-convert-values": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz",
-            "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-custom-media": {
-            "version": "7.0.8",
-            "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz",
-            "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.14"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-custom-properties": {
-            "version": "8.0.11",
-            "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz",
-            "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.17",
-                "postcss-values-parser": "^2.0.1"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-custom-selectors": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz",
-            "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2",
-                "postcss-selector-parser": "^5.0.0-rc.3"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "postcss-selector-parser": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-                    "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^2.0.0",
-                        "indexes-of": "^1.0.1",
-                        "uniq": "^1.0.1"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-dir-pseudo-class": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz",
-            "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2",
-                "postcss-selector-parser": "^5.0.0-rc.3"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "postcss-selector-parser": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-                    "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^2.0.0",
-                        "indexes-of": "^1.0.1",
-                        "uniq": "^1.0.1"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-discard-comments": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz",
-            "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==",
-            "dev": true
-        },
-        "postcss-discard-duplicates": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz",
-            "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==",
-            "dev": true
-        },
-        "postcss-discard-empty": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz",
-            "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==",
-            "dev": true
-        },
-        "postcss-discard-overridden": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz",
-            "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==",
-            "dev": true
-        },
-        "postcss-double-position-gradients": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz",
-            "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.5",
-                "postcss-values-parser": "^2.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-env-function": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz",
-            "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2",
-                "postcss-values-parser": "^2.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-focus-visible": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz",
-            "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-focus-within": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz",
-            "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-font-variant": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz",
-            "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-gap-properties": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz",
-            "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-image-set-function": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz",
-            "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2",
-                "postcss-values-parser": "^2.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-import": {
-            "version": "12.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz",
-            "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.1",
-                "postcss-value-parser": "^3.2.3",
-                "read-cache": "^1.0.0",
-                "resolve": "^1.1.7"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "postcss-value-parser": {
-                    "version": "3.3.1",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-                    "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-                    "dev": true
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-initial": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.1.tgz",
-            "integrity": "sha512-I2Sz83ZSHybMNh02xQDK609lZ1/QOyYeuizCjzEhlMgeV/HcDJapQiH4yTqLjZss0X6/6VvKFXUeObaHpJoINw==",
-            "dev": true,
-            "requires": {
-                "lodash.template": "^4.5.0",
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-js": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz",
-            "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==",
-            "dev": true,
-            "requires": {
-                "camelcase-css": "^2.0.1",
-                "postcss": "^8.1.6"
-            }
-        },
-        "postcss-lab-function": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz",
-            "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==",
-            "dev": true,
-            "requires": {
-                "@csstools/convert-colors": "^1.4.0",
-                "postcss": "^7.0.2",
-                "postcss-values-parser": "^2.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-load-config": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz",
-            "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==",
-            "dev": true,
-            "requires": {
-                "import-cwd": "^3.0.0",
-                "lilconfig": "^2.0.3",
-                "yaml": "^1.10.2"
-            }
-        },
-        "postcss-loader": {
-            "version": "6.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.1.tgz",
-            "integrity": "sha512-lBmJMvRh1D40dqpWKr9Rpygwxn8M74U9uaCSeYGNKLGInbk9mXBt1ultHf2dH9Ghk6Ue4UXlXWwGMH9QdUJ5ug==",
-            "dev": true,
-            "requires": {
-                "cosmiconfig": "^7.0.0",
-                "klona": "^2.0.4",
-                "semver": "^7.3.5"
-            },
-            "dependencies": {
-                "semver": {
-                    "version": "7.3.5",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-                    "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
-                    "dev": true,
-                    "requires": {
-                        "lru-cache": "^6.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-logical": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz",
-            "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-media-minmax": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz",
-            "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-merge-longhand": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz",
-            "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==",
-            "dev": true,
-            "requires": {
-                "css-color-names": "^1.0.1",
-                "postcss-value-parser": "^4.1.0",
-                "stylehacks": "^5.0.1"
-            }
-        },
-        "postcss-merge-rules": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz",
-            "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.16.6",
-                "caniuse-api": "^3.0.0",
-                "cssnano-utils": "^2.0.1",
-                "postcss-selector-parser": "^6.0.5",
-                "vendors": "^1.0.3"
-            },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A=="
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
-                },
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                },
-                "postcss-selector-parser": {
-                    "version": "6.0.6",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
-                    "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "postcss-minify-font-values": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz",
-            "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-minify-gradients": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.2.tgz",
-            "integrity": "sha512-7Do9JP+wqSD6Prittitt2zDLrfzP9pqKs2EcLX7HJYxsxCOwrrcLt4x/ctQTsiOw+/8HYotAoqNkrzItL19SdQ==",
-            "dev": true,
-            "requires": {
-                "colord": "^2.6",
-                "cssnano-utils": "^2.0.1",
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-minify-params": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz",
-            "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==",
-            "dev": true,
-            "requires": {
-                "alphanum-sort": "^1.0.2",
-                "browserslist": "^4.16.0",
-                "cssnano-utils": "^2.0.1",
-                "postcss-value-parser": "^4.1.0",
-                "uniqs": "^2.0.0"
-            },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A=="
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                }
-            }
-        },
-        "postcss-minify-selectors": {
-            "version": "5.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz",
-            "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==",
-            "dev": true,
-            "requires": {
-                "alphanum-sort": "^1.0.2",
-                "postcss-selector-parser": "^6.0.5"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "6.0.6",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
-                    "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "postcss-modules-extract-imports": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
-            "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
-            "dev": true
-        },
-        "postcss-modules-local-by-default": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz",
-            "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==",
-            "dev": true,
-            "requires": {
-                "icss-utils": "^5.0.0",
-                "postcss-selector-parser": "^6.0.2",
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-modules-scope": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
-            "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
-            "dev": true,
-            "requires": {
-                "postcss-selector-parser": "^6.0.4"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "6.0.6",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
-                    "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "postcss-modules-values": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
-            "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
-            "dev": true,
-            "requires": {
-                "icss-utils": "^5.0.0"
-            }
-        },
-        "postcss-nested": {
-            "version": "4.1.2",
-            "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.1.2.tgz",
-            "integrity": "sha512-9bQFr2TezohU3KRSu9f6sfecXmf/x6RXDedl8CHF6fyuyVW7UqgNMRdWMHZQWuFY6Xqs2NYk+Fj4Z4vSOf7PQg==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.14",
-                "postcss-selector-parser": "^5.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "postcss-selector-parser": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-                    "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^2.0.0",
-                        "indexes-of": "^1.0.1",
-                        "uniq": "^1.0.1"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-nesting": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz",
-            "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-normalize-charset": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz",
-            "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==",
-            "dev": true
-        },
-        "postcss-normalize-display-values": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz",
-            "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==",
-            "dev": true,
-            "requires": {
-                "cssnano-utils": "^2.0.1",
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-normalize-positions": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz",
-            "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-normalize-repeat-style": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz",
-            "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==",
-            "dev": true,
-            "requires": {
-                "cssnano-utils": "^2.0.1",
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-normalize-string": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz",
-            "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-normalize-timing-functions": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz",
-            "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==",
-            "dev": true,
-            "requires": {
-                "cssnano-utils": "^2.0.1",
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-normalize-unicode": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz",
-            "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.16.0",
-                "postcss-value-parser": "^4.1.0"
-            },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A=="
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                }
-            }
-        },
-        "postcss-normalize-url": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz",
-            "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==",
-            "dev": true,
-            "requires": {
-                "is-absolute-url": "^3.0.3",
-                "normalize-url": "^6.0.1",
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-normalize-whitespace": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz",
-            "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-ordered-values": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz",
-            "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==",
-            "dev": true,
-            "requires": {
-                "cssnano-utils": "^2.0.1",
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-overflow-shorthand": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz",
-            "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-page-break": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz",
-            "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-place": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz",
-            "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2",
-                "postcss-values-parser": "^2.0.0"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-preset-env": {
-            "version": "6.7.0",
-            "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz",
-            "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==",
-            "dev": true,
-            "requires": {
-                "autoprefixer": "^9.6.1",
-                "browserslist": "^4.6.4",
-                "caniuse-lite": "^1.0.30000981",
-                "css-blank-pseudo": "^0.1.4",
-                "css-has-pseudo": "^0.10.0",
-                "css-prefers-color-scheme": "^3.1.1",
-                "cssdb": "^4.4.0",
-                "postcss": "^7.0.17",
-                "postcss-attribute-case-insensitive": "^4.0.1",
-                "postcss-color-functional-notation": "^2.0.1",
-                "postcss-color-gray": "^5.0.0",
-                "postcss-color-hex-alpha": "^5.0.3",
-                "postcss-color-mod-function": "^3.0.3",
-                "postcss-color-rebeccapurple": "^4.0.1",
-                "postcss-custom-media": "^7.0.8",
-                "postcss-custom-properties": "^8.0.11",
-                "postcss-custom-selectors": "^5.1.2",
-                "postcss-dir-pseudo-class": "^5.0.0",
-                "postcss-double-position-gradients": "^1.0.0",
-                "postcss-env-function": "^2.0.2",
-                "postcss-focus-visible": "^4.0.0",
-                "postcss-focus-within": "^3.0.0",
-                "postcss-font-variant": "^4.0.0",
-                "postcss-gap-properties": "^2.0.0",
-                "postcss-image-set-function": "^3.0.1",
-                "postcss-initial": "^3.0.0",
-                "postcss-lab-function": "^2.0.1",
-                "postcss-logical": "^3.0.0",
-                "postcss-media-minmax": "^4.0.0",
-                "postcss-nesting": "^7.0.0",
-                "postcss-overflow-shorthand": "^2.0.0",
-                "postcss-page-break": "^2.0.0",
-                "postcss-place": "^4.0.1",
-                "postcss-pseudo-class-any-link": "^6.0.0",
-                "postcss-replace-overflow-wrap": "^3.0.0",
-                "postcss-selector-matches": "^4.0.0",
-                "postcss-selector-not": "^4.0.0"
-            },
-            "dependencies": {
-                "autoprefixer": {
-                    "version": "9.8.6",
-                    "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz",
-                    "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==",
-                    "dev": true,
-                    "requires": {
-                        "browserslist": "^4.12.0",
-                        "caniuse-lite": "^1.0.30001109",
-                        "colorette": "^1.2.1",
-                        "normalize-range": "^0.1.2",
-                        "num2fraction": "^1.2.2",
-                        "postcss": "^7.0.32",
-                        "postcss-value-parser": "^4.1.0"
-                    },
-                    "dependencies": {
-                        "caniuse-lite": {
-                            "version": "1.0.30001251",
-                            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                            "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==",
-                            "dev": true
-                        }
-                    }
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                },
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "postcss-value-parser": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-                    "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
-                    "dev": true
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-pseudo-class-any-link": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz",
-            "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2",
-                "postcss-selector-parser": "^5.0.0-rc.3"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "postcss-selector-parser": {
-                    "version": "5.0.0",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
-                    "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^2.0.0",
-                        "indexes-of": "^1.0.1",
-                        "uniq": "^1.0.1"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-purgecss-laravel": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/postcss-purgecss-laravel/-/postcss-purgecss-laravel-0.1.2.tgz",
-            "integrity": "sha512-w9qGUhn1krfK3ABxtkSIV/oyOhc/3c64enMAFJ8KEWqKcyXfzHZD2vCRnm/3AmgSoshM2QCifHDQd3RiLG6fNw==",
-            "dev": true,
-            "requires": {
-                "@fullhuman/postcss-purgecss": "^2.1.2"
-            }
-        },
-        "postcss-reduce-initial": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz",
-            "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.16.0",
-                "caniuse-api": "^3.0.0"
-            },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A=="
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                }
-            }
-        },
-        "postcss-reduce-transforms": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz",
-            "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==",
-            "dev": true,
-            "requires": {
-                "cssnano-utils": "^2.0.1",
-                "postcss-value-parser": "^4.1.0"
-            }
-        },
-        "postcss-replace-overflow-wrap": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz",
-            "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==",
-            "dev": true,
-            "requires": {
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-selector-matches": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz",
-            "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==",
-            "dev": true,
-            "requires": {
-                "balanced-match": "^1.0.0",
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-selector-not": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz",
-            "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==",
-            "dev": true,
-            "requires": {
-                "balanced-match": "^1.0.0",
-                "postcss": "^7.0.2"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.36",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
-                    "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "postcss-selector-parser": {
-            "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
-            "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
-            "dev": true,
-            "requires": {
-                "cssesc": "^3.0.0",
-                "indexes-of": "^1.0.1",
-                "uniq": "^1.0.1"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                }
-            }
-        },
-        "postcss-svgo": {
-            "version": "5.0.2",
-            "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz",
-            "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==",
-            "dev": true,
-            "requires": {
-                "postcss-value-parser": "^4.1.0",
-                "svgo": "^2.3.0"
-            }
-        },
-        "postcss-unique-selectors": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz",
-            "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==",
-            "dev": true,
-            "requires": {
-                "alphanum-sort": "^1.0.2",
-                "postcss-selector-parser": "^6.0.5",
-                "uniqs": "^2.0.0"
-            },
-            "dependencies": {
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "postcss-selector-parser": {
-                    "version": "6.0.6",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
-                    "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "postcss-value-parser": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-            "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
-            "dev": true
-        },
-        "postcss-values-parser": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
-            "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
-            "dev": true,
-            "requires": {
-                "flatten": "^1.0.2",
-                "indexes-of": "^1.0.1",
-                "uniq": "^1.0.1"
-            }
-        },
-        "preact": {
-            "version": "10.5.14",
-            "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.14.tgz",
-            "integrity": "sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ=="
-        },
-        "pretty-hrtime": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
-            "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
-            "dev": true
-        },
-        "pretty-time": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz",
-            "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==",
-            "dev": true
-        },
-        "process": {
-            "version": "0.11.10",
-            "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-            "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
-            "dev": true
-        },
-        "process-nextick-args": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-            "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
-            "dev": true
-        },
-        "proxy-addr": {
-            "version": "2.0.7",
-            "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
-            "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
-            "dev": true,
-            "requires": {
-                "forwarded": "0.2.0",
-                "ipaddr.js": "1.9.1"
-            },
-            "dependencies": {
-                "ipaddr.js": {
-                    "version": "1.9.1",
-                    "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-                    "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
-                    "dev": true
-                }
-            }
-        },
-        "public-encrypt": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
-            "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
-            "dev": true,
-            "requires": {
-                "bn.js": "^4.1.0",
-                "browserify-rsa": "^4.0.0",
-                "create-hash": "^1.1.0",
-                "parse-asn1": "^5.0.0",
-                "randombytes": "^2.0.1",
-                "safe-buffer": "^5.1.2"
-            },
-            "dependencies": {
-                "bn.js": {
-                    "version": "4.12.0",
-                    "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-                    "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-                    "dev": true
-                }
-            }
-        },
-        "punycode": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-            "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
-            "dev": true
-        },
-        "purgecss": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.2.1.tgz",
-            "integrity": "sha512-wngRSLW1dpNr8kr3TL9nTJMyTFI5BiRiaUUEys5M1CA4zEHLF25fRHoshEeDqmhstaNTOddmpYM34zRrUtEGbQ==",
-            "dev": true,
-            "requires": {
-                "commander": "^5.0.0",
-                "glob": "^7.0.0",
-                "postcss": "7.0.28",
-                "postcss-selector-parser": "^6.0.2"
-            },
-            "dependencies": {
-                "commander": {
-                    "version": "5.1.0",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
-                    "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
-                    "dev": true
-                },
-                "postcss": {
-                    "version": "7.0.28",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.28.tgz",
-                    "integrity": "sha512-YU6nVhyWIsVtlNlnAj1fHTsUKW5qxm3KEgzq2Jj6KTEFOTK8QWR12eIDvrlWhiSTK8WIBFTBhOJV4DY6dUuEbw==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "qs": {
-            "version": "6.7.0",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
-            "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
-            "dev": true
-        },
-        "querystring": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-            "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
-            "dev": true
-        },
-        "querystring-es3": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
-            "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
-            "dev": true
-        },
-        "queue-microtask": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-            "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-            "dev": true
-        },
-        "quick-lru": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-            "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
-            "dev": true
-        },
-        "randombytes": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-            "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
-            "dev": true,
-            "requires": {
-                "safe-buffer": "^5.1.0"
-            }
-        },
-        "randomfill": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
-            "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
-            "dev": true,
-            "requires": {
-                "randombytes": "^2.0.5",
-                "safe-buffer": "^5.1.0"
-            }
-        },
-        "range-parser": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-            "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
-            "dev": true
-        },
-        "raw-body": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
-            "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
-            "dev": true,
-            "requires": {
-                "bytes": "3.1.0",
-                "http-errors": "1.7.2",
-                "iconv-lite": "0.4.24",
-                "unpipe": "1.0.0"
-            }
-        },
-        "read-cache": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
-            "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
-            "dev": true,
-            "requires": {
-                "pify": "^2.3.0"
-            },
-            "dependencies": {
-                "pify": {
-                    "version": "2.3.0",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                    "dev": true
-                }
-            }
-        },
-        "readable-stream": {
-            "version": "2.3.7",
-            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
-            "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
-            "dev": true,
-            "requires": {
-                "core-util-is": "~1.0.0",
-                "inherits": "~2.0.3",
-                "isarray": "~1.0.0",
-                "process-nextick-args": "~2.0.0",
-                "safe-buffer": "~5.1.1",
-                "string_decoder": "~1.1.1",
-                "util-deprecate": "~1.0.1"
-            },
-            "dependencies": {
-                "string_decoder": {
-                    "version": "1.1.1",
-                    "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-                    "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-                    "dev": true,
-                    "requires": {
-                        "safe-buffer": "~5.1.0"
-                    }
-                }
-            }
-        },
-        "readdirp": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-            "dev": true,
-            "requires": {
-                "picomatch": "^2.2.1"
-            }
-        },
-        "rechoir": {
-            "version": "0.7.1",
-            "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
-            "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
-            "dev": true,
-            "requires": {
-                "resolve": "^1.9.0"
-            }
-        },
-        "reduce-css-calc": {
-            "version": "2.1.8",
-            "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
-            "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
-            "dev": true,
-            "requires": {
-                "css-unit-converter": "^1.1.1",
-                "postcss-value-parser": "^3.3.0"
-            },
-            "dependencies": {
-                "postcss-value-parser": {
-                    "version": "3.3.1",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-                    "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
-                    "dev": true
-                }
-            }
-        },
-        "regenerate": {
-            "version": "1.4.2",
-            "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
-            "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
-            "dev": true
-        },
-        "regenerate-unicode-properties": {
-            "version": "8.2.0",
-            "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
-            "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
-            "dev": true,
-            "requires": {
-                "regenerate": "^1.4.0"
-            }
-        },
-        "regenerator-runtime": {
-            "version": "0.13.9",
-            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
-            "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
-            "dev": true
-        },
-        "regenerator-transform": {
-            "version": "0.14.5",
-            "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
-            "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
-            "dev": true,
-            "requires": {
-                "@babel/runtime": "^7.8.4"
-            }
-        },
-        "regex-parser": {
-            "version": "2.2.11",
-            "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz",
-            "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==",
-            "dev": true
-        },
-        "regexp.prototype.flags": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
-            "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==",
-            "dev": true,
-            "requires": {
-                "call-bind": "^1.0.2",
-                "define-properties": "^1.1.3"
-            }
-        },
-        "regexpu-core": {
-            "version": "4.7.1",
-            "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz",
-            "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
-            "dev": true,
-            "requires": {
-                "regenerate": "^1.4.0",
-                "regenerate-unicode-properties": "^8.2.0",
-                "regjsgen": "^0.5.1",
-                "regjsparser": "^0.6.4",
-                "unicode-match-property-ecmascript": "^1.0.4",
-                "unicode-match-property-value-ecmascript": "^1.2.0"
-            }
-        },
-        "regjsgen": {
-            "version": "0.5.2",
-            "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
-            "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
-            "dev": true
-        },
-        "regjsparser": {
-            "version": "0.6.9",
-            "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz",
-            "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==",
-            "dev": true,
-            "requires": {
-                "jsesc": "~0.5.0"
-            },
-            "dependencies": {
-                "jsesc": {
-                    "version": "0.5.0",
-                    "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-                    "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
-                    "dev": true
-                }
-            }
-        },
-        "relateurl": {
-            "version": "0.2.7",
-            "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
-            "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
-            "dev": true
-        },
-        "replace-ext": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
-            "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
-            "dev": true
-        },
-        "require-directory": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-            "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
-            "dev": true
-        },
-        "requires-port": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-            "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
-            "dev": true
-        },
-        "resolve": {
-            "version": "1.12.0",
-            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
-            "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
-            "dev": true,
-            "requires": {
-                "path-parse": "^1.0.6"
-            }
-        },
-        "resolve-cwd": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
-            "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
-            "dev": true,
-            "requires": {
-                "resolve-from": "^5.0.0"
-            }
-        },
-        "resolve-from": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-            "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-            "dev": true
-        },
-        "resolve-url": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-            "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
-            "dev": true
-        },
-        "resolve-url-loader": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz",
-            "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==",
-            "dev": true,
-            "requires": {
-                "adjust-sourcemap-loader": "3.0.0",
-                "camelcase": "5.3.1",
-                "compose-function": "3.0.3",
-                "convert-source-map": "1.7.0",
-                "es6-iterator": "2.0.3",
-                "loader-utils": "1.2.3",
-                "postcss": "7.0.21",
-                "rework": "1.0.1",
-                "rework-visit": "1.0.0",
-                "source-map": "0.6.1"
-            },
-            "dependencies": {
-                "postcss": {
-                    "version": "7.0.21",
-                    "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz",
-                    "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==",
-                    "dev": true,
-                    "requires": {
-                        "chalk": "^2.4.2",
-                        "source-map": "^0.6.1",
-                        "supports-color": "^6.1.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "6.1.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
-                    "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^3.0.0"
-                    }
-                }
-            }
-        },
-        "resp-modifier": {
-            "version": "6.0.2",
-            "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
-            "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==",
-            "dev": true,
-            "requires": {
-                "debug": "^2.2.0",
-                "minimatch": "^3.0.2"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-                    "dev": true
-                }
-            }
-        },
-        "retry": {
-            "version": "0.13.1",
-            "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
-            "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
-            "dev": true
-        },
-        "reusify": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-            "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-            "dev": true
-        },
-        "rework": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz",
-            "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=",
-            "dev": true,
-            "requires": {
-                "convert-source-map": "^0.3.3",
-                "css": "^2.0.0"
-            },
-            "dependencies": {
-                "convert-source-map": {
-                    "version": "0.3.5",
-                    "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
-                    "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=",
-                    "dev": true
-                }
-            }
-        },
-        "rework-visit": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz",
-            "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=",
-            "dev": true
-        },
-        "rimraf": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-            "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-            "dev": true,
-            "requires": {
-                "glob": "^7.1.3"
-            }
-        },
-        "ripemd160": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
-            "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
-            "dev": true,
-            "requires": {
-                "hash-base": "^3.0.0",
-                "inherits": "^2.0.1"
-            }
-        },
-        "run-parallel": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-            "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-            "dev": true,
-            "requires": {
-                "queue-microtask": "^1.2.2"
-            }
-        },
-        "rx": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
-            "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==",
-            "dev": true
-        },
-        "rxjs": {
-            "version": "5.5.12",
-            "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
-            "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
-            "dev": true,
-            "requires": {
-                "symbol-observable": "1.0.1"
-            }
-        },
-        "safe-buffer": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-            "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-            "dev": true
-        },
-        "safer-buffer": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-            "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-            "dev": true
-        },
-        "schema-utils": {
-            "version": "2.7.1",
-            "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
-            "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
-            "dev": true,
-            "requires": {
-                "@types/json-schema": "^7.0.5",
-                "ajv": "^6.12.4",
-                "ajv-keywords": "^3.5.2"
-            }
-        },
-        "select-hose": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
-            "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
-            "dev": true
-        },
-        "selfsigned": {
-            "version": "1.10.11",
-            "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz",
-            "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==",
-            "dev": true,
-            "requires": {
-                "node-forge": "^0.10.0"
-            }
-        },
-        "send": {
-            "version": "0.17.1",
-            "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
-            "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
-            "dev": true,
-            "requires": {
-                "debug": "2.6.9",
-                "depd": "~1.1.2",
-                "destroy": "~1.0.4",
-                "encodeurl": "~1.0.2",
-                "escape-html": "~1.0.3",
-                "etag": "~1.8.1",
-                "fresh": "0.5.2",
-                "http-errors": "~1.7.2",
-                "mime": "1.6.0",
-                "ms": "2.1.1",
-                "on-finished": "~2.3.0",
-                "range-parser": "~1.2.1",
-                "statuses": "~1.5.0"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    },
-                    "dependencies": {
-                        "ms": {
-                            "version": "2.0.0",
-                            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                            "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-                            "dev": true
-                        }
-                    }
-                },
-                "ms": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-                    "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
-                    "dev": true
-                }
-            }
-        },
-        "serialize-javascript": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
-            "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
-            "dev": true,
-            "requires": {
-                "randombytes": "^2.1.0"
-            }
-        },
-        "serve-index": {
-            "version": "1.9.1",
-            "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-            "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
-            "dev": true,
-            "requires": {
-                "accepts": "~1.3.4",
-                "batch": "0.6.1",
-                "debug": "2.6.9",
-                "escape-html": "~1.0.3",
-                "http-errors": "~1.6.2",
-                "mime-types": "~2.1.17",
-                "parseurl": "~1.3.2"
-            },
-            "dependencies": {
-                "debug": {
-                    "version": "2.6.9",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-                    "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-                    "dev": true,
-                    "requires": {
-                        "ms": "2.0.0"
-                    }
-                },
-                "http-errors": {
-                    "version": "1.6.3",
-                    "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-                    "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
-                    "dev": true,
-                    "requires": {
-                        "depd": "~1.1.2",
-                        "inherits": "2.0.3",
-                        "setprototypeof": "1.1.0",
-                        "statuses": ">= 1.4.0 < 2"
-                    }
-                },
-                "inherits": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-                    "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-                    "dev": true
-                },
-                "ms": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-                    "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-                    "dev": true
-                },
-                "setprototypeof": {
-                    "version": "1.1.0",
-                    "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-                    "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
-                    "dev": true
-                }
-            }
-        },
-        "serve-static": {
-            "version": "1.14.1",
-            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
-            "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
-            "dev": true,
-            "requires": {
-                "encodeurl": "~1.0.2",
-                "escape-html": "~1.0.3",
-                "parseurl": "~1.3.3",
-                "send": "0.17.1"
-            }
-        },
-        "server-destroy": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
-            "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==",
-            "dev": true
-        },
-        "setimmediate": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-            "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
-            "dev": true
-        },
-        "setprototypeof": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-            "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
-            "dev": true
-        },
-        "sha.js": {
-            "version": "2.4.11",
-            "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
-            "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
-            "dev": true,
-            "requires": {
-                "inherits": "^2.0.1",
-                "safe-buffer": "^5.0.1"
-            }
-        },
-        "shallow-clone": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
-            "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
-            "dev": true,
-            "requires": {
-                "kind-of": "^6.0.2"
-            }
-        },
-        "shebang-command": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-            "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-            "dev": true,
-            "requires": {
-                "shebang-regex": "^3.0.0"
-            }
-        },
-        "shebang-regex": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-            "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-            "dev": true
-        },
-        "shellwords": {
-            "version": "0.1.1",
-            "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
-            "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
-            "dev": true
-        },
-        "signal-exit": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
-            "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
-            "dev": true
-        },
-        "simple-swizzle": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
-            "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
-            "dev": true,
-            "requires": {
-                "is-arrayish": "^0.3.1"
-            },
-            "dependencies": {
-                "is-arrayish": {
-                    "version": "0.3.2",
-                    "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
-                    "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
-                    "dev": true
-                }
-            }
-        },
-        "slash": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-            "dev": true
-        },
-        "socket.io": {
-            "version": "4.5.3",
-            "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz",
-            "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==",
-            "dev": true,
-            "requires": {
-                "accepts": "~1.3.4",
-                "base64id": "~2.0.0",
-                "debug": "~4.3.2",
-                "engine.io": "~6.2.0",
-                "socket.io-adapter": "~2.4.0",
-                "socket.io-parser": "~4.2.0"
-            }
-        },
-        "socket.io-adapter": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
-            "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==",
-            "dev": true
-        },
-        "socket.io-client": {
-            "version": "4.5.3",
-            "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.3.tgz",
-            "integrity": "sha512-I/hqDYpQ6JKwtJOf5ikM+Qz+YujZPMEl6qBLhxiP0nX+TfXKhW4KZZG8lamrD6Y5ngjmYHreESVasVCgi5Kl3A==",
-            "dev": true,
-            "requires": {
-                "@socket.io/component-emitter": "~3.1.0",
-                "debug": "~4.3.2",
-                "engine.io-client": "~6.2.3",
-                "socket.io-parser": "~4.2.0"
-            }
-        },
-        "socket.io-parser": {
-            "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
-            "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
-            "dev": true,
-            "requires": {
-                "@socket.io/component-emitter": "~3.1.0",
-                "debug": "~4.3.1"
-            }
-        },
-        "sockjs": {
-            "version": "0.3.21",
-            "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz",
-            "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==",
-            "dev": true,
-            "requires": {
-                "faye-websocket": "^0.11.3",
-                "uuid": "^3.4.0",
-                "websocket-driver": "^0.7.4"
-            }
-        },
-        "source-list-map": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
-            "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
-            "dev": true
-        },
-        "source-map": {
-            "version": "0.6.1",
-            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-            "dev": true
-        },
-        "source-map-js": {
-            "version": "0.6.2",
-            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
-            "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
-            "dev": true
-        },
-        "source-map-resolve": {
-            "version": "0.5.2",
-            "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
-            "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
-            "dev": true,
-            "requires": {
-                "atob": "^2.1.1",
-                "decode-uri-component": "^0.2.0",
-                "resolve-url": "^0.2.1",
-                "source-map-url": "^0.4.0",
-                "urix": "^0.1.0"
-            }
-        },
-        "source-map-support": {
-            "version": "0.5.19",
-            "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
-            "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
-            "dev": true,
-            "requires": {
-                "buffer-from": "^1.0.0",
-                "source-map": "^0.6.0"
-            }
-        },
-        "source-map-url": {
-            "version": "0.4.0",
-            "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
-            "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
-            "dev": true
-        },
-        "spdy": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
-            "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
-            "dev": true,
-            "requires": {
-                "debug": "^4.1.0",
-                "handle-thing": "^2.0.0",
-                "http-deceiver": "^1.2.7",
-                "select-hose": "^2.0.0",
-                "spdy-transport": "^3.0.0"
-            }
-        },
-        "spdy-transport": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
-            "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
-            "dev": true,
-            "requires": {
-                "debug": "^4.1.0",
-                "detect-node": "^2.0.4",
-                "hpack.js": "^2.1.6",
-                "obuf": "^1.1.2",
-                "readable-stream": "^3.0.6",
-                "wbuf": "^1.7.3"
-            },
-            "dependencies": {
-                "readable-stream": {
-                    "version": "3.6.0",
-                    "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-                    "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
-                    "dev": true,
-                    "requires": {
-                        "inherits": "^2.0.3",
-                        "string_decoder": "^1.1.1",
-                        "util-deprecate": "^1.0.1"
-                    }
-                }
-            }
-        },
-        "stable": {
-            "version": "0.1.8",
-            "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
-            "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
-            "dev": true
-        },
-        "statuses": {
-            "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-            "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
-            "dev": true
-        },
-        "std-env": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz",
-            "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==",
-            "dev": true,
-            "requires": {
-                "ci-info": "^3.0.0"
-            }
-        },
-        "stream-browserify": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
-            "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
-            "dev": true,
-            "requires": {
-                "inherits": "~2.0.1",
-                "readable-stream": "^2.0.2"
-            }
-        },
-        "stream-http": {
-            "version": "2.8.3",
-            "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
-            "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
-            "dev": true,
-            "requires": {
-                "builtin-status-codes": "^3.0.0",
-                "inherits": "^2.0.1",
-                "readable-stream": "^2.3.6",
-                "to-arraybuffer": "^1.0.0",
-                "xtend": "^4.0.0"
-            }
-        },
-        "stream-throttle": {
-            "version": "0.1.3",
-            "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
-            "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==",
-            "dev": true,
-            "requires": {
-                "commander": "^2.2.0",
-                "limiter": "^1.0.5"
-            },
-            "dependencies": {
-                "commander": {
-                    "version": "2.20.3",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-                    "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-                    "dev": true
-                }
-            }
-        },
-        "string-width": {
-            "version": "4.2.2",
-            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
-            "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
-            "dev": true,
-            "requires": {
-                "emoji-regex": "^8.0.0",
-                "is-fullwidth-code-point": "^3.0.0",
-                "strip-ansi": "^6.0.0"
-            }
-        },
-        "string_decoder": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-            "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-            "dev": true,
-            "requires": {
-                "safe-buffer": "~5.2.0"
-            },
-            "dependencies": {
-                "safe-buffer": {
-                    "version": "5.2.1",
-                    "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-                    "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-                    "dev": true
-                }
-            }
-        },
-        "strip-ansi": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-            "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-            "dev": true,
-            "requires": {
-                "ansi-regex": "^5.0.0"
-            }
-        },
-        "strip-final-newline": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-            "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-            "dev": true
-        },
-        "style-loader": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz",
-            "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==",
-            "dev": true,
-            "requires": {
-                "loader-utils": "^2.0.0",
-                "schema-utils": "^3.0.0"
-            },
-            "dependencies": {
-                "emojis-list": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-                    "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-                    "dev": true
-                },
-                "loader-utils": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-                    "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-                    "dev": true,
-                    "requires": {
-                        "big.js": "^5.2.2",
-                        "emojis-list": "^3.0.0",
-                        "json5": "^2.1.2"
-                    }
-                },
-                "schema-utils": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
-                    "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                }
-            }
-        },
-        "stylehacks": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz",
-            "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==",
-            "dev": true,
-            "requires": {
-                "browserslist": "^4.16.0",
-                "postcss-selector-parser": "^6.0.4"
-            },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A=="
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
-                },
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                },
-                "postcss-selector-parser": {
-                    "version": "6.0.6",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
-                    "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                }
-            }
-        },
-        "supports-color": {
-            "version": "5.5.0",
-            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-            "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-            "dev": true,
-            "requires": {
-                "has-flag": "^3.0.0"
-            }
-        },
-        "svgo": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.4.0.tgz",
-            "integrity": "sha512-W25S1UUm9Lm9VnE0TvCzL7aso/NCzDEaXLaElCUO/KaVitw0+IBicSVfM1L1c0YHK5TOFh73yQ2naCpVHEQ/OQ==",
-            "dev": true,
-            "requires": {
-                "@trysound/sax": "0.1.1",
-                "colorette": "^1.2.2",
-                "commander": "^7.1.0",
-                "css-select": "^4.1.3",
-                "css-tree": "^1.1.2",
-                "csso": "^4.2.0",
-                "stable": "^0.1.8"
-            },
-            "dependencies": {
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
-                    "dev": true
-                }
-            }
-        },
-        "symbol-observable": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
-            "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==",
-            "dev": true
-        },
-        "tailwindcss": {
-            "version": "2.2.7",
-            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.7.tgz",
-            "integrity": "sha512-jv35rugP5j8PpzbXnsria7ZAry7Evh0KtQ4MZqNd+PhF+oIKPwJTVwe/rmfRx9cZw3W7iPZyzBmeoAoNwfJ1yg==",
-            "dev": true,
-            "requires": {
-                "arg": "^5.0.0",
-                "bytes": "^3.0.0",
-                "chalk": "^4.1.1",
-                "chokidar": "^3.5.2",
-                "color": "^3.2.0",
-                "cosmiconfig": "^7.0.0",
-                "detective": "^5.2.0",
-                "didyoumean": "^1.2.2",
-                "dlv": "^1.1.3",
-                "fast-glob": "^3.2.7",
-                "fs-extra": "^10.0.0",
-                "glob-parent": "^6.0.0",
-                "html-tags": "^3.1.0",
-                "is-glob": "^4.0.1",
-                "lodash": "^4.17.21",
-                "lodash.topath": "^4.5.2",
-                "modern-normalize": "^1.1.0",
-                "node-emoji": "^1.8.1",
-                "normalize-path": "^3.0.0",
-                "object-hash": "^2.2.0",
-                "postcss-js": "^3.0.3",
-                "postcss-load-config": "^3.1.0",
-                "postcss-nested": "5.0.5",
-                "postcss-selector-parser": "^6.0.6",
-                "postcss-value-parser": "^4.1.0",
-                "pretty-hrtime": "^1.0.3",
-                "purgecss": "^4.0.3",
-                "quick-lru": "^5.1.1",
-                "reduce-css-calc": "^2.1.8",
-                "resolve": "^1.20.0",
-                "tmp": "^0.2.1"
-            },
-            "dependencies": {
-                "@nodelib/fs.stat": {
-                    "version": "2.0.5",
-                    "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-                    "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-                    "dev": true
-                },
-                "ansi-styles": {
-                    "version": "4.3.0",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-                    "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-                    "dev": true,
-                    "requires": {
-                        "color-convert": "^2.0.1"
-                    }
-                },
-                "anymatch": {
-                    "version": "3.1.2",
-                    "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
-                    "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
-                    "dev": true,
-                    "requires": {
-                        "normalize-path": "^3.0.0",
-                        "picomatch": "^2.0.4"
-                    }
-                },
-                "binary-extensions": {
-                    "version": "2.2.0",
-                    "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-                    "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-                    "dev": true
-                },
-                "braces": {
-                    "version": "3.0.2",
-                    "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-                    "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-                    "dev": true,
-                    "requires": {
-                        "fill-range": "^7.0.1"
-                    }
-                },
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
-                },
-                "chokidar": {
-                    "version": "3.5.2",
-                    "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
-                    "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
-                    "dev": true,
-                    "requires": {
-                        "anymatch": "~3.1.2",
-                        "braces": "~3.0.2",
-                        "fsevents": "~2.3.2",
-                        "glob-parent": "~5.1.2",
-                        "is-binary-path": "~2.1.0",
-                        "is-glob": "~4.0.1",
-                        "normalize-path": "~3.0.0",
-                        "readdirp": "~3.6.0"
-                    },
-                    "dependencies": {
-                        "glob-parent": {
-                            "version": "5.1.2",
-                            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-                            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-                            "dev": true,
-                            "requires": {
-                                "is-glob": "^4.0.1"
-                            }
-                        }
-                    }
-                },
-                "color": {
-                    "version": "3.2.1",
-                    "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
-                    "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
-                    "dev": true,
-                    "requires": {
-                        "color-convert": "^1.9.3",
-                        "color-string": "^1.6.0"
-                    },
-                    "dependencies": {
-                        "color-convert": {
-                            "version": "1.9.3",
-                            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-                            "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-                            "dev": true,
-                            "requires": {
-                                "color-name": "1.1.3"
-                            }
-                        },
-                        "color-name": {
-                            "version": "1.1.3",
-                            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-                            "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-                            "dev": true
-                        }
-                    }
-                },
-                "color-convert": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-                    "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-                    "dev": true,
-                    "requires": {
-                        "color-name": "~1.1.4"
-                    }
-                },
-                "color-name": {
-                    "version": "1.1.4",
-                    "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-                    "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-                    "dev": true
-                },
-                "color-string": {
-                    "version": "1.6.0",
-                    "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
-                    "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
-                    "dev": true,
-                    "requires": {
-                        "color-name": "^1.0.0",
-                        "simple-swizzle": "^0.2.2"
-                    }
-                },
-                "commander": {
-                    "version": "6.2.1",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
-                    "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
-                    "dev": true
-                },
-                "cosmiconfig": {
-                    "version": "7.0.1",
-                    "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-                    "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
-                    "dev": true,
-                    "requires": {
-                        "@types/parse-json": "^4.0.0",
-                        "import-fresh": "^3.2.1",
-                        "parse-json": "^5.0.0",
-                        "path-type": "^4.0.0",
-                        "yaml": "^1.10.0"
-                    }
-                },
-                "cssesc": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-                    "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-                    "dev": true
-                },
-                "fast-glob": {
-                    "version": "3.2.7",
-                    "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
-                    "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
-                    "dev": true,
-                    "requires": {
-                        "@nodelib/fs.stat": "^2.0.2",
-                        "@nodelib/fs.walk": "^1.2.3",
-                        "glob-parent": "^5.1.2",
-                        "merge2": "^1.3.0",
-                        "micromatch": "^4.0.4"
-                    },
-                    "dependencies": {
-                        "glob-parent": {
-                            "version": "5.1.2",
-                            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-                            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-                            "dev": true,
-                            "requires": {
-                                "is-glob": "^4.0.1"
-                            }
-                        }
-                    }
-                },
-                "fill-range": {
-                    "version": "7.0.1",
-                    "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-                    "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-                    "dev": true,
-                    "requires": {
-                        "to-regex-range": "^5.0.1"
-                    }
-                },
-                "fsevents": {
-                    "version": "2.3.2",
-                    "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-                    "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-                    "dev": true,
-                    "optional": true
-                },
-                "glob-parent": {
-                    "version": "6.0.1",
-                    "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz",
-                    "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==",
-                    "dev": true,
-                    "requires": {
-                        "is-glob": "^4.0.1"
-                    }
-                },
-                "has-flag": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-                    "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-                    "dev": true
-                },
-                "import-cwd": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz",
-                    "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==",
-                    "dev": true,
-                    "requires": {
-                        "import-from": "^3.0.0"
-                    }
-                },
-                "import-fresh": {
-                    "version": "3.3.0",
-                    "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-                    "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-                    "dev": true,
-                    "requires": {
-                        "parent-module": "^1.0.0",
-                        "resolve-from": "^4.0.0"
-                    }
-                },
-                "import-from": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz",
-                    "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==",
-                    "dev": true,
-                    "requires": {
-                        "resolve-from": "^5.0.0"
-                    },
-                    "dependencies": {
-                        "resolve-from": {
-                            "version": "5.0.0",
-                            "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-                            "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-                            "dev": true
-                        }
-                    }
-                },
-                "is-binary-path": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-                    "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-                    "dev": true,
-                    "requires": {
-                        "binary-extensions": "^2.0.0"
-                    }
-                },
-                "is-number": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-                    "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-                    "dev": true
-                },
-                "lodash": {
-                    "version": "4.17.21",
-                    "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-                    "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-                    "dev": true
-                },
-                "micromatch": {
-                    "version": "4.0.4",
-                    "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
-                    "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
-                    "dev": true,
-                    "requires": {
-                        "braces": "^3.0.1",
-                        "picomatch": "^2.2.3"
-                    },
-                    "dependencies": {
-                        "picomatch": {
-                            "version": "2.3.0",
-                            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
-                            "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
-                            "dev": true
-                        }
-                    }
-                },
-                "parse-json": {
-                    "version": "5.2.0",
-                    "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-                    "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/code-frame": "^7.0.0",
-                        "error-ex": "^1.3.1",
-                        "json-parse-even-better-errors": "^2.3.0",
-                        "lines-and-columns": "^1.1.6"
-                    }
-                },
-                "path-type": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-                    "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-                    "dev": true
-                },
-                "postcss-load-config": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz",
-                    "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==",
-                    "dev": true,
-                    "requires": {
-                        "import-cwd": "^3.0.0",
-                        "lilconfig": "^2.0.3",
-                        "yaml": "^1.10.2"
-                    }
-                },
-                "postcss-nested": {
-                    "version": "5.0.5",
-                    "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz",
-                    "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==",
-                    "dev": true,
-                    "requires": {
-                        "postcss-selector-parser": "^6.0.4"
-                    }
-                },
-                "postcss-selector-parser": {
-                    "version": "6.0.6",
-                    "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
-                    "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
-                    "dev": true,
-                    "requires": {
-                        "cssesc": "^3.0.0",
-                        "util-deprecate": "^1.0.2"
-                    }
-                },
-                "postcss-value-parser": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-                    "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
-                    "dev": true
-                },
-                "purgecss": {
-                    "version": "4.0.3",
-                    "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz",
-                    "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==",
-                    "dev": true,
-                    "requires": {
-                        "commander": "^6.0.0",
-                        "glob": "^7.0.0",
-                        "postcss": "^8.2.1",
-                        "postcss-selector-parser": "^6.0.2"
-                    }
-                },
-                "readdirp": {
-                    "version": "3.6.0",
-                    "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-                    "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-                    "dev": true,
-                    "requires": {
-                        "picomatch": "^2.2.1"
-                    }
-                },
-                "resolve": {
-                    "version": "1.20.0",
-                    "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
-                    "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
-                    "dev": true,
-                    "requires": {
-                        "is-core-module": "^2.2.0",
-                        "path-parse": "^1.0.6"
-                    }
-                },
-                "resolve-from": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-                    "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-                    "dev": true
-                },
-                "supports-color": {
-                    "version": "7.2.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-                    "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^4.0.0"
-                    }
-                },
-                "to-regex-range": {
-                    "version": "5.0.1",
-                    "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-                    "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-                    "dev": true,
-                    "requires": {
-                        "is-number": "^7.0.0"
-                    }
-                }
-            }
-        },
-        "tapable": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
-            "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
-            "dev": true
-        },
-        "terser": {
-            "version": "5.14.2",
-            "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
-            "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
+        "node_modules/update-browserslist-db": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+            "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
             "dev": true,
-            "requires": {
-                "@jridgewell/source-map": "^0.3.2",
-                "acorn": "^8.5.0",
-                "commander": "^2.20.0",
-                "source-map-support": "~0.5.20"
-            },
-            "dependencies": {
-                "acorn": {
-                    "version": "8.7.1",
-                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
-                    "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
-                    "dev": true
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/browserslist"
                 },
-                "commander": {
-                    "version": "2.20.3",
-                    "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-                    "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-                    "dev": true
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/browserslist"
                 },
-                "source-map-support": {
-                    "version": "0.5.21",
-                    "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
-                    "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
-                    "dev": true,
-                    "requires": {
-                        "buffer-from": "^1.0.0",
-                        "source-map": "^0.6.0"
-                    }
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
                 }
-            }
-        },
-        "terser-webpack-plugin": {
-            "version": "5.1.4",
-            "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz",
-            "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==",
-            "dev": true,
-            "requires": {
-                "jest-worker": "^27.0.2",
-                "p-limit": "^3.1.0",
-                "schema-utils": "^3.0.0",
-                "serialize-javascript": "^6.0.0",
-                "source-map": "^0.6.1",
-                "terser": "^5.7.0"
-            },
+            ],
             "dependencies": {
-                "p-limit": {
-                    "version": "3.1.0",
-                    "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-                    "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-                    "dev": true,
-                    "requires": {
-                        "yocto-queue": "^0.1.0"
-                    }
-                },
-                "schema-utils": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
-                    "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                }
-            }
-        },
-        "text-table": {
-            "version": "0.2.0",
-            "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-            "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
-            "dev": true
-        },
-        "tfunk": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz",
-            "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==",
-            "dev": true,
-            "requires": {
-                "chalk": "^1.1.3",
-                "dlv": "^1.1.3"
+                "escalade": "^3.2.0",
+                "picocolors": "^1.1.1"
             },
-            "dependencies": {
-                "ansi-regex": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-                    "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
-                    "dev": true
-                },
-                "ansi-styles": {
-                    "version": "2.2.1",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
-                    "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
-                    "dev": true
-                },
-                "chalk": {
-                    "version": "1.1.3",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
-                    "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^2.2.1",
-                        "escape-string-regexp": "^1.0.2",
-                        "has-ansi": "^2.0.0",
-                        "strip-ansi": "^3.0.0",
-                        "supports-color": "^2.0.0"
-                    }
-                },
-                "strip-ansi": {
-                    "version": "3.0.1",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-                    "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^2.0.0"
-                    }
-                },
-                "supports-color": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-                    "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
-                    "dev": true
-                }
-            }
-        },
-        "thunky": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
-            "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
-            "dev": true
-        },
-        "timers-browserify": {
-            "version": "2.0.12",
-            "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
-            "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
-            "dev": true,
-            "requires": {
-                "setimmediate": "^1.0.4"
-            }
-        },
-        "timsort": {
-            "version": "0.3.0",
-            "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
-            "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
-            "dev": true
-        },
-        "tmp": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
-            "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
-            "dev": true,
-            "requires": {
-                "rimraf": "^3.0.0"
+            "bin": {
+                "update-browserslist-db": "cli.js"
             },
-            "dependencies": {
-                "rimraf": {
-                    "version": "3.0.2",
-                    "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-                    "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-                    "dev": true,
-                    "requires": {
-                        "glob": "^7.1.3"
-                    }
-                }
-            }
-        },
-        "to-arraybuffer": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
-            "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
-            "dev": true
-        },
-        "to-fast-properties": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-            "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
-            "dev": true
-        },
-        "to-regex-range": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-            "dev": true,
-            "requires": {
-                "is-number": "^7.0.0"
-            }
-        },
-        "toidentifier": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
-            "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
-            "dev": true
-        },
-        "tslib": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
-            "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
-            "dev": true
-        },
-        "tty-browserify": {
-            "version": "0.0.0",
-            "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
-            "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
-            "dev": true
-        },
-        "type": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
-            "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
-            "dev": true
-        },
-        "type-fest": {
-            "version": "0.21.3",
-            "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
-            "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
-            "dev": true
-        },
-        "type-is": {
-            "version": "1.6.18",
-            "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
-            "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
-            "dev": true,
-            "requires": {
-                "media-typer": "0.3.0",
-                "mime-types": "~2.1.24"
+            "peerDependencies": {
+                "browserslist": ">= 4.21.0"
             }
         },
-        "typescript": {
-            "version": "4.9.3",
-            "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
-            "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
-            "dev": true
-        },
-        "ua-parser-js": {
+        "node_modules/util-deprecate": {
             "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz",
-            "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==",
-            "dev": true
-        },
-        "unicode-canonical-property-names-ecmascript": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
-            "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
-            "dev": true
-        },
-        "unicode-match-property-ecmascript": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
-            "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
-            "dev": true,
-            "requires": {
-                "unicode-canonical-property-names-ecmascript": "^1.0.4",
-                "unicode-property-aliases-ecmascript": "^1.0.4"
-            }
-        },
-        "unicode-match-property-value-ecmascript": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
-            "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
-            "dev": true
-        },
-        "unicode-property-aliases-ecmascript": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
-            "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
-            "dev": true
-        },
-        "uniq": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
-            "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
-            "dev": true
-        },
-        "uniqs": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
-            "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
-            "dev": true
-        },
-        "universalify": {
-            "version": "0.1.2",
-            "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
-            "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
-            "dev": true
-        },
-        "unpipe": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-            "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
-            "dev": true
-        },
-        "uri-js": {
-            "version": "4.4.1",
-            "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-            "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-            "dev": true,
-            "requires": {
-                "punycode": "^2.1.0"
-            }
-        },
-        "urix": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-            "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+            "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
             "dev": true
         },
-        "url": {
-            "version": "0.11.0",
-            "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-            "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+        "node_modules/vite": {
+            "version": "5.4.11",
+            "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
+            "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==",
             "dev": true,
-            "requires": {
-                "punycode": "1.3.2",
-                "querystring": "0.2.0"
-            },
             "dependencies": {
-                "punycode": {
-                    "version": "1.3.2",
-                    "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-                    "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
-                    "dev": true
-                }
-            }
-        },
-        "util": {
-            "version": "0.11.1",
-            "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
-            "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
-            "dev": true,
-            "requires": {
-                "inherits": "2.0.3"
+                "esbuild": "^0.21.3",
+                "postcss": "^8.4.43",
+                "rollup": "^4.20.0"
             },
-            "dependencies": {
-                "inherits": {
-                    "version": "2.0.3",
-                    "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-                    "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-                    "dev": true
-                }
-            }
-        },
-        "util-deprecate": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-            "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-            "dev": true
-        },
-        "utils-merge": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-            "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
-            "dev": true
-        },
-        "uuid": {
-            "version": "3.4.0",
-            "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-            "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
-            "dev": true
-        },
-        "v8-compile-cache": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
-            "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
-            "dev": true
-        },
-        "vary": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-            "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
-            "dev": true
-        },
-        "vendors": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
-            "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
-            "dev": true
-        },
-        "vm-browserify": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
-            "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
-            "dev": true
-        },
-        "vue": {
-            "version": "2.6.10",
-            "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz",
-            "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==",
-            "dev": true
-        },
-        "vue-style-loader": {
-            "version": "4.1.3",
-            "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
-            "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==",
-            "dev": true,
-            "requires": {
-                "hash-sum": "^1.0.2",
-                "loader-utils": "^1.0.2"
-            }
-        },
-        "vue-template-compiler": {
-            "version": "2.6.14",
-            "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz",
-            "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==",
-            "dev": true,
-            "requires": {
-                "de-indent": "^1.0.2",
-                "he": "^1.1.0"
-            }
-        },
-        "watchpack": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz",
-            "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==",
-            "dev": true,
-            "requires": {
-                "glob-to-regexp": "^0.4.1",
-                "graceful-fs": "^4.1.2"
-            }
-        },
-        "wbuf": {
-            "version": "1.7.3",
-            "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
-            "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
-            "dev": true,
-            "requires": {
-                "minimalistic-assert": "^1.0.0"
-            }
-        },
-        "webpack": {
-            "version": "5.51.1",
-            "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.51.1.tgz",
-            "integrity": "sha512-xsn3lwqEKoFvqn4JQggPSRxE4dhsRcysWTqYABAZlmavcoTmwlOb9b1N36Inbt/eIispSkuHa80/FJkDTPos1A==",
-            "dev": true,
-            "requires": {
-                "@types/eslint-scope": "^3.7.0",
-                "@types/estree": "^0.0.50",
-                "@webassemblyjs/ast": "1.11.1",
-                "@webassemblyjs/wasm-edit": "1.11.1",
-                "@webassemblyjs/wasm-parser": "1.11.1",
-                "acorn": "^8.4.1",
-                "acorn-import-assertions": "^1.7.6",
-                "browserslist": "^4.14.5",
-                "chrome-trace-event": "^1.0.2",
-                "enhanced-resolve": "^5.8.0",
-                "es-module-lexer": "^0.7.1",
-                "eslint-scope": "5.1.1",
-                "events": "^3.2.0",
-                "glob-to-regexp": "^0.4.1",
-                "graceful-fs": "^4.2.4",
-                "json-parse-better-errors": "^1.0.2",
-                "loader-runner": "^4.2.0",
-                "mime-types": "^2.1.27",
-                "neo-async": "^2.6.2",
-                "schema-utils": "^3.1.0",
-                "tapable": "^2.1.1",
-                "terser-webpack-plugin": "^5.1.3",
-                "watchpack": "^2.2.0",
-                "webpack-sources": "^3.2.0"
+            "bin": {
+                "vite": "bin/vite.js"
             },
-            "dependencies": {
-                "caniuse-lite": {
-                    "version": "1.0.30001251",
-                    "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
-                    "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A=="
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
-                },
-                "electron-to-chromium": {
-                    "version": "1.3.817",
-                    "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.817.tgz",
-                    "integrity": "sha512-Vw0Faepf2Id9Kf2e97M/c99qf168xg86JLKDxivvlpBQ9KDtjSeX0v+TiuSE25PqeQfTz+NJs375b64ca3XOIQ=="
-                },
-                "graceful-fs": {
-                    "version": "4.2.8",
-                    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
-                    "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
-                    "dev": true
-                },
-                "node-releases": {
-                    "version": "1.1.75",
-                    "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
-                    "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
-                },
-                "schema-utils": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
-                    "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                },
-                "webpack-sources": {
-                    "version": "3.2.0",
-                    "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.0.tgz",
-                    "integrity": "sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw==",
-                    "dev": true
-                }
-            }
-        },
-        "webpack-cli": {
-            "version": "4.8.0",
-            "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.8.0.tgz",
-            "integrity": "sha512-+iBSWsX16uVna5aAYN6/wjhJy1q/GKk4KjKvfg90/6hykCTSgozbfz5iRgDTSJt/LgSbYxdBX3KBHeobIs+ZEw==",
-            "dev": true,
-            "requires": {
-                "@discoveryjs/json-ext": "^0.5.0",
-                "@webpack-cli/configtest": "^1.0.4",
-                "@webpack-cli/info": "^1.3.0",
-                "@webpack-cli/serve": "^1.5.2",
-                "colorette": "^1.2.1",
-                "commander": "^7.0.0",
-                "execa": "^5.0.0",
-                "fastest-levenshtein": "^1.0.12",
-                "import-local": "^3.0.2",
-                "interpret": "^2.2.0",
-                "rechoir": "^0.7.0",
-                "v8-compile-cache": "^2.2.0",
-                "webpack-merge": "^5.7.3"
-            }
-        },
-        "webpack-dev-middleware": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.0.0.tgz",
-            "integrity": "sha512-9zng2Z60pm6A98YoRcA0wSxw1EYn7B7y5owX/Tckyt9KGyULTkLtiavjaXlWqOMkM0YtqGgL3PvMOFgyFLq8vw==",
-            "dev": true,
-            "requires": {
-                "colorette": "^1.2.2",
-                "mem": "^8.1.1",
-                "memfs": "^3.2.2",
-                "mime-types": "^2.1.31",
-                "range-parser": "^1.2.1",
-                "schema-utils": "^3.0.0"
+            "engines": {
+                "node": "^18.0.0 || >=20.0.0"
             },
-            "dependencies": {
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
-                    "dev": true
-                },
-                "schema-utils": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
-                    "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
-                }
-            }
-        },
-        "webpack-dev-server": {
-            "version": "4.0.0-rc.1",
-            "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-rc.1.tgz",
-            "integrity": "sha512-gZlGe0CMA0YZ5bIXFbtSegd33tYsUujYv+rgJu9Y75xHvXBSXFJiBvakMV7yTkBE+k8dgz4VsBzl7J5I5xatyg==",
-            "dev": true,
-            "requires": {
-                "ansi-html": "^0.0.7",
-                "bonjour": "^3.5.0",
-                "chokidar": "^3.5.1",
-                "colorette": "^1.2.2",
-                "compression": "^1.7.4",
-                "connect-history-api-fallback": "^1.6.0",
-                "del": "^6.0.0",
-                "express": "^4.17.1",
-                "graceful-fs": "^4.2.6",
-                "html-entities": "^2.3.2",
-                "http-proxy-middleware": "^2.0.0",
-                "internal-ip": "^6.2.0",
-                "ipaddr.js": "^2.0.1",
-                "open": "^8.0.9",
-                "p-retry": "^4.5.0",
-                "portfinder": "^1.0.28",
-                "schema-utils": "^3.1.0",
-                "selfsigned": "^1.10.11",
-                "serve-index": "^1.9.1",
-                "sockjs": "^0.3.21",
-                "spdy": "^4.0.2",
-                "strip-ansi": "^7.0.0",
-                "url": "^0.11.0",
-                "webpack-dev-middleware": "^5.0.0",
-                "ws": "^8.1.0"
+            "funding": {
+                "url": "https://github.com/vitejs/vite?sponsor=1"
             },
-            "dependencies": {
-                "ansi-regex": {
-                    "version": "6.0.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.0.tgz",
-                    "integrity": "sha512-tAaOSrWCHF+1Ear1Z4wnJCXA9GGox4K6Ic85a5qalES2aeEwQGr7UC93mwef49536PkCYjzkp0zIxfFvexJ6zQ==",
-                    "dev": true
-                },
-                "colorette": {
-                    "version": "1.3.0",
-                    "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
-                    "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
-                    "dev": true
-                },
-                "graceful-fs": {
-                    "version": "4.2.8",
-                    "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
-                    "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
-                    "dev": true
+            "optionalDependencies": {
+                "fsevents": "~2.3.3"
+            },
+            "peerDependencies": {
+                "@types/node": "^18.0.0 || >=20.0.0",
+                "less": "*",
+                "lightningcss": "^1.21.0",
+                "sass": "*",
+                "sass-embedded": "*",
+                "stylus": "*",
+                "sugarss": "*",
+                "terser": "^5.4.0"
+            },
+            "peerDependenciesMeta": {
+                "@types/node": {
+                    "optional": true
                 },
-                "schema-utils": {
-                    "version": "3.1.1",
-                    "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
-                    "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
-                    "dev": true,
-                    "requires": {
-                        "@types/json-schema": "^7.0.8",
-                        "ajv": "^6.12.5",
-                        "ajv-keywords": "^3.5.2"
-                    }
+                "less": {
+                    "optional": true
                 },
-                "strip-ansi": {
-                    "version": "7.0.0",
-                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.0.tgz",
-                    "integrity": "sha512-UhDTSnGF1dc0DRbUqr1aXwNoY3RgVkSWG8BrpnuFIxhP57IqbS7IRta2Gfiavds4yCxc5+fEAVVOgBZWnYkvzg==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-regex": "^6.0.0"
-                    }
-                }
-            }
-        },
-        "webpack-merge": {
-            "version": "5.8.0",
-            "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
-            "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
-            "dev": true,
-            "requires": {
-                "clone-deep": "^4.0.1",
-                "wildcard": "^2.0.0"
-            }
-        },
-        "webpack-notifier": {
-            "version": "1.13.0",
-            "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.13.0.tgz",
-            "integrity": "sha512-QLk6l/TZKGhyN6Hd1zobaiYno7S9YPX3wH86+YOSufHes77SegGhnGdj+4vrLDFK5A4ZKoQD5GRXXFnM0h0N8A==",
-            "dev": true,
-            "requires": {
-                "node-notifier": "^9.0.0",
-                "strip-ansi": "^6.0.0"
-            }
-        },
-        "webpack-sources": {
-            "version": "1.4.3",
-            "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
-            "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
-            "dev": true,
-            "requires": {
-                "source-list-map": "^2.0.0",
-                "source-map": "~0.6.1"
-            }
-        },
-        "webpackbar": {
-            "version": "5.0.0-3",
-            "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz",
-            "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==",
-            "dev": true,
-            "requires": {
-                "ansi-escapes": "^4.3.1",
-                "chalk": "^4.1.0",
-                "consola": "^2.15.0",
-                "figures": "^3.2.0",
-                "pretty-time": "^1.1.0",
-                "std-env": "^2.2.1",
-                "text-table": "^0.2.0",
-                "wrap-ansi": "^7.0.0"
-            },
-            "dependencies": {
-                "ansi-styles": {
-                    "version": "4.3.0",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-                    "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-                    "dev": true,
-                    "requires": {
-                        "color-convert": "^2.0.1"
-                    }
+                "lightningcss": {
+                    "optional": true
                 },
-                "chalk": {
-                    "version": "4.1.2",
-                    "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-                    "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-                    "dev": true,
-                    "requires": {
-                        "ansi-styles": "^4.1.0",
-                        "supports-color": "^7.1.0"
-                    }
+                "sass": {
+                    "optional": true
                 },
-                "color-convert": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-                    "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-                    "dev": true,
-                    "requires": {
-                        "color-name": "~1.1.4"
-                    }
+                "sass-embedded": {
+                    "optional": true
                 },
-                "color-name": {
-                    "version": "1.1.4",
-                    "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-                    "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-                    "dev": true
+                "stylus": {
+                    "optional": true
                 },
-                "has-flag": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-                    "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-                    "dev": true
+                "sugarss": {
+                    "optional": true
                 },
-                "supports-color": {
-                    "version": "7.2.0",
-                    "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-                    "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-                    "dev": true,
-                    "requires": {
-                        "has-flag": "^4.0.0"
-                    }
+                "terser": {
+                    "optional": true
                 }
             }
         },
-        "websocket-driver": {
-            "version": "0.7.4",
-            "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
-            "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
-            "dev": true,
-            "requires": {
-                "http-parser-js": ">=0.5.1",
-                "safe-buffer": ">=5.1.0",
-                "websocket-extensions": ">=0.1.1"
-            }
-        },
-        "websocket-extensions": {
-            "version": "0.1.4",
-            "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
-            "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
-            "dev": true
-        },
-        "which": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-            "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-            "dev": true,
-            "requires": {
-                "isexe": "^2.0.0"
-            }
-        },
-        "wildcard": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
-            "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
-            "dev": true
-        },
-        "wrap-ansi": {
-            "version": "7.0.0",
-            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-            "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+        "node_modules/vite-plugin-full-reload": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz",
+            "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==",
             "dev": true,
-            "requires": {
-                "ansi-styles": "^4.0.0",
-                "string-width": "^4.1.0",
-                "strip-ansi": "^6.0.0"
-            },
             "dependencies": {
-                "ansi-styles": {
-                    "version": "4.3.0",
-                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-                    "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-                    "dev": true,
-                    "requires": {
-                        "color-convert": "^2.0.1"
-                    }
-                },
-                "color-convert": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-                    "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-                    "dev": true,
-                    "requires": {
-                        "color-name": "~1.1.4"
-                    }
-                },
-                "color-name": {
-                    "version": "1.1.4",
-                    "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-                    "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-                    "dev": true
-                }
+                "picocolors": "^1.0.0",
+                "picomatch": "^2.3.1"
             }
         },
-        "wrappy": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-            "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-            "dev": true
-        },
-        "ws": {
-            "version": "8.2.0",
-            "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.0.tgz",
-            "integrity": "sha512-uYhVJ/m9oXwEI04iIVmgLmugh2qrZihkywG9y5FfZV2ATeLIzHf93qs+tUNqlttbQK957/VX3mtwAS+UfIwA4g==",
-            "dev": true
-        },
-        "xmlhttprequest-ssl": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
-            "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
-            "dev": true
-        },
-        "xtend": {
-            "version": "4.0.2",
-            "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-            "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-            "dev": true
-        },
-        "y18n": {
-            "version": "5.0.8",
-            "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
-            "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-            "dev": true
-        },
-        "yallist": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-            "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-            "dev": true
-        },
-        "yaml": {
-            "version": "1.10.2",
-            "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-            "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-            "dev": true
-        },
-        "yargs": {
-            "version": "17.1.1",
-            "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz",
-            "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==",
+        "node_modules/vue": {
+            "version": "2.7.16",
+            "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz",
+            "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
+            "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
             "dev": true,
-            "requires": {
-                "cliui": "^7.0.2",
-                "escalade": "^3.1.1",
-                "get-caller-file": "^2.0.5",
-                "require-directory": "^2.1.1",
-                "string-width": "^4.2.0",
-                "y18n": "^5.0.5",
-                "yargs-parser": "^20.2.2"
+            "peer": true,
+            "dependencies": {
+                "@vue/compiler-sfc": "2.7.16",
+                "csstype": "^3.1.0"
             }
-        },
-        "yargs-parser": {
-            "version": "20.2.9",
-            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-            "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-            "dev": true
-        },
-        "yocto-queue": {
-            "version": "0.1.0",
-            "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-            "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-            "dev": true
         }
     }
 }
diff --git a/package.json b/package.json
index 42078f005..c116cd8e0 100644
--- a/package.json
+++ b/package.json
@@ -1,35 +1,27 @@
 {
     "private": true,
+    "type": "module",
     "scripts": {
-        "dev": "mix",
-        "development": "mix",
-        "watch": "mix watch",
-        "watch-poll": "mix watch -- --watch-options-poll=1000",
-        "hot": "mix watch --hot",
-        "production": "mix --production",
-        "prod": "mix --production"
+        "dev": "vite",
+        "build": "vite build"
     },
     "devDependencies": {
-        "autoprefixer": "^10.3.2",
-        "axios": "^0.21",
-        "browser-sync": "^2.27.10",
-        "browser-sync-webpack-plugin": "^2.3.0",
-        "cross-env": "^7.0",
-        "laravel-mix": "^6.0",
-        "laravel-mix-purgecss": "^5.0.0",
+        "@alpinejs/intersect": "^3.14.1",
+        "@alpinejs/persist": "^3.14.1",
+        "alpinejs": "^3.2.4",
+        "autoprefixer": "^10.4.20",
+        "axios": "^0.30",
+        "laravel-vite-plugin": "^1.0.5",
+        "@vitejs/plugin-vue2": "^2.3.1",
         "lodash": "^4.17.19",
-        "postcss": "^8.3.6",
-        "postcss-import": "^12.0.1",
-        "postcss-nested": "^4.1.2",
-        "postcss-preset-env": "^6.7.0",
-        "resolve-url-loader": "^3.0",
-        "tailwindcss": "^2.2.7",
-        "vue": "^2.5.17",
-        "vue-template-compiler": "^2.6.12"
+        "postcss": "^8.4.47",
+        "postcss-import": "^15.1.0",
+        "postcss-nesting": "^12.1.5",
+        "vite": "5.4.11"
     },
     "dependencies": {
         "@docsearch/js": "^3.0.0-alpha.40",
-        "alpinejs": "^3.2.4",
+        "meilisearch-docsearch": "^0.7.1",
         "dayjs": "^1.10.7"
     }
 }
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 000000000..ec92beef6
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+    plugins: {
+      'postcss-import': {},
+      'postcss-nesting': {},
+    },
+  }
diff --git a/public/css/-template.css b/public/css/-template.css
new file mode 100644
index 000000000..dd59ede7b
--- /dev/null
+++ b/public/css/-template.css
@@ -0,0 +1,3 @@
+* {
+    border: 1px solid red;
+}
\ No newline at end of file
diff --git a/public/css/README.css b/public/css/README.css
new file mode 100644
index 000000000..562bebd7c
--- /dev/null
+++ b/public/css/README.css
@@ -0,0 +1,389 @@
+/* GROUP NOTES
+===================================================  */
+/* This file contains detailed guide notes about CSS groups without cluttering CSS files */
+
+
+
+/* GROUP NOTES / FORMATTING / COMMENTS / DEFAULT FORMATTING
+===================================================  */
+/* By default comments should sit vertically above code so they're easily seen when scanning the CSS file. It's tempting to add them to the end of the line to save space but this makes them harder to scan / makes CSS harder to debug, and comments are stripped from production CSS anyway. */
+
+/* Here is an example of a comment */
+.something {
+    display: grid;
+    /* Here is a second example of a commment, e.g. Prevent overflow on screens less than em or px value */
+    grid-template-columns: repeat(auto-fit, minmax(min(100%, 24em), 1fr));
+}
+
+
+
+/* GROUP NOTES / FORMATTING / SPACING / SELECTORS
+===================================================  */
+/* Aims of formatting:
+
+    - Readability
+        - It's very important to be able to quickly understand the author's intentions when scanning CSS
+    - Scannability
+        - While spacing things can aid readability, it can also hinder scannability and comprehension
+        - We should try and save space where possible to improve scannability
+        - Because we use 4 spaces (rather than 2) readability is higher and we can generally visually afford to remove spaces between selectors
+        - Only keep a line between selectors if you're grouping themes (for example, layout selectors, positioning, etc.). Here is a good example of grouping themes, adding a line in between:
+
+        ```
+        c-flying-badges {
+            min-height: 100vh;
+            min-height: 100svh;
+
+            /* Needed for overflow: hidden; to work 
+            position: relative;
+
+            display: grid;
+            align-content: center;
+            text-align: center;
+            /* Minimum vertical padding of --carousel-product-fake-celing if it exists, with a fallback if it doesn't
+            padding: var(--carousel-product-fake-ceiling, var(--spacing-l-3)) var(--spacing-l);
+
+            & > * {
+                text-wrap: balance;
+                &:first-child {
+                    padding-block-start: 0;
+                }
+            }
+            & h2 {
+                font-size: var(--font-size-l-4);
+                line-height: var(--font-size-l-4-line-height);
+                max-width: var(--max-width-content);
+                margin-inline: auto;
+            }
+            & p {
+                font-size: var(--font-size-s);
+                max-width: var(--max-width-reading-long);
+                margin-inline: auto;
+                &:last-of-type {
+                    margin-block-end: 0;
+                }
+            }
+
+            .c-flying-badges__badge {
+                position: absolute;
+                @supports not (animation-timeline: auto) {
+                    rotate: 25deg;
+                    &:nth-of-type(even) {
+                        rotate: -25deg;
+                    }
+                }
+                /* e.g. Pink badge
+                &:nth-of-type(1) {
+                    top: -2rem;
+                    left: -3rem;
+                }
+                /* e.g. Blue badge
+                &:nth-of-type(2) {
+                    bottom: -5%;
+                    left: 8%;
+                }
+                etc.
+        ```
+*/
+/*
+
+    Examples of where we can remove spacing:
+
+    1. Within Objects and Components there should be no line in between _selector_ rules, to keep scannability high. Example:
+        ```
+        .something {
+            
+        }
+        .something-else {
+
+        }
+    ```
+    2. Space in between different media queries can be eliminated without hindering readability
+    3. You can remove space between selectors where code is grouped because it's "reset" or "base" code. You almost never need to touch this code or comprehend the relationship between different selectors.
+    4. You can remove space between selectors where you'd like to logically group code, to help convey a theme. You might want to do this for "reset" CSS, "utility" CSS or, for example, where I am targetting headings:
+        ```
+        blockquote
+            /* e.g. >> /blog/intolerance
+            :is(h2) + & {
+                margin-block: 0 var(--spacing-m);
+            }
+            /* e.g. >> /blog/setting-up-statamic-v3-on-macos-part-4-of-4-publishing-a-statamic-site
+            :is(h3) + & {
+                margin-block-start: var(--spacing-m);
+            }
+        ```
+    5. There should be NO line between groups for Variable definitions at the top of the stylesheet (in the root)
+
+*/
+
+
+
+/* GROUP NOTES / FORMATTING / SPACING / PROPERTIES AND VALUES
+===================================================  */
+/*
+
+    1. Generally every property/value pair should be on a separte line, _except_ in the following circumstances
+    2. When different values or properties share very similar numbers or letters. Example:
+        ```
+        h2, .h2 {
+            font-size: var(--font-size-l); line-height: var(--font-size-l-line-height);
+        }
+    ```
+
+*/
+
+
+
+/* GROUP NOTES / FORMATTING / SPACING / GROUPING
+===================================================  */
+/*
+
+    There should be THREE LINES to separate each group, but _within_ Objects and Components there should be NO line in between groups, to keep scannability high. Example:
+        ```
+        /* GROUP COMPONENTS / SOMETHING
+        =================================================== 
+        .something {
+            
+        }
+        .something-else {
+
+        }
+        /* GROUP COMPONENTS / SOMETHING / MQS
+        =================================================== 
+        @media (min-width: 768px) {
+            .something {
+                
+            }
+        }
+    ```
+
+*/
+
+
+
+/* GROUP VARIABLES -- SPACING
+===================================================  */
+/* Cound be useful to use the max value for increasing spacing on hero text elements, e.g.
+
+    padding-inline-start: max(var(--spacing-l-1), 7vw);
+
+*/
+
+
+
+/* GROUP VARIABLES -- DECORATION -- TEXT -- SIZES
+=================================================== */
+/*
+
+e.g. Based on Augmented Fourth - https://type-scale.com/
+
+---
+
+For thoughts on typography and scale see 'Scaling with vw and clamp units' in my typography.txt file in my wiki
+
+---
+
+CSS min(), max(), and clamp()
+
+- min() — the value used in all situations will be the smallest of the possibilities.
+- max() — the value used in all situations will be the largest of the possibilities.
+- clamp() — accepts three values or calculations: a minimum, preferred, and a maximum. The minimum or maximum will be used if the computed value falls below the minimum or above the maximum. The preferred value will be used if the computed value falls between the two. This allows the property value to adapt to changes in the element or page it is assigned to, while remaining between the minimum and maximum values.
+
+h1 {
+    font-size: clamp(
+    1.1em,  // min - the value is set at this by default. This sholud be a good legible value on smaller screens. Don't worry too much about dramatic type scale.
+    5vw,    // value - when 5vw is bigger than 1.5rem then the font-size becomes 5vw. Don't worry too much about dramatic type scale.
+    1.414em // max - when 5vw hits 1.414em, it stays there as the max. Here is where you should concentrate on aligning to a more dramatic type scale.
+    );
+}
+
+https://developer.mozilla.org/en-US/docs/Web/CSS/clamp
+The <h1> element's font-size is set as clamp(1.8rem, 2.5vw, 2.8rem). This means that the font-size will be set at 1.8rem, until the computed value of 2.5vw becomes greater than that of 1.8rem. At this point, font-size will be set at 2.5vw, until 2.5vw's computed value becomes greater than that of 2.8rem. At this point, the font-size will be set at 2.8rem. clamp() allows you to set a minimum and maximum value.
+
+---
+
+Variable font-size and line-height example...
+(variables are bumped up and down in :root)
+
+font-size: var(--font-size-l-2);
+line-height: var(--font-size-height-l-1);
+
+*/
+
+
+
+/* GROUP ELEMENTS / FRAMEWORK / TEXT / LINK STYLES {/ LINKS} / ACCESSIBILITY / FOCUS
+=================================================== */
+/* Notes...
+
+    Focus = obvious
+    hover = subtle
+
+    - After some thinking I've concluded that...
+        - A _really_ obvious outline maybe combined with a soft hue'd background is the best for outline styles
+        - Use outline on links but box-shadow if you're dealing with buttons or form elements with a border-radius
+        - It's best to make outlines for keyboard users extremely obvious but then remove them totally for non-keyboard users (see 'Remove Focus Styles for Mouse Users' below)
+            - I think extreme both sides is better than going for a middle of the road approach which still offends designers but is very easy to use for keyboard users
+
+    e.g. 
+
+    Example 1 - taken from apple.com
+    ---------
+    .el:focus {
+        outline: 4px solid rgba(0,125,250,0.6);
+        outline-offset: 1px;
+    }
+
+    Example 2 - box-shadow example from Statamic cpanel
+    ---------
+    .el:focus {
+        outline: none;
+        box-shadow: 0 0 0 3px rgba(0,125,255,.25);
+    }
+
+    Example 3 - apple.com but more subtle
+    ---------
+    .el:focus {
+        outline: 4px solid white;
+        outline-offset: 4px;
+    }
+
+    Example 4
+    ---------
+    .el:focus {
+        outline: 3px solid hsla(var(--color-turquoise-hsl),0.2);
+        text-decoration: none;
+        background: hsla(var(--color-turquoise-hsl),0.2);
+        border-bottom: 2px solid hsla(var(--color-turquoise-hsl),0.8);
+    }
+
+*/
+/* .u-focus-style-1 a:focus,
+.c-entry-content a:focus {
+    outline: 3px solid hsla(var(--color-turquoise-hsl),0.2);
+    text-decoration: none;
+    background: hsla(var(--color-turquoise-hsl),0.2);
+    border-bottom: 2px solid hsla(var(--color-turquoise-hsl),0.8);
+} */
+
+/* Notes...
+
+    - Use "u-link-style-custom" prefix then these are pretty much rare/1 off
+    - Still include them in this group so we can see all link styles for easy maintenance
+
+*/
+
+
+
+/* GROUP ELEMENTS / FRAMEWORK / TEXT / LINK STYLES {/ LINKS} / ACCESSIBILITY / HOVER
+=================================================== */
+/* Notes...
+
+    Focus = obvious
+    hover = subtle
+
+    Subtle effects such as going from light gray to black are best for hover. We want to gentle suggest rather than pop out, like we do with focus.
+
+    - Consider descending from p so we don't affect buttons e.g. reply button for blog comments
+    - Consider darkening the underline/border-bottom color on hover, or removing the border on hover
+    - Consider going from light gray to black e.g. navigation hover events
+
+    e.g. 
+
+    .el {
+        color: #eee;
+    }
+    
+    .el:hover {
+        color: black;
+    }
+
+*/
+
+
+
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / TEXT / LINK STYLES {/ LINKS} / ACCESSIBILITY / FOCUS
+=================================================== */
+/* Notes...
+
+    Rian Rietveld, Twitter, on 2018-03-08:
+    - keep a good color contrast for text/borders against the background
+    - not by color alone, so don't only change the color (for color blind users)
+    - in WCAG 2.1 the borders also need to comply to a good contrast
+
+    For focusing on images you could also consider using box-shadow so you can get border radius e.g. box-shadow: var(--box-shadow-focus);
+
+    Other tips:
+    - **https://www.gov.uk/ is a great example of how to handle focus styles**
+    - Do not make colors faint; make them obvious
+    - Try to keep focus colors consistent where possible. You may want to avoid changing colors on buttons though, because it's gross
+    - Use box shadow if you'd like to use border-radius
+
+*/
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / TEXT / LINK STYLES {/ LINKS} / EXTERNAL
+=================================================== */
+/* Source http://css-tricks.com/snippets/jquery/target-only-external-links/ */
+/* a:not([href^="http://brewpixel.com"]):not([href^="#"]):not([href^="/"]) {
+
+} */
+
+
+
+/* GROUP COMPONENTS / FRAMEWORK / BUTTONS
+=================================================== */
+/* Notes...
+
+    Wrap the .c-btn around the a href instead of the other way around because this is the most valid HTML.
+    http://stackoverflow.com/questions/5320404/wrap-link-a-around-div
+
+    <div class="btn">
+        <a href>
+        </a>
+    </div>
+
+*/
+/* GROUP COMPONENTS / FRAMEWORK / BUTTONS / ACCESSIBILITY / HOVER
+=================================================== */
+/* These should be slightly different to focus states. Subtle effects such as changing the background color from blue to darkblue are best for hover. We want to gently suggest rather than pop out (opposite of focus states).
+
+    - Consider darkening the background color slightly e.g. blue to darkblue
+    - Here is a good example...
+    https://material-components.github.io/material-components-web-catalog/#/component/button
+
+*/
+.c-btn a:hover {
+    /* Cancel link hover effect */
+    border-bottom: 0;
+}
+
+/* 1 */
+/* .c-btn--background-transition-example a:hover {
+    background-color: var(--color-brown-dark);
+} */
+
+/* 2 */
+/* .c-btn--2 a:hover {
+    
+} */
+
+
+
+/* GROUP UTILITIES / ANIMATION / IO FRAMEWORK (Authored by me)
+=================================================== */
+/* Here's an example of me using a hidden trigger:
+
+@layer scope {
+    /*
+    [1] Flip the colours on .o-scroll-snap__slide--flip-colours
+    [2] Except when there's a hidden trigger.
+
+    .s-social:has(.o-scroll-snap__slide--flip-colours [data-io-seen]):not(:has([data-io-hidden-trigger])) .c-site-header * {
+        color: black;
+        transition: color 0.5s ease-in 0s;
+    }
+    [3] When the slide contains an explicit trigger then use this to flip the .c-site-header colours
+    .s-social:has(.o-scroll-snap__slide--flip-colours [data-io-hidden-trigger][data-io-seen]) .c-site-header * {
+        color: black;
+    }
+}
+*/
\ No newline at end of file
diff --git a/public/css/base/elements/elements.css b/public/css/base/elements/elements.css
new file mode 100644
index 000000000..0fd6bd47d
--- /dev/null
+++ b/public/css/base/elements/elements.css
@@ -0,0 +1,590 @@
+:root {
+    interpolate-size: allow-keywords;
+}
+
+@layer elements {
+    html {
+        background: var(--color-body-background);
+        color: var(--color-primary-text);
+    }
+
+    body {
+        min-height: 100vh;
+
+        font-family: var(--font-family-ui);
+        font-weight: var(--font-family-ui-weight-normal);
+        /* https://app.typographychecklist.com/ - 23. Use standard ligatures but avoid using discretionary ligatures in body text */
+        font-feature-settings: "kern", "liga", "clig", "calt";
+        /* https://css-tricks.com/scrollbar-reflowing/ */
+        scrollbar-gutter: stable both-edges;
+
+        /* --mq-text-bump-1-after to --mq-text-bump-2-before */
+        @media (width >= 1025px) and (width < 1441px) {
+            /* Decrease */
+            font-size: 90%;
+        }
+        /* --mq-text-bump-2-after */
+        @media (width >= 1441px) {
+            /* Decrease */
+            font-size: 98%;
+        }
+    }
+}
+
+/* GROUP ELEMENTS
+=================================================== */
+@layer elements {
+    /* GROUP ELEMENTS / FRAMEWORK
+    =================================================== */
+    ::selection {
+        background: light-dark(hsl(var(--color-purple-hue), 60%, 90%), hsl(var(--color-purple-hue) 60% 30%));
+        color: var(--color-primary-text);
+    }
+    .torchlight ::selection {
+        background: light-dark(hsl(229deg 20% 35%), hsl(229deg 20% 35%));
+        color: white;
+    }
+    mark {
+        background: var(--color-green);
+        /* e.g. >> /static-caching */
+        padding-inline: var(--spacing-s-5);
+    }
+    /* https://twitter.com/bramus/status/1452572001697153029 */
+    /* html,
+    body {
+        background: ;
+    } */
+    html {
+        /* Consider disabling this if you have pages that require lots of cmd + f https://css-tricks.com/downsides-of-smooth-scrolling/ */
+        scroll-behavior: smooth;
+        /* Opinion on this will differ depending on the font you choose. Do not carpet bomb line height with a * selector though */
+        line-height: 1.5;
+        /* https://web.dev/accent-color/ */
+        accent-color: var(--color-form-accent);
+    }
+    pre, code {
+        /* https://dbushell.com/2024/11/05/webkit-font-smoothing/ */
+        -webkit-font-smoothing: antialiased;
+        font-family: var(--font-family-code);
+        font-weight: var(--font-family-code-weight-light);
+        + p:not(ol p, ul p) {
+            /* Not on this page e.g. >> /extending/vite-in-addons */
+            padding-block-start: var(--spacing-s-2);
+        }
+        /* Put some space between paragraphs and code blocks, except if it's in a tip */
+        p:has(+ &):not(.c-tip p, ol p) {
+            margin-block-end: var(--spacing-m);
+        }
+        li & {
+            /* Make code in bullet points slightly smaller */
+            font-size: 1.025rem;
+        }
+    }
+    code {
+        /* Stop code elements with a long path in causing overflow. Source: https://stackoverflow.com/questions/1165497/how-to-prevent-text-from-overflowing-in-css#3791058 */
+         word-wrap: break-word;
+    }
+    /* Only descending from certain tags, otherwise torchlight is used */
+    :is(h2, h3, h4, p, figure, li) {
+        code {
+            /* e.g. try <code><?php bloginfo('stylesheet_url'); ?></code> and you'll see that it overflows on smaller screens */
+            overflow-x: scroll;
+            padding: 0.07rem 0.4rem;
+            margin: 0.15rem;
+            background: var(--color-code-background);
+            border-radius: 5px;
+            font-family: var(--font-family-code);
+            font-weight: var(--font-family-code-weight-normal);
+            letter-spacing: -0.2px;
+        }
+    }
+
+    figure code {
+        /* Make a little more readable when in a caption because we don't have to worry about surrounding prose */
+        padding: 0.2rem 0.3rem;
+        margin: 0.25rem;
+    }
+
+    /* Prevent images stretching too much */
+    img {
+        /* Maintain aspect ratio */
+        height: auto;
+        .s-main &:not(.c-entry-content *) {
+            /* Some image treatment, particularly in dark mode */
+            filter:
+                contrast(108%)
+                saturate(1.075)
+            ;
+            @container style(--color-scheme: dark) {
+                filter:
+                    hue-rotate(-12deg)
+                    contrast(110%)
+                    opacity(85%)
+                    saturate(1.1)
+                ;
+            }
+        }
+    }
+    /* https://www.youtube.com/watch?v=2lyDv0wOQuQ */
+    img, picture, svg, video {
+        display: block;
+        max-width: 100%;
+    }
+    /* Reset */
+    h1, h2, h3, h4, h5, h6,
+    p,
+    ul, ol,
+    figure, blockquote {
+        margin-block: 0;
+    }
+    blockquote {
+        margin: 0;
+        quotes: "“" "”" "‘" "’";
+        /* Only where there are no children */
+        &:not(:has(*)) {
+            &::before {
+                content: open-quote;
+            }
+            &::after {
+                content: close-quote;
+            }
+            /* https://chriscoyier.net/2023/11/27/the-hanging-punctuation-property-in-CSS */
+            text-indent: -0.45em;
+        }
+        @supports (hanging-punctuation: first) {
+            text-indent: 0;
+            hanging-punctuation: first;
+        }
+    }
+    /* Reset */
+    figure {
+        margin-inline: 0;
+        & img {
+            /* Push the caption away from the image */
+            margin-block-end: var(--spacing-s-4);
+        }
+    }
+    /*
+        - https://youtu.be/UWFrl79092w?si=T0cPhMFkQhdkoLiA&t=75
+        - Excluding navigation and pagination
+    */
+    ul:not([class], nav *, [class*="pagi"] *) {
+        padding-inline-start: 0;
+    }
+    ul[class],
+    *[class] > ul {
+        /* Try to target components that have a list, such as .c-paging > ul, and remove default list styling */
+        list-style: none;
+    }
+    /* Don't affect nav */
+    .s-main li:not(:last-child) {
+        padding-block-end: var(--spacing-s-4);
+    }
+    dl,
+    dt,dd,
+    th,
+    td {
+        padding-block-end: var(--spacing-s-3);
+    }
+    p {
+        margin-block-end: var(--spacing-m);
+        /* --mq-nav-open-before */
+        @media (width < 1100px) {
+            /* Decrease */
+            margin-block-end: var(--spacing-s-1);
+        }
+        &:last-child {
+            margin-block-end: 0;
+        }
+        &:has(+ blockquote) {
+            margin-block-end: var(--spacing-l);
+        }
+    }
+    a {
+        color: inherit;
+    }
+    /* Don't affect Statamic's lists here, which contain p tags like this:
+        <ol>
+            <li>
+                <p>Sponsor games</p>
+            </li>
+            <li>
+                <p>Promote your game</p>
+            </li>
+            <li>
+                <p>Sponsor live events</p>
+            </li>
+        </ol>
+    */
+    .s-main :is(p:not(li p), ol, ul):not(:has(li p)) {
+        line-height: var(--font-size-reading-line-height);
+        list-style-position: inside;
+        padding-inline-start: 0;
+    }
+    /* For Statamic's lists use a different method: */
+    ol:has(li p) {
+        /* e.g. >> /oauth */
+        padding-inline-start: 0;
+    }
+    p + ul {
+        padding-block-start: var(--spacing-s-3);
+    }
+    strong {
+        font-weight: var(--font-family-ui-weight-heavy);
+    }
+    /* Only target our own name-spaced components so that we don't affect plugins */
+    :is([class^="c-"], [class^="o-"]) svg {
+        fill: currentColor;
+        /* For SVG icons */
+        width: 1em;
+        height: 1em;
+    }
+    :is(h1, h2, h3, h4, h5, h6, p) svg {
+        vertical-align: baseline;
+        margin-inline-end: var(--spacing-s-4);
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / MAIN
+    =================================================== */
+    /* Target the main element with a class rather than the main tag, because the main tag can still be used elsewhere e.g. Meilisearch uses it for its modal */
+    .s-main {
+        &:focus {
+            outline: none;
+        }
+        /* Custom */
+        @media (width < 1024px) {
+            /* Only when followed by the footer */
+            &:has(+ footer) {
+                margin-block-end: var(--spacing-l-2);
+            }
+        }
+        & > *:last-child {
+            padding-block-end: 0;
+        }
+        /* --mq-grid-after */
+        @media (width >= 1000px) {
+            display: grid;
+            grid-template-columns: auto auto auto;
+            grid-template-areas:
+                "sidebar-1 breadcrumbs sidebar-2"
+                "sidebar-1 content     sidebar-2"
+            ;
+            gap: var(--spacing-l-1) var(--spacing-m);
+            max-width: var(--max-width-1);
+            margin-inline: auto;
+            margin-block-end: var(--spacing-l-3);
+        }
+        /* --mq-nav-open-after */
+        @media (width >= 1100px) {
+            grid-template-columns: 22fr 70fr 8fr;
+            /* Decrease */
+            row-gap: var(--spacing-l-1);
+            padding-inline: var(--spacing-s-1) var(--spacing-l);
+            /* --mq-wide-before */
+            @media (width < 1650px) {
+                column-gap: 0;
+                padding-inline-start: var(--spacing-s-4);
+            }
+            /* --mq-nav-open-after */
+            @media (width >= 1250px) {
+                grid-template-columns: 21fr 61fr 18fr;
+            }
+            /* --mq-text-bump-2-after */
+            @media (width >= 1441px) {
+                grid-template-columns: 22.5fr 60fr 17.5fr;
+            }
+            grid-template-rows: 2.5rem auto;
+        }
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / HEADINGS
+    =================================================== */
+    /* https://developer.chrome.com/blog/CSS-text-wrap-balance */
+    h1, h2, h3, h4, h5, h6 {
+        /* Not .c-entry-content headings because it feels a bit weird */
+        &:not(.c-entry-content &) {
+            text-wrap: balance;
+        }
+    }
+    blockquote, figcaption, .s-main p {
+        text-wrap: pretty;
+    }
+    figcaption {
+        /* e.g. >> Docs Home */
+        font-family: var(--font-family-ui);
+        font-weight: var(--font-family-ui-weight-medium);
+    }
+    h1, .h1, h1 a, .h1 a, h2, .h2, h2 a, .h2 a, h3, .h3, h3 a, .h3 a {
+        /* Not when headings are inside li, which they sometimes are, e.g. /tips */
+        &:not(li *) {
+            font-family: var(--font-family-prose);
+            font-weight: var(--font-family-prose-weight-normal);
+            /* https://app.typographychecklist.com/ 91 - Use discretionary ligatures and swashes in headlines */
+            font-feature-settings: "kern", "liga", "clig", "calt", "dlig", "swsh";
+            /* Override iOS Safari's user agent stylesheet */
+            text-decoration: none;
+            color: inherit; /* If you use a link inside a heading, inherit the colour so it's not the default browser-purple */
+        }
+    }
+    a :is(h1, h2, h3, h4, h5, h6) {
+        /* When a heading is inside a link, escape the link colour */
+        color: initial;
+    }
+    h4, h4 a, h5, h5 a, h6, h6 a {
+        font-family: var(--font-family-prose);
+        font-weight: var(--font-family-prose-weight-normal);
+        /* Override iOS Safari's user agent stylesheet */
+        text-decoration: none;
+        color: inherit; /* If you use a link inside a heading, inherit the colour so it's not the default browser-purple */
+    }
+    h1 {
+        font-size: var(--font-size-l-5); line-height: var(--font-size-l-5-line-height);
+    }
+    h2 {
+        font-size: var(--font-size-l-4); line-height: var(--font-size-l-4-line-height);
+    }
+    h3 {
+        font-size: var(--font-size-l-3); line-height: var(--font-size-l-3-line-height);
+    }
+    h4 {
+        font-size: var(--font-size-l-2); line-height: var(--font-size-l-2-line-height);
+    }
+    h5 {
+        font-size: var(--font-size-l-1); line-height: var(--font-size-l-1-line-height);
+    }
+    h6 {
+        font-size: var(--font-size-m); line-height: var(--font-size-m-line-height);
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / HEADINGS / HIGH PRIORITY / VERTICAL SPACING
+    =================================================== */
+    h1 {
+        padding-block-end: var(--spacing-m);
+    }
+    h2 {
+        /* E.g. h2 following article intro text */
+        padding-block-end: var(--spacing-m);
+    }
+    * + h2,
+    article + article {
+        /* E.g. h2 following article intro text */
+        padding-block: var(--spacing-s-2) var(--spacing-m);
+        &:has(+ h3) {
+            /* e.g. >> /assets */
+            padding-block-end: 0;
+        }
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / HEADINGS / LOW PRIORITY / VERTICAL SPACING
+    =================================================== */
+    h3 {
+        /* e.g. >> /contributing */
+        padding-block: var(--spacing-s-1) var(--spacing-s-2);
+    }
+    h4 {
+        /* e.g. >> /content-managers-guide */
+        padding-block: var(--spacing-s-1) var(--spacing-m);
+        &:has(code) {
+            /* e.g. >> /forms */
+            padding-block-start: var(--spacing-m);
+        }
+    }
+    h5 {
+        padding-block: var(--spacing-l-1) var(--spacing-m);
+    }
+}
+@layer components {
+    /* Put these at the component level e.g. so we make sure we override something like .c-site-footer li { padding-block-end: var(--spacing-s-4); } */
+    /* Nested lists */
+    ol ol,
+    ol ol li:last-child,
+    ul ul,
+    ul ul li:last-child {
+        padding-block-end: 0;
+    }
+
+    button svg,
+    .c-btn :is([src*="svg"], svg) {
+        font-size: 1.1em;
+    }
+}
+/* GROUP ELEMENTS / FRAMEWORK / HEADINGS / SCOPE ADJUSTMENTS
+=================================================== */
+@layer scope {
+    .c-tip,
+    .c-bordered-image {
+        &:has(+ h2) {
+            /* Increase e.g. >> /assets */
+            margin-block-end: calc(var(--spacing-l-2) + var(--spacing-s-2));
+        }
+    }
+    /* Decrease bottom padding/margin elements previous to hr */
+    .c-entry-content :has(+ hr) {
+        /* Needed for lists */
+        padding-block-end: 0;
+        margin-block-end: 0;
+    }
+    /* Decrease bottom padding/margin following previous to hr e.g. >> /7 on the HTML prototype */
+    /* Headings */
+    .c-entry-content hr + :is(h2, h3, h4) {
+        padding-block-start: 0;
+    }
+    /* GROUP ELEMENTS / HR
+    =================================================== */
+    /* [1] This first technique is used to fake an hr.
+        - We don't want to use this when we follow a header because it would then appear to high up on the page e.g. /assets
+        - Target direct descendents so that we don't affect components such as .c-icon-grid e.g. /deploying
+    */
+    hr, .markdown h2:not(header + h2), article > h2:not(header + h2) {
+        --border-width: 0.3px;
+    }
+    .markdown h2:not(header + h2), article > h2:not(header + h2, hr + h2) {
+        --distance: var(--spacing-l-1);
+        margin-block-start: var(--distance);
+        p:has(+ &) {
+            padding-block-end: var(--spacing-s-1);
+        }
+        figure:has(+ &) + h2 {
+            /* e.g. >> /quick-start-guide */
+            margin-block-start: var(--spacing-l-3);
+        }
+        &::before, &::after {
+            content: "";
+            position: absolute;
+            top: calc(0% - var(--distance) / 4 - 10px);
+        }
+        &::before {
+            background: linear-gradient(to right, var(--color-purple), var(--color-pink), var(--color-blue));
+            opacity: 0.5;
+            inline-size: 100%;
+            block-size: 1px;
+        }
+        &:after {
+            inline-size: 100%;
+
+            position: absolute;
+            left: 0;
+            content: "";
+            inline-size: 100%;
+            border: var(--border-width) dashed var(--color-body-background);
+        }
+    }
+    /* [/2] This second technique is for real hrs */
+    hr {
+        border-image: linear-gradient(to right, var(--color-purple), var(--color-pink), var(--color-blue)) 1;
+        border-width: var(--border-width);
+        position: relative;
+        opacity: 0.5;
+        margin-block: var(--spacing-l-2);
+
+        /* I think this is the only way we can have a dashed border-image */
+        &:after {
+            position: absolute;
+            content: "";
+            inset: 0;
+            top: calc(0% - var(--border-width));
+            border: var(--border-width) dashed var(--color-body-background);
+        }
+    }
+}
+
+
+
+/* GROUP ELEMENTS / NAV
+=================================================== */
+@layer elements {
+    nav {
+        & ul {
+            list-style: none;
+            margin: 0;
+            padding: 0;
+        }
+        & a {
+            color: inherit;
+        }
+        & svg:last-child {
+            /* subnav arrow */
+            margin-inline-start: var(--spacing-s-5);
+            width: 0.7rem;
+            color: var(--color-primary-text);
+
+            *:has(> &) {
+                /* The SVG container */
+                display: flex;
+            }
+        }
+    }
+}
+@layer objects {
+    .o-subnav {
+        transition: var(--transition-transform);
+    }
+    .o-subnav--open {
+        transform: scaleY(-1);
+    }
+}
+
+
+
+/* GROUP ELEMENTS / FRAMEWORK / TEXT / LINK STYLES {/ LINKS }
+=================================================== */
+/* Notes...
+
+    - Link styles are stored as group selectors rather than scattered, since we have multiple properties here.
+    - Do not put transitions on all links, it makes keyboard navigation feel slower. Instead, use transition animations on an individual basis e.g. skip-to-content
+
+*/
+
+/* Default */
+@layer elements {
+    a,
+    button {
+        text-decoration-skip-ink: auto;
+        text-underline-offset: 0.2rem;
+        text-decoration-thickness: 1px;
+        text-decoration-color: light-dark(var(--color-primary-accent), var(--color-link));
+        color: var(--color-link);
+    }
+}
+@layer elements {
+    /* Don't target components like .c-icon-grid on /installing */
+    .c-entry-content a:not([class^="c-"] *) {
+        font-weight: var(--font-family-prose-weight-medium);
+        &[target="_blank"] {
+            /* To handle the external link icon e.g. <a href="https://aws.amazon.com/s3" target="_blank">Amazon S3 bucket{{ svg src="external-link" }}</a> */
+            display: inline-flex;
+            align-items: center;
+            gap: 0.2rem;
+            padding-inline-end: 0.2rem;
+            svg {
+                font-size: 0.85em;
+                margin-inline-end: 0;
+            }
+        }
+    }
+}
+/* GROUP ELEMENTS / FRAMEWORK / TEXT / LINK STYLES {/ LINKS} / ACCESSIBILITY / HOVER
+=================================================== */
+@layer components {
+    .c-entry-content a:not(.c-btn):hover {
+        text-decoration-color: var(--color-purple-dark);
+        color: var(--color-purple-dark);
+    }
+}
+/* GROUP ELEMENTS / TEXT / LINK STYLES {/ LINKS} / ACCESSIBILITY / FOCUS
+=================================================== */
+@layer base {
+    :is(a, button, summary):focus-visible,
+    /* focus-visible on input so we don't cause an outline when ticking cookie choices */
+    input:focus-visible,
+    select:focus-visible,
+    textarea:focus-visible {
+        outline: 3px solid var(--color-focus);
+    }
+    /* ensure the focus outline is effective when a link is wrapped around a heading */
+    a:has(> h2, h3, h4, h5, h6) {
+        display: inline-block;
+    }
+    a:focus {
+        p & {
+            /* Offset for text */
+            outline-offset: 5px;
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/base/elements/forms.css b/public/css/base/elements/forms.css
new file mode 100644
index 000000000..32a1512af
--- /dev/null
+++ b/public/css/base/elements/forms.css
@@ -0,0 +1,614 @@
+/*! Notes...
+
+    Author: Jay George
+    Author URI: https://jaygeorge.co.uk
+
+    ABOUT THIS CSS
+    ===================================================
+    - Class name prefixes are influenced by Namespaces article - http://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces/
+    - Class relationships are based on BEM structure
+    - For more information open readme.css at https://raw.githubusercontent.com/JayGeorge/framework_css/main/css-framework/css/readme.css
+
+*/
+
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / (CROSS POLLINATED)
+=================================================== */
+/* HTML Example...
+
+    <form class="c-form">
+        <div class="c-form__notes">
+            Your email address will not be published
+        </div>
+
+        <fieldset>
+            <legend>Leave a comment</legend>
+            <div>
+
+            </div>
+        </fieldset>
+    </form>
+
+*/
+@layer elements {
+    [type="text"],
+    [type="email"],
+    [type="tel"],
+    [type="password"],
+    [type="url"],
+    [type="tel"],
+    [type="search"],
+    [type="file"],
+    textarea {
+        vertical-align: top;
+        /* box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); */
+        /* =JFG. e.g. search box >> blog or newsletter signup email address */
+        padding: 15px;
+        margin-block-end: 2rem;
+        /* e.g. fields next to each other */
+        margin-right: 0.5rem;
+        /* =JFG. Need line height; IE9 bug. Source http://stackoverflow.com/questions/7797103/text-indent-for-a-text-box-in-ie */
+        line-height: 1.45;
+        border-radius: 2px;
+    }
+
+    [type="file"] {
+        padding-inline-start: 0;
+        border: 0!important;
+    }
+
+    select {
+        /* prevent long options making the box longer */
+        max-width: 100%;
+    }
+
+    label {
+        /* Make padding effective */
+        display: block;
+        padding-block-end: 1rem;
+        /* Fixed */
+        font-size: 16px;
+        font-weight: var(--font-family-ui-weight-heavy);
+        /* Override line-height set on body */
+        line-height: 1;
+    }
+
+    textarea {
+        width: 100%;
+        /* e.g. something like Hubspot might be a bit short */
+        min-height: 200px;
+    }
+
+    [type="checkbox"] {
+        /* Override any input styles */
+        box-shadow: none;
+    }
+
+    [type="checkbox"],
+    [type="radio"] {
+        margin-right: var(--spacing-s);
+    }
+
+    /* Checkbox and Radio labels */
+    [type="checkbox"] + label,
+    [type="radio"] + label {
+        padding-block-end: var(--spacing-s-2);
+    }
+
+    [type="submit"] {
+        /* e.g. >> /blog/readability-test/ */
+        margin-top: var(--spacing-s);
+    }
+
+    /* Don't carpet bomb since we don't want a checkbox 100% width */
+    [type="email"],
+    [type="text"],
+    [type="url"],
+    [type="password"] {
+        width: 100%;
+        /* max-width: 275px; */
+    }
+
+    /* Exceptions */
+    /* =JFG. Need high specificity e.g. "Preferred Appointment Time" xx HH, xx MM */
+    [type="text"] + label {
+        position: relative;
+        /* =JFG. Counter margin-block-end */
+        top: -0.25rem;
+    }
+}
+
+@layer components {
+    .c-form {
+        width: 100%;
+        max-width: var(--max-width-reading);
+        max-width: 50rem;
+        margin-inline: auto;
+    }
+
+    input:not[type="hidden"] + .c-form__notes {
+        /* e.g. 'Login' button followed by 'Forgotten your password?' */
+        padding-block: var(--spacing-l) 0;
+    }
+
+    .c-form__notes {
+        padding-block-end: var(--spacing-m);
+        padding-inline: var(--spacing-l);
+        & p {
+            color: var(--color-gray-reading);
+        }
+    }
+
+    .c-form legend {
+        /* START SCREEN READER TEXT
+        --------------------------- */
+        clip: rect(1px, 1px, 1px, 1px);
+
+        position: absolute!important;
+        overflow: hidden;
+        width: 1px;
+        height: 1px;
+        /* END SCREEN READER TEXT
+        ------------------------- */
+    }
+
+    /* We use a class of fieldset since the `fieldset` element is not always present */
+    .c-form__fieldset {
+        padding: 0 var(--spacing-l);
+        /* Override default */
+        margin: 0;
+        border: 0;
+    }
+
+    .c-form__fieldset.js__formHideLabelsUntilFocused {
+        /* Decrease to account for hidden labels at the top */
+        padding-block-start: var(--spacing-s-1);
+    }
+
+    /* Exceptions */
+    .c-form :is([type="checkbox"], [type="radio"]) {
+        margin-block-end: 0;
+    }
+
+    .maple,
+    /* The <br/> is inserted by Statamic to break lines. We don't want this to take up extra space */
+    .c-form__checkbox-group br {
+        display: none;
+    }
+}
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / (MODIFIERS)
+=================================================== */
+@layer modifiers {
+    .c-form--wide {
+        max-width: 80rem;
+    }
+}
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / STATAMIC EXAMPLE
+=================================================== */
+/* HTML Example...
+
+    <form method="POST" action="https://paradise.wip/!/forms/contact" class="c-form">
+    <input type="hidden" name="_token" value="08dv52uFjXl3JPShnriTrNGc3QUEMRrVWIYRH7Wb">
+        <div class="c-form__notes">
+            <h2>Contact us</h2>
+            <p>Some text here</p>
+        </div>
+        <input type="text" name="maple" class="maple">
+        <fieldset class="c-form__fieldset">
+            <div class="c-form-cols form-cols--2">
+                <div class="c-form-cols__col">
+                    <label>Name</label>
+                    <div><input type="text" name="name"></div>
+                </div>
+                <div class="c-form-cols__col">
+                    <label>Email Address</label>
+                    <div><input type="email" name="email_address"></div>
+                </div>
+                <div class="c-form-cols__col c-form-cols__col--full-width">
+                    <label>Message</label>
+                    <div><textarea name="form_message" rows="5"></textarea></div>
+                </div>
+            </div>
+
+            <button type="submit">Submit</button>
+        </fieldset>
+    </form>
+
+*/
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / PERCH EXAMPLE
+=================================================== */
+/* HTML Example...
+
+    <form id="form1_comment" class="c-form" action="/blog/serving-adaptive-images-to-visitors" method="post">
+        <div class="c-form__notes">
+            <h2>Leave a comment</h2>
+            <p>Your email address will not be published</p>
+        </div>
+
+        <fieldset class="c-form__fieldset">
+            <legend>Leave a comment</legend>
+            <div class="c-form-cols">
+                <div class="c-form-cols__col">
+                    <label for="form1_commentName">Name</label>
+                    <input id="form1_commentName" name="commentName" type="text" required="required">
+                </div>
+                <div class="c-form-cols__col">
+                    <label for="form1_commentEmail">Email</label>
+                    <input id="form1_commentEmail" name="commentEmail" type="email" required="required">
+                </div>
+            </div>
+            <div>
+                <label for="form1_commentURL">Website</label>
+                <input id="form1_commentURL" name="commentURL" placeholder="http://" type="url">
+            </div>
+            <div>
+                <label for="form1_commentHTML">Comment</label>
+                <textarea id="form1_commentHTML" name="commentHTML" cols="30" rows="4" required="required"></textarea>
+            </div>
+            <div>
+                <input id="form1_postID" name="postID" value="15" type="hidden">
+                <input id="form1_submitComment" name="submitComment" value="Submit" type="submit"><input type="hidden" name="cms-form" value="Y29tbWVudDpwZXJjaF9ibG9nOi90ZW1wbGF0ZXMvYmxvZy9jb21tZW50X2Zvcm0uaHRtbDoxNDk0NDM2MDkw">
+            </div>
+        </fieldset>
+    </form>
+
+*/
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / COLUMNS
+=================================================== */
+/* HTML Example...
+
+    <div class="c-form-wrapper"> <-- (Optional). Used to adding padding on smaller MQs
+        <form>
+            <div class="c-form-cols"> <-- or just c-form-rows if you just want a vertically stacked form
+                <div class="c-form-cols__col">
+                    <input/>
+                </div>
+                <div class="c-form-cols__col">
+                    <input/>
+                </div>
+                <div class="c-form-cols__col c-form-cols__col--full-width">
+                    <textarea/>
+                </div>
+            </div>
+        </form>
+    </div>
+
+*/
+/* Modifiers...
+
+    .c-form-cols__col--full-width <-- span the whole column e.g. Message
+
+*/
+@layer components {
+    .c-form-wrapper {
+        /* (Optional). Used to adding padding on smaller MQs */
+        padding-inline: var(--spacing-s);
+    }
+
+    /* if you just want a vertically stacked form */
+    .c-form-rows {
+        display: grid;
+        gap: var(--spacing-l);
+        padding-block-end: var(--spacing-l-2);
+
+        & input {
+            width: 100%;
+            max-width: none;
+            margin-block-end: 0;
+        }
+    }
+
+    /* When you want the submit button to span 100% */
+    /* <button class="c-btn-row" type="submit">Submit</button> */
+    .c-btn-row {
+        width: 100%;
+        text-align: center;
+    }
+
+    .c-form-cols {
+        display: grid;
+        grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+        grid-column-gap: 1em;
+    }
+
+    /* Custom */
+    @media (min-width: 500px) {
+        .c-form-cols__col input {
+            /* e.g. if we have a shorter form field like a password */
+            width: 100%;
+            max-width: none;
+        }
+
+        /* Exceptions */
+        .c-form-cols__col [type="checkbox"],
+        .c-form-cols__col [type="radio"] {
+            width: initial;
+        }
+    }
+}
+@layer modifiers {
+    .c-form-cols--1 {
+        grid-template-columns: 1fr;
+    }
+
+    .c-form-cols__col--full-width,
+    /* e.g. has a file attachment */
+    .c-form-cols__col:has(input[type=file]) {
+        grid-column: 1 / -1;
+    }
+}
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / BUTTONS
+=================================================== */
+/* Notes...
+
+    - You should consider increasing specificity depending on the environment e.g. add .site-container to
+    the selector for WordPress so rules do not affect wp-admin bar
+
+*/
+@layer elements {
+    [type="submit"] {
+        /* Always on a separate line */
+        display: block!important;
+        /* Organisms > Forms > Plugins > Mailchimp */
+        font-size: 0.85rem;
+        /* Same as HTML, overriding the default of 1 in the reset */
+        line-height: 1.5;
+        /* Remove user agent style */
+        background: transparent;
+    }
+}
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / ALERTS
+=================================================== */
+@layer components {
+    .c-alert {
+        padding: var(--spacing-s) var(--spacing-s-1);
+        border-radius: var(--border-radius-l-2);
+        margin-block-end: var(--spacing-s-1);
+        text-transform: uppercase;
+        letter-spacing: var(--letter-spacing-s);
+        font-family: var(--font-family-system);
+        font-weight: 600;
+        font-size: var(--font-size-s-x-x);
+    }
+
+    .c-alert--success {
+        /* https://tailwindui.com/components/application-ui/feedback/alerts */
+        /* AA */
+        background: #ecfdf5;
+        color: #218065;
+    }
+
+    .c-alert--fail {
+        /* https://tailwindui.com/components/application-ui/feedback/alerts */
+        /* AA */
+        background: #fef2f2;
+        color: #c03233;
+    }
+}
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / DECORATION
+=================================================== */
+@layer components {
+    /* Small is output with instructions e.g.
+
+    <label>{{ display }}</label>
+    {{ field }}
+    {{ instructions ?= '<small>{ instructions }</small>' }}
+    {{ if error }}
+        <p class="c-form-error">{{ error }}</p>
+    {{ /if }}
+
+    */
+    .c-form small {
+        display: block;
+        padding-block-start: var(--spacing-s);
+        font-size: 0.9em;
+        text-transform: uppercase;
+        font-family: var(--font-family-ui);
+        color: hsl(0deg 0% 0% / 50%);
+    }
+}
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / DECORATION / BORDERS
+=================================================== */
+@layer elements {
+    input:not([type="submit"]) {
+        border: 1px solid hsl(0deg 0% 90%);
+        border-radius: 4px;
+    }
+
+    [type="text"],
+    [type="email"],
+    [type="password"],
+    [type="tel"],
+    [type="number"],
+    [type="date"],
+    textarea {
+        /* =JFG. Cancel default button appearance */
+        -webkit-appearance: none;
+        background: none;
+        border: 0;
+        border-radius: 0;
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / INPUT TYPES
+    =================================================== */
+    [type="checkbox"] {
+        -webkit-appearance: checkbox;
+    }
+
+    [type="radio"] {
+        -webkit-appearance: radio;
+    }
+
+    [type="checkbox"],
+    [type="radio"] {
+        /* =JFG. So they always line up */
+        float: left;
+    }
+
+    /* The \9 is correct apparently. https://www.google.co.uk/search?q=input%5Btype%3Dradio%5D%2C+input%5Btype%3Dcheckbox%5D+%7B+margin%3A+4px+0+0%3B+margin-top%3A+1px+%5C9%3B+line-height%3A+normal%3B+%7D&oq=input%5Btype%3Dradio%5D%2C+input%5Btype%3Dcheckbox%5D+%7B+margin%3A+4px+0+0%3B+margin-top%3A+1px+%5C9%3B+line-height%3A+normal%3B+%7D&aqs=chrome..69i57.552j0j7&sourceid=chrome&es_sm=91&ie=UTF-8 */
+    [type="radio"],
+    [type="checkbox"] {
+        /* margin: 4px 0 0; */
+        margin-top: 1px \9;
+        line-height: normal;
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / INPUT TYPES / DECORATION
+    =================================================== */
+    [type="search"] {
+        border-radius: 5px;
+    }
+}
+
+
+@layer elements {
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION
+    =================================================== */
+    textarea {
+        border: 1px solid hsl(0deg 0% 73%);
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION / STYLE 1
+    =================================================== */
+    [role="search"] input {
+        background-color: white;
+        border: 1px solid #ddd;
+        border-radius: 3px;
+        box-shadow: 0 0 5px #ddd inset;
+    }
+}
+@layer scope {
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION / STYLE 1
+    =================================================== */
+    .s-input-style--1 input {
+        border: 1px solid #ccc;
+        border-radius: 2px;
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION / STYLE 2
+    =================================================== */
+    .s-input-style--2 {
+        background-color: #f3f3f3;
+    }
+
+    .s-input-style--2 input {
+        border: 1px solid #ccc;
+        border-radius: 2px;
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION / STYLE 3
+    =================================================== */
+    /* =JFG. https://dribbble.com/shots/267632-Personal-Info?list=searches&tag=form_input&offset=6 */
+    .s-input-style--3 input:not([type="radio"]):not([type="file"]) {
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        box-shadow:
+            4px 4px 0 #f6f6f6,
+            4px -4px 0 #f6f6f6,
+            -4px -4px 0 #f6f6f6,
+            -4px 4px 0 #f6f6f6;
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION / STYLE 4
+    =================================================== */
+    /* =JFG. https://dribbble.com/shots/267632-Personal-Info?list=searches&tag=form_input&offset=6 */
+    .s-input-style--4 input {
+        border-radius: 30px;
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION / STYLE 5
+    =================================================== */
+    .s-input-style--5 input {
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        box-shadow:
+            inset 4px 4px 0 #f2f2f2,
+            inset 4px -4px 0 #f2f2f2,
+            inset -4px -4px 0 #f2f2f2,
+            inset -4px 4px 0 #f2f2f2;
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION / STYLE 6
+    =================================================== */
+    .s-input-style--6 input:not([type="radio"]):not([type="file"]) {
+        border: 1px solid #ddd;
+        border-radius: 5px;
+        box-shadow: 0 5px rgba(0,0,0,0.1);
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION / STYLE 7
+    =================================================== */
+    .s-input-style--7 input {
+        background-color: white;
+        border: 1px solid #ddd;
+        border-radius: 3px;
+        box-shadow: 0 0 1px #ddd inset;
+    }
+    /* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / DECORATION / STYLE 8
+    =================================================== */
+    .s-input-style--8 input:not([type="submit"]),
+    .s-input-style--8 textarea {
+        /* e.g. https://dribbble.com/shots/13869341/attachments/5476846?mode=media */
+        /* In case you don't have --box-shadow-s-light-b */
+        /* --box-shadow-s-light-b: 0 10px 9px -8px hsla(0, 0%, 0%, 0.09); */
+        box-shadow: var(--box-shadow-s-light-b);
+        border-radius: var(--border-radius-l-3);
+    }
+
+    .s-input-style--8 textarea {
+        /* Slightly darker to make up for the fact it's bigger */
+        border: 1px solid hsl(0deg 0% 88%);
+    }
+
+    .s-input-style--8 [type="submit"] {
+        width: 100%;
+    }
+}
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / WORDPRESS
+=================================================== */
+@layer components {
+    /* e.g. do not affect hubspot comment, which is the last field. We do not want to create a big gap between the Hubspot comment and the submit button */
+    .comment-form-comment textarea {
+        margin-block-end: 2.4rem;
+    }
+}
+
+
+
+
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / FORMS / TEXT FIELDS / LABELS HIDDEN UNTIL FOCUSED
+=================================================== */
+/* Notes...
+
+    - Uses :has(). For a version that uses JS see forms-archive in my css framework.
+    - Used to provide a more compact experience
+    - Still accessible since labels appear when you start typing
+
+*/
+
+/* HTML Example...
+
+    {{ form:contact class='c-form u-hide-labels-until-focused' }}
+
+*/
+
+/* Alternative classes...
+
+    - Use .u-hide-labels-until-focused__always-show to explicitly always show a label. You probably want to do this on radios and checkboxes since they have multiple labels
+
+*/
+@layer utilities {
+    @supports selector(:has(*)) {
+        .u-hide-labels-until-focused label {
+            /* Fast out, Slow in */
+            transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1) 0s;
+            opacity: 0;
+        }
+
+        .u-hide-labels-until-focused input {
+            /* Decrease */
+            margin-block-end: var(--spacing-s);
+        }
+
+        .u-hide-labels-until-focused label:has(+ input:focus, + textarea:focus) {
+            opacity: 1;
+        }
+
+        .u-hide-labels-until-focused__always-show label {
+            opacity: 1;
+            /* Make up for the labels which other fields don't have */
+            padding-block-start: var(--spacing-l-1);
+            padding-block-end: var(--spacing-m);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/base/elements/tables.css b/public/css/base/elements/tables.css
new file mode 100644
index 000000000..9410ec2e9
--- /dev/null
+++ b/public/css/base/elements/tables.css
@@ -0,0 +1,207 @@
+/* GROUP ELEMENTS / FRAMEWORK / (NON CORE) / TABLES
+=================================================== */
+/* Notes...
+
+    - .c-table should be the wrapper
+    - table should be the actual table
+
+*/
+
+/* HTML Example...
+
+    <div class="c-table">
+        <table>
+            <thead>
+                <tr>
+                    <th>Example URL</th>
+                    <th>Route Pattern Rule</th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr>
+                    <td><code>/blog/2021-12-24/merry-christmas</code></td>
+                    <td><code>/blog/{year}-{month}-{day}/{slug}</code></td>
+                </tr>
+                <tr>
+                    <td><code>/blog/2020/still-bored</code></td>
+                    <td><code>/blog/{year}/{slug}</code></td>
+                </tr>
+                <tr>
+                    <td><code>/blog/happy-new-year</code></td>
+                    <td><code>/blog/{slug}</code></td>
+                </tr>
+                <tr>
+                    <td><code>/evergreen-syle</code></td>
+                    <td><code>/{slug}</code></td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+
+*/
+/* GROUP ELEMENTS / TABLES
+=================================================== */
+@layer elements {
+    .c-table {
+        p:has(+ &) {
+            margin-block-end: 0;
+        }
+        &:not(:last-child) {
+            padding-block-end: var(--spacing-s-4);
+        }
+        h2 + & table {
+            /* e.g. >> /users */
+            margin-block-start: var(--spacing-s-3);
+        }
+        :is(h3, h4, h5, h6) + & table {
+            /* e.g. >> /graphql */
+            margin-block-start: 0;
+        }
+    }
+
+    table {
+        width: 100%;
+        max-width: 100%;
+        background: var(--color-gradient-full-light-3);
+        @container style(--color-scheme: dark) {
+            background: var(--color-gradient-full-light-4);
+        }
+        border-collapse: collapse;
+        border-spacing: 0;
+        margin-block: var(--spacing-l-1);
+        font-family: var(--font-family-ui);
+
+        td {
+            line-height: var(--font-size-m-line-height);
+            font-weight: var(--font-family-ui-weight-normal);
+        }
+
+        .c-entry-content & strong {
+            font-weight: var(--font-family-ui-weight-strong);
+        }
+    }
+
+    th {
+        text-align: left;
+    }
+
+    tbody tr {
+        &:first-child td {
+            padding-block-start: var(--spacing-m);
+        }
+        &:last-child td {
+            padding-block-end: var(--spacing-l);
+        }
+    }
+
+    table > thead > tr > th,
+    table > tbody > tr > th,
+    table > tfoot > tr > th,
+    table > thead > tr > td,
+    table > tbody > tr > td,
+    table > tfoot > tr > td {
+        padding: 0.6rem 2rem;
+        padding-inline-end: 20px;
+        line-height: 1.43;
+        vertical-align: top;
+        /* border-top: 1px dashed var(--color-pink-light-1); */
+    }
+
+    table tr td:first-child {
+        &, & * {
+            /* Make the first "column" stand out. The * selector is there just in case there's also code, e.g. /content-queries */
+            font-weight: var(--font-family-ui-weight-heavy);
+            code {
+                font-weight: var(--font-family-code-weight-strong);
+            }
+        }
+    }
+
+    table > thead > tr > th {
+        padding-block: 1.1rem;
+        vertical-align: bottom;
+        border-block-end: 1px dotted var(--color-pink-light-1);
+        text-transform: uppercase;
+    }
+
+    table > caption + thead > tr:first-child > th,
+    table > colgroup + thead > tr:first-child > th,
+    table > thead:first-child > tr:first-child > th,
+    table > caption + thead > tr:first-child > td,
+    table > colgroup + thead > tr:first-child > td,
+    table > thead:first-child > tr:first-child > td {
+        border-top: 0;
+    }
+
+    table > tbody + tbody {
+        border-top: 2px solid var(--color-pink-light-1);
+    }
+
+    table table {
+        background: white;
+    }
+
+    /* table > thead > tr > th,
+    table > tbody > tr > th,
+    table > tfoot > tr > th,
+    table > thead > tr > td,
+    table > tbody > tr > td,
+    table > tfoot > tr > td {
+        border: 1px solid var(--color-pink-light-1);
+    } */
+
+    table > thead > tr > th,
+    table > thead > tr > td {
+        border-bottom-width: 2px;
+    }
+    /* GROUP ELEMENTS / TABLES / (JAY ADDED)
+    =================================================== */
+    /* Custom */
+    @media (width < 768px) {
+        .c-table {
+            overflow-y: hidden;
+            overflow-x: scroll;
+            /* Make sure we can see the shadow */
+            padding-inline-start: 0.2rem;
+            /* Balance out between the container and table so that the scrollbar appears halfway between the component and the following element */
+            margin-block-end: calc(var(--spacing-l-1) / 2);
+            table {
+                margin-block-end: calc(var(--spacing-l-1) / 2);
+            }
+            -ms-overflow-style: -ms-autohiding-scrollbar;
+            -webkit-overflow-scrolling: touch;
+            width: 100%;
+            box-shadow: var(--box-shadow-s-inset-right);
+        }
+
+        table > thead > tr > th,
+        table > tbody > tr > th,
+        table > tfoot > tr > th,
+        table > thead > tr > td,
+        table > tbody > tr > td,
+        table > tfoot > tr > td {
+            &,
+            /* Statamic adds p tags */
+            & p {
+                white-space: nowrap;
+            }
+        }
+        table > tbody > tr > td:last-child p {
+            /* If the last column contains a paragraph make sure it's a sufficient length e.g. >> /tags/form-create > Variables */
+            min-width: 300px;
+        }
+    }
+    /* GROUP ELEMENTS / TABLES / (MODIFICATIONS) / BORDERED
+    =================================================== */
+    table {
+        border-radius: var(--border-radius-l-2);
+        box-shadow: var(--box-shadow-pink-light);
+    }
+    /* GROUP ELEMENTS / TABLES / (JAY ADDED) / (CROSS POLLINATED)
+    =================================================== */
+    /* =JFG. Fix it so tabular info is easier to digest */
+    table {
+        /* e.g. >> /recent-updates */
+        font-size: 0.9rem;
+    }
+}
\ No newline at end of file
diff --git a/public/css/base/reset.css b/public/css/base/reset.css
new file mode 100644
index 000000000..427cd15f5
--- /dev/null
+++ b/public/css/base/reset.css
@@ -0,0 +1,33 @@
+/* GROUP RESET / FRAMEWORK - VIEW TRANSITIONS
+=================================================== */
+@view-transition {
+    navigation: auto;
+}
+
+@layer base {
+    /* GROUP RESET / FRAMEWORK - Taken from html5boilerplate.com
+    =================================================== */
+    audio,canvas,iframe,img,svg,video {
+        vertical-align: middle;
+    }
+    /* GROUP RESET / FRAMEWORK / NORMALISE
+    =================================================== */
+    /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+    html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}
+    /* GROUP RESET / JAY GEORGE
+    =================================================== */
+    *,
+    *::before,
+    *::after {
+        /* Prevent flickering.
+        When you click a link or a button or a div that has a click function on it,
+        usually a gray box flickers. The below prevents that. Source: http://goo.gl/MZ4Dr5 */
+        -webkit-tap-highlight-color: rgba(0,0,0,0);
+        /* http://www.paulirish.com/2012/box-sizing-border-box-ftw/ */
+        box-sizing: border-box;
+    }
+    iframe {
+        width: 100%;
+        border: none;
+    }
+}
\ No newline at end of file
diff --git a/public/css/base/variables.css b/public/css/base/variables.css
new file mode 100644
index 000000000..75068a869
--- /dev/null
+++ b/public/css/base/variables.css
@@ -0,0 +1,590 @@
+:root {
+    /* GROUP VARIABLES -- SPACING
+    =================================================== */
+    --spacing-s-5: 0.15rem;
+    --spacing-s-4: 0.5rem;
+    --spacing-s-3: 0.8rem;
+    --spacing-s-2: 0.975rem;
+    --spacing-s-1: 1.35rem;
+
+    --spacing-m: 1.55rem;
+    --spacing-l: 1.8rem;
+    --spacing-l-static: 1.8rem;
+    /* Based on e.g. >> Home on mobile */
+    --spacing-l-1: 1.9rem;
+
+    /* Smaller values for mobile */
+    --spacing-l-2: min(12vw, 2.5rem);
+    /* Increased at higher MQs */
+    --spacing-l-2-horizontal: min(12vw, 3.5rem);
+    --spacing-l-3: min(15vw, 4.7rem);
+    --spacing-l-4: min(18vw, 7.5rem);
+
+    /* e.g. footer padding */
+    --spacing-vh-s: min(18vw, 10vh);
+
+    --button-spacing-vertical: 1rem;
+    --button-spacing-inline: 1.5rem;
+
+    /* GROUP VARIABLES -- LAYOUT -- CONSTRAINTS -- MAX
+    =================================================== */
+    /* From lowest to highest value */
+    --max-width-reading: 51rem;
+    --max-width-content: 51rem;
+    /* -- */
+    --max-width-1: 105rem;
+
+    /* GROUP VARIABLES -- LAYOUT -- Z-INDEX
+    =================================================== */
+    --z-index-below-body: -1;
+    --z-index-above-body: 1;
+    --z-index-nav: 2;
+    --z-index-above-nav: 3;
+
+    /* GROUP VARIABLES -- DECORATION -- COLORS -- THEME
+    =================================================== */
+    /* Dark to light */
+    --color-black: hsl(210deg 3.85% 5%);
+    /* Stays the same for both light and dark mode */
+    --color-black-static: hsl(210deg 3.85% 0%);
+    --color-black-light: #334155;
+    /* e.g. .c-site-footer */
+    --color-black-off: hsl(207deg 5% 10%);
+    --color-green: hsl(75deg 100% 65%);
+    --color-blue: hsl(197deg 100% 60%);
+    --color-blue-light-1: hsl(197deg 100% 95%);
+    --color-blue-light-2: hsl(197deg 100% 97%);
+    --color-blue-light-3: hsl(197deg 100% 98%);
+    --color-blue-light-4: hsl(197deg 100% 99%);
+    /* Used for :hover */
+    --color-purple-dark: hsl(256deg 60% 50%);
+    --color-purple-hue: 256deg;
+    --color-purple: hsl(256deg 70% 55%);
+    /* e.g. bullet point decoration */
+    --color-purple-light-1: hsl(256deg 60% 85%);
+    --color-purple-light-2: hsl(256deg 60% 98.5%);
+    --color-purple-light-2-highlight: hsl(256deg 60% 96.25%);
+    --color-pink-hue: 287deg;
+    --color-pink-border: hsl(287deg 80% 90%);
+    --color-pink: hsl(287deg 80% 50%);
+    /* e.g. table border */
+    --color-pink-light-1: hsl(287deg 80% 80%);
+    /* e.g. .c-pill */
+    --color-pink-light-2: hsl(287deg 80% 90%);
+    --color-pink-light-3: hsl(287deg 100% 95%);
+    --color-pink-light-3-static: hsl(287deg 100% 95%);
+    --color-pink-light-4: hsl(287deg 100% 98%);
+    --color-pink-light-5: hsl(287deg 100% 99.5%);
+    --color-red: hsl(0deg 75% 50%);
+    --color-red-bright-hsl: 0deg 95% 50%;
+    --color-red-bright: hsl(0deg 95% 50%);
+    --color-red-light: hsl(0deg 75% 75%);
+    --color-red-burnt-1: hsl(0deg 75% 95%);
+    --color-red-burnt-2: hsl(0deg 75% 97%);
+    --color-red-burnt-3: hsl(0deg 75% 98%);
+    --color-red-burnt-4: hsl(0deg 75% 99%);
+    --color-yellow-hue: 35deg;
+    --color-yellow-hsl: var(--color-yellow-hue) 100% 44.52%;
+    --color-yellow: hsl(var(--color-yellow-hue) 100% 44.52%);
+    /* e.g. ol items */
+    --color-yellow-light-1: hsl(var(--color-yellow-hue) 100% 90%);
+    /* e.g. figcaption on .c-bordered-image */
+    --color-yellow-light-2: hsl(var(--color-yellow-hue) 100% 93.5%);
+    --color-yellow-light-3: hsl(var(--color-yellow-hue) 100% 95%);
+    --color-yellow-light-4: hsl(var(--color-yellow-hue) 100% 98%);
+    --color-yellow-light-5: hsl(var(--color-yellow-hue) 100% 98.5%);
+    --color-yellow-light-6: hsl(var(--color-yellow-hue) 100% 99.5%);
+    --color-gray-background: hsl(217deg 23% 96%);
+    --color-gray-aa: hsl(0deg 0% 40%);
+    /* GROUP VARIABLES -- DECORATION -- COLORS -- SEMANTIC
+    =================================================== */
+    --color-body-background: white;
+    --color-logo-wordmark: var(--color-black);
+    --color-search-form: white;
+    --color-shadow: hsl(0deg 0% 0% / 3.5%);
+
+    --color-primary-text: var(--color-black);
+    --color-primary-accent: var(--color-purple);
+
+    --color-dropdown-nav-background: white;
+
+    --color-focus: var(--color-primary-accent);
+    --color-link: var(--color-primary-accent);
+    --color-text-underline-light: hsl(0deg 0% 80%);
+    --color-code-background: var(--color-gradient-blue-1);
+    --color-code-background: var(--color-pink-light-2);
+    --color-code-background: hsl(287deg 80% 93.5%);
+    --color-code-block-background: hsl(228.57deg 23% 18%);
+
+    --color-form-accent: var(--color-primary-accent);
+
+    --popover-backdrop: light-dark(hsl(0deg 0% 100% / 80%), hsl(0deg 0% 0% / 80%));
+
+    --color-logo-s-hole: var(--color-logo-wordmark);
+    /* GROUP VARIABLES -- DECORATION -- COLOURS -- THEME -- GRADIENTS
+    =================================================== */
+    --color-gradient-purple: linear-gradient(to var(--gradient-direction, right), var(--color-pink),var(--color-purple));
+    /* e.g. current breadcrumb */
+    --color-gradient-full-light-1: linear-gradient(to bottom, var(--color-blue-light-2), var(--color-pink-light-3), var(--color-yellow-light-3));
+    --color-gradient-full-light-2: linear-gradient(225deg, var(--color-blue-light-1), var(--color-pink-light-3), var(--color-yellow-light-3));
+    --color-gradient-full-light-3: linear-gradient(225deg, var(--color-blue-light-2), var(--color-pink-light-4), var(--color-yellow-light-4));
+    --color-gradient-full-light-4: linear-gradient(225deg, var(--color-blue-light-3), var(--color-pink-light-5), var(--color-yellow-light-5));
+    --color-gradient-full-light-5: linear-gradient(225deg, var(--color-blue-light-4), var(--color-pink-light-5), var(--color-yellow-light-6));
+    --color-gradient-full-light-6: linear-gradient(195deg, var(--color-blue-light-2), var(--color-pink-light-4), var(--color-yellow-light-4));
+    /* e.g. code background. Darkened on higher MQs */
+    --color-gradient-blue-1: linear-gradient(to bottom, var(--color-blue-light-1), hsl(var(--color-pink-hue) 80% 95%));
+    /* e.g. header */
+    --color-gradient-blue-2: linear-gradient(175deg, var(--color-blue-light-1) 0%,var(--color-pink-light-3) 100%);
+    /* -- */
+    --color-gradient-blue-light-1: linear-gradient(to bottom, var(--color-blue-light-2),var(--color-pink-light-3));
+    /* Changed to lighter at higher MQs */
+    --color-gradient-blue-light-2: linear-gradient(to bottom, var(--color-blue-light-3),var(--color-pink-light-4));
+    --color-gradient-burnt: linear-gradient(to right, var(--color-red-burnt-3), var(--color-yellow-light-4));
+    --color-gradient-burnt-dark: linear-gradient(to bottom, var(--color-red-burnt-3), var(--color-red-burnt-4));
+    --color-gradient-fire: linear-gradient(to bottom, hsl(var(--color-red-bright-hsl) / 25%), hsl(var(--color-yellow-hsl) / 25%));
+    /* e.g. figcaption for .c-bordered-image */
+    --color-gradient-burnt-right: linear-gradient(to right, var(--color-yellow-light-2), var(--color-red-burnt-2));
+
+    /* GROUP VARIABLES -- DECORATION -- TEXT -- FONTS
+    =================================================== */
+    --font-family-ui: "Lexend", sans-serif;
+    --font-family-prose: p22-mackinac-pro, serif;
+    --font-family-code: "Source Code Pro", serif;
+
+    /* GROUP VARIABLES -- DECORATION -- TEXT -- WEIGHTS
+    =================================================== */
+    --font-family-ui-weight-light: 250;
+    --font-family-ui-weight-normal: 350;
+    --font-family-ui-weight-medium: 500;
+    --font-family-ui-weight-strong: 550;
+    --font-family-ui-weight-heavy: 650;
+
+    --font-family-prose-weight-normal: 400;
+    --font-family-prose-weight-medium: 500;
+    --font-family-prose-weight-strong: 700;
+
+    --font-family-code-weight-light: 500;
+    --font-family-code-weight-normal: 650;
+    --font-family-code-weight-strong: 800;
+
+    /* GROUP VARIABLES -- DECORATION -- TEXT -- SIZES
+    =================================================== */
+    /*
+        -s sizes are sub 1rem
+        -m is just above 1rem
+        -l sizes are above 1rem
+    */
+    /* e.g. breadcrumbs */
+    --font-size-s-3: 0.8em;
+    --font-size-s-2: 0.83em;
+    /* e.g. .c-tiles-with-description p */
+    --font-size-s-2-line-height: 1.4;
+    --font-size-s-1: 0.9em;
+    --font-size-s-1-fixed: 0.9em;
+    --font-size-s-1-line-height: 1.4;
+
+    /* The natural font-size of Lexend feels a touch bigger than p22-mackinac-pro, so you can use this font-size variable to match it. */
+    --font-size-ui: 0.94em;
+    --font-size-ui-rem: 0.95rem;
+    /* A touch lower */
+    --font-size-ui-line-height: 1.5;
+
+    --font-size-reading-line-height: 1.5;
+
+    /* GROUP VARIABLES -- DECORATION -- TEXT -- SIZES -- OUTSIDE SCALE
+    =================================================== */
+    /* -m is just above 1rem */
+    --font-size-m: clamp(1em, 4vw, 1.065rem);
+    --font-size-m-rem: clamp(1rem, 4vw, 1.065rem);
+    /* e.g. .c-tip, with more characters, such as "Best Practice" */
+    --font-size-m-uppercase: 1.075em;
+    /* e.g. >> Home > Lead Text */
+    --font-size-l-1: clamp(1em, 4vw, 1.14em);
+    --font-size-l-1-line-height: 1.5;
+    /* e.g. .c-tip, just a few characters, such as "Hot Tip!" */
+    --font-size-l-1-uppercase: 1.125em;
+    /* GROUP VARIABLES -- DECORATION -- TEXT -- SIZES -- AUGMENTED FOURTH
+    =================================================== */
+    /* Based on Augmented Fourth - https://type-scale.com/ */
+    /* e.g. .c-nav-sidebar-with-popover-api-category-heading on mobile */
+    --font-size-l-2: clamp(1.35em, 6vw, 1.55em);
+    --font-size-l-2-line-height: 1.3;
+
+    --font-size-l-3: clamp(1.8em * 0.85, 6vw, 1.8em);
+    --font-size-l-3-line-height: 1.2;
+
+    --font-size-l-4: clamp(2.25em * 0.9, 6vw, 2.25em);
+    --font-size-l-4-line-height: 1.15;
+
+    --font-size-l-5: clamp(2.827em * 0.9, 9vw, 2.827em);
+    --font-size-l-5-line-height: 1.15;
+
+    /* e.g. >> Home > Learn Statamic */
+    --font-size-l-6: clamp(3.45em * 0.67, 11vw, 3.45em);
+    /* e.g. deploying/laravel-forge */
+    --font-size-l-6-line-height: 1.05;
+
+    /* GROUP VARIABLES -- DECORATION -- BORDER RADIUS
+    =================================================== */
+    /* e.g. .c-full-width-image */
+    --border-radius-s: 5px;
+    --border-radius-m: 8px;
+    --border-radius-l-1: 20px;
+    /* e.g. >> Home > .c-tiles-with-description */
+    --border-radius-l-2: 25px;
+    /* e.g. .c-bordered-image */
+    --border-radius-l-3: 50px;
+
+    /* GROUP VARIABLES -- DECORATION -- SEPARATORS -- BORDERS - ordered from light to dark variants
+    =================================================== */
+    --border-dashed-red: 1px dashed var(--color-red-light);
+    --border-solid: 1px solid var(--color-pink-light-2);
+
+    /* GROUP VARIABLES -- DECORATION -- SEPARATORS -- BOX SHADOWS - ordered from light to dark variants
+    =================================================== */
+    --box-shadow-medium: 0px 0px 15px rgba(0,0,0,0.125);
+    --box-shadow-pink-light: 0px 5px 5px hsl(var(--color-pink-hue) 100% 95%);
+    --box-shadow-not-t-light: 0 3px 5px var(--color-shadow), 0 4px 4px -2px var(--color-shadow);
+    --box-shadow-not-t-lighter: 0 5px 10px var(--color-shadow), 0 4px 1px -2px var(--color-shadow);
+    --box-shadow-not-t-medium: 0 10px 15px -3px hsl(0deg 0% 0% / 5%), 0 4px 6px -2px hsl(0deg 0% 0% / 5%);
+
+    /* GROUP VARIABLES -- DECORATION -- OTHER
+    =================================================== */
+    --filter-image-boost-1: contrast(103%) saturate(1.12);
+    --filter-image-boost-1-with-hue-rotate: contrast(103%) saturate(1.12) hue-rotate(-12deg);
+    --filter-image-boost-1-with-hue-rotate-extra: contrast(108%) saturate(1.35) hue-rotate(-12deg);
+    --filter-image-boost-2: contrast(105%) saturate(1.175);
+    --filter-burnt-shadow: drop-shadow(0px 5px 2px var(--color-red-burnt-1));
+
+    /* GROUP VARIABLES -- ANIMATIONS -- TIMING
+    =================================================== */
+    --animation-timing-function-fast-out-slow-in: cubic-bezier(.4,0,.2,1);
+
+    /* GROUP VARIABLES -- ANIMATIONS -- TRANSITIONS
+    =================================================== */
+    --transition-transform: transform 0.3s var(--animation-timing-function-fast-out-slow-in);
+    --animation-timing-function-hipster: cubic-bezier(0.55, 0, 0.1, 1);
+
+    /* GROUP VARIABLES -- OTHER
+    =================================================== */
+    /* --mq-root-variable-adjustments-1 */
+    @media (min-width: 450px) {
+        /* GROUP VARIABLES -- SPACING
+        ===================================================  */
+        /* Based on nav sidebar and toc spacing */
+        --spacing-l: 2.2rem;
+    }
+    /* --mq-root-variable-adjustments-2 */
+    @media (min-width: 730px) {
+        /* e.g. code background. Darkened on higher MQs */
+        --color-gradient-blue-1: linear-gradient(to bottom, var(--color-blue-light-1), hsl(var(--color-pink-hue) 80% 91%));
+    }
+    /* --mq-root-variable-adjustments-2-portrait */
+    @media (min-width: 730px) and (orientation: portrait) {
+        /* e.g. iPad */
+        --spacing-l-4: 5rem;
+    }
+    /* --mq-text-bump-1-after */
+    @media (width >= 1025px) and (width < 1441px) {
+        /* e.g. >> Home */
+        --button-spacing-vertical: 0.9rem;
+        --button-spacing-inline: 1.25rem;
+        /* Decrease */
+        --spacing-s-1: 1.2rem;
+        --font-size-ui-rem: 0.85rem;
+        --max-width-text: 48rem;
+    }
+    /* --mq-nav-open-after */
+    @media (width >= 1100px) {
+        /* Make colors more subtle because there's more going on. Based on .c-nav-sidebar-with-popover-api-category-heading.o-current-menu-item */
+        --color-pink-light-3: hsl(287deg 100% 97%);
+        --color-blue-light-1: hsl(197deg 100% 96%);
+        --color-yellow-light-3: hsl(var(--color-yellow-hue) 100% 96%);
+    }
+    /* --mq-text-bump-2-after */
+    @media (width >= 1441px) {
+        /* Decrease */
+        --font-size-ui-rem: 0.85rem;
+    }
+
+    /* GROUP VARIABLES -- LIGHT/DARK MODE
+    =================================================== */
+    /* Inspiration - https://www.smashingmagazine.com/2024/03/setting-persisting-color-scheme-preferences-css-javascript/ */
+    /* Default to light */
+    --color-scheme: light;
+    color-scheme: var(--color-scheme, light);
+
+    /* GROUP VARIABLES -- DARK MODE
+    =================================================== */
+    /* e.g. betterify this page */
+    --color-dark-mode-gray-dark: hsl(260deg 35% 17%);
+    --color-dark-mode-gray: hsl(260deg 15% 20%);
+    /* e.g. .c-related background */
+    --color-dark-mode-gray-background: hsl(240deg 20% 17%);
+    --color-dark-mode-gray-light: hsl(260deg 10% 30%);
+    /* Page preference is "dark" */
+    &:has(#color-scheme option[value="dark"]:checked) {
+        /* GROUP VARIABLES -- DECORATION -- TEXT -- WEIGHTS
+        =================================================== */
+        /* Trim heavier weights */
+        --font-family-ui-weight-medium: 450;
+        --font-family-ui-weight-strong: 500;
+        --font-family-ui-weight-heavy: 750;
+        /* GROUP VARIABLES -- DARK MODE -- COLORS
+        =================================================== */
+        /* Thin out fonts */
+        -webkit-font-smoothing: antialiased;
+        --color-scheme: dark;
+        /* any additional dark styles */
+        /* e.g. .c-doc-tabs */
+        --color-black: var(--color-dark-mode-gray);
+        --color-black-off: hsl(var(--color-body-background-hue) 17% 5%);
+        --color-gray-aa: hsl(250deg 3% 53%);
+        /* For dark colours, take the same hs value but dial the lightness right down, making small adjustments as necessary */
+        --color-blue-light-1: hsl(197deg 50% 11%);
+        --color-blue-light-2: hsl(197deg 100% 5%);
+        /* e.g. a folder name in the torchlight file tree view */
+        --color-purple: hsl(256deg 60% 70%);
+        /* e.g. hr-style border before meerkat feedback */
+        --color-purple-light-1: hsl(256deg 40% 45%);
+        /* e.g. torchlight file tree view */
+        --color-purple-light-2: hsl(240deg 20% 10%);
+        --color-purple-light-2-highlight: hsl(256deg 40% 15%);
+        --color-purple-reading: hsl(252deg 70% 70%);
+        /* e.g. hover over a link */
+        --color-purple-dark: hsl(252deg 65% 62%);
+        --color-purple-code-background: hsl(252deg 55% 25%);
+        --color-pink-light-1: hsl(287deg 80% 22%);
+        /* e.g. toc scrollbar */
+        --color-pink-light-2: hsl(287deg 80% 12%);
+        --color-pink-light-3: hsl(287deg 90% 8.5%);
+        --color-pink-light-3-static: hsl(287deg 100% 17%);
+        --color-pink-light-4: hsl(287deg 100% 5%);
+        /* Slightly darker */
+        --color-green: hsl(75deg 100% 50%);
+        @supports (background: oklch(0% 0 0)) {
+            --color-green: oklch(0.9 0.3 128);
+        }
+        --color-green-subtle: hsl(76.34deg 100% 32%);
+        @supports (background: oklch(0% 0 0)) {
+            --color-green-subtle: oklch(0.65 0.25 128);
+        }
+        /* e.g. .c-tip__mascot shadow */
+        --color-red-burnt-1: hsl(305deg 50% 10%);
+        /* e.g. figcaption */
+        --color-red-burnt-2: hsl(305deg 34% 14%);
+        /* e.g. feedback meerkat */
+        --color-red-burnt-3: hsl(236deg 30% 12%);
+        /* e.g. c-tip--warning */
+        --color-red-burnt-4: var(--color-yellow-light-4);
+        /* e.g. .c-docs-header__search */
+        --color-pink-border: unset;
+        --color-yellow-light-1: hsl(44deg 100% 80%);
+        /* e.g. figcaption */
+        --color-yellow-light-2: hsl(235deg 26% 13%);
+        --color-yellow-light-3: hsl(35deg 90% 8%);
+        /* e.g. feedback meerkat */
+        --color-yellow-light-4: hsl(277deg 40% 11.5%);
+        --color-yellow-light-5: var(--color-yellow-light-4);
+        --color-transparent-dark-mode: hsl(0deg 0% 100% / 10%);
+        /* GROUP VARIABLES -- DARK MODE -- COLORS -- GRADIENTS
+        =================================================== */
+        /* e.g. .c-doc-tabs */
+        --color-gradient-blue-1: var(--color-code-background);
+        --color-gradient-blue-2: linear-gradient(to bottom, hsl(197deg 35% 12%) 0%,var(--color-pink-light-3) 100%);
+        --color-gradient-blue-2-radial: radial-gradient(circle at left, hsl(197deg 35% 10%), var(--color-pink-light-3));
+        --color-gradient-blue-light-1: linear-gradient(to bottom, var(--color-blue-light-2),var(--color-pink-light-3));
+        /* e.g. sponsors background */
+        --color-gradient-blue-light-1: var(--color-gradient-full-light-3);
+        /* e.g. .c-related */
+        --color-gradient-blue-light-2: var(--color-gradient-full-light-2);
+
+        /* e.g. .o-current-menu-item in the sidebar */
+        --color-gradient-full-light-2: radial-gradient(circle at left, hsl(217deg 35% 12%), hsl(287deg 40% 10.5%));
+        /* e.g. homepage tiles */
+        --color-gradient-full-light-3: linear-gradient(to bottom, hsl(240deg 25% 10%), hsl(275deg 30% 10%));
+        --color-gradient-full-light-6: linear-gradient(to bottom, hsl(240deg 25% 10%), hsl(275deg 30% 10%));
+        /* e.g. tables */
+        --color-gradient-full-light-4: linear-gradient(to left, hsl(240deg 25% 10%), hsl(275deg 30% 10%));
+        /* e.g. .c-pill-with-description */
+        --color-gradient-full-light-5: linear-gradient(to right, hsl(240deg 25% 10%), hsl(275deg 30% 10%));
+        /* e.g. .c-tip--warning */
+        --color-gradient-fire: var(--color-purple-code-background);
+        /* GROUP VARIABLES -- DARK MODE -- COLORS -- SEMANTIC
+        =================================================== */
+        --color-body-background-hue: 230;
+        --color-body-background: hsl(var(--color-body-background-hue) 17% 7%);
+        --color-dropdown-nav-background: var(--color-body-background);
+        --color-primary-text: hsl(0deg 0% 90%);
+        /* e.g. select dropdown for .c-theme-picker on iOS */
+        --color-primary-accent: white;
+        --color-link: var(--color-purple-reading);
+        --color-code-background: var(--color-purple-code-background);
+        --color-logo-wordmark: var(--color-green);
+        --color-search-form: var(--color-transparent-dark-mode);
+        --color-shadow: hsl(var(--color-body-background-hue, 0) 30% 15% / 40%);
+        --color-code-block-background: hsl(228deg 20% 15%);
+        --color-logo-s-hole: var(--color-body-background);
+        /* GROUP VARIABLES -- DECORATION -- SEPARATORS -- BOX SHADOWS - ordered from light to dark variants
+        =================================================== */
+        /* e.g. .c-docs-header__search */
+        --box-shadow-pink-light: unset;
+        /* The shadow here stands out a touch more than in light mode */
+        --box-shadow-not-t-light: 0 5px 10px var(--color-shadow), 0 4px 10px -2px var(--color-shadow);
+        /* In dark mode this is the same as the above */
+        --box-shadow-not-t-medium: var(--box-shadow-not-t-light);
+        /* GROUP VARIABLES -- DECORATION -- SEPARATORS -- BORDERS - ordered from light to dark variants
+        =================================================== */
+        --border-dashed-red: 1px dashed var(--color-green-subtle);
+        /* e.g. .c-pill */
+        --border-solid: 1px solid var(--color-black);
+        /* GROUP VARIABLES -- DECORATION -- OTHER
+        =================================================== */
+        --filter-dark-tint:
+            hue-rotate(-12deg)
+            contrast(105%)
+            opacity(95%)
+        ;
+        /* Map the burnt shadow to the dark tint */
+        --filter-burnt-shadow: var(--filter-dark-tint);
+        /* Custom */
+        @media (width <= 505px) {
+            /* For making things stand out a bit more in dark mode on mobile e.g. .c-tiles-with-description */
+            --dark-mode-border: 1px dashed hsl(0deg 0% 100% / 10%);
+        }
+    }
+    /* Page preference is "system", and system preference is "dark" */
+    /* Note: For now, we need to repeat these values, but in the future, we can use style queries to eliminate the need to repeat the dark mode variables. [Current support](https://caniuse.com/?search=style%20queries). To do this, we must shift everything down so variables are on the `body` instead of the `root`. The root then contains the `colour-scheme` variables, which means we can now query the `colour-scheme` variable since the root is now the container. */
+    @media (prefers-color-scheme: dark) {
+        &:has(#color-scheme option[value="system"]:checked) {
+            /* GROUP VARIABLES -- DECORATION -- TEXT -- WEIGHTS
+            =================================================== */
+            /* Trim heavier weights */
+            --font-family-ui-weight-medium: 450;
+            --font-family-ui-weight-strong: 500;
+            --font-family-ui-weight-heavy: 750;
+            /* GROUP VARIABLES -- DARK MODE -- COLORS
+            =================================================== */
+            /* Thin out fonts */
+            -webkit-font-smoothing: antialiased;
+            --color-scheme: dark;
+            /* any additional dark styles */
+            /* e.g. .c-doc-tabs */
+            --color-black: var(--color-dark-mode-gray);
+            --color-black-off: hsl(var(--color-body-background-hue) 17% 5%);
+            --color-gray-aa: hsl(250deg 3% 53%);
+            /* For dark colours, take the same hs value but dial the lightness right down, making small adjustments as necessary */
+            --color-blue-light-1: hsl(197deg 50% 11%);
+            --color-blue-light-2: hsl(197deg 100% 5%);
+            /* e.g. a folder name in the torchlight file tree view */
+            --color-purple: hsl(256deg 60% 70%);
+            /* e.g. hr-style border before meerkat feedback */
+            --color-purple-light-1: hsl(256deg 40% 45%);
+            /* e.g. torchlight file tree view */
+            --color-purple-light-2: hsl(240deg 20% 10%);
+            --color-purple-light-2-highlight: hsl(256deg 40% 15%);
+            --color-purple-reading: hsl(252deg 70% 70%);
+            /* e.g. hover over a link */
+            --color-purple-dark: hsl(252deg 65% 62%);
+            --color-purple-code-background: hsl(252deg 55% 25%);
+            --color-pink-light-1: hsl(287deg 80% 22%);
+            /* e.g. toc scrollbar */
+            --color-pink-light-2: hsl(287deg 80% 12%);
+            --color-pink-light-3: hsl(287deg 90% 8.5%);
+            --color-pink-light-3-static: hsl(287deg 100% 17%);
+            --color-pink-light-4: hsl(287deg 100% 5%);
+            /* Slightly darker */
+            --color-green: hsl(75deg 100% 50%);
+            @supports (background: oklch(0% 0 0)) {
+                --color-green: oklch(0.9 0.3 128);
+            }
+            --color-green-subtle: hsl(76.34deg 100% 32%);
+            @supports (background: oklch(0% 0 0)) {
+                --color-green-subtle: oklch(0.65 0.25 128);
+            }
+            /* e.g. .c-tip__mascot shadow */
+            --color-red-burnt-1: hsl(305deg 50% 10%);
+            /* e.g. figcaption */
+            --color-red-burnt-2: hsl(305deg 34% 14%);
+            /* e.g. feedback meerkat */
+            --color-red-burnt-3: hsl(236deg 30% 12%);
+            /* e.g. c-tip--warning */
+            --color-red-burnt-4: var(--color-yellow-light-4);
+            /* e.g. .c-docs-header__search */
+            --color-pink-border: unset;
+            --color-yellow-light-1: hsl(44deg 100% 80%);
+            /* e.g. figcaption */
+            --color-yellow-light-2: hsl(235deg 26% 13%);
+            --color-yellow-light-3: hsl(35deg 90% 8%);
+            /* e.g. feedback meerkat */
+            --color-yellow-light-4: hsl(277deg 40% 11.5%);
+            --color-yellow-light-5: var(--color-yellow-light-4);
+            --color-transparent-dark-mode: hsl(0deg 0% 100% / 10%);
+            /* GROUP VARIABLES -- DARK MODE -- COLORS -- GRADIENTS
+            =================================================== */
+            /* e.g. .c-doc-tabs */
+            --color-gradient-blue-1: var(--color-code-background);
+            --color-gradient-blue-2: linear-gradient(to bottom, hsl(197deg 35% 12%) 0%,var(--color-pink-light-3) 100%);
+            --color-gradient-blue-2-radial: radial-gradient(circle at left, hsl(197deg 35% 10%), var(--color-pink-light-3));
+            --color-gradient-blue-light-1: linear-gradient(to bottom, var(--color-blue-light-2),var(--color-pink-light-3));
+            /* e.g. sponsors background */
+            --color-gradient-blue-light-1: var(--color-gradient-full-light-3);
+            /* e.g. .c-related */
+            --color-gradient-blue-light-2: var(--color-gradient-full-light-2);
+
+            /* e.g. .o-current-menu-item in the sidebar */
+            --color-gradient-full-light-2: radial-gradient(circle at left, hsl(217deg 35% 12%), hsl(287deg 40% 10.5%));
+            /* e.g. homepage tiles */
+            --color-gradient-full-light-3: linear-gradient(to bottom, hsl(240deg 25% 10%), hsl(275deg 30% 10%));
+            --color-gradient-full-light-6: linear-gradient(to bottom, hsl(240deg 25% 10%), hsl(275deg 30% 10%));
+            /* e.g. tables */
+            --color-gradient-full-light-4: linear-gradient(to left, hsl(240deg 25% 10%), hsl(275deg 30% 10%));
+            /* e.g. .c-pill-with-description */
+            --color-gradient-full-light-5: linear-gradient(to right, hsl(240deg 25% 10%), hsl(275deg 30% 10%));
+            /* e.g. .c-tip--warning */
+            --color-gradient-fire: var(--color-purple-code-background);
+            /* GROUP VARIABLES -- DARK MODE -- COLORS -- SEMANTIC
+            =================================================== */
+            --color-body-background-hue: 230;
+            --color-body-background: hsl(var(--color-body-background-hue) 17% 7%);
+            --color-dropdown-nav-background: var(--color-body-background);
+            --color-primary-text: hsl(0deg 0% 90%);
+            /* e.g. select dropdown for .c-theme-picker on iOS */
+            --color-primary-accent: white;
+            --color-link: var(--color-purple-reading);
+            --color-code-background: var(--color-purple-code-background);
+            --color-logo-wordmark: var(--color-green);
+            --color-search-form: var(--color-transparent-dark-mode);
+            --color-shadow: hsl(var(--color-body-background-hue, 0) 30% 15% / 40%);
+            --color-code-block-background: hsl(228deg 20% 15%);
+            --color-logo-s-hole: var(--color-body-background);
+            /* GROUP VARIABLES -- DECORATION -- SEPARATORS -- BOX SHADOWS - ordered from light to dark variants
+            =================================================== */
+            /* e.g. .c-docs-header__search */
+            --box-shadow-pink-light: unset;
+            /* The shadow here stands out a touch more than in light mode */
+            --box-shadow-not-t-light: 0 5px 10px var(--color-shadow), 0 4px 10px -2px var(--color-shadow);
+            /* In dark mode this is the same as the above */
+            --box-shadow-not-t-medium: var(--box-shadow-not-t-light);
+            /* GROUP VARIABLES -- DECORATION -- SEPARATORS -- BORDERS - ordered from light to dark variants
+            =================================================== */
+            --border-dashed-red: 1px dashed var(--color-green-subtle);
+            /* e.g. .c-pill */
+            --border-solid: 1px solid var(--color-black);
+            /* GROUP VARIABLES -- DECORATION -- OTHER
+            =================================================== */
+            --filter-dark-tint:
+                hue-rotate(-12deg)
+                contrast(105%)
+                opacity(95%)
+            ;
+            /* Map the burnt shadow to the dark tint */
+            --filter-burnt-shadow: var(--filter-dark-tint);
+            /* Custom */
+            @media (width <= 505px) {
+                /* For making things stand out a bit more in dark mode on mobile e.g. .c-tiles-with-description */
+                --dark-mode-border: 1px dashed hsl(0deg 0% 100% / 10%);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/anchors.css b/public/css/components/anchors.css
new file mode 100644
index 000000000..5f1e0295b
--- /dev/null
+++ b/public/css/components/anchors.css
@@ -0,0 +1,49 @@
+/* GROUP COMPONENTS / ANCHORS
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    Home
+
+    What does it do?
+    ----------------
+    Anchors are added with anchors.js, which b
+
+*/
+/* HTML Example...
+
+    <h1 id="learn-statamic">Learn Statamic<a href="#learn-statamic" class="c-anchor">#</a></h1>
+
+*/
+@layer components {
+    .c-anchor {
+        position: absolute;
+        left: -2.15rem;
+        transition: all 0.35s var(--animation-timing-function-fast-out-slow-in) 0s;
+        padding-block-start: 0.05em;
+        background: linear-gradient(to bottom, hsl(197deg 100% 80%), hsl(var(--color-pink-hue) 100% 65%));
+        -webkit-background-clip: text;
+        -webkit-text-fill-color: transparent;
+        background-clip: text;
+        text-fill-color: transparent;
+        :is(h1, h2, h3, h4, h5, h6):has(&) {
+            position: relative;
+            &:not(:hover) .c-anchor {
+                left: -2rem;
+                opacity: 0;
+                transform: scale(0.9);
+            }
+        }
+    }
+}
+@layer ui {
+    .c-anchor {
+        /* Hide h1 anchors because they're pointless. However, we still need to generate these with JS because they're used to generate the TOC. */
+        h1 &,
+        /* Sometimes headings are in li items e.g. >> /troubleshooting */
+        li & {
+            display: none;
+        }
+    }
+}
diff --git a/public/css/components/buttons.css b/public/css/components/buttons.css
new file mode 100644
index 000000000..d7ae335ee
--- /dev/null
+++ b/public/css/components/buttons.css
@@ -0,0 +1,123 @@
+/* GROUP COMPONENTS / BUTTONS
+=================================================== */
+/* Notes...
+
+    - You can use a .o-btn-container object to control alignment. For example on the contact form
+
+*/
+/* HTML Example...
+
+    <div class="o-btn-container"> <-- optional object, which you could use to control alignment, e.g. .c-contact-form .o-btn-container { display: flex; justify-content: end; }
+        <div class="c-btn c-btn--1">
+            <a href="">Some button</a>
+        </div>
+    </div>
+
+*/
+@layer components {
+    .c-btn,
+    form button,
+    [type="submit"] {
+        display: inline-flex;
+        gap: 1rem;
+        /* I've found it more stable to use pxls rather than ems. */
+        --button-spacing: var(--button-spacing-vertical) var(--button-spacing-inline);
+        padding: var(--button-spacing);
+        font-size: var(--font-size-s-1);
+        font-weight: var(--font-family-ui-weight-heavy);
+        text-decoration-line: none;
+        /* Hover states with a slight delay, but focus without any because keyboard users want quick feedback. Do not use 'all' because it resizes slowly when resizing the browser window */
+        transition: background-color 0.2s ease 0s;
+    }
+    .c-btn {
+        position: relative;
+        /* e.g. icons in buttons */
+        display: inline-flex;
+        align-items: center;
+        margin-block-end: 1.25rem;
+        text-align: left;
+
+        :is(p) + & {
+            margin-block-start: var(--spacing-s-2);
+        }
+    }
+    button {
+        /* Improve usability */
+        cursor: pointer;
+    }
+}
+@layer elements {
+    /*
+        - Don't affect the header
+        - Not .c-btn + .c-btn in case a button is next to a different tag such as <p/>
+    */
+    main :is(.c-btn, button):not(:last-child) {
+        margin-right: 1rem;
+    }
+    button,
+    [type="search"],
+    [type="submit"] {
+        /* Cancel default button appearance */
+        -webkit-appearance: none!important;
+        border: none;
+    }
+    button {
+        /* Improve usability */
+        cursor: pointer;
+        /* Cancel default button appearance */
+        background: none;
+        /* To combat -apple-system-blueinput on iOS 15 */
+        color: var(--color-primary-text);
+    }
+}
+@layer components {
+    button svg {
+        font-size: 1.2em;
+    }
+}
+/* GROUP COMPONENTS / BUTTONS / TYPES
+=================================================== */
+@layer modifiers {
+    /* 1 */
+    .c-btn--1,
+    form button,
+    [type="submit"] {
+        background: linear-gradient(to top left, var(--color-black) 0%,var(--color-black-light) 100%);
+        color: var(--color-green);
+        border-radius: var(--border-radius-s);
+        font-weight: var(--font-family-ui-weight-medium);
+        @container style(--color-scheme: dark) {
+            background: var(--color-dark-mode-gray-dark);
+        }
+    }
+    /* GROUP COMPONENTS / FRAMEWORK / BUTTONS / ACCESSIBILITY / HOVER
+    =================================================== */
+    /* These should be slightly different to focus states. Subtle effects such as changing the background color from blue to darkblue are best for hover. We want to gently suggest rather than pop out (opposite of focus states).
+
+        - Consider darkening the background color slightly e.g. blue to darkblue
+        - Here is a good example...
+        https://material-components.github.io/material-components-web-catalog/#/component/button
+
+    */
+
+    /* 2 */
+    .c-btn--2 {
+        background: var(--color-gray-background);
+        border-radius: var(--border-radius-l-2);
+    }
+
+    /* Inline */
+    .c-btn--inline {
+        padding: 0;
+        text-decoration-line: underline;
+        text-decoration-thickness: 3px;
+        font-weight: var(--font-family-ui-weight-heavy);
+    }
+
+    /* Small */
+    .c-btn--s {
+        --button-spacing-vertical: 0.7rem;
+        --button-spacing-inline: 1rem;
+        font-size: 1rem;
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/doc-tabs.css b/public/css/components/doc-tabs.css
new file mode 100644
index 000000000..dd18cc3e6
--- /dev/null
+++ b/public/css/components/doc-tabs.css
@@ -0,0 +1,110 @@
+/* GROUP COMPONENTS / DOC TABS
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    A tabbed interface for displaying different languages e.g. Antlers, Blade, etc.
+
+*/
+/* HTML Example...
+
+*/
+/* Modifiers...
+
+    .c-pill--negative <- will turn the value text to red
+
+*/
+@layer components {
+    .c-doc-tabs {
+        --button-radius: var(--border-radius-l-1);
+        margin-block: var(--spacing-s-5) var(--spacing-l-1);
+        /* e.g. p followed by .c-docs-tabs e.g. >> /collections */
+        padding-block-start: var(--spacing-s-2);
+        border-radius: var(--button-radius);
+
+        pre {
+            margin-block-end: 0;
+        }
+
+        code {
+            font-size: unset;
+        }
+
+        .tab-content {
+            border-radius: var(--button-radius);
+            border-top-left-radius: 0;
+            border-block-end: 0;
+            /* Sometimes the tab content contains tips e.g. >> /taxonomies and /extending/modifiers */
+            &:not(:has(.c-tip)) {
+                background: var(--color-gradient-full-light-4);
+                @container style(--color-scheme: dark) {
+                    background: var(--color-gradient-full-light-2);
+                }
+                border: 1px solid var(--color-black);
+                p, ol, ul {
+                    padding: var(--spacing-s-1);
+                }
+                /* Not >> /extending/modifiers */
+                p:has(~ pre) {
+                    /* e.g. >> /fieldtypes/assets */
+                    padding-block-end: 0;
+                }
+                ol, ul {
+                    /* e.g. >> /extending/modifiers */
+                    padding-block-end: var(--spacing-l);
+                }
+            }
+        }
+        :nth-last-child(1 of .c-tip) {
+            margin-block-end: 0;
+        }
+    }
+    .c-doc-tabs p:not(.c-tip *),
+    .c-doc-tabs__tabs {
+        font-size: unset;
+        font-family: var(--font-family-ui);
+        font-weight: var(--font-family-ui-weight-strong);
+    }
+    .c-doc-tabs__tabs {
+        display: inline-flex;
+        font-size: var(--font-size-s-1);
+        line-height: var(--font-size-s-1-line-height);
+        border: 1px solid var(--color-black);
+        border-block-end: 0;
+        border-radius: var(--border-radius-s);
+        border-bottom-left-radius: 0;
+        border-bottom-right-radius: 0;
+        button {
+            margin: 0;
+            padding: var(--spacing-s-3) var(--spacing-s-1);
+            text-transform: uppercase;
+            font-size: var(--font-size-s-1);
+            background: light-dark(var(--color-body-background), transparent);
+            &:first-child {
+                border-top-left-radius: inherit;
+            }
+            &:last-child {
+                border-top-right-radius: inherit;
+            }
+            &:not(:last-child) {
+                border-inline-end: 1px solid var(--color-black);
+            }
+        }
+    }
+    button.c-doc-tabs__active {
+        background: var(--color-gradient-blue-1);
+        font-weight: var(--font-family-ui-weight-heavy);
+    }
+}
+@layer plugins {
+    .c-doc-tabs__tabs ~ .tab-content {
+        /* e.g. >> /globals */
+        /* e.g. >> /navigation */
+        /* e.g. >> /data-inheritance */
+        pre:first-of-type:not(:has(p)), code {
+            margin-block-start: 0;
+            border-top-left-radius: 0;
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/docs-header.css b/public/css/components/docs-header.css
new file mode 100644
index 000000000..57310bdc0
--- /dev/null
+++ b/public/css/components/docs-header.css
@@ -0,0 +1,250 @@
+@layer components {
+    /* GROUP COMPONENTS / SITE HEADER
+    =================================================== */
+    /* HTML Example...
+
+        .c-docs-header
+            .c-docs-header__inner
+                .c-docs-header__site-logo
+                .c-docs-header__nav
+                .c-docs-header__cta
+
+    */
+
+    .c-docs-header {
+        position: sticky;
+        top: 0;
+        z-index: var(--z-index-nav);
+        --background-position: 5rem;
+        --gradient: var(--color-gradient-blue-2);
+        --background-image: url('/img/paper-tear.png');
+        /* Page preference is "dark" */
+        html:has(#color-scheme option[value="dark"]:checked) & {
+            --background-image: url('/img/paper-tear-dark-mode.png');
+        }
+        /* Page preference is "system", and system preference is "dark" */
+        @media (prefers-color-scheme: dark) {
+            html:has(#color-scheme option[value="system"]:checked) & {
+                --background-image: url('/img/paper-tear-dark-mode.png');
+            }
+        }
+        background: var(--background-image) no-repeat 0% var(--background-position), var(--gradient);
+        @supports not (animation-timeline: auto) {
+            /* Remove the background image when scroll-driven animations are not supported */
+            background: no-repeat 0% var(--background-position), var(--gradient);
+        }
+    }
+
+    .c-docs-header__inner {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        gap: var(--spacing-s-1);
+        max-width: var(--max-width-1);
+        margin-inline: auto;
+        padding: var(--spacing-s-1) var(--spacing-s-3) var(--spacing-l-1);
+        margin-block-end: var(--spacing-s-3);
+
+        /* GROUP COMPONENTS / NAV / CURRENT PAGE
+        =================================================== */
+        .o-current-menu-item > a span {
+            color: var(--color-turquoise);
+        }
+
+        /* GROUP COMPONENTS / SITE HEADER / SITE LOGO
+        =================================================== */
+        .o-logo {
+            display: flex;
+            align-items: center;
+            gap: var(--spacing-s-2);
+        }
+        .o-logomark {
+            width: 1em;
+            height: 1em;
+            font-size: 3.75em;
+        }
+        /* svg*/
+        .o-wordmark {
+            width: 11em;
+            block-size: 100%;
+            fill: var(--color-logo-wordmark);
+        }
+    }
+    .c-docs-header__nav-dots {
+        font-size: 1.7em;
+        padding-inline: 0 var(--spacing-s-4);
+        svg {
+            color: var(--color-primary-text);
+        }
+    }
+    .c-docs-header__search {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        gap: var(--spacing-s-4);
+        /* Custom */
+        @media (width >= 700px) {
+            /* Increase */
+            gap: var(--spacing-s-3);
+        }
+        .c-theme-picker {
+            display: flex;
+        }
+    }
+    /* GROUP COMPONENTS / SITE HEADER / SITE LOGO / MQs
+    =================================================== */
+    /* --mq-nav-open-before */
+    @media (width < 1100px) {
+        .c-docs-header {
+            margin-block-end: var(--spacing-m);
+            @supports (animation-timeline: auto) {
+                /* Less space because the header is not compressed until we scroll further down */
+                margin-block-end: var(--spacing-s-2);
+                /* --mq-grid-after */
+                @media (width >= 1000px) {
+                    /* Increase */
+                    margin-block-end: var(--spacing-m);
+                }
+            }
+            @container style(--color-scheme: dark) {
+                --gradient: linear-gradient(160deg, var(--color-blue-light-1), var(--color-pink-light-3) 75%, var(--color-yellow-light-3));
+            }
+        }
+        .c-docs-header__inner {
+            .o-wordmark {
+                display: none;
+            }
+        }
+    }
+    /* --mq-nav-open-after */
+    @media (width >= 1100px) {
+        .c-docs-header {
+            /* Change to include some yellow */
+            --gradient: linear-gradient(175deg, var(--color-blue-light-1), var(--color-pink-light-3), var(--color-yellow-light-3));
+            @container style(--color-scheme: dark) {
+                /* Change the stop point very slightly for dark mode */
+                --gradient: linear-gradient(140deg, var(--color-blue-light-1), var(--color-pink-light-3) 75%, var(--color-yellow-light-3));
+            }
+
+            /* Custom */
+            @media (width >= 1580px) {
+                /* Increase */
+                background-size: 100% auto, auto auto;
+            }
+        }
+        .c-docs-header__inner {
+            padding: 1rem var(--spacing-l) 3rem;
+            margin-block-end: 2rem;
+            .o-logomark {
+                /* Decrease */
+                font-size: 2.75em;
+            }
+
+            &::before {
+                content: '';
+                position: absolute;
+                z-index: var(--z-index-below-body);
+                opacity: 0.6;
+                inline-size: 38.2%;
+                right: 0;
+                height: 85%;
+                transform: scaleX(-1);
+
+                /* https://css-pattern.com/graph-paper/ */
+                --s: 220px; /* control the size*/
+                --c1: white;
+                --c2: transparent;
+                --_g: #0000 90deg,var(--c1) 0;
+                background:
+                  conic-gradient(from 90deg at 1px 1px,var(--_g)),
+                  conic-gradient(from 90deg at 1px 1px,var(--_g)),
+                  var(--c2);
+                background-size: var(--s) var(--s), calc(var(--s)/5) calc(var(--s)/5);
+            }
+        }
+        /* Page preference is "dark" */
+        html:has(#color-scheme option[value="dark"]:checked) .c-docs-header__inner::before {
+            opacity: 0.05;
+        }
+        /* Page preference is "system", and system preference is "dark" */
+        @media (prefers-color-scheme: dark) {
+            html:has(#color-scheme option[value="system"]:checked) .c-docs-header__inner::before {
+                opacity: 0.05;
+            }
+        }
+    }
+    /* Custom */
+    @media (width >= 2100px) {
+        .c-docs-header {
+            --background-image: url('/img/paper-tear-large.png');
+            /* Page preference is "dark" */
+            html:has(#color-scheme option[value="dark"]:checked) & {
+                --background-image: url('/img/paper-tear-large-dark-mode.png');
+            }
+            /* Page preference is "system", and system preference is "dark" */
+            @media (prefers-color-scheme: dark) {
+                html:has(#color-scheme option[value="system"]:checked) & {
+                    --background-image: url('/img/paper-tear-large-dark-mode.png');
+                }
+            }
+            --background-position: 7.75rem;
+            background-repeat: repeat-x;
+            background-size: 1800px auto, auto auto;
+        }
+        .c-docs-header__inner {
+            /* Increase */
+            padding-block: 2.5rem 4.75rem;
+        }
+    }
+    /* GROUP COMPONENTS / SITE HEADER / SCROLL DRIVEN ANIMATIONS
+    =================================================== */
+    @supports (animation-timeline: auto) {
+        /* --mq-nav-open-after */
+        @media (width >= 1100px) {
+            .c-docs-header {
+                position: fixed;
+                top: unset;
+                inline-size: 100%;
+            }
+            main {
+                padding-block-start: 9.5rem;
+            }
+        }
+        /* Custom */
+        @media (width >= 2100px) {
+            main {
+                /* Increase */
+                padding-block-start: 12.5rem;
+            }
+        }
+    }
+    body {
+        view-timeline-name: --body;
+    }
+    @keyframes compress-header {
+       100% {
+            padding-block: var(--spacing-s-2) var(--spacing-s-2);
+       }
+    }
+    .c-docs-header__inner {
+        /* This gets triggered straight away on browsers that don't support scroll-driven animations, so the header will always appear compressed */
+        animation-name: compress-header;
+        animation-timing-function: linear;
+        animation-timeline: --body;
+        animation-range: entry 100% entry 103%;
+        animation-fill-mode: both;
+        @supports (animation-timeline: auto) {
+            margin-block-end: unset;
+        }
+        @supports not (animation-timeline: auto) {
+            /* --mq-nav-open-after */
+            @media (width >= 1100px) {
+                /* [1] I had this option at first to make the "torn" header the default */
+                /* animation: unset; */
+                /* [/2] But in the end I made the "compressed" header the default for browsers that don't support scroll-driven-animations */
+                padding-block: var(--spacing-s-3) var(--spacing-s-2);
+                margin-block-end: var(--spacing-l-2);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/entry-content.css b/public/css/components/entry-content.css
new file mode 100644
index 000000000..afaf99bd4
--- /dev/null
+++ b/public/css/components/entry-content.css
@@ -0,0 +1,258 @@
+/* GROUP COMPONENTS / ENTRY / ENTRY CONTENT
+=================================================== */
+/*
+
+    - Entry content is the main page content which houses prose and other writing components
+    - Although technically, this is more like a scope, housing different components, it should sit at the component layer so that the components inside can easily override this base layer.
+
+*/
+/* HTML Example...
+
+    <div class="c-entry-content-wrapper"> <-- container to help with placement
+        <article class="c-entry-content">
+            <h1>Title</h1>
+            <p>Entry content</p>
+        </article>
+    </div>
+
+*/
+/* Put some rules at the element layer where components should easily override them */
+@layer elements {
+    .c-entry-content {
+        /* Sometimes there are p tags in tables e.g. >> /tags */
+        p:not(table *) {
+            max-width: var(--max-width-reading);
+            /* Rem instead of em because of p tags inside li tags e.g. e.g. >> /fields */
+            font-size: var(--font-size-m-rem);
+        }
+        strong {
+            font-weight: var(--font-family-prose-weight-strong);
+        }
+    }
+}
+@layer components {
+    .c-entry-content-wrapper {
+        max-width: var(--max-width-1);
+        /* If it's the first entry-content on the page then push it away from the header */
+        :is(main) > section > article &:first-child {
+            padding-block-start: var(--spacing-vh-s);
+        }
+        /* The last entry-content but not if it's the last main item. */
+        main > *:not(:last-child) &:last-child {
+            padding-block-end: var(--spacing-l-4);
+        }
+        /* If it's the last item set padding to 0 */
+        main > section:last-child &:last-child {
+            padding-block-end: 0;
+        }
+        /* --mq-grid-after */
+        @media (width >= 1000px) {
+            grid-area: content;
+        }
+        /* --mq-nav-open-after and --mq-nav-open-before */
+        @media (width >= 1100px) and (width < 1250px) {
+            grid-column: span 2;
+        }
+    }
+    .c-entry-content {
+        max-width: var(--max-width-content);
+        /* --mq-nav-open-before */
+        @media (width < 1100px) {
+            margin-inline: auto;
+        }
+        /* Based on e.g. >> Home on mobile */
+        padding-inline: var(--spacing-l);
+        font-family: var(--font-family-prose);
+
+        /* e.g. .o-badge-heading */
+        > :has(h1),
+        > h1, > .h1 {
+            padding-block-start: 0;
+        }
+
+        :nth-child(1 of header) {
+            /* Article intro text */
+            p,
+            /* Or if there's no article intro text in the header, instead make the first following paragraph an "intro" style text e.g. >> /reference/widgets */
+            &:has(:not(p)) + article > p:first-child {
+                font-size: var(--font-size-l-1);
+                line-height: var(--font-size-l-1-line-height);
+                max-width: var(--max-width-content);
+                margin-block-end: var(--spacing-m);
+            }
+            /* e.g. >> /extending/markdown */
+            &:has(h1:only-child):has(+ h2) h1 {
+                padding-block-end: 0;
+            }
+        }
+
+        & h2 {
+            :is(.c-entry-content) > &:first-child {
+                /* Add top spacing for the beginning of a section */
+                padding-block-start: var(--spacing-s-1);
+            }
+        }
+
+        ol, ul {
+            /* Rem because sometimes there are lists within lists e.g. >> /taxonomies */
+            font-size: var(--font-size-m-rem);
+            /* e.g. >> /upgrade-guide */
+            /* margin-block: var(--spacing-l); */
+            &:has(+ :is(h2, h3, h4, h5, h6)) {
+                padding-block-end: var(--spacing-s-1);
+            }
+            :is(h2, h3, h4, h5, h6) {
+                font-size: inherit;
+                line-height: inherit;
+                padding-block-end: 0;
+            }
+        }
+
+        li :is(ol, ul) {
+            /* e.g.
+
+            <ul>
+                <li>something</li>
+                <li>something else
+                    <ol> <-- we don't want this to have extra padding
+
+            */
+            padding-inline: 0;
+            padding-block-start: 0;
+        }
+
+        li {
+            /* Bard wraps <li> text in a <p> tag */
+            p {
+                padding-block-end: 0!important;
+            }
+        }
+
+        :has(+ .c-tip, + pre) {
+            ol& {
+                /* e.g. >> /forms */
+                padding-block-end: 0;
+            }
+            ul& {
+                /* e.g. >> /graphql */
+                padding-block-end: var(--spacing-s-3);
+            }
+        }
+
+        /* Direct descendents only because we don't want to affect components such as .c-related */
+        > ul {
+            --padding-inline-start: min(1.5rem, 5vw);
+            padding-inline-start: var(--padding-inline-start);
+            /* e.g. >> /upgrade-guide */
+            padding-block: var(--spacing-s-5) var(--spacing-l-1);
+            li {
+                padding-inline-start: var(--spacing-s-5);
+                position: relative;
+                font-size: 0.95em;
+                &::before {
+                    content: '';
+                    background: var(--color-purple-light-1);
+                    position: absolute;
+                    left: calc(0% - var(--padding-inline-start));
+                    top: 0.55rem;
+                    inline-size: 0.5em;
+                    aspect-ratio: 1;
+                    border-radius: 50%;
+                }
+                /* Lists within lists e.g. >> /taxonomies */
+                ul li {
+                    padding-inline-start: 0;
+                    padding-block-end: var(--spacing-s-5);
+                    &:first-child {
+                        padding-block-start: var(--spacing-s-4);
+                    }
+                    &:last-child {
+                        padding-block-end: var(--spacing-s-4);
+                    }
+                    &::before {
+                        /* Remove the purple dot for lists within lists */
+                        content: unset;
+                    }
+                }
+            }
+        }
+
+        ol {
+            counter-reset: item;
+            li {
+                --size: 1.75rem;
+                list-style: none;
+                padding-inline-start: calc(var(--size) + var(--spacing-s-2));
+                &:not(:last-child) {
+                    padding-block-end: var(--spacing-s-3);
+                }
+                position: relative;
+                &::before {
+                    position: absolute;
+                    left: 0;
+                    display: inline-flex;
+                    justify-content: center;
+                    align-items: center;
+                    inline-size: var(--size);
+                    block-size: var(--size);
+                    content: counter(item);
+                    counter-increment: item;
+                    color: light-dark(var(--color-primary-text), var(--color-body-background));
+                    font-size: var(--font-size-s-1);
+                    font-weight: var(--font-family-prose-weight-strong);
+                    margin-inline-end: min(var(--spacing-s-1), 3vw);
+                    background: var(--color-yellow-light-1);
+                    border-radius: 50%;
+                }
+            }
+        }
+
+        a {
+            /* Improve legibility */
+            font-weight: var(--font-family-prose-weight-medium);
+            &:has(.external):not(.c-icon-grid *) {
+                /* Needed for external link icons Safari 18.3.1 */
+                display: inline-flex;
+            }
+        }
+
+        p {
+            /* e.g. >> /quick-start-guide */
+            + ol {
+                padding-block: var(--spacing-s-1) var(--spacing-l-1);
+            }
+            /* e.g. >> /quick-start-guide */
+            + ul {
+                padding-block: var(--spacing-s-5) var(--spacing-l-1);
+            }
+        }
+        /* Followed by some kind of image component (or paragraph like /javascript-frameworks). Not when the h1 is an only child, e.g. /modifiers/add */
+        > :is(header, p):has(+ * img, + p):not:has(h1:only-child) {
+            margin-block-end: calc(var(--spacing-l-1));
+        }
+
+        .external {
+            /* e.g. external links */
+            display: inline-block;
+            margin: 0.15em 0 0 0.1em;
+            font-size: 0.95em;
+        }
+
+        blockquote {
+            font-style: italic;
+            font-weight: var(--font-family-main-weight-medium);
+            padding-inline-start: var(--spacing-m);
+            margin-block-end: var(--spacing-l);
+            border-inline-start: 3px solid var(--color-primary-accent);
+        }
+        /* Use this if you want to embed entry content in a component that already handles inline padding */
+        .c-entry-content--flush {
+            padding-inline: 0;
+        }
+
+        /* --mq-wider-entry-content-after */
+        @media (width >= 1500px) {
+            padding-inline: var(--spacing-l);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/feedback-meerkat.css b/public/css/components/feedback-meerkat.css
new file mode 100644
index 000000000..be155bbb2
--- /dev/null
+++ b/public/css/components/feedback-meerkat.css
@@ -0,0 +1,123 @@
+/* GROUP COMPONENTS / FEEDBACK MEERKAT
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    Every page
+
+    What does it do?
+    ----------------
+    Feedback panel at the bottom of the page
+
+*/
+/* HTML Example...
+
+    <div class="c-feedback-meerkat">
+        <h2>Docs Feedback</h2>
+        <p>Submit improvements, related content, or suggestions through Github.</p>
+        <a href="https://github.com/statamic/docs/issues/new" class="c-btn c-btn--1">Betterify this page</a>
+        <img src="/img/meerkat.webp" alt="Meerkat" width="150" height="278">
+    </div>
+
+*/
+@layer components {
+    .c-feedback-meerkat {
+        margin-block-start: var(--spacing-l-3);
+        /* Custom */
+        @media (width < 500px) {
+            margin-block-start: 6.5rem;
+        }
+        padding: var(--spacing-l);
+        background: var(--color-gradient-burnt);
+        border-radius: var(--border-radius-l-2);
+
+        position: relative;
+        &::before {
+            pointer-events: none;
+            content: '';
+            position: absolute;
+            inset: 0;
+            inline-size: 100%;
+            height: 100%;
+            transform: scaleX(-1);
+            border-radius: 50px;
+
+            /* https://css-pattern.com/graph-paper/ */
+            --s: 220px; /* control the size*/
+            --c1: white;
+            --c2: transparent;
+            --_g: #0000 90deg,var(--c1) 0;
+            background:
+              conic-gradient(from 90deg at 1px 1px,var(--_g)),
+              conic-gradient(from 90deg at 1px 1px,var(--_g)),
+              var(--c2);
+            background-size: var(--s) var(--s), calc(var(--s)/5) calc(var(--s)/5);
+        }
+        /* Page preference is "dark" */
+        html:has(#color-scheme option[value="dark"]:checked) & {
+            &::before {
+                opacity: 0.025;
+            }
+        }
+        /* Page preference is "system", and system preference is "dark" */
+        @media (prefers-color-scheme: dark) {
+            html:has(#color-scheme option[value="system"]:checked) & {
+                &::before {
+                    opacity: 0.025;
+                }
+            }
+        }
+        > * {
+            /* Pull component content above the pseudo content */
+            position: relative;
+        }
+        &::after {
+            content: '';
+            position: absolute;
+            z-index: -2;
+            top: -2rem;
+            right: 0;
+            inline-size: 100%;
+            border-block-start: 1px dashed var(--color-purple-light-1);
+            transition: inline-size 0.35s var(--animation-timing-function-hipster) 0.1s;
+        }
+
+        img {
+            position: absolute;
+            z-index: var(--z-index-below-body);
+            top: 0;
+            inline-size: 60px;
+            transition: all 1s var(--animation-timing-function-hipster) 0.1s;
+            rotate: -5deg;
+        }
+        &:has(.c-btn:hover) {
+            &::after {
+                inline-size: 85%;
+            }
+            img {
+                top: -100px;
+                rotate: unset;
+            }
+        }
+
+        h2 {
+            font-family: var(--font-family-ui);
+            font-size: var(--font-size-l-2);
+            line-height: var(--font-size-l-2-line-height);
+            font-weight: var(--font-family-ui-weight-medium);
+        }
+
+        .c-btn {
+            margin: 0;
+        }
+
+        /* Custom */
+        @media (width < 500px) {
+            p {
+                font-size: var(--font-size-s-1);
+                line-height: var(--font-size-s-1-line-hegiht);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/icon-grid.css b/public/css/components/icon-grid.css
new file mode 100644
index 000000000..d2349036f
--- /dev/null
+++ b/public/css/components/icon-grid.css
@@ -0,0 +1,111 @@
+/* GROUP COMPONENTS / ICON GRID
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    A grid of icons with a title and text e.g. /installing
+
+*/
+/* HTML Example...
+
+*/
+@layer components {
+    .c-icon-grid {
+        display: grid;
+        grid-template-columns: repeat(auto-fit, minmax(min(100%, 12em), 1fr));
+        gap: var(--spacing-l-1) var(--spacing-s-1);
+        &:not(:last-child) {
+            padding-block-end: var(--spacing-l-3);
+        }
+        text-align: center;
+
+        .c-anchor {
+            display: none;
+        }
+
+        img {
+            &:not([src*=".svg"]) {
+                max-width: 5.5rem;
+                filter: var(--filter-image-boost-1);
+            }
+            inline-size: 100%;
+            max-height: 5.25rem;
+        }
+
+        h2, h3 {
+            padding-block: var(--spacing-s-2) var(--spacing-s-5);
+            font-family: var(--font-family-ui);
+            font-size: var(--font-size-ui);
+            font-weight: var(--font-family-ui-weight-heavy);
+            text-transform: uppercase;
+            letter-spacing: 0.3px;
+        }
+
+        p {
+            font-family: var(--font-family-code);
+            font-size: var(--font-size-s-2);
+            line-height: var(--font-size-s-2-line-height);
+        }
+
+        header + & {
+            /* e.g. >> /deploying */
+            padding-block-start: var(--spacing-s-1);
+        }
+        &:has(.c-icon-grid__item__label) {
+            /* A recommended label like e.g. >> /installing */
+            padding-block-start: var(--spacing-m);
+        }
+    }
+    .c-icon-grid__item {
+        position: relative;
+        p {
+            margin-block-end: 0;
+        }
+
+        > a .external {
+            /* Hide the direct .external links added with javascript because we want to add the icon elsewhere instead */
+            display: none;
+        }
+        .external {
+            background: light-dark(hsl(var(--color-purple-hue) 70% 97%), transparent);
+            border-radius: 50%;
+            * {
+                fill: var(--color-purple);
+            }
+        }
+    }
+    .c-icon-grid__item__label {
+        position: absolute;
+        top: -1rem;
+        left: 50%;
+        transform: translateX(-50%);
+        font-family: var(--font-family-ui);
+        font-size: var(--font-size-s-2);
+        letter-spacing: 1px;
+        text-transform: uppercase;
+        div {
+            padding: var(--spacing-s-4) var(--spacing-s-1);
+        }
+    }
+    .c-icon-grid__icon {
+        aspect-ratio: 2 / 1.5;
+        display: grid;
+        justify-content: center;
+        align-content: center;
+        padding: var(--spacing-l);
+        /* Custom */
+        @media (width < 600px) {
+            max-width: 17rem;
+        }
+        margin-inline: auto;
+        background: var(--color-gradient-full-light-2);
+        border: var(--border-dashed-red);
+        border-radius: var(--border-radius-l-2);
+    }
+}
+@layer utilities {
+    body .c-icon-grid__item__label div {
+        font-weight: var(--font-family-ui-weight-heavy);
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/imagery/bordered-image.css b/public/css/components/imagery/bordered-image.css
new file mode 100644
index 000000000..836dba208
--- /dev/null
+++ b/public/css/components/imagery/bordered-image.css
@@ -0,0 +1,116 @@
+/* GROUP COMPONENTS / BORDERED IMAGE
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    /assets
+
+    What does it do?
+    ----------------
+    Used on all figured images.
+
+*/
+/* HTML Example...
+
+    <picture class="c-bordered-image">
+        <source> etc.
+        <img />
+    </picture>
+
+    or with a figure
+
+    <figure class="c-bordered-image">
+        <picture>
+            <!-- {{# WebP #}} -->
+            <source
+                srcset="/img/2/make-user.png 750w,
+                        /img/2/make-user.png 1000w,
+                        /img/2/make-user.png 1536w"
+                type="image/webp"
+                sizes="(min-width: 1000px) 33.333vw, 100vw"
+            >
+            <!-- {{# JPEG #}} -->
+            <source
+                srcset="/img/2/make-user.png 750w,
+                        /img/2/make-user.png 1000w,
+                        /img/2/make-user.png 1536w"
+                type="image/jpeg"
+                sizes="(min-width: 1000px) 33.333vw, 100vw"
+            >
+            <!-- {{# Fallback, with dimensions set to minimise layout shift. See Jay George's Wiki under Performance > Images for more information. #}} -->
+            <img
+                src="/img/2/make-user.png"
+                loading="lazy"
+                decoding="async"
+                width="906"
+                height="568"
+                alt="Statamic Make:User Command"
+            >
+        </picture>
+        <figcaption>You can customize user fields later.</figcaption>
+    </figure>
+
+*/
+@layer components {
+    /* Direct descendent so we don't affect things like the homepage where we have the .c-tiles-with-description component */
+    .c-entry-content > figure,
+    .c-bordered-image {
+        position: relative;
+        /* e.g. >> /collections and /stache */
+        margin-block-start: var(--spacing-l);
+        &:not(:last-child) {
+            margin-block-end: calc(var(--spacing-l-1) + var(--spacing-s-4));
+        }
+        img {
+            margin-block-end: 0;
+            border-radius: var(--border-radius-s);
+            border: 1px solid var(--color-black);
+        }
+        figcaption {
+            display: inline-block;
+            padding: var(--spacing-s-3) var(--spacing-s-1);
+            background: var(--color-yellow-light-2);
+            /* --mq-nav-open-after */
+            @media (width >= 1100px) {
+                /* Lighter now that we have more things going on */
+                background: var(--color-gradient-burnt-right);
+            }
+            font-weight: var(--font-family-ui-weight-normal);
+            font-size: var(--font-size-s-1);
+            line-height: var(--font-size-s-1-line-height);
+            border-radius: var(--border-radius-s);
+            border-top-left-radius: 0;
+            border-top-right-radius: 0;
+        }
+        /* Custom */
+        @media (width < 768px) {
+            &:has(figcaption) img {
+                border-bottom-left-radius: 0;
+                border-bottom-right-radius: 0;
+            }
+        }
+        /* Custom */
+        @media (width >= 768px) {
+            padding: var(--spacing-l-2);
+            &::before {
+                position: absolute;
+                z-index: var(--z-index-below-body);
+                inset: 0;
+                content: "";
+                background: var(--color-gradient-full-light-2);
+                border-radius: var(--border-radius-l-3);
+            }
+            &:has(figcaption) {
+                /* Increase. Make a bit more room for the caption */
+                padding-block-end: calc(var(--spacing-l-2) + 1rem);
+            }
+            figcaption {
+                position: absolute;
+                bottom: 0;
+                left: 0;
+                border-radius: 0 var(--border-radius-l-2);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/imagery/full-width-image.css b/public/css/components/imagery/full-width-image.css
new file mode 100644
index 000000000..26db6c827
--- /dev/null
+++ b/public/css/components/imagery/full-width-image.css
@@ -0,0 +1,66 @@
+/* GROUP COMPONENTS / FULL WITH IMAGE
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    /assets
+
+    What does it do?
+    ----------------
+    Full width style image as opposed to a bordered image. You may use this as an alternative style.
+
+*/
+/* HTML Example...
+
+    <picture class="c-full-width-image">
+        <source> etc.
+        <img />
+    </picture>
+
+    or with a figure
+
+    <figure class="c-full-width-image">
+        <picture>
+            <source> etc.
+            <img />
+        </picture>
+        <figcaption>Browsing some assets.</figcaption>
+    </figure>
+
+*/
+@layer components {
+    .c-full-width-image {
+        &:not(:last-child) {
+            margin-block-end: calc(var(--spacing-l-1) + var(--spacing-s-4));
+        }
+        img {
+            @container style(--color-scheme: dark) {
+                /* Easier on the eyes */
+                opacity: 0.95;
+            }
+            margin-block-end: 0;
+            border-radius: var(--border-radius-s);
+            border-bottom-left-radius: 0;
+        }
+        figcaption {
+            display: inline-block;
+            padding: var(--spacing-s-3) var(--spacing-s-1);
+            background: var(--color-yellow-light-3);
+            /* Page preference is "dark" */
+            html:has(#color-scheme option[value="dark"]:checked) & {
+                background: var(--color-gradient-full-light-2);
+            }
+            /* Page preference is "system", and system preference is "dark" */
+            @media (prefers-color-scheme: dark) {
+                html:has(#color-scheme option[value="system"]:checked) & {
+                    background: var(--color-gradient-full-light-2);
+                }
+            }
+            font-weight: var(--font-family-ui-weight-normal);
+            border-radius: var(--border-radius-s);
+            border-top-right-radius: 0;
+            border-top-left-radius: 0;
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/list-turtles.css b/public/css/components/list-turtles.css
new file mode 100644
index 000000000..8e187387e
--- /dev/null
+++ b/public/css/components/list-turtles.css
@@ -0,0 +1,62 @@
+/* GROUP COMPONENTS / LIST TURTLES
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    An ordered list styled like the Ninja Turtles.
+
+*/
+/* HTML Example...
+
+    <ol class="c-list-turtles">
+        <li>Forms</li>
+        <li>Indexes</li>
+        <li>Drivers</li>
+    </ol>
+
+*/
+@layer scope {
+    /* Need to override the .c-entry-content ol */
+    .c-entry-content {
+        /* ol*/
+        .c-list-turtles {
+            li {
+                /* Increase */
+                --size: 2.25em;
+                font-family: var(--font-family-ui);
+                font-weight: var(--font-family-ui-weight-strong);
+                /* Increase */
+                font-size: var(--font-size-m);
+                &::before {
+                    top: -0.2rem;
+                    background: linear-gradient(to bottom, #70D50B 0%,#70B927 100%);
+                }
+                &:not(:last-child) {
+                    padding-block-end: var(--spacing-s-1);
+                }
+                &::after {
+                    content: "";
+                    position: absolute;
+                    top: 0.1rem;
+                    left: 0;
+                    inline-size: calc(var(--size) - 0.2rem);
+                    border: 3px solid var(--color-red-bright);
+                    border-radius: var(--border-radius-s);
+                }
+                &::marker {
+                    position: relative;
+                }
+                &:nth-child(2)::after {
+                    border-color: oklch(0.8 0.2 224);
+                }
+                &:nth-child(3)::after {
+                    border-color: oklch(0.85 0.2 70);
+                }
+                &:nth-child(4)::after {
+                    border-color: oklch(0.6 0.2 290);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/logos.css b/public/css/components/logos.css
new file mode 100644
index 000000000..77eb22652
--- /dev/null
+++ b/public/css/components/logos.css
@@ -0,0 +1,136 @@
+/* GROUP COMPONENTS / LOGOS
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    /home
+
+    What does it do?
+    ----------------
+    - Logos such as sponsors
+    - Based on https://css-irl.info/aspect-ratio-is-great/
+
+*/
+/* HTML Example...
+
+    <div class="c-logo-grid">
+        <div class="c-logo-grid__item">
+            <img src="https://assets.codepen.io/85648/logo-made-up-company.svg" />
+        </div>
+        <div class="c-logo-grid__item">
+            <img src="https://assets.codepen.io/85648/logo-pie-club.svg" />
+        </div>
+        <div class="c-logo-grid__item">
+            <img src="https://assets.codepen.io/85648/logo-birdwatchers.svg" />
+        </div>
+        <div class="c-logo-grid__item">
+            <img src="https://assets.codepen.io/85648/logo-vitamins.svg" />
+        </div>
+        <div class="c-logo-grid__item">
+            <img src="https://assets.codepen.io/85648/logo-angry-jelly.svg" />
+        </div>
+    </div>
+
+*/
+/* Statamic Example...
+
+    {{ logos }}
+        <div class="c-logo-grid__item">
+            <a href="">
+                <picture>
+                    {{# WebP #}}
+                    <source
+                        srcset="{{ glide:url width='185' dpr='2' format='webp' }} 2x"
+                        type="image/webp"
+                    >
+                    {{# JPEG #}}
+                    <source
+                        srcset="{{ glide:url width='185' dpr='2' }} 2x"
+                        type="image/jpeg"
+                    >
+                    {{# Fallback #}}
+                    <img src="{{ glide:url width='185' dpr='2' }}"
+                        loading="lazy" width="{{ width | round }}" height="{{ height | round }}"
+                        alt="{{ if alt }}{{ alt ucfirst='true' ensure_right='.' }}{{ else }}{{ filename ucfirst='true' ensure_right='.' replace='-| ' }}{{ /if }}"
+                    />
+                </picture>
+            </a>
+        <span>Jeroen Peters</span> <-- an optional image
+        </div>
+    {{ /logos }}
+
+*/
+@layer components {
+    .c-logo-grid {
+        --width: 9rem;
+        display: flex;
+        flex-wrap: wrap;
+        gap: var(--spacing-s-2);
+        a {
+            text-decoration: none;
+        }
+    }
+
+    .c-logo-grid__item {
+        align-content: center;
+        padding: var(--spacing-s-1) var(--spacing-m);
+        background: var(--color-gradient-blue-light-1);
+        border-radius: var(--border-radius-l-2);
+        font-family: var(--font-family-ui);
+        --color-link: var(--color-primary-text);
+        &:has(a):not(:has(img)) {
+            /* e.g. "Sponsor Statamic" */
+            padding: 0 var(--spacing-s-2);
+            background: none;
+            a {
+                /* Put the padding on the link instead to make it appear smaller */
+                border: 1px dashed var(--color-primary-text);
+                padding: var(--spacing-s-2) var(--spacing-m);
+                border-radius: var(--border-radius-l-1);
+                /* Custom hover effect */
+                &:hover {
+                    color: inherit!important;
+                    text-decoration: underline;
+                    text-decoration-color: inherit!important;
+                    text-underline-position: unset;
+                }
+            }
+        }
+        .external {
+            display: none;
+        }
+        /* [1] For when we have <span> text next to the logo */
+        a {
+            display: flex;
+            flex-wrap: wrap;
+            gap: var(--spacing-s-2);
+        }
+        /* [2] */
+        &:has(span) {
+            font-size: var(--font-size-m);
+            line-height: var(--font-size-m-line-height);
+            /* Reduce to compensate for the increased image height */
+            padding-block: var(--spacing-s-2);
+            :is(img, svg) {
+                min-inline-size: unset;
+                inline-size: 2.65rem;
+                block-size: 2.65rem;
+                /* e.g. a GitHub avatar */
+                border-radius: var(--border-radius-s);
+            }
+        }
+        span {
+            align-content: center;
+            text-box: trim-start cap;
+        }
+    }
+
+    .c-logo-grid :is(img, svg) {
+        /* This is needed for rasterised images */
+        object-fit: contain;
+        height: 2rem;
+        /* Where needed, it's best to set sizes for individual logos as an inline style e.g. <img src="/img/sponsors/arcustech.svg" alt="Arcustech logo" class="u-hide-in-dark-mode" /> <img src="/img/sponsors/arcustech-dark.svg" alt="Arcustech logo" class="u-hide-in-light-mode" style="min-width: 10rem;" /> */
+        /* min-inline-size: 8.5rem; */
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/nav/breadcrumbs.css b/public/css/components/nav/breadcrumbs.css
new file mode 100644
index 000000000..081c5f520
--- /dev/null
+++ b/public/css/components/nav/breadcrumbs.css
@@ -0,0 +1,115 @@
+/* GROUP COMPONENTS / BREADCRUMBS
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    A navigation component that displays the current page's location. Each link represents a step in the journey to the current page.
+
+*/
+/* HTML Example...
+
+    <nav class="c-breadcrumbs">
+        <ol>
+            <li><a href="#">Home</a></li>
+            <li><a href="#">Pictures</a></li>
+            <li><a href="#">Summer 15</a></li>
+            <li>Italy</li>
+        </ol>
+    </nav>
+
+*/
+@layer components {
+    .c-breadcrumbs {
+        display: inline-block;
+        grid-area: breadcrumbs;
+        & ol {
+            list-style: none;
+            display: flex;
+            align-items: center;
+            gap: var(--spacing-m);
+            /* For Safari */
+            inline-size: 100%;
+            /* --mq-grid-before */
+            @media (width < 1000px) {
+                position: relative;
+                /* Tweak to align with flanking buttons on mobile */
+                top: -0.1rem;
+                /* 10.5 is an approx width of the two flanking nav buttons, to make sure we stay on the same line for mobile */
+                max-width: calc(100% - 10.5rem);
+                padding-block-end: var(--spacing-l-2);
+                margin-block-start: -0.25rem;
+            }
+            /* --mq-nav-open-before */
+            @media (width < 1100px) {
+                max-width: var(--max-width-content);
+                margin-inline: auto;
+            }
+            /* --mq-grid-after to --mq-nav-open-before */
+            @media (width >= 1000px) and (width < 1100px) {
+                padding-inline: var(--spacing-l);
+            }
+        }
+        & li {
+            display: flex;
+            align-items: center;
+            padding-block-end: 0;
+            & svg {
+                inline-size: 0.4rem;
+                margin-inline: 0 1.5rem;
+            }
+        }
+        & a, button {
+            padding: 0;
+            text-decoration: none;
+            color: inherit;
+            text-transform: uppercase;
+            font-size: var(--font-size-s-3);
+            text-box: text;
+            line-height: 1;
+            letter-spacing: 0.5px;
+        }
+        button {
+            font-weight: var(--font-family-ui-weight-strong);
+            margin-inline-end: 0;
+        }
+        /* GROUP COMPONENTS / BREADCRUMBS / MQs
+        =================================================== */
+        @media (width < 700px) {
+            li:not(:last-child) {
+                /* Hide the breadcrumb trail when we have limited space */
+                display: none;
+            }
+        }
+        /* --mq-grid-after */
+        @media (width >= 1000px) {
+            /* For Safari */
+            display: flex;
+            ol {
+                gap: 1.7rem;
+                block-size: 100%;
+            }
+            li svg {
+                /* Increase to allow the gradient background to breathe */
+                margin-inline-end: 1.85rem;
+            }
+            button:last-child {
+                position: relative;
+                margin-inline-start: var(--spacing-s-3);
+                &::before {
+                    content: '';
+                    position: absolute;
+                    z-index: var(--z-index-below-body);
+                    inset: -0.4rem -1rem;
+                    left: -1.1rem;
+                    background: var(--color-gradient-full-light-2);
+                    border-radius: 30% 40% 25% 60% / 80% 110% 40% 60%;
+                }
+            }
+        }
+        /* --mq-nav-open-after */
+        @media (width >= 1100px) {
+            padding-inline: var(--spacing-l);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/nav/dots.css b/public/css/components/nav/dots.css
new file mode 100644
index 000000000..c81f5124b
--- /dev/null
+++ b/public/css/components/nav/dots.css
@@ -0,0 +1,164 @@
+/* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / DOTS
+=================================================== */
+@layer components {
+    .c-nav-dots-with-popover-api {
+        display: grid;
+        --dropdown-nav-item-padding: var(--spacing-s-4);
+        --dropdown-nav-subnav-background-color: #151515;
+        /* --mq-nav-open-before */
+        @media (width < 1250px) {
+            --color-dropdown-nav-background: var(--color-black-static);
+        }
+        /* --mq-nav-open-after */
+        @media (width >= 1250px) {
+            /* Darker */
+            --dropdown-nav-subnav-background-color: #111;
+        }
+
+        nav,
+        nav [popover] {
+            /* Reset */
+            margin: 0;
+            padding: 0;
+            border: 0;
+
+            display: none;
+            opacity: 0;
+            transition: opacity 350ms, margin 350ms, display 350ms allow-discrete, overlay 350ms allow-discrete;
+
+            &:popover-open {
+                display: block;
+                opacity: 1;
+                /* --mq-nav-open-before */
+                @media (width < 1100px) {
+                    margin-block-start: var(--spacing-s-5);
+                }
+                @starting-style {
+                    opacity: 0;
+                    margin-block-start: 0;
+                }
+            }
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / NAV STYLING
+        =================================================== */
+        nav {
+            /* Override the default background color of the popover */
+            background: inherit;
+            & ul {
+                overscroll-behavior-y: contain;
+                /* Need to cut this short a little to force scrolling when there are a lot of items. */
+                max-height: 70vh;
+                display: flex;
+                flex-direction: column;
+                gap: var(--spacing-s-5);
+                list-style: none;
+                font-size: var(--font-size-s-2);
+                border-radius: var(--border-radius-l-2);
+
+                & li {
+                    & a, button {
+                        /* Increase the pointer targets a little to improve usability */
+                        padding-block: var(--dropdown-nav-item-padding);
+                        /* Increase */
+                        text-underline-offset: 0.25rem;
+                    }
+                }
+            }
+            & a:not(.o-current-menu-item) {
+                /* https://app.typographychecklist.com/ - 43. Links that are clearly part of navigation usually don't need a special link treatment. */
+                text-decoration: none;
+            }
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / MQS
+        =================================================== */
+        /* --mq-nav-open-before */
+        @media (width < 1250px) {
+            .c-nav-dots-with-popover-api__desktop {
+                /* Prevent a lag in seeing the desktop nav collapse if you pull the window in  */
+                transition: unset;
+            }
+            #popover-nav-dots {
+                position-area: bottom span-left;
+            }
+            nav ul {
+                overflow: scroll;
+                padding: var(--spacing-m);
+                background: var(--color-dropdown-nav-background);
+                color: white;
+                letter-spacing: 1px;
+                text-transform: uppercase;
+                a, button {
+                    text-decoration-color: hsl(0deg 0% 100% / 50%);
+                }
+            }
+        }
+        /* --mq-nav-open-after */
+        @media (width >= 1250px) {
+            .c-nav-dots-with-popover-api__mobile {
+                /* Prevent a lag in seeing the mobile nav collapse if you pull the window out  */
+                transition: unset;
+            }
+            --color-dropdown-nav-background: unset;
+            nav {
+                /* Override `popover`'s default position:fixed; */
+                position: relative;
+                display: block;
+                opacity: 1;
+                > ul {
+                    flex-direction: row;
+                    justify-content: end;
+                    font-size: var(--font-size-s-1);
+                    li:last-child:not(:has(.o-current-menu-item)) a {
+                        padding-inline-end: 0;
+                    }
+                    :is(a, button):not(ul ul *) {
+                        padding: var(--spacing-s-1);
+                        /* Pull the outline back in to counter padding */
+                        outline-offset: -10px;
+
+                        &.o-current-menu-item {
+                            text-decoration: none;
+                            position: relative;
+                            font-weight: var(--font-family-ui-weight-medium);
+                            &::before {
+                                content: '';
+                                position: absolute;
+                                border-block-end: 2px solid var(--color-pink-light-1);
+                                inset: 0;
+                                top: 80%;
+                                height: 5px;
+                                inline-size: 75%;
+                                left: 12.5%;
+                                box-shadow: var(--box-shadow-not-t-light);
+                            }
+                        }
+                    }
+                }
+                & a, button {
+                    /* Increase the pointer targets a little to improve usability */
+                    padding: var(--dropdown-nav-item-padding);
+                }
+            }
+            .c-nav-dots-with-popover-api__mobile-button {
+                display: none;
+            }
+        }
+    }
+}
+/* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / CSS based fallback for browsers that don't support anchor positioning
+=================================================== */
+@supports not (position-anchor: --my-anchor) {
+    @layer scope {
+        .c-nav-dots-with-popover-api {
+            /* --mq-nav-open-before */
+            @media (width < 1100px) {
+                & nav {
+                    /* Pull the nav to the right */
+                    margin-inline-start: auto;
+                    margin-block-start: var(--spacing-l-3);
+                    margin-inline-end: var(--spacing-s-3);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/nav/sidebar-advert.css b/public/css/components/nav/sidebar-advert.css
new file mode 100644
index 000000000..187ab72c7
--- /dev/null
+++ b/public/css/components/nav/sidebar-advert.css
@@ -0,0 +1,57 @@
+/* GROUP COMPONENTS / SIDEBAR ADVERT
+=================================================== */
+@layer ui {
+    .c-sidebar-advert {
+        &:first-child {
+            /* I.e. when the toc is hidden with {{ $hide_toc = 'yes' }} */
+            padding-block-start: var(--spacing-l-1);
+        }
+        padding-inline-start: 3.85rem;
+        padding-inline-start: 2.85rem;
+        a {
+            padding: 0;
+        }
+        img {
+            margin-inline-start: -0.25rem;
+            inline-size: 64%;
+            rotate: -4deg;
+            border-radius: var(--border-radius-s);
+            box-shadow: 0px 15px 25px -10px hsl(0deg 0% 0% / 55%);
+            /* Make the advert less distracting */
+            opacity: 0.95;
+        }
+        h2 {
+            padding-block: var(--spacing-l-1) var(--spacing-s-2);
+            font-size: var(--font-size-s-2);
+            font-family: var(--font-family-ui);
+            font-weight: var(--font-family-ui-weight-normal);
+            letter-spacing: 1px;
+            text-transform: uppercase;
+            color: inherit;
+        }
+        p {
+            margin-block-end: var(--spacing-s-3);
+            font-weight: var(--font-family-ui-weight-medium);
+            line-height: var(--font-size-s-1-line-height);
+            text-wrap: balance;
+            a {
+                text-decoration: underline;
+                font-size: var(--font-size-s-2);
+                font-family: var(--font-family-ui);
+                font-weight: var(--font-family-ui-weight-normal);
+                text-transform: uppercase;
+                text-decoration-color: var(--color-text-underline-light);
+            }
+        }
+        @container style(--color-scheme: dark) {
+            img {
+                /* Tweak the default dark-mode image filter, increasing the hue rotation so there's more of a stylised purple tinge. */
+                filter:
+                    hue-rotate(-18deg)
+                    contrast(110%)
+                    brightness(85%)
+                ;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/nav/sidebar.css b/public/css/components/nav/sidebar.css
new file mode 100644
index 000000000..2de6968b7
--- /dev/null
+++ b/public/css/components/nav/sidebar.css
@@ -0,0 +1,338 @@
+/* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / API
+=================================================== */
+@layer components {
+    .c-nav-sidebar-with-popover-api {
+        --dropdown-nav-item-padding: 0.25rem;
+        position: sticky;
+        grid-area: sidebar-1;
+
+        nav,
+        nav [popover] {
+            /* Reset */
+            margin: 0;
+            padding: 0;
+            border: 0;
+
+            display: none;
+            opacity: 0;
+            transition: opacity 350ms, margin 350ms allow-discrete, display 350ms allow-discrete, overlay 350ms allow-discrete;
+
+            &:popover-open {
+                display: block;
+                opacity: 1;
+
+                @starting-style {
+                    /* opacity: 0; */
+                    margin-block-start: 0;
+                    margin-inline-start: -50%;
+                    &::backdrop {
+                        /* Needed to get the popover backdrop to fade in when opening */
+                        opacity: 0;
+                    }
+                }
+            }
+        }
+        nav {
+            /* Override the default background color of the popover */
+            background: inherit;
+            [popover] {
+                max-width: 14rem;
+                &:popover-open {
+                    margin-block-start: var(--spacing-s-5);
+                }
+            }
+        }
+        #anchor-nav-mobile {
+            anchor-name: --anchor-nav-mobile;
+        }
+        #popover-nav-sidebar {
+            position-anchor: --anchor-nav-mobile;
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / MOBILE NAV BUTTON
+        =================================================== */
+        .c-nav-sidebar-with-popover-api__mobile-button {
+            padding: 1.2rem;
+            margin: 0;
+            background: var(--color-dropdown-nav-background);
+            border-radius: 40%;
+            box-shadow: var(--box-shadow-not-t-medium);
+            svg {
+                color: var(--color-primary-text);
+                font-size: 1.3em;
+            }
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / CLOSE BUTTON
+        =================================================== */
+        .c-nav-sidebar-with-popover-api__close-button,
+        .c-nav-collapse-expand--mobile {
+            position: absolute;
+            z-index: var(--z-index-above-body);
+            right: 1.5rem;
+            top: 0.5rem;
+            margin-inline-end: 0;
+            padding: var(--spacing-s-3);
+            & svg {
+                font-size: 1rem;
+                inline-size: unset;
+            }
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / NAV COLLAPSE EXPAND BUTTON
+        =================================================== */
+        /* button*/
+        .c-nav-collapse-expand--mobile {
+            left: 0.75rem;
+            right: unset;
+            background: radial-gradient(circle at center, var(--color-body-background) 0%, transparent 100%);
+            svg {
+                margin: 0;
+            }
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / NAV STYLING
+        =================================================== */
+        nav {
+            color: var(--color-primary-text);
+            & * {
+                line-height: 1.5;
+                font-weight: var(--font-family-ui-weight-light);
+            }
+            .c-nav-sidebar-with-popover-api-category-heading {
+                display: flex;
+                max-width: 17rem;
+                /* --mq-nav-open-after to --mq-text-bump-2-after */
+                @media (width >= 1100px) and (width < 1441px) {
+                    max-width: 14.85rem;
+                }
+                max-height: 3.2rem;
+                gap: var(--spacing-s-1);
+                align-items: center;
+                justify-content: space-between;
+                padding: var(--spacing-s-3) var(--spacing-m);
+                font-family: var(--font-family-prose);
+                font-size: var(--font-size-l-2);
+                line-height: var(--font-size-l-2-line-height);
+                border-radius: 50px;
+                box-shadow: var(--box-shadow-not-t-light);
+                text-decoration: none;
+                &:has(input:checked) {
+                    box-shadow: var(--box-shadow-not-t-lighter);
+                }
+                &:focus-visible {
+                    /* Pull the focus outline state in slightly on the category headings so it doesn't disappear into the overflow:hidden; */
+                    outline-offset: -3px;
+                }
+                /* --mq-text-bump-2-after */
+                @media (width >= 1441px) {
+                    padding-inline: var(--spacing-l);
+                }
+                img {
+                    inline-size: 1.4em;
+                }
+                /* has a sub nav with .o-current-menu-item */
+                &:has(+ * .o-current-menu-item) {
+                    box-shadow: none;
+                    background: var(--color-gradient-full-light-2);
+                    img {
+                        box-shadow: var(--box-shadow-pink-light);
+                    }
+                }
+            }
+
+            & ul {
+                list-style: none;
+                display: flex;
+                flex-direction: column;
+                gap: var(--spacing-s-2);
+                font-size: var(--font-size-s-2);
+                overscroll-behavior-y: contain;
+                /* Need to cut this short a little to force scrolling when there are a lot of items. */
+                &:not(ul ul) {
+                    height: 100dvh;
+                }
+                /* Increase */
+                outline-offset: 5px;
+
+                & li {
+                    padding-block-end: 0;
+                    a {
+                        /* Otherwise the sidebar might grow too big e.g. >> /reference */
+                        max-width: 12rem;
+                    }
+                    &:not(ul ul *) {
+                        position: relative;
+                        &::before {
+                            content: "";
+                            position: absolute;
+                            z-index: var(--z-index-below-body);
+                            top: 3.25rem;
+                            left: var(--spacing-l);
+                            height: calc(100% - 4.1rem);
+                            border-inline-start: 1px solid var(--color-pink-light-3-static);
+                        }
+                    }
+
+                    & button {
+                        text-align: left;
+                        display: flex;
+                        flex-wrap: wrap;
+                        align-items: center;
+                        gap: var(--spacing-s-2);
+                        /* Reset */
+                        margin-inline-end: 0;
+                        padding: 0;
+                        cursor: pointer;
+                        & svg {
+                            font-size: 0.6em;
+                        }
+                    }
+
+                    & ul {
+                        gap: 0;
+                        max-height: unset;
+                        padding: 0 var(--spacing-l-2-horizontal);
+                        font-size: var(--font-size-ui-rem);
+                        & a, button, span {
+                            /* Increase the pointer targets a little to improve usability */
+                            padding: var(--dropdown-nav-item-padding);
+                            display: inline-block;
+                        }
+                        .o-current-menu-item {
+                            text-decoration: none;
+                            font-weight: var(--font-family-ui-weight-medium);
+                            &::before {
+                                content: '';
+                                border-inline-start: 4px solid var(--color-pink-light-1);
+                                position: absolute;
+                                left: calc(0% + var(--spacing-l));
+                                height: 2em;
+                                transform: translateY(-0.25em);
+                            }
+                        }
+                    }
+                }
+
+                /* Subnav */
+                & ul[popover] {
+                    &:popover-open {
+                        display: flex;
+                    }
+                    padding: var(--spacing-m);
+                    /* Just clear the outline state of the parent so it looks cleaner when tabbing through with a keyboard */
+                    margin-block-start: var(--spacing-s-5);
+                    letter-spacing: 1px;
+                    & a, button {
+                        outline-offset: unset;
+                    }
+                }
+            }
+            & a:not(.o-current-menu-item) {
+                /* https://app.typographychecklist.com/ - 43. Links that are clearly part of navigation usually don't need a special link treatment. */
+                text-decoration: none;
+            }
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / MQS
+        =================================================== */
+        /* --mq-nav-open-before */
+        @media (width < 1100px) {
+            padding-inline: var(--spacing-s-3);
+            top: 0.8rem;
+            @supports not (animation-timeline: auto) {
+                top: 1rem;
+            }
+            z-index: var(--z-index-above-nav);
+            display: inline-block;
+
+            .c-nav-sidebar-with-popover-api__desktop {
+                /* Prevent a lag in seeing the desktop nav collapse if you pull the window in  */
+                transition: unset;
+            }
+            #popover-nav-sidebar {
+                /* position-area: bottom span-right; */
+                box-shadow: var(--box-shadow-medium);
+                body:has(&:popover-open) {
+                    /* Stop the body scrolling if you try and scroll a toc that's shorter than the viewport height */
+                    /* =JFG I've temporarily disabled this because believe there is a bug in iOS 18.5 where :popover-open does not disengage when closing a popover, which means this would cause overflow-clip: clip; to persist even when the popover was dismissed */
+                    /* overflow: clip; */
+                }
+            }
+            nav {
+                background: var(--color-dropdown-nav-background);
+                width: min(85%, 24rem);
+                &::backdrop {
+                    transition: all 0.5s var(--animation-timing-function-hipster) 0s;
+                }
+                &:popover-open::backdrop {
+                    backdrop-filter: blur(5px);
+                    background: var(--popover-backdrop);
+                }
+                & ul {
+                    padding: var(--spacing-l-3) var(--spacing-s-3);
+                    & ul {
+                        padding: 0 var(--spacing-l-2);
+                    }
+                }
+            }
+            .c-nav-sidebar-with-popover-api-category-heading {
+                inline-size: 91%;
+            }
+        }
+        /* --mq-nav-open-after */
+        @media (width >= 1100px) {
+            --top: 8.5rem;
+            top: var(--top);
+            block-size: calc(100vh - var(--top) - 6.5rem);
+            .c-nav-sidebar-with-popover-api__mobile {
+                /* Prevent a lag in seeing the mobile nav collapse if you pull the window out  */
+                transition: unset;
+            }
+            --color-dropdown-nav-background: unset;
+            nav {
+                /* Override `popover`'s default position:fixed; */
+                position: relative;
+                display: block;
+                opacity: 1;
+                /* Custom */
+                @media (width < 1350px) {
+                    /* Make it less distracting when the sidebars are very close to the main content */
+                    opacity: 0.95;
+                }
+                inline-size: 100%;
+                max-width: var(--max-width-1);
+                margin-inline: auto;
+                padding-block-end: var(--spacing-l);
+            }
+            .c-nav-sidebar-with-popover-api__mobile-button {
+                display: none;
+            }
+            .c-nav-sidebar-with-popover-api__desktop ul:not(ul ul) {
+                /* Need to cut this short a little to force scrolling when there are a lot of items. */
+                height: 84dvh;
+                /* --mq-text-bump-2-before */
+                @media (width < 1441px) {
+                    max-width: 15.5rem;
+                }
+                padding-block-end: var(--spacing-l);
+            }
+        }
+    }
+    .c-nav-collapse-expand {
+        svg {
+            fill: none;
+        }
+        &:not(.js__expand-collapse-nav--collapsed) {
+            #top-arrow {
+                transform: scaleY(-1);
+                transform-origin: 50% 17%;
+            }
+            #bottom-arrow {
+                transform: scaleY(-1);
+                transform-origin: 50% 83%;
+            }
+            .dash {
+                display: none;
+            }
+        }
+        @container style(--color-scheme: dark) {
+            opacity: 0.5;
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/nav/toc.css b/public/css/components/nav/toc.css
new file mode 100644
index 000000000..34d25d5bc
--- /dev/null
+++ b/public/css/components/nav/toc.css
@@ -0,0 +1,310 @@
+/* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / API
+=================================================== */
+@layer components {
+    .c-nav-toc-with-popover-api {
+        --dropdown-nav-item-padding: 0.25rem;
+
+        nav,
+        nav [popover] {
+            /* Reset */
+            margin: 0;
+            padding: 0;
+            border: 0;
+
+            display: none;
+            opacity: 0;
+            transition: opacity 350ms, margin 350ms allow-discrete, display 350ms allow-discrete, overlay 350ms allow-discrete;
+
+            &:popover-open {
+                display: block;
+                opacity: 1;
+
+                @starting-style {
+                    opacity: 0;
+                    margin-block-start: 0;
+                    /* margin-inline-start: 50%; */
+                    &::backdrop {
+                        /* Needed to get the popover backdrop to fade in when opening */
+                        opacity: 0;
+                    }
+                }
+            }
+        }
+        nav {
+            /* Override the default background color of the popover */
+            background: inherit;
+            [popover] {
+                max-width: 14rem;
+                &:popover-open {
+                    margin-block-start: var(--spacing-s-5);
+                }
+            }
+        }
+        #anchor-nav-mobile {
+            anchor-name: --anchor-nav-mobile;
+        }
+        #popover-nav-toc {
+            position-anchor: --anchor-nav-mobile;
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / MOBILE NAV BUTTON
+        =================================================== */
+        .c-nav-toc-with-popover-api__mobile-button {
+            padding: 1.2rem;
+            margin: 0;
+            background: var(--color-dropdown-nav-background);
+            border-radius: 40%;
+            box-shadow: var(--box-shadow-not-t-medium);
+            svg {
+                color: var(--color-primary-text);
+                font-size: 1.3em;
+            }
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / CLOSE BUTTON
+        =================================================== */
+        .c-nav-toc-with-popover-api__close-button {
+            position: absolute;
+            z-index: var(--z-index-above-body);
+            right: 0.25rem;
+            top: 1.25rem;
+            & svg {
+                font-size: 1rem;
+                inline-size: unset;
+            }
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / NAV STYLING
+        =================================================== */
+        nav {
+            color: var(--color-primary-text);
+            & * {
+                line-height: 1.4;
+                font-weight: var(--font-family-ui-weight-light);
+            }
+
+            ul {
+                list-style: none;
+                display: flex;
+                flex-direction: column;
+                gap: var(--spacing-l-2);
+                font-size: var(--font-size-s-2);
+                overscroll-behavior-y: contain;
+                /* Need to cut this short a little to force scrolling when there are a lot of items. */
+                &:not(ul ul) {
+                    height: 100dvh;
+                }
+                /* Increase */
+                outline-offset: 5px;
+
+                & li {
+                    padding-block-end: 0;
+                    &:not(ul ul *, .c-sidebar-advert) {
+                        position: relative;
+                        &::before {
+                            content: "";
+                            position: absolute;
+                            z-index: var(--z-index-below-body);
+                            top: 1rem;
+                            left: var(--spacing-m);
+                            height: calc(100% - 1rem);
+                            border-inline-start: 1px solid var(--color-pink-light-3-static);
+                        }
+                    }
+
+                    button {
+                        text-align: left;
+                        display: flex;
+                        flex-wrap: wrap;
+                        align-items: center;
+                        gap: var(--spacing-s-2);
+                        /* Reset */
+                        margin-inline-end: 0;
+                        padding: 0;
+                        cursor: pointer;
+                        & svg {
+                            font-size: 0.6em;
+                        }
+                    }
+
+                    a, button, span {
+                        /* Increase the pointer targets a little to improve usability */
+                        padding: var(--dropdown-nav-item-padding);
+                        display: inline-block;
+                    }
+
+                    ul {
+                        gap: var(--spacing-s-5);
+                        max-height: unset;
+                        padding: 0 3rem;
+                        font-size: var(--font-size-ui-rem);
+                        .o-current-menu-item {
+                            text-decoration: none;
+                            font-weight: var(--font-family-ui-weight-medium);
+                            &::before {
+                                content: '';
+                                border-inline-start: 4px solid var(--color-pink-light-1);
+                                position: absolute;
+                                left: calc(0% + var(--spacing-l));
+                                height: 2em;
+                                transform: translateY(-0.25em);
+                            }
+                        }
+                        a {
+                            border-radius: var(--border-radius-m);
+                            &:hover {
+                                background: var(--color-pink-light-4);
+                            }
+                        }
+
+                        ul {
+                            /* Need this to line up so that the scroll spy line also continues to line up */
+                            padding-inline: 0;
+                            a {
+                                /* Indent the subnav */
+                                margin-inline-start: 0.3rem;
+                                padding-inline: var(--spacing-s-4);
+                                /* Make it slightly smaller to improve comprehension when the TOC is busy e.g. /tags/form-create */
+                                font-size: 0.83rem;
+                            }
+                        }
+                    }
+                }
+
+                /* Subnav */
+                & ul[popover] {
+                    &:popover-open {
+                        display: flex;
+                    }
+                    padding: var(--spacing-m);
+                    /* Just clear the outline state of the parent so it looks cleaner when tabbing through with a keyboard */
+                    margin-block-start: var(--spacing-s-5);
+                    letter-spacing: 1px;
+                    & a, button {
+                        outline-offset: unset;
+                    }
+                }
+            }
+            & a:not(.o-current-menu-item) {
+                /* https://app.typographychecklist.com/ - 43. Links that are clearly part of navigation usually don't need a special link treatment. */
+                text-decoration: none;
+            }
+        }
+        .c-nav-toc-with-popover-api-category-heading {
+            display: inline-flex;
+            gap: var(--spacing-s-1);
+            align-items: center;
+            justify-content: space-between;
+            padding: var(--spacing-s-3) var(--spacing-m);
+            margin-block-end: var(--spacing-s-2);
+            font-family: var(--font-family-prose);
+            font-size: var(--font-size-l-2);
+            background: var(--color-body-background);
+            border-radius: 50px;
+            box-shadow: var(--box-shadow-not-t-light);
+            img {
+                /* Override any inline styles added by artwork settings -- {{ image_width_override }} */
+                max-width: 1.45em!important;
+                /* --mq-nav-open-after to custom */
+                @media (width >= 1250px) and (width < 1460px) {
+                    /* Hide the TOC category heading image when we're tight on space */
+                    display: none;
+                }
+            }
+            &.o-current-menu-item {
+                box-shadow: none;
+                background: var(--color-gradient-full-light-2);
+            }
+        }
+        /* GROUP COMPONENTS / NAV DROPDOWN WITH POPOVER API AND ANCHOR POSITIONING / MQS
+        =================================================== */
+        /* --mq-toc-open-before */
+        @media (width < 1250px) {
+            position: sticky;
+            z-index: var(--z-index-above-nav);
+            top: 0.8rem;
+            @supports not (animation-timeline: auto) {
+                top: 1rem;
+            }
+            display: inline-block;
+            float: right;
+            padding-inline: var(--spacing-s-3);
+            /* Pull the button over to the right when we're on mobile */
+            text-align: right;
+            ul {
+                /* Which means we need to reverse this for the popover */
+                text-align: left;
+            }
+            .c-nav-toc-with-popover-api__desktop {
+                /* Prevent a lag in seeing the desktop nav collapse if you pull the window in  */
+                transition: unset;
+            }
+            #popover-nav-toc {
+                /* position-area: bottom span-right; */
+                box-shadow: var(--box-shadow-medium);
+                &:not(:popover-open) {
+                    /* =JFG I've temporarily disabled this because believe there is a bug in iOS 18.5 where :popover-open does not disengage when closing a popover, which means this would cause pointer-events: none; to persist even when the popover was dismissed */
+                    /* pointer-events: none; */
+                }
+                body:has(&:popover-open) {
+                    /* Stop the body scrolling if you try and scroll a toc that's shorter than the viewport height */
+                    /* =JFG I've temporarily disabled this because believe there is a bug in iOS 18.5 where :popover-open does not disengage when closing a popover, which means this would cause overflow-clip: clip; to persist even when the popover was dismissed */
+                    /* overflow: clip; */
+                }
+            }
+            nav {
+                background: var(--color-dropdown-nav-background);
+                width: min(85%, 24rem);
+                margin-inline-start: auto;
+                &::backdrop {
+                    transition: all 0.5s var(--animation-timing-function-hipster) 0s;
+                }
+                &:popover-open::backdrop {
+                    backdrop-filter: blur(5px);
+                    background: var(--popover-backdrop);
+                }
+                & ul {
+                    padding: var(--spacing-l-3) var(--spacing-s-3);
+                    & ul {
+                        padding: 0 var(--spacing-l-2);
+                    }
+                }
+            }
+        }
+        /* --mq-toc-open-after */
+        @media (width >= 1250px) {
+            grid-area: sidebar-2;
+            nav {
+                /* Override `popover`'s default position:fixed; */
+                position: relative;
+                display: block;
+                opacity: 1;
+                ul li ul {
+                    padding-inline-end: 0;
+                }
+            }
+            .c-nav-toc-with-popover-api-category-heading {
+                gap: var(--spacing-s-3);
+                &:has(img) {
+                    inline-size: 100%;
+                }
+            }
+            .c-nav-toc-with-popover-api__mobile-button {
+                display: none;
+            }
+            .c-nav-toc-with-popover-api__desktop {
+                position: sticky;
+                --top: 8.5rem;
+                top: var(--top);
+                block-size: calc(100vh - var(--top) -  6.5rem);
+                ul:not(ul ul) {
+                    /* Need to cut this short a little to force scrolling when there are a lot of items. */
+                    height: 80dvh;
+                    padding-block-end: var(--spacing-l);
+                }
+            }
+            /* Custom */
+            @media (width < 1350px) {
+                /* Make it less distracting when the sidebars are very close to the main content */
+                opacity: 0.95;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/panel-list.css b/public/css/components/panel-list.css
new file mode 100644
index 000000000..0c5f94c1f
--- /dev/null
+++ b/public/css/components/panel-list.css
@@ -0,0 +1,85 @@
+/* GROUP COMPONENTS / PANEL LIST
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    /reference/fieldtypes
+    /reference/modifiers
+
+    What does it do?
+    ----------------
+    Display a list-like panel with a grid of icons e.g. /reference/fieldtypes or a grid of words e.g. /reference/modifiers
+
+*/
+/* HTML Example...
+
+<article class="c-panel-list">
+    <ul>
+        <li>
+            <a href="/fieldtypes/array">
+                <svg>
+            </a>
+        </li>
+    </ul>
+</article>
+
+*/
+@layer components {
+    .c-panel-list {
+        font-family: var(--font-family-code);
+        padding: var(--spacing-l-1) var(--spacing-l-2);
+        margin-block-start: calc(var(--spacing-l-2) - 0.75rem);
+        background: var(--color-purple-light-2);
+        &:has(svg) {
+            /* Check if there's any SVGs first because we want to affect e.g. >> /reference/fieldtypes but not /reference/modifiers */
+            a:not(:has(svg)) {
+                /* If there's no icon create a space */
+                margin-inline-start: 29px;
+            }
+        }
+        ul {
+            /* Custom */
+            @media (width >= 500px) {
+                column-count: 2;
+            }
+            /* Word-type list rather than icon-type list */
+            &:not(:has(svg)) {
+                /* More colums when there are no icons e.g. /reference/modifiers */
+                /* Custom */
+                @media (width >= 800px) {
+                    column-count: 3;
+                }
+                gap: var(--spacing-l-3);
+                a {
+                    /* Decrease */
+                    font-size: var(--font-size-s-2);
+                    line-height: var(--font-size-s-2-line-height);
+                }
+                li {
+                    padding-block-end: var(--spacing-s-4);
+                }
+            }
+        }
+        li {
+            padding-block-end: var(--spacing-s-3);
+        }
+        h3 {
+            padding-block-end: var(--spacing-s-2);
+            &:first-child {
+                padding-block-start: 0;
+            }
+        }
+        a {
+            display: flex;
+            align-items: center;
+            gap: var(--spacing-s-3);
+            /* Where SVGs are used remove text decoration */
+            .c-panel-list:has(svg) &:not(:hover) {
+                text-decoration: none;
+            }
+            font-size: var(--font-size-s-1-fixed);
+            line-height: var(--font-size-s-1-line-height);
+        }
+   }
+}
\ No newline at end of file
diff --git a/public/css/components/pill-with-description.css b/public/css/components/pill-with-description.css
new file mode 100644
index 000000000..37b03f0ee
--- /dev/null
+++ b/public/css/components/pill-with-description.css
@@ -0,0 +1,97 @@
+/* GROUP COMPONENTS / PILL WITH DESCRIPTION
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    - Little pill displaying a key and a value, typically demo'ing a parameter, e.g. `alt: string`, along with a paragraph description underneath.
+    - Decoration-wise this is very similar to .c-pill but since the markup structure is different I've separated it out for now.
+
+*/
+/* HTML Example...
+
+    <div class="c-pill-with-description">
+        <header>
+            <h3>Tag</h3>
+            <div>boolean *false*</div>
+        </header>
+        <div>
+            <p>When set to true, this will output an <code>&lt;img&gt;</code> tag with the URL in the <code>src</code> attribute, rather than just the&nbsp;URL.</p>
+        </div>
+    </div>
+
+*/
+@layer components {
+    .c-pill-with-description {
+        margin-block-end: var(--spacing-l-1);
+        /* e.g. >> /tags/form-create – handle|is|in|form|formset */
+        overflow: scroll;
+        &:has(+ &) {
+            /* Slightly Decrease if it's followed by another .c-pill-with-description */
+            margin-block-end: var(--spacing-l);
+        }
+        header {
+            display: inline-flex;
+            justify-content: center;
+            align-items: center;
+            padding: 0;
+            margin-block-start: var(--spacing-s-2);
+            background: var(--color-gradient-full-light-3);
+            @container style(--color-scheme: dark) {
+                background: var(--color-gradient-full-light-2);
+            }
+            border: var(--border-solid);
+            border-block-end: 0;
+            > * {
+                padding: var(--spacing-s-4) var(--spacing-m);
+                font-size: var(--font-size-s-1);
+                line-height: var(--font-size-s-1-line-height);
+
+                position: relative;
+                &:not(:last-child)::before {
+                    content: '';
+                    position: absolute;
+                    top: 0;
+                    right: 0;
+                    block-size: 100%;
+                    border-inline-start: var(--border-solid);
+                    rotate: 20deg;
+                }
+                &:first-child {
+                    /* Custom */
+                    font-size: clamp(1rem, 4vw, 1.1rem);
+                    font-family: var(--font-family-code);
+                    font-weight: var(--font-family-code-weight-normal);
+                    text-transform: lowercase;
+                }
+                &:last-child {
+                    padding-inline: var(--spacing-s-1);
+                    font-size: var(--font-size-s-2);
+                    font-family: var(--font-family-code);
+                    font-weight: var(--font-family-code-weight-normal);
+                    text-transform: uppercase;
+                    letter-spacing: 0.5px;
+                    color: var(--color-purple);
+                }
+            }
+        }
+        > *:last-child {
+            padding: var(--spacing-m) var(--spacing-s-1);
+            font-size: var(--font-size-s-1);
+            background: var(--color-gradient-full-light-5);
+            border: var(--border-solid);
+            border-radius: var(--border-radius-l-1);
+            border-top-left-radius: 0;
+        }
+        p {
+            font-family: var(--font-family-ui);
+            &, & code {
+                /* Custom */
+                font-size: clamp(0.9rem, 3.5vw, 1.05rem);
+            }
+        }
+        ul:last-child {
+            padding-block-end: var(--spacing-s-2);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/pill.css b/public/css/components/pill.css
new file mode 100644
index 000000000..4195d9593
--- /dev/null
+++ b/public/css/components/pill.css
@@ -0,0 +1,56 @@
+/* GROUP COMPONENTS / PILL
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    Little pill displaying a key and a value, e.g. Bulk: Yes/No
+
+*/
+/* HTML Example...
+
+    <dl class="c-pill c-pill--negative">
+        <dt>Bulk</dt>
+        <dd>No</dd>
+    </dl>
+
+*/
+/* Modifiers...
+
+    .c-pill--negative <- will turn the value text to red
+
+*/
+@layer components {
+    .c-pill,
+    dl {
+        display: inline-flex;
+        justify-content: center;
+        align-items: center;
+        padding: 0;
+        margin-block: var(--spacing-s-4) var(--spacing-m);
+        background: var(--color-gradient-full-light-3);
+        border: var(--border-solid);
+        border-radius: var(--border-radius-l-1);
+        font-family: var(--font-family-ui);
+        font-size: var(--font-size-s-1);
+        line-height: var(--font-size-s-1-line-height);
+        font-weight: var(--font-family-ui-weight-strong);
+        text-transform: uppercase;
+        > * {
+            padding: var(--spacing-s-3) var(--spacing-s-1);
+            margin: 0;
+            font-size: var(--font-size-s-1);
+            &:not(:last-child) {
+                border-inline-end: var(--border-solid);
+            }
+        }
+        dd {
+            color: var(--color-purple);
+        }
+    }
+}
+@layer modifiers {
+    .c-pill--negative dd {
+        color: var(--color-red-bright);
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/pro-badge.css b/public/css/components/pro-badge.css
new file mode 100644
index 000000000..34d509024
--- /dev/null
+++ b/public/css/components/pro-badge.css
@@ -0,0 +1,114 @@
+/* GROUP COMPONENTS / PRO BADGE
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    Pro Feature badge used on pages such as Git Automation
+
+*/
+/* HTML Example...
+
+    <header>
+        <div class="o-badge-heading">
+            <h1>{{ title }}</h1>
+            <div class="c-pro-badge">
+                <a href="/licensing">
+                    {{ global:pro_badges sort='random' limit='1' }}
+                        {{ artwork }}
+                            <picture class="c-pro-badge__artwork">
+                                <img/>
+                            </picture>
+                        {{ /artwork }}
+                        <div class="c-pro-badge__text">
+                            {{ icon }}
+                                <picture>
+                                    <img/>
+                                </picture>
+                            {{ /icon }}
+                            Pro Feature
+                        </div>
+                    {{ /global:pro_badges }}
+                </a>
+            </div>
+        </div>
+        {{ intro ?? overview | markdown }}
+    </header>
+
+    Or you can use this in text, with the pro badge on its own e.g.
+
+    <div class="c-pro-badge">
+        <a href="/licensing">
+            <div class="c-pro-badge__text">
+                ⭐️ Pro Feature ⭐️
+            </div>
+        </a>
+    </div>
+
+*/
+@layer components {
+    .c-pro-badge {
+        position: relative;
+
+        img {
+            filter: contrast(102%) saturate(1.05) brightness(105%);
+            @container style(--color-scheme: dark) {
+                filter: var(--filter-dark-tint);
+            }
+        }
+
+        a {
+            &, &:hover {
+                color: var(--color-primary-text)!important;
+            }
+            font-family: var(--font-family-ui);
+            font-weight: var(--font-family-ui-weight-heavy);
+            font-size: var(--font-size-s-1);
+            line-height: var(--font-size-s-1-line-height);
+            letter-spacing: 0.25px;
+            text-transform: uppercase;
+            text-align: center;
+            text-decoration: none;
+        }
+
+        + p {
+            margin-block-start: var(--spacing-l);
+        }
+        h2:has(+ &) {
+            padding-block-end: var(--spacing-s-3);
+        }
+    }
+    .c-pro-badge__artwork img {
+        border-radius: 50%;
+    }
+    .c-pro-badge__text {
+        position: relative;
+        left: -1.6rem;
+        min-width: 9.5rem;
+        display: inline-flex;
+        justify-content: center;
+        align-items: center;
+        flex-wrap: wrap;
+        gap: var(--spacing-s-4);
+        padding: var(--spacing-s-5) var(--spacing-s-4);
+        background: linear-gradient(to right, var(--color-yellow-light-4) 0%,var(--color-yellow-light-2) 100%);
+        font-size: var(--font-size-s-2);
+        rotate: -2.5deg;
+
+        img {
+            inline-size: 2em;
+        }
+    }
+    .c-pro-badge:has(img) {
+        .c-pro-badge__text {
+            position: absolute;
+            left: -1.75rem;
+            transform: translateY(-1.2rem);
+            rotate: -5deg;
+        }
+        /* --mq-grid-after */
+        @media (width >= 1000px) {
+            bottom: var(--spacing-l);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/quirky.css b/public/css/components/quirky.css
new file mode 100644
index 000000000..d4214e8e2
--- /dev/null
+++ b/public/css/components/quirky.css
@@ -0,0 +1,50 @@
+/* GROUP COMPONENTS / QUIRKY
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    /quick-start-guide
+
+    What does it do?
+    ----------------
+    Possibly one-off, quirky components here
+
+*/
+/* HTML Example...
+
+*/
+@layer components {
+    .c-spaced {
+        font-weight: var(--font-family-prose-weight-strong);
+        letter-spacing: 1px;
+        text-transform: uppercase;
+    }
+
+    .clippy {
+        position: fixed;
+        bottom: 0;
+        right: 0;
+        cursor: pointer;
+        margin: 2rem;
+        display: none;
+
+        &.visible {
+            display: block;
+            animation: bounce-in-right 0.8s ease-in-out;
+        }
+    }
+
+    @keyframes bounce-in-right {
+        0% {
+            opacity: 0;
+            transform: translateY(2000px);
+        }
+        60% {
+            opacity: 1;
+            transform: translateY(-30px);
+        }
+        80% { transform: translateY(10px); }
+        100% { transform: translateY(0); }
+    }
+}
diff --git a/public/css/components/related.css b/public/css/components/related.css
new file mode 100644
index 000000000..940bf1d53
--- /dev/null
+++ b/public/css/components/related.css
@@ -0,0 +1,160 @@
+/* GROUP COMPONENTS / RELATED
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    Show related entries to the current article
+
+*/
+/* HTML Example...
+
+    <section class="c-related">
+        <div class="u-label">Learn More!</div>
+        <p>There is more to learn in these related articles:</p>
+        <div class="c-related__item">
+            <ul>
+                <li><a href="/">Reference</a></li>
+                <li><?php include 'img/breadcrumb-chevron.svg'; ?><a href="/1.php">Tags</a></li>
+                <li><?php include 'img/breadcrumb-chevron.svg'; ?><a href="/1.php">Nav</a></li>
+            </ul>
+        </div>
+        <div class="c-related__item">
+            <ul>
+                <li><a href="/">Docs</a></li>
+                <li><?php include 'img/breadcrumb-chevron.svg'; ?><a href="/1.php">Diving deeper</a></li>
+                <li><?php include 'img/breadcrumb-chevron.svg'; ?><a href="/1.php">Structures</a></li>
+            </ul>
+        </div>
+        <div class="c-related__item">
+            <ul>
+                <li><a href="/">Docs</a></li>
+                <li><?php include 'img/breadcrumb-chevron.svg'; ?><a href="/1.php">Resources</a></li>
+                <li><?php include 'img/breadcrumb-chevron.svg'; ?><a href="/1.php">Tips & tricks</a></li>
+                <li><?php include 'img/breadcrumb-chevron.svg'; ?><a href="/1.php">Localizing navigation</a></li>
+            </ul>
+        </div>
+    </section>
+
+*/
+@layer components {
+    .c-related {
+        --background-image-height: 4rem;
+        padding: var(--background-image-height) var(--spacing-l);
+        margin-block-start: var(--spacing-l-2);
+        background: var(--color-gradient-blue-light-1);
+        /* Custom */
+        @media (width >= 500px) {
+            background: var(--color-gradient-blue-light-2);
+        }
+
+        position: relative;
+        &::before,
+        &::after {
+            content: '';
+            left: 0;
+            inline-size: 100%;
+            block-size: var(--background-image-height);
+            position: absolute;
+            --background-position: 1.5rem;
+            --background-image: url('/img/paper-tear.png');
+            @container style(--color-scheme: dark) {
+                --background-image: url('/img/paper-tear-dark-mode.png');
+            }
+            background: var(--background-image) no-repeat 0% var(--background-position), transparent;
+            opacity: 0.8;
+        }
+        &::before {
+            top: 0;
+            transform: scaleY(-1);
+        }
+        &::after {
+            bottom: 0;
+        }
+        & ul {
+            padding: var(--spacing-s-3);
+            padding-inline-end: var(--spacing-s-1);
+            background: light-dark(white, var(--color-dark-mode-gray-background));
+            display: inline-flex;
+            flex-wrap: wrap;
+            align-items: center;
+            gap: var(--spacing-s-1);
+            /* height: 100%; */
+            font-family: var(--font-family-ui);
+            box-shadow: var(--box-shadow-not-t-light);
+            border-radius: var(--border-radius-m);
+        }
+        & li {
+            display: flex;
+            align-items: center;
+            padding-block-end: 0;
+            & svg:not(.external) {
+                margin-inline-end: var(--spacing-s-1);
+                inline-size: 0.4rem;
+                color: var(--color-gray-aa);
+            }
+            &:last-child a {
+                font-weight: var(--font-family-ui-weight-strong);
+                line-height: 1.5;
+                margin-inline-end: 0;
+                text-decoration: underline;
+                text-decoration-color: var(--color-black);
+                color: light-dark(var(--color-black), white);
+            }
+        }
+        a {
+            padding: 0;
+            text-decoration: none;
+            color: var(--color-gray-aa);
+            text-transform: uppercase;
+            font-size: 0.775em;
+            font-weight: var(--font-family-ui-weight-normal);
+            text-box: trim-start cap;
+            line-height: 1;
+            letter-spacing: 0.5px;
+        }
+    }
+    .c-related__item {
+        /* First instance of this class */
+        :nth-child(1 of &) {
+            padding-block-start: var(--spacing-s-2);
+        }
+        &:not(:last-child) {
+            margin-block-end: var(--spacing-s-2);
+        }
+        /* Custom */
+        @media (width < 800px) {
+            li {
+                &:not(:last-child) {
+                    /* Hide breadcrumb trail on smaller vieWordPressorts */
+                    display: none;
+                }
+                svg {
+                    margin-inline-end: var(--spacing-s-3);
+                }
+            }
+        }
+    }
+}
+@layer utilities {
+    .c-related .u-label {
+        position: absolute;
+        top: -0.5rem;
+        left: 0;
+        padding: var(--spacing-s-4) var(--spacing-m);
+        font-size: var(--font-size-m);
+        text-transform: uppercase;
+    }
+}
+@layer scope {
+    @container style(--color-scheme: dark) {
+        /* Change the hover colors for the dark theme */
+        .c-related a {
+            text-decoration-color: white;
+            &:hover {
+                text-decoration-color: white;
+                color: white;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/search-form.css b/public/css/components/search-form.css
new file mode 100644
index 000000000..642d39e25
--- /dev/null
+++ b/public/css/components/search-form.css
@@ -0,0 +1,211 @@
+/* GROUP COMPONENTS / SEARCH FORM
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    Home
+
+    What does it do?
+    ----------------
+    Search "box"
+
+*/
+@layer components {
+    .c-search-form {
+        position: relative;
+        display: flex;
+        margin-block-end: 0;
+        background: var(--color-search-form);
+        border: 1px solid var(--color-pink-border);
+        box-shadow: var(--box-shadow-pink-light);
+        border-radius: 50px;
+
+        & input,
+        #docsearch button {
+            margin: 0;
+            padding-inline: 3.5em var(--spacing-m);
+            /* Custom */
+            @media (width < 500px) {
+                padding-inline-end: max(2.5rem, 10vw);
+            }
+            border: 0;
+        }
+        & ::placeholder {
+            color: var(--color-black);
+            opacity: 1;
+        }
+    }
+    .c-search-form__icon {
+        left: var(--spacing-s-1);
+        pointer-events: none;
+        font-size: 1.3em;
+    }
+}
+#docsearch {
+    /* Prevent Safari from nudging the page layout when this is rendered */
+    max-height: 3.6rem;
+    font-size: var(--font-size-s-1);
+    button {
+        align-items: center;
+        inline-size: 100%;
+        background: inherit;
+        color: inherit;
+        font-size: inherit;
+        font-weight: inherit;
+    }
+    .docsearch-btn-keys {
+        display: flex;
+        gap: 0.4rem;
+        > * {
+            margin-inline-end: unset;
+        }
+    }
+    .docsearch-btn-placeholder {
+        &::after {
+            content: "the docs";
+        }
+        margin-inline-end: 0;
+        padding-inline-end: 0;
+    }
+    .docsearch-btn {
+        padding: var(--button-spacing);
+        height: unset;
+        > * {
+            margin-inline-end: unset;
+        }
+    }
+    .docsearch-btn-key {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        border: 1px solid hsl(var(--color-pink-hue) 100% 90%);
+        border-radius: 5px;
+        background: var(--docsearch-key-gradient);
+        height: 1.5rem;
+        padding-inline: 0.3rem;
+        font-family: var(--font-family-ui);
+        font-size: var(--font-size-s-1);
+        /* Page preference is "dark" */
+        html:has(#color-scheme option[value="dark"]:checked) & {
+            border: 0;
+        }
+        /* Page preference is "system", and system preference is "dark" */
+        @media (prefers-color-scheme: dark) {
+            html:has(#color-scheme option[value="system"]:checked) & {
+                border: 0;
+            }
+        }
+    }
+}
+/* --mq-meilisearch-mobile-breakpoint-before */
+@media (width < 768px) {
+    #docsearch .docsearch-btn-placeholder {
+        /* Override Meilsearch hiding the text on lower MQs */
+        display: inline-block!important;
+        /* Custom */
+        @media (width < 500px) {
+            &::after {
+                content: unset;
+            }
+        }
+    }
+}
+/* Custom */
+@media (width < 500px) {
+    #docsearch {
+        /* Hide when short on space */
+        .docsearch-btn-keys {
+            display: none;
+        }
+    }
+    .c-docs-header__search {
+        min-width: 60%;
+        .docsearch-btn {
+            min-width: 43vw;
+        }
+    }
+}
+/* GROUP COMPONENTS / SEARCH FORM / MODAL
+=================================================== */
+.docsearch-modal {
+    /* --mq-text-bump-3-before */
+    @media (width < 1800px) {
+        font-size: 1.05em;
+    }
+}
+/* GROUP COMPONENTS / SEARCH FORM / Overrides For Meilisearch CSS
+=================================================== */
+/* Notes...
+
+    - Meilisearch styles are loaded inline so we'll need !important here.
+
+*/
+:root {
+    /* Overrides For Meilisearch CSS */
+    --docsearch-muted-color: inherit!important;
+    --docsearch-primary-color: var(--color-purple)!important;
+    --docsearch-key-shadow: unset!important;
+    --docsearch-key-gradient: linear-gradient(to bottom, hsl(var(--color-yellow-hue) 100% 97%) 0%,white 100%)!important;
+    --docsearch-modal-width: 50rem!important;
+    --docsearch-modal-container-background: hsl(var(--color-purple-hue) 20% 30% / 52%)!important;
+    --docsearch-modal-shadow: 0 0px 100px hsl(var(--color-body-background-hue, 0) 30% 85%)!important;
+    /* Page preference is "dark" */
+    &:has(#color-scheme option[value="dark"]:checked) {
+        --docsearch-primary-color: hsl(250deg 50% 50%)!important;
+        --docsearch-key-gradient: var(--color-transparent-dark-mode)!important;
+        --docsearch-modal-container-background: hsl(var(--color-purple-hue) 20% 5% / 70%)!important;
+        --docsearch-modal-background: var(--color-body-background);
+        --docsearch-footer-background: var(--color-body-background);
+        --docsearch-modal-shadow: 0 0px 100px hsl(var(--color-body-background-hue, 0) 30% 20%)!important;
+        --docsearch-hit-shadow: unset;
+    }
+    /* Page preference is "system", and system preference is "dark" */
+    /* Note: For now, we need to repeat these values, but in the future, we can use style queries to eliminate the need to repeat the dark mode variables. [Current support](https://caniuse.com/?search=style%20queries). To do this, we must shift everything down so variables are on the `body` instead of the `root`. The root then contains the `colour-scheme` variables, which means we can now query the `colour-scheme` variable since the root is now the container. */
+    @media (prefers-color-scheme: dark) {
+        &:has(#color-scheme option[value="system"]:checked) {
+            --docsearch-primary-color: hsl(250deg 50% 50%)!important;
+            --docsearch-key-gradient: var(--color-transparent-dark-mode)!important;
+            --docsearch-modal-container-background: hsl(var(--color-purple-hue) 20% 5% / 50%)!important;
+            --docsearch-modal-background: var(--color-body-background);
+            --docsearch-footer-background: var(--color-body-background);
+            --docsearch-modal-shadow: 0 0px 100px hsl(var(--color-body-background-hue, 0) 30% 20%)!important;
+            --docsearch-hit-shadow: unset;
+        }
+    }
+}
+@container style(--color-scheme: light) {
+    .docsearch-modal-footer-commands-key {
+        border: 1px solid hsl(var(--color-pink-hue) 100% 90%)!important;
+    }
+}
+.docsearch-modal {
+    border-radius: 15px!important;
+}
+.docsearch-modal-search-input-form {
+    border-radius: 12px!important;
+}
+.docsearch-modal-footer {
+    border-radius: 0 0 10px 10px!important;
+}
+.docsearch-modal-search-input {
+    margin-block-end: 0;
+}
+.docsearch-modal-search-hits-item-title {
+    font-weight: var(--font-family-ui-weight-strong)!important;
+}
+.docsearch-modal-search-hits-item-text {
+    font-weight: var(--font-family-ui-weight-normal)!important;
+}
+@container style(--color-scheme: dark) {
+    .docsearch-modal-search-hits-category {
+        color: var(--color-green)!important;
+    }
+}
+.docsearch-modal-footer-logo-icon {
+    /* The logo colour is distracting otherwise */
+    filter: grayscale(100%);
+    @container style(--color-scheme: dark) {
+        filter: grayscale(100%) invert(1);
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/site-footer.css b/public/css/components/site-footer.css
new file mode 100644
index 000000000..43f6c0281
--- /dev/null
+++ b/public/css/components/site-footer.css
@@ -0,0 +1,272 @@
+/* GROUP COMPONENTS / FOOTER
+=================================================== */
+/* HTML Example...
+
+*/
+@layer components {
+    .c-site-footer {
+        background: linear-gradient(to bottom, transparent 0%,var(--color-body-background) 10%);
+        position: relative;
+        z-index: var(--z-index-above-body);
+
+        /* Page preference is "dark" */
+        html:has(#color-scheme option[value="dark"]:checked) & {
+            .c-site-footer__scene__image-container {
+                background: linear-gradient(to bottom, transparent, var(--color-body-background), hsl(211 45% 10%) 60%, var(--color-black-off));
+                img {
+                    filter:
+                        grayscale(100%)
+                        brightness(0%)
+                    ;
+                }
+                /* Make shorter because there's nuttin' to see really. Once we get to higher MQs this isn't needed because we start getting near the max-height of the .c-site-footer__scene__image-container anyway. */
+                @media (width < 2100px) {
+                    max-height: 32rem;
+                }
+            }
+        }
+        /* Page preference is "system", and system preference is "dark" */
+        /* Note: For now, we need to repeat these values, but in the future, we can use style queries to eliminate the need to repeat the dark mode variables. [Current support](https://caniuse.com/?search=style%20queries). To do this, we must shift everything down so variables are on the `body` instead of the `root`. The root then contains the `colour-scheme` variables, which means we can now query the `colour-scheme` variable since the root is now the container. */
+        @media (prefers-color-scheme: dark) {
+            html:has(#color-scheme option[value="system"]:checked) & {
+                .c-site-footer__scene__image-container {
+                    background: linear-gradient(to bottom, transparent, var(--color-body-background), hsl(211 45% 10%) 60%, var(--color-black-off));
+                    img {
+                        filter:
+                            grayscale(100%)
+                            brightness(0%)
+                        ;
+                    }
+                    /* Make shorter because there's nuttin' to see really. Once we get to higher MQs this isn't needed because we start getting near the max-height of the .c-site-footer__scene__image-container anyway. */
+                    @media (width < 2100px) {
+                        max-height: 32rem;
+                    }
+                }
+            }
+        }
+    }
+    .c-site-footer__scene {
+        position: relative;
+    }
+    .c-site-footer__scene__image-container {
+        max-height: 40rem;
+        position: relative;
+        display: flex;
+        --stop: 4.5rem;
+    
+        /* Custom */
+        @media (width >= 500px) {
+            --stop: 4rem;
+        }
+        background: linear-gradient(to top, var(--color-black-off) 0%, var(--stop), transparent var(--stop), transparent 100%);
+        img {
+            filter: var(--filter-image-boost-2);
+            mask: url(/img/footer/waterfall-mask.svg) center/contain no-repeat, linear-gradient(#000 0 0); /* we need this extra layer for mask-composite */
+            mask-composite: exclude;
+            mask-repeat: no-repeat;
+            /* Fix weird bug where there is a hairline gap between the masked image and the subsequent DOM element */
+            --fix-hairline-gap: 0.75rem;
+            mask-position: 0% calc(100% + var(--fix-hairline-gap));
+            mask-size: 100%;
+            object-fit: cover;
+            width: 100%;
+            object-position: top;
+        }
+        /* Custom */
+        @media (width > 3000px) {
+            max-height: 55rem;
+            img {
+                --fix-hairline-gap: 2rem;
+            }
+        }
+    }
+    .c-site-footer__scene__stars {
+        pointer-events: none;
+        position: absolute;
+        inset: 0;
+        img {
+            position: absolute;
+            width: 1em;
+            top: 35%;
+            left: 70%;
+            opacity: 0.25;
+            &:nth-child(2) {
+                top: 10%;
+                left: 50%;
+                opacity: 0.1;
+            }
+            &:nth-child(3) {
+                top: 17%;
+                left: 30%;
+                opacity: 0.15;
+            }
+            &:nth-child(4) {
+                top: 20%;
+                left: 90%;
+                opacity: 0.1;
+            }
+            &:nth-child(5) {
+                top: 0%;
+                left: 70%;
+                opacity: 0.08;
+            }
+        }
+        /* Custom */
+        @media (width < 930px) {
+            opacity: 0.5;
+            /* Pull up slightly so they're more visible */
+            top: -2rem;
+            img:nth-child(5) {
+                display: none;
+            }
+        }
+    }
+    /* GROUP COMPONENTS / FOOTER / NAV
+    =================================================== */
+    .c-site-footer {
+        /* Fix tiny overflow */
+        overflow: clip;
+    }
+    .c-site-footer__nav,
+    .c-site-footer__bottom {
+        max-width: var(--max-width-1);
+        margin-inline: auto;
+        background: var(--color-black-off);
+        padding: 3rem var(--spacing-l) var(--spacing-vh-s);
+        &:has(> :only-child) {
+            /* e.g. Sans Off / Sans On row */
+            padding-block: var(--spacing-m) var(--spacing-l-2);
+            > :only-child {
+                grid-column: 1/-1;
+            }
+        }
+
+        /* --mq-nav-open-after and --mq-wide-before */
+        @media (width >= 1100px) and (width < 1650px) {
+            /* Vertically align with .c-nav-sidebar-with-popover-api */
+            padding: var(--spacing-l-2) calc(var(--spacing-l-2-horizontal) + var(--spacing-s-4)) var(--spacing-vh-s);
+        }
+        /* --mq-wide-after */
+        @media (width >= 1650px) {
+            /* Vertically align with .c-nav-sidebar-with-popover-api */
+            padding-inline: calc(var(--spacing-l-2-horizontal) + var(--spacing-s-1));
+        }
+
+        position: relative;
+        &::before {
+            content: '';
+            position: absolute;
+            z-index: var(--z-index-below-body);
+            inset: 0;
+            /* Bust out of container */
+            margin-inline: calc(-50vw + 50%);
+            background: inherit;
+        }
+        &:not(:last-child) {
+            padding-block-end: 0;
+        }
+    }
+    .c-site-footer__nav {
+        --color-link: white;
+        display: grid;
+        grid-template-columns: repeat(auto-fit, minmax(min(100%, 11em), 1fr));
+        /* Custom */
+        @media (width >= 370px) and (width < 600px) {
+            /* Force 2 columns at lower MQs e.g. mobile */
+            grid-template-columns: repeat(2, 1fr);
+        }
+        gap: var(--spacing-l-2) var(--spacing-l-3);
+        /* Custom */
+        @media (width < 500px) {
+            /* Bit more room for the .c-footer-arrow svgs */
+            padding-inline: var(--spacing-l-2);
+        }
+        font-family: var(--font-family-code);
+        font-size: var(--font-size-s-2);
+        line-height: var(--font-size-s-2-line-height);
+
+        img {
+            max-height: 1rem;
+            max-width: 1rem;
+            opacity: 0.35;
+        }
+
+        li {
+            display: inline-flex;
+            flex-wrap: wrap;
+            gap: var(--spacing-s-5);
+            align-items: center;
+            color: var(--color-link);
+            span {
+                color: var(--color-link);
+                /* Custom */
+                @media (width < 1280px) {
+                    display: none;
+                }
+            }
+        }
+
+        .o-font-toggle {
+            color: var(--color-link);
+            /* Optically align with the column above */
+            margin-inline-start: -1.8rem;
+        }
+
+        p {
+            color: var(--color-link);
+        }
+
+        /* Link Hover Effect */
+        a {
+            display: inline-flex;
+            align-items: center;
+            gap: var(--spacing-s-4);
+            text-decoration: none;
+            position: relative;
+            &::after {
+                width: 0;
+                transition: width .3s ease 0.05s;
+
+                content: '';
+                position: absolute;
+                bottom: -3px;
+                height: 1px;
+                margin-top: 2px;
+                background: white;
+                right: 0;
+            }
+            &:hover::after {
+                width: 100%;
+                left: 0;
+            }
+        }
+    }
+    .c-site-footer-heading {
+        color: white;
+        position: relative;
+        text-transform: uppercase;
+        font-weight: var(--font-family-code-weight-normal);
+        margin-block-end: min(2.85vw, var(--spacing-s-2));
+        svg {
+            position: absolute;
+            top: calc(50% + 0.1rem);
+            transform: translate(-1.75rem, -50%);
+        }
+    }
+    .c-site-footer__nav__item ul {
+        display: grid;
+        gap: var(--spacing-s-5);
+    }
+    /* GROUP COMPONENTS / FOOTER / BOTTOM
+    =================================================== */
+    .c-site-footer__bottom {
+        display: grid;
+        grid-template-columns: repeat(auto-fill, minmax(min(100%, 11em), 1fr));
+        gap: var(--spacing-l-3);
+        padding-block-start: 0;
+        /* margin-inline: auto; */
+        img {
+            max-height: 1.5rem;
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/skip-to-content.css b/public/css/components/skip-to-content.css
new file mode 100644
index 000000000..69ed144c7
--- /dev/null
+++ b/public/css/components/skip-to-content.css
@@ -0,0 +1,31 @@
+/* GROUP COMPONENTS / SKIP TO CONTENT
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    Accessibilty aid for keyboard users
+
+*/
+/* HTML Example...
+
+    <a href="#main" class="c-skip-to-content u-screen-reader-text" title="Skip to content">
+        Skip to content
+    </a>
+
+    <a href="#footer" class="c-skip-to-content u-screen-reader-text" title="Skip to footer navigation">
+        Skip to footer navigation
+    </a>
+
+*/
+@layer components {
+    .c-skip-to-content {
+        background: var(--color-green);
+        color: var(--color-black-static);
+        padding: var(--spacing-s-2) var(--spacing-s-1);
+        text-decoration-color: var(--color-black-static);
+        font-weight: var(--font-family-ui-weight-medium);
+        outline: 0;
+        text-box: text;
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/syntax-explainer.css b/public/css/components/syntax-explainer.css
new file mode 100644
index 000000000..1f492f25d
--- /dev/null
+++ b/public/css/components/syntax-explainer.css
@@ -0,0 +1,44 @@
+/* GROUP COMPONENTS / SYNTAX EXPLAINER
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    /conditions
+
+    What does it do?
+    ----------------
+    - e.g. when explaining on the `/conditions` page, `{field_name}:{condition}="{value}"` might be broken down as per the HTML example below...
+
+
+*/
+/* HTML Example...
+
+<div class="c-syntax-explainer">
+    <span class="c-syntax-explainer__1">{field_name}</span>:<span class="c-syntax-explainer__2">{condition}</span><span>=</span>"<span class="c-syntax-explainer__3">{value}</span>"
+</div>
+
+*/
+@layer components {
+    .c-syntax-explainer {
+        margin-block-end: var(--spacing-m);
+        font-family: var(--font-family-code);
+        font-weight: var(--font-family-code-weight-normal);
+        /* Because of the extra padding */
+        line-height: 2;
+        > * {
+            padding: var(--spacing-s-5) var(--spacing-s-4);
+            border-radius: var(--border-radius-s);
+        }
+    }
+    .c-syntax-explainer__1 {
+        background: var(--color-pink-light-2);
+    }
+    .c-syntax-explainer__2 {
+        background: var(--color-purple-light-1);
+    }
+    .c-syntax-explainer__3 {
+        background: var(--color-green);
+        color: light-dark(var(--color-primary-text), var(--color-black));
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/theme-picker.css b/public/css/components/theme-picker.css
new file mode 100644
index 000000000..126d63061
--- /dev/null
+++ b/public/css/components/theme-picker.css
@@ -0,0 +1,101 @@
+/* GROUP COMPONENTS / THEME PICKER
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    Home
+
+    What does it do?
+    ----------------
+    A button to switch between light and dark themes
+
+*/
+/* HTML Example...
+
+    <div class="c-theme-picker">
+        <div class="c-theme-picker__button">
+            <img src="/img/theme-light.svg" alt="Light theme" />
+            <img src="/img/theme-dark.svg" alt="Dark theme" />
+        </div>
+        <select id="color-scheme">
+            <option value="system">System</option>
+            <option value="dark">Dark</option>
+            <option value="light">Light</option>
+        </select>
+    </div>
+
+*/
+@layer components {
+    .c-theme-picker {
+        /* Custom */
+        @media (width < 400px) {
+            .c-theme-picker__button {
+                padding: 0;
+                img {
+                    margin: 0;
+                }
+            }
+        }
+        .c-theme-picker__button {
+            img {
+                inline-size: 1.5rem;
+            }
+            .c-theme-picker-dark-icon {
+                opacity: 0.25;
+                /* --mq-grid-after */
+                @media (width >= 1000px) {
+                    opacity: 0.4;
+                }
+            }
+        }
+        /* position: relative; */
+        select {
+            --background: var(--color-body-background);
+            transition: opacity 0.2s ease-in 0s;
+            &:not(:focus){
+                /* Hide the select unless it's focused, to clean up the UI. The select is also focused when the preceeding SVG button is clicked in case the user is using a pointer device like a mouse. */
+                opacity: 0;
+            }
+            &:focus {
+                outline-offset: -1px;
+            }
+            /* Effectively pull the select over the faux button so "clicking" it will also open the select. The select remains tababble for keyboard users. */
+            position: absolute;
+            transform: translate(-0.25rem, -0.5rem);
+            /* Custom */
+            @media (width < 640px) {
+                /* Otherwise the theme select overlaps the navigation dots */
+                right: 18%;
+            }
+            /* Select Styling. Inspiration - https://moderncss.dev/custom-select-styles-with-pure-css/ */
+            appearance: none;
+            background: var(--background);
+            background-image: url(/img/dropdown.svg);
+            background-repeat: no-repeat;
+            background-size: 0.75em;
+            background-position: calc(100%);
+            min-inline-size: 6.5rem;
+            /* Fallback for Safari */
+            block-size: 2.5rem;
+            min-block-size: 2.5rem;
+            border: none;
+            margin: 0;
+            margin-inline-start: var(--spacing-s-5);
+            padding: var(--spacing-s-4);
+            padding-inline-start: var(--spacing-s-3);
+            color: var(--color-primary-text);
+            font-size: var(--font-size-s-1);
+            border-radius: 50px;
+            box-shadow: 0px 0px 1px var(--color-pink);
+            border-inline: var(--spacing-s-2) solid var(--color-body-background);
+            border-inline-start-width: var(--spacing-s-5);
+        }
+    }
+}
+@container style(--color-scheme: dark) {
+    /* This won't work in Safari when nested in a layer for some reason */
+    .c-theme-picker select {
+        background-image: url(/img/dropdown-dark-mode.svg);
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/tiles-with-description.css b/public/css/components/tiles-with-description.css
new file mode 100644
index 000000000..b1ff9c9d9
--- /dev/null
+++ b/public/css/components/tiles-with-description.css
@@ -0,0 +1,127 @@
+/* GROUP COMPONENTS / TILES WITH DESCRIPTION
+=================================================== */
+/* Notes...
+
+    URL example
+    -----------
+    Home
+
+    What does it do?
+    ----------------
+    Lays out thumbnails with a title and short description
+
+*/
+/* HTML Example...
+
+    <div class="c-tiles-with-description">
+        {{ tiles }}
+            <div class="c-tiles-with-description__item{{ flush_image ?= ' c-tiles-with-description__item--flush' }}">
+                <a href="{{ tile_link }}" class="u-link-style-none">
+                    <figure class="c-tiles-with-description__item__thumbnail">
+                        {{ if tile_image_dark_mode }}
+                            {{ tile_image }}
+                                {{ partial:image_dimensions/tile modifier_classes='u-hide-in-dark-mode' }}
+                            {{ /tile_image }}
+                            {{ tile_image_dark_mode }}
+                                {{ partial:image_dimensions/tile modifier_classes='u-hide-in-light-mode' }}
+                            {{ /tile_image_dark_mode }}
+                        {{ else }}
+                            {{ tile_image }}
+                                {{ partial:image_dimensions/tile }}
+                            {{ /tile_image }}
+                        {{ /if }}
+                        <figcaption>{{ tile_title }}</figcaption>
+                    </figure>
+                </a>
+                <p>{{ tile_description }}</p>
+            </div>
+        {{ /tiles }}
+    </div>
+
+*/
+@layer components {
+    .c-tiles-with-description {
+        display: grid;
+        grid-template-columns: repeat(auto-fit, minmax(min(100%, 13em), 1fr));
+        gap: calc(var(--spacing-l-1) + var(--spacing-s-5)) var(--spacing-s-4);
+        /* Custom */
+        @media (width >= 530px) {
+            column-gap: var(--spacing-s-2);
+        }
+        padding-block-end: var(--spacing-l-2);
+    }
+    .c-tiles-with-description__item {
+        max-width: 21rem;
+        margin-inline: auto;
+        font-family: var(--font-family-ui);
+        p {
+            padding-inline: var(--spacing-m);
+            /* padding-inline: var(--spacing-s-1); */
+            font-size: var(--font-size-ui);
+            line-height: var(--font-size-ui-line-height);
+            max-width: 16rem;
+            text-align: center;
+            margin-inline: auto;
+        }
+
+        position: relative;
+        .external {
+            a > & {
+                /* Hide the direct .external links added with javascript because we want to add the icon elsewhere instead */
+                display: none;
+            }
+            background: light-dark(hsl(var(--color-purple-hue) 70% 97%), transparent);
+            border-radius: 50%;
+            * {
+                fill: var(--color-purple);
+            }
+        }
+
+        figcaption {
+            display: flex;
+            justify-content: center;
+            gap: 0.25rem;
+        }
+    }
+    .c-tiles-with-description__item__thumbnail {
+        padding: var(--spacing-s-2);
+        margin-block-end: var(--spacing-s-3);
+        text-align: center;
+        background: var(--color-gradient-full-light-6);
+        border: var(--dark-mode-border);
+        border-radius: var(--border-radius-l-2);
+
+        img {
+            display: inline-block;
+            max-width: 70%;
+            filter: var(--filter-image-boost-1);
+        }
+    }
+    /* Custom */
+    @media (width >= 500px) {
+        .c-tiles-with-description__item p {
+            text-align: left;
+            /* Decrease */
+            font-size: var(--font-size-s-2);
+            font-weight: var(--font-family-ui-weight-normal);
+            line-height: var(--font-size-s-2-line-height);
+        }
+    }
+    /* Custom */
+    @media (width >= 768px) {
+        :is(header, p) + .c-tiles-with-description {
+            padding-block-start: var(--spacing-s-4);
+        }
+    }
+}
+@layer modifiers {
+    .c-tiles-with-description__item--flush {
+        & img {
+            max-width: 100%;
+            margin-block-end: 1.6rem;
+        }
+        .c-tiles-with-description__item__thumbnail {
+            padding: var(--spacing-s-3);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/tip.css b/public/css/components/tip.css
new file mode 100644
index 000000000..d1a29a26c
--- /dev/null
+++ b/public/css/components/tip.css
@@ -0,0 +1,125 @@
+/* GROUP COMPONENTS / TIP
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    A positive tip box with a troll. We also have a tip-warning component.
+
+*/
+/* HTML Example...
+
+    <div class="c-tip">
+        <div class="c-tip__title">Hot Tip!</div>
+        <p>If a view file ends with <code>.blade.php</code> it will use Laravel’s <a href="https://statamic.dev/blade" >Blade templates</a>. This same pattern applies for any other template engine you may wish to install in the future, like Twig or something that hasn't been invented yet.</p>
+        <img src="/img/tip-troll.webp" class="c-tip__mascot" alt="A troll pointing a teaching stick" width="242" height="293" />
+    </div>
+
+*/
+/* Modifiers...
+
+    .c-tip--warning <- a warning tip such as leaving the debug bar on for production.
+        - Uses an evil troll and red colours instead.
+
+*/
+@layer components {
+    .c-tip,
+    .best-practice {
+        &:not(.watch) {
+            position: relative;
+            z-index: var(--z-index-above-body);
+            padding: var(--spacing-m) var(--spacing-l-1) var(--spacing-s-4);
+
+            /* Custom */
+            @media (width < 550px) {
+                padding-inline: var(--spacing-m);
+            }
+            margin-block: var(--spacing-l-2);
+            font-family: var(--font-family-ui);
+            &:hover .c-tip__mascot {
+                animation: wiggle 0.5s linear;
+            }
+            &::before {
+                content: '';
+                position: absolute;
+                inset: 0;
+                z-index: var(--z-index-below-body);
+                background: var(--color-gradient-burnt);
+                rotate: -1deg;
+                border-radius: var(--border-radius-l-3);
+            }
+            p {
+                max-width: 96%;
+                font-size: unset;
+                font-weight: var(--font-family-ui-weight-medium);
+                /* Custom */
+                @media (width < 500px) {
+                    font-size: 0.9rem;
+                }
+            }
+            /* GROUP COMPONENTS / TIP / SCOPE TWEAKS
+            =================================================== */
+            &:has(+ h2) {
+                /* e.g. >> /updating */
+                margin-block-end: var(--spacing-m);
+            }
+            h2:has(+ &) + & {
+                /* e.g. >> /tags/children */
+                margin-block-start: var(--spacing-s-5);
+            }
+            header:has(+ &) + & {
+                /* e.g. >> /updating */
+                margin-block-start: var(--spacing-m);
+            }
+        }
+    }
+    /* Cross pollinated */
+    .c-tip__title,
+    .hint-title {
+        display: inline-block;
+        padding: var(--spacing-s-5) var(--spacing-s-1);
+        margin-block-end: var(--spacing-m);
+        font-size: var(--font-size-l-1-uppercase);
+        text-transform: uppercase;
+    }
+    .c-tip__title--long {
+        font-size: var(--font-size-m-uppercase);
+    }
+    /* img*/
+    .c-tip__mascot {
+        position: absolute;
+        z-index: var(--z-index-above-body);
+        top: -1.3rem;
+        left: -2.5rem;
+        inline-size: 4.85rem;
+        filter: var(--filter-burnt-shadow);
+    }
+}
+@layer scope {
+    .c-tip--warning {
+        &::before {
+            background: var(--color-gradient-burnt-dark);
+        }
+        .hint-title,
+        .c-tip__title {
+            &, &::before {
+                background: var(--color-red-burnt-1);
+                color: var(--color-red-bright);
+                border-radius: var(--border-radius-s);
+            }
+            @container style(--color-scheme: dark) {
+                border: 1px solid var(--color-red);
+                &, &::before {
+                    rotate: unset;
+                    border-radius: var(--border-radius-m);
+                }
+            }
+        }
+        img {
+            filter: hue-rotate(-20deg) saturate(1.25);
+        }
+        code {
+            background: var(--color-gradient-fire);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/components/video.css b/public/css/components/video.css
new file mode 100644
index 000000000..5535ab9ae
--- /dev/null
+++ b/public/css/components/video.css
@@ -0,0 +1,69 @@
+/* GROUP COMPONENTS / VIDEO
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    A video container for embedding videos like YouTube, Vimeo, etc.
+
+*/
+/* HTML Example...
+
+    <figure class="c-video">
+        <iframe src="https://www.youtube.com/embed/POgIsLeWGGQ?si=uG-8hz4u1HRebJsM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
+        <figcaption>Watch how to build a simple nav with a Structured Collection</figcaption>
+    </figure>
+
+*/
+@layer components {
+    .c-video {
+        position:relative;
+        margin-inline: auto;
+        &:not(article > :last-child) {
+            margin-block-end: var(--spacing-l-2);
+        }
+        + * {
+            /* Push the next element away instead because of collapsing margins */
+            padding-block-start: var(--spacing-l-1);
+            &:is(h2, h3, h4) {
+                /* Increase the distance if it's a heading */
+                padding-block-start: var(--spacing-l-2);
+            }
+        }
+        &:not(:is(h1, h2, h3, h4, p) + &) {
+            /* A large margin except where it follows a heading or a paragraph */
+            margin-block-start: var(--spacing-l-2);
+        }
+        aspect-ratio: 16 / 9;
+        iframe, video {
+            width: 100%;
+            height: 100%;
+            border: 1px solid var(--color-black);
+            border-radius: var(--border-radius-s);
+            box-shadow: var(--box-shadow-medium);
+        }
+        &:not(:last-child) {
+            margin-block-end: calc(var(--spacing-l-1) + var(--spacing-s-4));
+        }
+        img {
+            margin-block-end: 0;
+            border-radius: var(--border-radius-s);
+            border-bottom-left-radius: 0;
+        }
+        figcaption {
+            display: inline-block;
+            padding: var(--spacing-s-3) var(--spacing-s-1);
+            background: var(--color-gradient-full-light-2);
+            font-weight: var(--font-family-ui-weight-normal);
+            border-radius: var(--border-radius-l-1);
+            border-top-right-radius: 0;
+            border-top-left-radius: 0;
+        }
+    }
+}
+@layer scope {
+    .c-entry-content:has(.c-video:last-child) {
+        /* We need this if the video is the last item in the entry-content because of collapsing margins */
+        padding-block-end: var(--spacing-l);
+    }
+}
\ No newline at end of file
diff --git a/public/css/objects/badge-heading.css b/public/css/objects/badge-heading.css
new file mode 100644
index 000000000..a6ea049eb
--- /dev/null
+++ b/public/css/objects/badge-heading.css
@@ -0,0 +1,57 @@
+/* GROUP OBJECTS / BADGE HEADING
+=================================================== */
+/* Notes...
+
+    What does it do
+    ---------------
+    - A container that houses an heading e.g. h1, and a badge such as the Pro Feature badge
+
+*/
+/* HTML Example...
+
+*/
+
+@layer objects {
+    .o-badge-heading {
+        position: relative;
+        display: flex;
+        align-items: center;
+        gap: 2.1rem var(--spacing-l-1);
+
+        > :has(img) {
+            flex-basis: 6rem;
+            flex-shrink: 0;
+        }
+        /* --mq-grid-before */
+        @media (width < 1000px) {
+            flex-wrap: wrap;
+            &:has(h1) {
+                padding-block-end: var(--spacing-l);
+            }
+            h1 {
+                order: 1;
+                padding-block-end: 0;
+            }
+        }
+        /* --mq-grid-after */
+        @media (width >= 1000px) {
+            justify-content: space-between;
+            align-items: unset;
+        }
+    }
+}
+@layer scope {
+    .o-badge-heading {
+        /* --mq-wide-after */
+        @media (width >= 1650px) {
+            > :has(img) {
+                /* Pull it out of the flow to let the layout breathe */
+                position: absolute;
+                right: -2rem;
+                top: -4rem;
+                /* Increase */
+                inline-size: 6rem;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/objects/collapsible-side-menu-with-checkboxes.css b/public/css/objects/collapsible-side-menu-with-checkboxes.css
new file mode 100644
index 000000000..2a1bf6191
--- /dev/null
+++ b/public/css/objects/collapsible-side-menu-with-checkboxes.css
@@ -0,0 +1,87 @@
+/* GROUP OBJECTS / COLLAPSIBLE SIDE MENU WITH CHECKBOXES
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    - Use a checkbox to hide the following submenu using :has
+
+*/
+/* HTML Example...
+
+    <nav>
+        <ul>
+            <li>
+                <label class="o-toggle-subnav">
+                    Getting Started
+                    <input type="checkbox">
+                </label>
+                <ul>
+                    <li>
+                        <a href="/">Requirements</a>
+                        <a href="/1">Quick start guide</a>
+                        <a href="/2">Upgrade guide</a>
+                        <a href="/3">Installing</a>
+                        <a href="/4">Updating</a>
+                        <a href="/5">Deploying</a>
+                    </li>
+                </ul>
+            </li>
+        </ul>
+    </nav>
+
+*/
+/* :root { <-- I've added this to elements so we can use it for anything in future
+    interpolate-size: allow-keywords;
+} */
+
+@layer objects {
+    .o-toggle-subnav {
+        cursor: pointer;
+        input {
+            /* START SCREEN READER TEXT
+            --------------------------- */
+            clip: rect(1px, 1px, 1px, 1px);
+
+            position: absolute!important;
+            overflow: hidden;
+            width: 1px;
+            height: 1px;
+            /* END SCREEN READER TEXT
+            ------------------------- */
+        }
+
+        outline-offset: -3px;
+        &:has(input:focus-visible) {
+            outline: 3px solid var(--color-focus);
+        }
+
+        + ul {
+            overflow: clip;
+            /* linear-out-slow-in */
+            transition: height 0.25s cubic-bezier(0, 0, 0.2, 1), visibility 0.5s, padding 0.25s cubic-bezier(0, 0, 0.2, 1);
+        }
+        &:has(input:checked) + ul {
+            padding-block: 0!important; 
+            height: 0;
+            visibility: hidden;
+        }
+    }
+}
+@keyframes fade-out {
+    from { opacity: 1; }
+    to   { opacity: 0; }
+}
+@layer utilities {
+    .o-toggle-subnav {
+        + ul {
+            padding-block: 0.95rem 0.25rem;
+            
+        }
+        &:has(input:checked) + ul {
+            .o-current-menu-item::before {
+                animation: 0.2s linear fade-out both;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/objects/entry-content.css b/public/css/objects/entry-content.css
new file mode 100644
index 000000000..8af8151c1
--- /dev/null
+++ b/public/css/objects/entry-content.css
@@ -0,0 +1,37 @@
+/* GROUP OBJECTS / ENTRY CONTENT
+=================================================== */
+/* Notes...
+
+    What does it do
+    ---------------
+    - A simple container to just emulate the layout of .c-entry-content
+    - We need this for other content in the central column that should follow the same layout boundaries of the entry content, e.g. Docs Feedback
+
+*/
+/* HTML Example...
+
+    <div class="o-entry-content">
+        <div class="c-feedback-meerkat">
+            <h2>Docs Feedback</h2>
+            <p>Submit improvements, related content, or suggestions through Github.</p>
+            <a href="https://github.com/statamic/docs/issues/new" class="c-btn c-btn--1">Betterify this page</a>
+            <img src="/img/meerkat.webp" alt="Meerkat" width="150" height="278">
+        </div>
+    </div>
+
+*/
+
+@layer objects {
+    .o-entry-content {
+        max-width: var(--max-width-content);
+        /* --mq-nav-open-before */
+        @media (width < 1100px) {
+            margin-inline: auto;
+        }
+        padding-inline: var(--spacing-l-1);
+        /* --mq-wider-entry-content-after */
+        @media (width >= 1500px) {
+            padding-inline: var(--spacing-l);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/objects/scroll-shadows.css b/public/css/objects/scroll-shadows.css
new file mode 100644
index 000000000..8d4580b00
--- /dev/null
+++ b/public/css/objects/scroll-shadows.css
@@ -0,0 +1,60 @@
+/* GROUP OBJECTS / SCROLL SHADOWS using background-attachment: local;
+=================================================== */
+/* Notes...
+
+    What does it do
+    ---------------
+    - Adds a shadow when the container has overflow, using background-attachment: local;
+    - https://css-tricks.com/books/greatest-css-tricks/scroll-shadows/
+
+*/
+/* HTML Example...
+
+    <ul class="o-shadow-container-vertical">
+        <li>Test content</li>
+        <li>Test content</li>
+        <li>Test content</li>
+        <li>etc.</li>
+    </ul>
+
+*/
+
+@layer objects {
+    .o-shadow-container-vertical {
+        overflow: auto;
+
+        --shadow-color: light-dark(hsl(0deg 0% 0% / 5%), hsl(var(--color-body-background-hue, 0) 50% 60% / 15%));
+        --shadow-color-subtle: light-dark(hsl(0deg 0% 0% / 3%), hsl(var(--color-body-background-hue, 0) 50% 60% / 8%));
+
+        background:
+        /* Shadow Cover TOP */
+        linear-gradient(
+            var(--color-body-background) 30%,
+            transparent
+        ) center top,
+
+        /* Shadow Cover BOTTOM */
+        linear-gradient(
+            transparent,
+            var(--color-body-background) 70%
+        ) center bottom,
+
+        /* Shadow TOP */
+        radial-gradient(
+            farthest-side at 50% 0,
+            var(--shadow-color-subtle),
+            transparent
+        ) center top,
+
+        /* Shadow BOTTOM */
+        radial-gradient(
+            farthest-side at 50% 100%,
+            var(--shadow-color),
+            transparent
+        ) center bottom;
+
+        background-repeat: no-repeat;
+        background-size: 100% 40px, 100% 40px, 100% 15px, 100% 15px;
+        background-attachment: local, local, scroll, scroll;
+    }
+}
\ No newline at end of file
diff --git a/public/css/objects/toc-js-scroll-spy.css b/public/css/objects/toc-js-scroll-spy.css
new file mode 100644
index 000000000..2c3b1d60f
--- /dev/null
+++ b/public/css/objects/toc-js-scroll-spy.css
@@ -0,0 +1,65 @@
+/* GROUP OBJECTS / SCROLL DRIVEN SCROLL SPY TABLE OF CONTENTS
+=================================================== */
+/* Notes...
+
+    - Use JS for now until scroll-driven-animations are more widely supported
+    - For scroll-driven version see /objects/toc-scroll-spy.css
+
+*/
+/* HTML Example...
+
+    <article id="content" class="c-entry-content js__scroll-spy-toc__timeline"> <-- .js__scroll-spy-toc__timeline here watches this section
+        {{ template_content }}
+    </article>
+
+    <section class="o-scroll-spy-timeline">
+        <ul class="o-scroll-spy-timeline__toc js__scroll-spy-toc"> <-- this needs to wrap around the toc
+            <li><a href="">Overview</a></li>
+            <li><a href="">Asset Browser</a></li>
+            <li><a href="">Asset Actions</a></li>
+            <li><a href="">Asset Fields</a></li>
+            <li><a href="">Metadata</a></li>
+            <li><a href="">Containers</a></li>
+            <li><a href="">Blueprints</a></li>
+            <li><a href="">Ordering</a></li>
+            <li><a href="">Drivers</a></li>
+            <li"><a href="">Frontend Templating</a></li>
+        </ul>
+    </section>
+
+*/
+@layer utilities {
+    .o-scroll-spy-timeline__track {
+        scroll-margin-top: 4em;
+    }
+
+    /* ul*/
+    .o-scroll-spy-timeline__toc {
+        --item-padding: var(--spacing-s-5);
+        &, ul {
+            gap: unset;
+        }
+        li {
+            position: relative;
+            &:not(:has(ul)) {
+                padding-block-end: var(--item-padding);
+            }
+            ul &:has(> .js--scroll-spy-toc-active)::before {
+                content: '';
+                width: 3px;
+                height: 100%;
+                background: var(--color-pink-light-1);
+                position: absolute;
+                z-index: var(--z-index-below-body);
+                top: 0;
+                left: calc(0% - 1.4rem);
+            }
+            /* An option to hide the timeline position. You may want to do this because many headings are on the page at once, which messes up the TOC position. To use this add {{ push:scope_classes }}u-no-scroll-spy-toc-position{{ /push:scope_classes }} to the template */
+            .u-no-scroll-spy-toc-position & {
+                &::before {
+                    content: unset;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/objects/toc-scroll-spy.css b/public/css/objects/toc-scroll-spy.css
new file mode 100644
index 000000000..cba04c8f6
--- /dev/null
+++ b/public/css/objects/toc-scroll-spy.css
@@ -0,0 +1,132 @@
+/* GROUP OBJECTS / SCROLL DRIVEN SCROLL SPY TABLE OF CONTENTS
+=================================================== */
+/* Notes...
+
+    - Based on https://codepen.io/kevinpowell/pen/GgKrzNL, which is from this conversation: https://www.youtube.com/watch?v=kOwLG3Nc5eM
+
+*/
+/* HTML Example...
+
+    <section class="o-scroll-spy-timeline"> <-- this needs to wrap around both the items and the toc
+        <div class="articles">
+            <h2 style="--ti-name: --1" class="o-scroll-spy-timeline__track">Overview</h2> <-- can be any element; doesn't need to be a wrapper
+            <p>Stuff here</p>
+            <article style="--ti-name: --2" class="o-scroll-spy-timeline__track">
+                <h2>Stuff here</h2>
+            </article>
+            <article style="--ti-name: --3" class="o-scroll-spy-timeline__track">
+                <h2>Asset Actions</h2>
+            </article>
+            <article style="--ti-name: --4" class="o-scroll-spy-timeline__track">
+                <h2>Asset Fields</h2>
+            </article>
+            <article style="--ti-name: --5" class="o-scroll-spy-timeline__track">
+                <h2>Metadata</h2>
+            </article>
+            <article style="--ti-name: --6" class="o-scroll-spy-timeline__track">
+                <h2>Containers</h2>
+            </article>
+            <article style="--ti-name: --7" class="o-scroll-spy-timeline__track">
+                <h2>Blueprints</h2>
+            </article>
+            <article style="--ti-name: --8" class="o-scroll-spy-timeline__track">
+                <h2>Ordering</h2>
+            </article>
+            <article style="--ti-name: --9" class="o-scroll-spy-timeline__track">
+                <h2>Drivers</h2>
+            </article>
+            <article style="--ti-name: --10" class="o-scroll-spy-timeline__track">
+                <h2>Frontend Templating</h2>
+            </article>
+        </div>
+
+        <ul class="o-scroll-spy-timeline__toc">
+            <li style="--ti: --1"><a href="">Overview</a></li>
+            <li style="--ti: --2"><a href="">Asset Browser</a></li>
+            <li style="--ti: --3"><a href="">Asset Actions</a></li>
+            <li style="--ti: --4"><a href="">Asset Fields</a></li>
+            <li style="--ti: --5"><a href="">Metadata</a></li>
+            <li style="--ti: --6"><a href="">Containers</a></li>
+            <li style="--ti: --7"><a href="">Blueprints</a></li>
+            <li style="--ti: --8"><a href="">Ordering</a></li>
+            <li style="--ti: --9"><a href="">Drivers</a></li>
+            <li style="--ti: --10"><a href="">Frontend Templating</a></li>
+        </ul>
+    </section>
+
+*/
+@layer utilities {
+    .o-scroll-spy-timeline {
+        timeline-scope: --1, --2, --3, --4, --5, --6, --7, --8, --9, --10, --11, --12, --13, --14, --15, --16, --17, --18, --19, --20, --21, --22, --23, --24, --25, --26, --27, --28, --29, --30, --31, --32, --33, --34, --35, --36, --37, --38, --39, --40, --41, --42, --43, --44, --45, --46, --47, --48, --49, --50, --51, --52, --53, --54, --55, --56, --57, --58, --59, --60, --61, --62, --63, --64, --65, --66, --67, --68, --69, --70, --71, --72, --73, --74, --75, --76, --77, --78, --79, --80;
+    }
+
+    .o-scroll-spy-timeline__track {
+        view-timeline-name: var(--ti-name);
+        scroll-margin-top: 4em;
+    }
+
+    /* ul*/
+    .o-scroll-spy-timeline__toc {
+        --item-padding: var(--spacing-s-5);
+        &, ul {
+            gap: unset;
+        }
+        li {
+            position: relative;
+            &:not(:has(ul)) {
+                padding-block-end: var(--item-padding);
+            }
+            &::before,
+            &::after {
+                content: '';
+                width: 3px;
+                height: 101%;
+                background: var(--color-pink-light-1);
+                position: absolute;
+                z-index: var(--z-index-below-body);
+                top: 0;
+                left: calc(0% - var(--spacing-m));
+                transform: scaleY(0);
+                transform-origin: top;
+
+                animation: i-spy linear both;
+                animation-timeline: var(--ti);
+            }
+            /* An option to hide the timeline position. You may want to do this because many headings are on the page at once, which messes up the TOC position. To use this add {{ push:scope_classes }}u-no-scroll-spy-toc-position{{ /push:scope_classes }} to the template */
+            .u-no-scroll-spy-toc-position & {
+                &::before,
+                &::after {
+                    content: unset;
+                }
+            }
+            &::after {
+                /* This needs to be the same color as the background. It effectively makes the previous item's scroll spy indicator.  */
+                background: var(--color-pink-light-3);
+                @container style(--color-scheme: dark) {
+                    /* background: red; */
+                    background: var(--color-pink-light-2);
+                }
+                animation-name: i-spy-reverse;
+                top: calc(-100% - var(--item-padding));
+            }
+        }
+    }
+    /* GROUP COMPONENTS / SCROLL DRIVEN SCROLL SPY TABLE OF CONTENTS / ANIMATIONS
+    =================================================== */
+    @keyframes i-spy {
+        entry 40% {
+            transform-origin: top;
+            transform: scaleY(0);
+        }
+        entry 100%, exit 100% {
+            transform-origin: top;
+            transform: scaleY(1);
+        }
+    }
+    @keyframes i-spy-reverse {
+        entry 100%, exit 100% {
+            transform-origin: top;
+            transform: scaleY(1);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/scope/font-toggle.css b/public/css/scope/font-toggle.css
new file mode 100644
index 000000000..b0b62bb9d
--- /dev/null
+++ b/public/css/scope/font-toggle.css
@@ -0,0 +1,95 @@
+/* GROUP SCOPE / FONT TOGGLE
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    - Switches the font between sans-serif and sans using a radio button
+    - The radio button sets a local storage value which is then fetched on subsequent page loads
+        - uses font-preferences.js to store and fetch values
+
+*/
+/* HTML Example...
+
+    <div class="o-font-toggle">
+        <input type="radio" id="font-sans-off" name="font-toggle" value="sans-off" class="font-toggle__radio" checked="">
+        <label for="font-sans-off" class="font-toggle__sans-off">Sans Off</label>
+        <input type="radio" id="font-sans-on" name="font-toggle" value="sans-on" class="font-toggle__radio">
+        <label for="font-sans-on" class="font-toggle__sans-on">Sans On</label>
+    </div>
+
+*/
+/* GROUP SCOPE / FONT TOGGLE
+=================================================== */
+.o-font-toggle {
+    display: flex;
+    align-items: center;
+    /* Custom */
+    @media (width >= 1030px) {
+        padding-inline-end: var(--spacing-s-1);
+    }
+    svg {
+        font-size: 2em;
+        margin-inline-end: var(--spacing-s-5);
+    }
+    input {
+        /* Hide the radio */
+        display: none;
+        /* Gray-out labels that are not checked */
+        &:not(:checked) + label {
+            color: var(--color-gray-aa);
+        }
+    }
+    label {
+        padding: var(--spacing-s-4) var(--spacing-s-3);
+        font-size: var(--font-size-s-1);
+        line-height: var(--font-size-s-1-line-height);
+        cursor: pointer;
+        border: 1px solid hsl(0deg 0% 40%);
+        input:first-of-type + & {
+            border-top-left-radius: var(--border-radius-m);
+            border-bottom-left-radius: var(--border-radius-m);
+        }
+        input:last-of-type + & {
+            border-top-right-radius: var(--border-radius-m);
+            border-bottom-right-radius: var(--border-radius-m);
+        }
+        &:has(+ input) {
+            border-inline-end: 0;
+        }
+    }
+}
+/* GROUP SCOPE / FONT TOGGLE / SANS CHANGES
+=================================================== */
+:root:has(footer .o-font-toggle #font-sans-on:checked) {
+    /* Tweak text scale to compensate for a different font */
+    /* GROUP VARIABLES -- DECORATION -- TEXT -- SIZES -- OUTSIDE SCALE
+    =================================================== */
+    --font-size-m: clamp(0.9em, 4vw, 1.03em);
+    --font-size-m-rem: clamp(0.9rem, 4vw, 1.03rem);
+    /* e.g. >> Home > Lead Text */
+    --font-size-l-1: clamp(1em, 4vw, 1.12em);
+    --font-size-l-1-line-height: 1.55;
+    /* GROUP VARIABLES -- DECORATION -- COLORS -- THEME
+    =================================================== */
+    /* Make slightly lighter to compensate for a naturally heavier font */
+    --color-black-prose: light-dark(hsl(210deg 3.85% 16%), hsl(0deg 0% 90%));
+    --font-family-prose-weight-medium: 450;
+    --font-family-prose-weight-strong: 600;
+    --max-width-reading: 50.5rem;
+    --max-width-content: 50.5rem;
+
+    @layer scope {
+        .c-entry-content {
+            --font-size-s-1-line-height: 1.4;
+            --font-family-ui-weight-normal: 300;
+    
+            font-family: var(--font-family-ui);
+            font-weight: var(--font-family-ui-weight-normal);
+    
+            p, li {
+                color: var(--color-black-prose);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/style.css b/public/css/style.css
new file mode 100644
index 000000000..504085f5d
--- /dev/null
+++ b/public/css/style.css
@@ -0,0 +1,68 @@
+/* GROUP LAYERS
+=================================================== */
+@layer
+base,
+elements,
+objects,
+components,
+modifiers,
+utilities,
+plugins,
+ui,
+scope;
+
+@import 'base/variables.css';
+@import 'base/reset.css';
+@import 'base/elements/elements.css';
+@import 'base/elements/forms.css';
+@import 'base/elements/tables.css';
+/* Objects */
+@import 'objects/badge-heading.css';
+@import 'objects/entry-content.css';
+@import 'objects/scroll-shadows.css';
+@import 'objects/collapsible-side-menu-with-checkboxes.css';
+/* Use JS for now until scroll-driven-animations are more widely supported */
+/* @import 'objects/toc-scroll-spy.css'; */
+@import 'objects/toc-js-scroll-spy.css';
+/* Components > Global */
+@import 'components/skip-to-content.css';
+@import 'components/docs-header.css';
+@import 'components/site-footer.css';
+@import 'components/theme-picker.css';
+/* Components > Global > Navigation */
+@import 'components/nav/dots.css';
+@import 'components/nav/sidebar.css';
+@import 'components/nav/sidebar-advert.css';
+@import 'components/nav/toc.css';
+@import 'components/nav/breadcrumbs.css';
+/* Components */
+@import 'components/anchors.css';
+@import 'components/entry-content.css';
+@import 'components/buttons.css';
+@import 'components/search-form.css';
+@import 'components/logos.css';
+@import 'components/tiles-with-description.css';
+@import 'components/feedback-meerkat.css';
+@import 'components/tip.css';
+@import 'components/pill.css';
+@import 'components/pill-with-description.css';
+@import 'components/doc-tabs.css';
+@import 'components/pro-badge.css';
+@import 'components/icon-grid.css';
+@import 'components/panel-list.css';
+@import 'components/video.css';
+@import 'components/related.css';
+/* Components > Unique/Quriky */
+@import 'components/list-turtles.css';
+@import 'components/syntax-explainer.css';
+@import 'components/quirky.css';
+/* Components > Imagery */
+@import 'components/imagery/full-width-image.css';
+@import 'components/imagery/bordered-image.css';
+/* Utilites */
+@import 'utilities/animation-keyframes.css';
+@import 'utilities/utilities.css';
+@import 'utilities/hiders.css';
+@import 'utilities/label.css';
+@import 'torchlight.css';
+@import 'scope/font-toggle.css';
\ No newline at end of file
diff --git a/public/css/torchlight.css b/public/css/torchlight.css
new file mode 100644
index 000000000..d1df5da37
--- /dev/null
+++ b/public/css/torchlight.css
@@ -0,0 +1,341 @@
+@layer plugins {
+    pre {
+        &, /* code*/.torchlight {
+            border-radius: calc(var(--border-radius-l-1) / 1.125);
+        }
+        line-height: 2;
+        &:not(.c-doc-tabs &) {
+            margin-block-end: 1rem;
+        }
+        &:has(+ h2) {
+            /* e.g. >> /collections and /configuration */
+            margin-block-end: calc(var(--spacing-l-2) + var(--spacing-s-2))!important;
+        }
+        &:has(+ h3) {
+            /* e.g. >> /collections and /configuration */
+            margin-block-end: var(--spacing-l-1)!important;
+        }
+        margin-top: 1rem;
+        overflow-x: auto;
+        position: relative;
+        :is(h1,h2,h3,h4,h5,h6) + & {
+            margin-block-start: 0;
+        }
+        /* --mq-nav-open-after to custom */
+        @media (width >= 1250px) and (width < 1350px) {
+            /* Prevent the chance of the width of pre affecting the grid layout e.g. >> /quick-start-guide */
+            max-width: calc(var(--max-width-reading) - 1.5rem);
+        }
+    }
+
+    :not(pre, p, li, figcaption, table *, h2, h3, h4) > code {
+        border-radius: .25rem;
+        font-size: 15px;
+        padding: 1px 2px;
+        word-break: break-word
+    }
+
+    pre code.torchlight {
+        display: block;
+        padding-block: var(--spacing-m);
+        background: var(--color-code-block-background)!important;
+        font-size: .9rem;
+        /* Custom */
+        @media (width >= 768px) {
+            font-size: 1rem;
+        }
+        line-height: 2;
+        min-width: -moz-max-content;
+        min-width: max-content;
+        &:has(.tl-files-file) {
+            font-size: 0.9em;
+            padding-inline: var(--spacing-s-3);
+            background: var(--color-purple-light-2)!important;
+        }
+    }
+
+    pre code.torchlight .line {
+        padding-left: .75rem;
+        padding-right: .75rem
+    }
+
+    @media (min-width: 768px) {
+        pre code.torchlight .line {
+            padding-left:1.5rem;
+            padding-right: 1.5rem
+        }
+    }
+
+    [data-theme="olaolu-palenight"] .line-highlight {
+         /* e.g. >> /content-queries */
+        background: light-dark(hsl(0deg 0% 0% / 50%), hsl(0deg 0% 0% / 30%))!important;   
+    }
+
+    pre code.torchlight .line-number,pre code.torchlight .summary-caret {
+        margin-right: 1rem
+    }
+
+    pre .language-badge {
+        /* --tw-text-opacity: 1; */
+        /* color: rgba(255,255,255,var(--tw-text-opacity)); */
+        color: white;
+        display: inline-block;
+        font-size: 10px;
+        letter-spacing: .1em;
+        opacity: .5;
+        padding: .25rem;
+        position: absolute;
+        right: var(--spacing-s-2);
+        top: var(--spacing-s-5);
+        text-transform: uppercase;
+        -webkit-user-select: none;
+        -moz-user-select: none;
+        user-select: none
+    }
+
+    .torchlight summary:focus {
+        outline: none
+    }
+
+    .torchlight details>summary::-webkit-details-marker,.torchlight details>summary::marker {
+        display: none
+    }
+
+    .torchlight details .summary-caret:after {
+        pointer-events: none
+    }
+
+    .torchlight .summary-caret-empty:after,.torchlight details .summary-caret-end:after,.torchlight details .summary-caret-middle:after {
+        content: " "
+    }
+
+    .torchlight details[open] .summary-caret-start:after {
+        content: "-"
+    }
+
+    .torchlight details:not([open]) .summary-caret-start:after {
+        content: "+"
+    }
+
+    .torchlight details[open] .summary-hide-when-open {
+        display: none
+    }
+
+    .torchlight details:not([open]) .summary-hide-when-open {
+        display: inline;
+        display: initial
+    }
+
+    .torchlight.has-focus-lines .line:not(.line-focus) {
+        filter: blur(.095rem);
+        opacity: .65;
+        transition: filter .35s,opacity .35s
+    }
+
+    .torchlight.has-focus-lines:hover .line:not(.line-focus) {
+        filter: blur(0);
+        opacity: 1
+    }
+
+    .tl-files-name {
+        padding-left: 1.85em;
+        position: relative;
+        font-size: 1.05em;
+        color: var(--color-primary-text-color)!important;
+    }
+
+    .tl-files-name:before {
+        background-position: 50% 50%;
+        background-repeat: no-repeat;
+        background-size: contain;
+        content: "";
+        height: 100%;
+        left: 0;
+        position: absolute;
+        top: 0;
+        width: 1.25em
+    }
+
+    .tl-files-folder {
+        position: relative;
+        display: inline-block;
+        color: var(--color-purple)!important;
+        font-weight: var(--font-family-code-weight-normal);
+        /* Custom */
+        @media (width >= 768px) {
+            font-size: 1.15em;
+        }
+        /* The last line with a folder */
+        /* Commented out based on e.g. >> /extending/vite-in-addons */
+        /* :nth-last-child(1 of .line:has(&)) {
+            margin-block-end: var(--spacing-s-4);
+        } */
+    }
+    .tl-files-folder:before {
+        background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTc5LjIiIHdpZHRoPSIxNzkuMiI+PHBhdGggZD0iTTE1My42IDEzMS4yVjYwLjhxMC00LTIuOC02Ljh0LTYuOC0yLjhINzMuNnEtNCAwLTYuOC0yLjhUNjQgNDEuNnYtNi40cTAtNC0yLjgtNi44dC02LjgtMi44aC0zMnEtNCAwLTYuOCAyLjh0LTIuOCA2Ljh2OTZxMCA0IDIuOCA2Ljh0Ni44IDIuOEgxNDRxNCAwIDYuOC0yLjh0Mi44LTYuOHptMTIuOC03MC40djcwLjRxMCA5LjItNi42IDE1Ljh0LTE1LjggNi42SDIyLjRxLTkuMiAwLTE1LjgtNi42VDAgMTMxLjJ2LTk2UTAgMjYgNi42IDE5LjR0MTUuOC02LjZoMzJxOS4yIDAgMTUuOCA2LjZ0Ni42IDE1Ljh2My4ySDE0NHE5LjIgMCAxNS44IDYuNnQ2LjYgMTUuOHoiLz48L3N2Zz4=");
+        width: 1.5em;
+    }
+    .tl-files-folder::after {
+        content: "";
+        position: absolute;
+        left: 2px;
+        top: 12px;
+        block-size: 0.7em;
+        inline-size: 1.1em;
+        background: radial-gradient(circle at center, var(--color-yellow-light-1) 60%,transparent 100%);
+    }
+    /* Page preference is "dark" */
+    html:has(#color-scheme option[value="dark"]:checked) {
+        .tl-files-folder::before,
+        .tl-files-file:before {
+            filter: invert(1);
+        }
+        .tl-files-folder::after {
+            content: unset;
+        }
+    }
+    /* Page preference is "system", and system preference is "dark" */
+    @media (prefers-color-scheme: dark) {
+        html:has(#color-scheme option[value="system"]:checked) {
+            .tl-files-folder::before,
+            .tl-files-file:before {
+                filter: invert(1);
+            }
+            .tl-files-folder::after {
+                content: unset;
+            }
+        }
+    }
+
+    .tl-files-file:before {
+        /* background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTc5LjIiIHdpZHRoPSIxNzkuMiI+PHBhdGggZD0iTTE0Ni44IDM4cTIuOCAyLjggNC44IDcuNnQyIDguOHYxMTUuMnEwIDQtMi44IDYuOHQtNi44IDIuOEg5LjZxLTQgMC02LjgtMi44VDAgMTY5LjZWOS42cTAtNCAyLjgtNi44VDkuNiAwaDg5LjZxNCAwIDguOCAydDcuNiA0Ljh6bS00NC40LTI0LjR2MzcuNkgxNDBxLTEtMi45LTIuMi00LjFsLTMxLjMtMzEuM3EtMS4yLTEuMi00LjEtMi4yem0zOC40IDE1Mi44VjY0SDk5LjJxLTQgMC02LjgtMi44dC0yLjgtNi44VjEyLjhIMTIuOHYxNTMuNmgxMjh6Ii8+PC9zdmc+"); */
+        background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAxNSAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjUxODUgMTcuNzYxSDIuMDE4NDVWMS45NDg1NEgxMC42NDM1VjQuODIzNTRIMTMuNTE4NVYxNy43NjFaTTExLjM0MzMgMC41MTE5NjNIMC41ODkwMDFMMC41ODAwMTcgMTkuMTk4NUgxNC45NTVWNC4xMDQ3OUwxMS4zNDI0IDAuNTExOTYzSDExLjM0MzNaIiBmaWxsPSJibGFjayIgc3R5bGU9ImZpbGw6YmxhY2s7ZmlsbC1vcGFjaXR5OjE7Ii8+Cjwvc3ZnPgo=");
+    }
+
+    .tl-connect-wrap {
+        display: inline-block;
+        position: relative;
+        -webkit-user-select: none;
+        -moz-user-select: none;
+        user-select: none
+    }
+
+    .tl-connect-x-adjust {
+        margin-left: 3px
+    }
+
+    .tl-connect:after,.tl-connect:before {
+        border: 0 solid var(--color-purple-light-1);
+        content: " ";
+        display: inline-block;
+        height: 55%;
+        position: absolute;
+        width: 50%;
+    }
+
+    .tl-connect-h:after,.tl-connect-h:before {
+        top: 50%
+    }
+
+    .tl-connect-v:after,.tl-connect-v:before {
+        left: 50%
+    }
+
+    .tl-connect-left:before {
+        border-top-width: 1px;
+        left: 0
+    }
+
+    .tl-connect-right:after {
+        border-top-width: 1px;
+        left: 50%
+    }
+
+    .tl-connect-up:before {
+        border-left-width: 1px;
+        top: -5%;
+    }
+
+    .tl-connect-down:after {
+        border-left-width: 1px;
+        top: 50%
+    }
+
+    /* Copy button styles */
+    .copy-button {
+        position: absolute;
+        top: 0.75rem;
+        right: 0.75rem;
+        border: 1px solid hsl(0deg 0% 100% / 20%);
+        border-radius: var(--border-radius-m);
+        color: white;
+        cursor: pointer;
+        display: flex;
+        gap: 0.5rem;
+        padding: 0.5rem 0.75rem;
+        font-size: var(--font-size-s-1);
+        font-weight: 500;
+        transition: all 0.2s ease;
+        opacity: 0;
+        backdrop-filter: blur(8px);
+        z-index: var(--z-index-above-body);
+
+        svg {
+            fill: none;
+        }
+        
+        &:hover {
+            border-color: hsl(0deg 0% 100% / 30%);
+            transform: translateY(-1px);
+        }
+        
+        &:active {
+            transform: translateY(0);
+        }
+        
+        &.copied {
+            background: rgba(34, 197, 94, 0.05);
+            border-color: rgba(34, 197, 94, 0.5);
+            color: rgb(34, 197, 94);
+
+            .copy-icon {
+                display: none;
+            }
+
+            .check-icon {
+                display: block;
+            }
+        }
+        
+        .check-icon {
+            display: none;
+        }
+    }
+
+    /* Dark mode adjustments for copy button */
+    html:has(#color-scheme option[value="dark"]:checked) .copy-button {
+        background: rgba(0, 0, 0, 0.3);
+        border-color: rgba(255, 255, 255, 0.1);
+        color: rgba(255, 255, 255, 0.8);
+        
+        &:hover {
+            background: rgba(0, 0, 0, 0.5);
+            border-color: rgba(255, 255, 255, 0.2);
+            color: rgba(255, 255, 255, 1);
+        }
+    }
+    
+    @media (prefers-color-scheme: dark) {
+        html:has(#color-scheme option[value="system"]:checked) .copy-button {
+            background: rgba(0, 0, 0, 0.3);
+            border-color: rgba(255, 255, 255, 0.1);
+            color: rgba(255, 255, 255, 0.8);
+            
+            &:hover {
+                background: rgba(0, 0, 0, 0.5);
+                border-color: rgba(255, 255, 255, 0.2);
+                color: rgba(255, 255, 255, 1);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/utilities/animation-keyframes.css b/public/css/utilities/animation-keyframes.css
new file mode 100644
index 000000000..c9ad54bd1
--- /dev/null
+++ b/public/css/utilities/animation-keyframes.css
@@ -0,0 +1,20 @@
+/* If they're OK with animation */
+@media (prefers-reduced-motion: no-preference) {
+    @keyframes wiggle {
+        20% {
+            transform: rotate(-7deg);
+        }
+        40% {
+            transform: rotate(7deg);
+        }
+        60% {
+            transform: rotate(-4deg);
+        }
+        80% {
+            transform: rotate(4deg);
+        }
+        100% {
+            transform: rotate(0deg);
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/utilities/hiders.css b/public/css/utilities/hiders.css
new file mode 100644
index 000000000..6cf9190ed
--- /dev/null
+++ b/public/css/utilities/hiders.css
@@ -0,0 +1,71 @@
+@layer utilities {
+    /* GROUP UTILITIES / HIDERS
+    =================================================== */
+    /* Notes...
+
+        URL example
+        -----------
+        Home
+
+        What does it do?
+        ----------------
+        Hide things at different breakpoints
+
+    */
+    /* --mq-nav-open-before */
+    @media (width < 1100px) {
+        .u-hide-on-small-screens {
+            display: none!important;
+        }
+    }
+    /* --mq-toc-open-after */
+    @media (width >= 1100px) and (width < 1250px) {
+        .u-hide-on-medium-screens {
+            display: none!important;
+        }
+    }
+    /* --mq-nav-open-after */
+    @media (width >= 1250px) {
+        .u-hide-on-large-screens {
+            display: none!important;
+        }
+    }
+
+    /* GROUP UTILITIES / HIDERS / LIGHT/DARK DISPLAY MODES
+    =================================================== */
+    /* Notes...
+
+        What does it do?
+        ----------------
+        Hide things depending on light/dark display modes
+
+    */
+    /* Page preference is "light" */
+    html:has(#color-scheme option[value="light"]:checked) {
+        .u-hide-in-light-mode {
+            display: none;
+        }
+    }
+    /* Page preference is "system", and system preference is "light" */
+    @media (prefers-color-scheme: light) {
+        html:has(#color-scheme option[value="system"]:checked) {
+            .u-hide-in-light-mode {
+                display: none;
+            }
+        }
+    }
+    /* Page preference is "dark" */
+    html:has(#color-scheme option[value="dark"]:checked) {
+        .u-hide-in-dark-mode {
+            display: none;
+        }
+    }
+    /* Page preference is "system", and system preference is "dark" */
+    @media (prefers-color-scheme: dark) {
+        html:has(#color-scheme option[value="system"]:checked) {
+            .u-hide-in-dark-mode {
+                display: none;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/utilities/label.css b/public/css/utilities/label.css
new file mode 100644
index 000000000..d11547ff5
--- /dev/null
+++ b/public/css/utilities/label.css
@@ -0,0 +1,43 @@
+/* GROUP UTILITIES / LABELS
+=================================================== */
+/* Notes...
+
+    What does it do?
+    ----------------
+    Funky green labels e.g. "Hot Tip", "Recommended", etc.
+
+*/
+/* HTML Example...
+
+    <div class="u-label">Hot Tip!</div>
+
+*/
+@layer utilities {
+    .u-label,
+    .c-tip__title,
+    .hint-title,
+    .c-icon-grid__item__label div {
+        position: relative;
+        display: inline-block;
+        z-index: var(--z-index-above-body);
+        color: light-dark(var(--color-primary-text), var(--color-body-background));
+        font-family: var(--font-family-ui);
+        font-weight: var(--font-family-ui-weight-medium);
+        @container style(--color-scheme: dark) {
+            font-weight: var(--font-family-ui-weight-heavy);
+        }
+        &::before {
+            content: '';
+            position: absolute;
+            z-index: -1;
+            inset: 0;
+            background: var(--color-green);
+            rotate: 1deg;
+            border-radius: 2% 98% 2% 98% / 98% 2% 98% 2%;
+        }
+        /* Alternate colors for some tip types when there are multiple hints on the page to make things a bit more interesting e.g. /core-concepts */
+        :nth-child(even of .c-tip):is(.c-tip--best-practice, .c-tip--tip) &::before {
+            background: light-dark(hsl(256deg 100% 90%), var(--color-purple));
+        }
+    }
+}
\ No newline at end of file
diff --git a/public/css/utilities/utilities.css b/public/css/utilities/utilities.css
new file mode 100644
index 000000000..c68f0795a
--- /dev/null
+++ b/public/css/utilities/utilities.css
@@ -0,0 +1,73 @@
+/* GROUP UTILITIES / FRAMEWORK
+=================================================== */
+@layer utilities {
+    .qa-test {
+        border: 3px solid red!important;
+    }
+    /* Images without alt tags. Turn on when needed */
+    /* img:not([alt]) {
+        border: 5px dashed red;
+    } */
+    /* Components > Framework > Nav */
+    .no-js .u-js-only {
+        display: none!important;
+    }
+    /* Text meant only for screen readers. */
+    /* Components > Framework > Nav */
+    .u-screen-reader-text {
+        clip: rect(1px, 1px, 1px, 1px);
+
+        position: absolute!important;
+        overflow: hidden;
+        width: 1px;
+        height: 1px;
+        /* Needed if the text should be visible on keyboard focus */
+        &:focus {
+            clip: auto!important;
+
+            z-index: 100000; /* Above WP toolbar. */
+            display: block;
+            top: 0;
+            left: 0;
+
+            width: auto;
+            height: auto;
+        }
+    }
+    /* Custom */
+    @media (width < 700px) {
+        /* e.g. Sponsors on homepage */
+        .u-center-on-lower-mqs {
+            text-align: center;
+            justify-content: center;
+        }
+    }
+    .u-image-boost-with-hue-rotate {
+        filter: var(--filter-image-boost-1-with-hue-rotate);
+    }
+    .u-image-boost-with-hue-rotate-extra {
+        filter: var(--filter-image-boost-1-with-hue-rotate-extra);
+    }
+    .u-link-style-none {
+        &, * {
+            text-decoration: none;
+            color: inherit;
+            border-bottom: 0;
+        }
+    }
+    /* GROUP UTILITIES / FRAMEWORK / (NON CORE) / LINE CLAMP
+    =================================================== */
+    /* e.g. <div class="u-line-clamp" style="--clamp: 3;"> */
+    .u-line-clamp {
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+        overflow: hidden;
+        /* Stop padding ruining the clamp */
+        padding-block-end: 0;
+        -webkit-line-clamp: var(--clamp, 2);
+    }
+    .u-disable-animation * {
+        animation: unset;
+        transition: unset;
+    }
+}
\ No newline at end of file
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index a40d7f1ee..000000000
Binary files a/public/favicon.ico and /dev/null differ
diff --git a/public/favicons/apple-touch-icon.png b/public/favicons/apple-touch-icon.png
new file mode 100644
index 000000000..477eeff49
Binary files /dev/null and b/public/favicons/apple-touch-icon.png differ
diff --git a/public/favicons/favicon-96x96.png b/public/favicons/favicon-96x96.png
new file mode 100644
index 000000000..27790ef8b
Binary files /dev/null and b/public/favicons/favicon-96x96.png differ
diff --git a/public/favicons/favicon.ico b/public/favicons/favicon.ico
new file mode 100644
index 000000000..35d68bc70
Binary files /dev/null and b/public/favicons/favicon.ico differ
diff --git a/public/favicons/favicon.svg b/public/favicons/favicon.svg
new file mode 100644
index 000000000..d52687cdf
--- /dev/null
+++ b/public/favicons/favicon.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="92" height="92"><svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 92 92" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="SvgjsClipPath1009"><path clip-rule="evenodd" d="m-1.413-2.182h103.502v80.377h-103.502z"></path></clipPath><g transform="matrix(.883677 0 0 1.13838 1.249 2.48398)"><path d="m-1.413-2.182h103.502v80.377h-103.502z" fill="none"></path><g clip-path="url(#a)"><g transform="matrix(.799103 0 0 .666429 14.5211 11.7963)"><path d="m-20.624-17.021h130.663v97.553h-130.663z" fill="none"></path><g fill-rule="nonzero" transform="matrix(1.41613 0 0 1.31813 -19.3517 -8.47751)"><path d="m72.58 71.55c6.17-.45 8.91-3.42 9.61-10.07.55-5.17.75-7.76 1.02-12.94.32-6.18 3.46-9.74 6.5-11.39.91-.51.91-1.7 0-2.27-3.16-1.89-6.23-5.92-6.51-11.23-.27-5.08-.47-7.62-1.01-12.71-.76-7.16-3.09-9.47-9.26-9.93-18.58-1.07-36.86-1.07-55.45 0-6.17.46-8.5 2.76-9.26 9.93-.54 5.08-.74 7.62-1.01 12.71-.28 5.31-3.35 9.34-6.51 11.23-.91.51-.91 1.76 0 2.27 3.04 1.6 6.17 5.16 6.5 11.39.27 5.17.47 7.76 1.02 12.94.7 6.64 3.44 9.62 9.61 10.07 18.36 1.04 36.42 1.04 54.77 0z" fill="#191a1b"></path><path d="m68.43 66.49c5.46-.4 7.89-3.03 8.51-8.91.48-4.58.66-6.87.9-11.45.28-5.47 3.06-8.62 5.75-10.08.81-.45.81-1.5 0-2.01-2.8-1.67-5.51-5.23-5.76-9.94-.24-4.5-.42-6.75-.9-11.24-.67-6.34-2.73-8.38-8.2-8.78-16.31-1.28-32.76-1.13-49.07 0-5.46.4-7.52 2.45-8.2 8.78-.48 4.5-.66 6.75-.9 11.24-.25 4.7-2.96 8.27-5.76 9.94-.81.46-.81 1.55 0 2.01 2.69 1.41 5.46 4.56 5.75 10.08.24 4.58.42 6.87.9 11.45.62 5.88 3.04 8.51 8.51 8.91 16.11 1.11 32.36 1.25 48.47 0z" fill="#d4ff4c"></path><path d="m30.23 43.33c.6-.78 1.29-1.12 2.07-1.12.86 0 1.73.35 2.59.95 2.76 1.81 5.87 2.85 9.58 2.85 2.85 0 5.09-1.21 5.09-3.62 0-6.3-20.97-2.85-20.97-17 0-7.59 6.21-11.82 14.24-11.82 5.7 0 9.84 1.64 12.95 3.62.78.52 1.29 1.55 1.29 2.59 0 .6-.17 1.21-.52 1.73l-.95 1.38c-.69.95-1.47 1.38-2.42 1.38-.69 0-1.38-.26-2.16-.6-2.33-1.21-4.75-1.81-7.68-1.81s-4.83 1.64-4.83 3.37c0 6.47 20.97 2.93 20.97 16.66 0 7.68-6.21 12.43-15.71 12.43-6.04 0-10.44-1.81-14.5-5.35-.69-.6-.95-1.38-.95-2.16 0-.6.17-1.29.6-1.81l1.29-1.64z"></path></g></g></g></g></svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
+@media (prefers-color-scheme: dark) { :root { filter: none; } }
+</style></svg>
\ No newline at end of file
diff --git a/public/favicons/site.webmanifest b/public/favicons/site.webmanifest
new file mode 100644
index 000000000..8d7f0f21a
--- /dev/null
+++ b/public/favicons/site.webmanifest
@@ -0,0 +1,21 @@
+{
+  "name": "Statamic Docs",
+  "short_name": "Docs",
+  "icons": [
+    {
+      "src": "/favicons/web-app-manifest-192x192.png",
+      "sizes": "192x192",
+      "type": "image/png",
+      "purpose": "maskable"
+    },
+    {
+      "src": "/favicons/web-app-manifest-512x512.png",
+      "sizes": "512x512",
+      "type": "image/png",
+      "purpose": "maskable"
+    }
+  ],
+  "theme_color": "#000000",
+  "background_color": "#000000",
+  "display": "standalone"
+}
\ No newline at end of file
diff --git a/public/favicons/web-app-manifest-192x192.png b/public/favicons/web-app-manifest-192x192.png
new file mode 100644
index 000000000..9033d0966
Binary files /dev/null and b/public/favicons/web-app-manifest-192x192.png differ
diff --git a/public/favicons/web-app-manifest-512x512.png b/public/favicons/web-app-manifest-512x512.png
new file mode 100644
index 000000000..86152654e
Binary files /dev/null and b/public/favicons/web-app-manifest-512x512.png differ
diff --git a/public/img/Kinsta_Icon_Black.svg b/public/img/Kinsta_Icon_Black.svg
new file mode 100644
index 000000000..45b3116b8
--- /dev/null
+++ b/public/img/Kinsta_Icon_Black.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1080 1080"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clippath);}.cls-3{fill:#261e1e;}.cls-4{clip-path:url(#clippath-1);}</style><clipPath id="clippath"><rect class="cls-1" x="166.08" y="233.17" width="697.23" height="613.67" rx="93.21" ry="93.21" transform="translate(1029.39 1080) rotate(180)"/></clipPath><clipPath id="clippath-1"><rect class="cls-1" x="44.32" y="233.17" width="395.22" height="613.67" rx="93.21" ry="93.21" transform="translate(483.87 1080) rotate(180)"/></clipPath></defs><g id="Layer_1-2"><rect class="cls-3" width="1080" height="1080"/><g class="cls-2"><image width="492" height="404" transform="translate(455.67 62.87) scale(2.31)" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeoAAAGTCAYAAADnQFEzAAAACXBIWXMAAATEAAAExAE8zNSDAAAgAElEQVR4nO29y64kSZKe+Zv5ORGREdmV1VNA1aIJTCNn+AKNBjf1IFz0g/S8EBd8CoKL2XAGXHAxs6hhs0E0CU6SdcnKjMyIOMfduVAVU1ExvZqbX8z9/won7W5uZh5lv/8ioqoDVuIIDAsPdcf9fWGPf7fw3L9bfE3b5J+ufQGEEHI1jmc8btG5h+XXZM9zOgtEuizOrcJ8qhD/04MJOSGEbJdTRa/1+Np+XdexhlifJFSLBHqpOLeIshXef9l4Vd81nPvfNJ6LEELImlzTKZe2X0ywFwt1p0inBbokziVhFkFOCXGL6Fp+v7Kz/g+rno0QQh6ZJQK3VGCXbGu+vqVi3S1QZxXolDjnRDknyEtE9w9XCoEzp0wIITXWFOqe9WucI0mvYHcJVIdItwu0FWcdvhZx7hHlmuj+rVn+Xu3/b4tHXofDtS+AEEKuTq9Ynyq8dt0aQh7RI9bNQt0o0ssE2opzSphroiwC/H3Ddf64soP+vwCsVJhHCCF3wioVzwvP2yqsvSK9qmC3inVVXE5y0a0CnRJnK8wiytoRW1HOCXCLMP9wAaFlqJsQQno4pSBsiStuFelTfgjMqAl2UZwWu+gWgU6FtVPinHPKVnx/xID/zXzmx8z159b38v8UrocQQh6bSzvqNYW4tO0sgl0S61OFui7SvQKdE+cfzbyIshXdlAh/ytzHz2cW19+d9eyEEPJIrCXQ555vvaaIRULdLdKnCHRKnFuEWc+LGP8V0sKcE+vc+hb+0+IjA39a4RyEEHLfLBXppfOt60rzLcsRObFOilRFpNtddC4HbQU65ZxFnFPC/AkD/sqv+5QQazsPAJ/98m/MtX9R+/03rMt/XPl8hBDymCzJQ58ixr3bcttTy7l1ANJiPRPkk0Q65aJbBDonziVhtqL8GwQxBmIBTi3D7F/ipbDfPzSdIc3nE44lhJD7oDWXvTTEvVSkW6e1danrzK0DMBfrPqH+e7OtVaR1DvpbDE0CLeJshbkkylqMvy6INpAW39R+mv9R3JqGld6EELKEJYVaa4hyzz6l/UrzqeUJK9RP5qiym9akRDqVixaR/tZPv8cwE+ivMUz7a4H+U0KcRwz4AUFU/zK6Njd9wYCPfo3eT4vzG8yF+Y2a/95P9Q+C6Gkl+M+JdWPlGHZoQgghLa66N8xdE+ojnGboKTLrStdk9x8S24D5+bLnPwKDFutBbyhcTL5wzIp0KtRtXbR20Dq8/Ss1r8VZBPUDhklsZd0LBvwSQYTtdgDYq/kXDPiFupfX6QdEmtfic3H89+oeDhaOEUJIihZBzC0vDWOfY752HbV7iRCxbhHqfpEuuejfKHGWELcW6G/8vAi0FecPSpD1+m8QRFXWa5G1Yq0pifG+sM3da5nvKtsJIYSUhHpNkS7Nt2yvnadlWruniUiom/PSKZH+rZ/WRPo3SpxtDtoK9NcY8NkLcUqcv1JCrEX5LzAX6z3mop0TcEvNTf+5uBX4r5XtDHsTQojQKtZrOeicULfum1tumZbmIwbg+NScl845aSAt0jrULS5anPSvvDj/yQv0WwSBPnhhd+Ls/n7y4vzkr+lns/yCAcN0fW46GqEe1LLkjfW8oMXZbqu5aw1FmhBCSvS4aLuuV6B7RVrvM5hlvS537am89RH5nHUxX10qj0oPsNES7s6JtAj0J4Qwd06gP2LAeww4+mURZ2DAMxAtjxiwx+Bvc5gEVYRY3PXRL4sYfwDwE2IBFnFOuWm7Jlco9gcA7zPb3HMhhBAypybQernXPfcIdOoYISeqIsR6vibWLect1DGXeh0DcIJIS5h7wA9emHMC/RMGvFPOWsT51YvzUW0TsZYbtmIty28w4I1f3gN46484YMBPs4e2jNLPHxaUEUJIjlru9lSRXuuvdP0lsbaUnPlETlLa8tJAWqR/7YU3J9I6D/0R47SvFehXjPjBOGctzqm/lFgfMOArIFoeEDvpo99HOMcgGxRpQggpURLqc4v0obKt5x5SYg2khbsaAk8LdS3kDcTNsKxIi0D/pRdcEei3XpyfMUYu+ieM+Kog0EeMKIlzSqxFjJ/9/AFOoIEg0Ed1Dwc1v8cwOe1S72EfkB4e87VwDCGEPB5V15jZt1Wo1xDowSzr7aNZbrkHLdbAXKSb3DSQFuq0mwbSeelv1T4iviLSPyuR/oQBP3j3/OLFWlz0M8YprP2DF+09xsk9P/nluSCPPoQ94I0S6IOffwdM8+5xxdODmQLzgrFnP+0ZaavWMQohhBAgL1TncNIpx3xAXCwmy4fMebVo1wRbC7Qs50S66KrnklJy07luQXUTLHHT2kl/jxFfTyIexPoJI37yU3dxI569g975ZXjhhRLqPcZJmIEBb7xgiyg/Y8DOu+gjXLj8AJebPmLADk6Qd3AivUMQ772/Jy3eAJIO++Cdd5zbBr4C8EPiORJCyOPS4h5zoe+aSJeEWkR3NMtaMK1Ia7EG0iK9RLBLYe8sVqjLblqweelc4ZgW6c9eUHWo+2cz3WHEK8bJQY+Rkx7xDgNe/LK46eCkx0mg916cxR0/mWXrsLWz3vl7FPG2oW95Yl/8VMLkVqzfY97bmWuGRgghj8Y1RdqGrUekw91WpHOfqc8BM1+7v5JIZ7fFQt3qpoE2kf6EIRLpL3Bh7q+8i372zvkZI44Y8dmL9SFy1EGoD5PDHr1jDk76GePkqMVBW4E+eiEHYqEObaznTnrnl1/Mc5EnJ02/3vnlj2qfr8GmWIQQUhfqnEjr+R6BToW7tcDKVLtcK9IpwU6dQ/ZtISXEVVethbrPTVtsdfdbL55WpH/yzvgTRh/6dmHsJ4zePQcRFqE+KLHeK2f9xjvrnXLYRyPQTsSHKDQOOEG2jnqHINqAE2e9TdZprLB/BeBntfw1gD+q5dbfXoQQcj+sJdQt4pwS6pxI6/khMQ8zr68nJ9q1++521UGoT3XTAGZNsA4Vkd75PyjBHpVAH9W8CPLg53Vo3DXbGqcK71fvrp/heiyTgjNZ5x5BEGoR5xcElw243s2kUxMRaHliUlwmyzqk/QaxWP8CcXejFGtCyGNSEuyUOOv5pS7aTnMinRJoK9JAEGY9L+ex95Mytt2u+knt5Ki56T945yyjYH0NHfLGJNLPGH1Y2M1/wTAT6c9+OirBtgItfyLQOz99nsR4jFy1hLzFYbu88+BFvuyotZ924fOAFJ6JYEs1+Gez/MlP3wD4ST2792AYnBByr7TkoFuOaQl56/lWkbbzWrBzfyU7lRJ7bcFyIp2616qrdkLd46b/FqFIyg1VCVM85sT7RyXWLhw9ZkXaFYjtkBPpPXaTQI9KrEcvzDsl1lAh8GFy3cOUnxZRHtX8Tq3T4e7wm2mYqsGto3Zdkga0m5ZK8R/VMovJCCGPS02c9XKvUPeKtPztkRfrGinBhjm29COmyVXHxWRL3fQ7YMpLS/GYtKd+woifvQNOibQI9E7Na4F+gqsEd/vsqmJ98PIsjlnEWtpXS6EZ4ARaxq2WdQNC5fcRw1TdPaj/viA46BfMw99v4KrCxb3rvDXFmhByf6zhqE9x00tEWgt0SrCFHsG2Ql1z1i2uGk/Jk7S66e8QV3nbvPR7hJGvdnDNsnZGpLWbHvz8AVJA5tY/YYdXv70m1piJtSy7hyjz4pJ3Xrzd76Eg2uKgR3X/dt2rv0IR3h1Cs62dWf4KIU/NHDUh5HE5Z8i7V6T1PNAn0iLC+m+Js6656uEpGfYG2tw0AFXljSnkLXnpn7yLFkf9xt+IiOwnL8axm5YQ+A6Dd9WjEmjZPyXWcfg7VI+LMOvw96i+ENmmR9oapykm1y1PRLee+4y44EzcuBZsEXLmqQkhj0lvEdnSArKWULduhiUibafAXKTtdabGT9TOWrvpkrPuCH2nRshqc9OI3LSEvI8IvZN95Z3tk3fKLxjxMgm0E99hEmkn1M/Y4cWvPyixfpnmg0CPXsSloGzw27WzDi56jELfup219A+u21m/Qn4juXV76KEwXQhc8trWUcv8Exj6JoQ8Gi3h8JpIy9QKdqo/bivOsrxHWqhTIg2UK7VT11oqSNP7pM4jJJ20rJt3IRqHveftplvctIS8gUE1w5LQ95AQaC3Su8lNW7F2bno3E+hBCfeAUJAmzbdEsEWsg2hr9xw7bBvmFretRdqtC1n1V7j8NOCKzbSbfsa89zJCCLkfevPUKZHW8ymBbg156z8JR2vBlvd9SqRlPndt4qa1q84Jds5VZ/PRieXM8BE67A3E7abjSu+ym5bexl5hc9O6uns3+zsqsX7y617VdtfV6G4SaCjBlvNKyDsUk41+jzj07Vx0nKd2jz88g4N31rJGxrgG4o5QRLiBUFCmHfR7OLFmjpoQ8rgsKSLrzU3bfLQItsxrMS2JtL1O+8NBpiLcNVetw9yp+0+Gv51Q18LemjDoBopuWvrs3vmp7hZUN8HSPZCJQGvBDuLs3DVUGHxQgj1gZ0Rah751nnr00qzHtnbV3i9q3j2+4LBFmOPQ9wDtqqW4DHAiLeFvHfqmQBNCHpOc466FvPV8rso7J9TyxtYCnWs/nXLSpb8xM8256loIPBv+jh11KewdeiFDstJ77qadKOuQtxZll4eWkLUT4MGLdcplO7F+ggj1C4K7Do46hMXls2TkrUFNRaAPZn6cHowT54Nf1sIcXHUoJnP7x45aRFrC3xL6ppsmhDwWNYHW8z2OuuamtUjLVAt17Zp3ar5VrEu56lIIvBj+ro+cLGFvocdNH/38sxdJ66Y/e7F9o3LQVqwPXpwRrXMOW0Li4qhD96OuIE030QKke9IhWifSq0Phe/+g4iZbwUm/qOchxWTBUQ+zgrInv42hb0LI/VPLVae2txSQpZx0SqhtqFuLtHXOWkj1tewy8yWxHtDuqm0IvPjM5kJt89Ma3ac3gKKbFqGGctI25C1FZV+8WO9nghxE+ogn357aumzZV8TefU7cxtqtO0wPTbLXcZ5aRs/Soe8gqnHV9wHBde8Q56h3mAdR7GAehBDyWJQEWs+XQt65sHeueMyKdMrp5q5JRNoKcuqvVPldE2tLopjM5qdtJydCHPZ2RWQ/qIvQld5Qrvqg1unQ96jc8+jF+ikT+paQ9xFPSpifvLCHgrTRi70UlYX8dBjEw4m2ux4Jgx/VNUoR2cFMxTGLoMs6IFSDS456j3ToW3o0Y/MsQshj0BL21sstIe9SuDsV9g4R3bJI28/eZab6GvT5auHvFrFOrguO+nfmwn+PIar2/qC2Sdj7f0HowEMG3RAnLTlqaX51RGguBbhuQd9MblfC1mWRti57nNZJj2Y6dK6LysIY17p70X30xYXw9yuAo1r36h+gDqTIftZRy7KI9B6h8lvEmhBCHpMWgZZpa9i7RaRtuLt0bVqMRZxtLvqAtMOuOfZULjp1DdG+9Ry1RvLTwDzs7fKwsTtNuelnyBjSIeR99OL6GoWy47C3XpcSbUxV39pR76bPdZ2bxBXgOmcNhNx0qPse/FfulmqOWheUiUinQuDMURNCHoMWR90i0rmQdy03rQUbqIu0/UwRZy3YWqRzFeT686yjBuaCXaRNqL9FCIdLtXcp7H00F/ek3LS0qRa3+0WJ89xNhyZah6ni+2mad52fBLGW3s3EUUs3J3HIPYS/D16o5XpH9XDdP4FQCS4dnOg21JKnFlGW8LcgIfA9QhMtumpCyOORc9J6vhb+rlV569z0gFhEhVzIuyXkrlstaVddEuuWEHiVWKh/m/m1IUVkkp8GcmFvRDlf6bJzj7jyWhy13LQsS5ckUrFthVuLNJRwu+ZZQaylTfVROWr5fPlM6Qoldv6YxrAWVx16LwvNs8KjDU5aO2Qb+k5BV00IeSxaxbrmqHPtpnVbaVtEBpRFOiXGpb9DYppz0ylqYh2tnztqW0iWyk+LuLWEvUWs3ypH/aSmUvQlAq3D3/kmWvMQ+GDC35K7Fketey0DQscnMi8PJ1SCpx219AceBHiArgTXbakFW1BGCCGPRa+j1mLdmptOtZUuhbpLLlrO1yrWPeHvVJ66tOyFulRIJuj8tEbC3k+Ad87hYp4h3XiG9tShu04n1tL2+YBUW+icmw4iPRiHrcPfoepbnPUA3WtZ3JZa8tTh4bprDT2Tua8lFuZc6NtWf2tY+U0IeRxSjrHkpvV8i6NO9eFd6tTEXo/9ISD6kxJrLbZapE9x1TD7zES7pcOTOD/9G4RRtL5gwDOQqPYOg17IuhFDlJ92zjTkqnWFuHRY4oa4jJtgAU+QZlohVx2Hv51g76ALyo7QOesg0vKQdZV3iAjED1AqwN3jDblqixPpIQp7S6cnhBByn7TkW1MCredToe+aoxYnrYWy1Ge3/kxpp6Pnc256wNxRt+SjgblYd+Wp26u+/xmAP8KJtfRG9gwn1k+Q3rrmYe8nf4N76LGgpdI7iPXgBTX02R0LdDwMpg6HhzD4aHLV+hwS+hZnPagQuB6vOrSbjueDyMYP3O0Xmmhp3iBd+U0IIY/DGo66VEhmh6u0Ipn67JJI26kVafsZJdGGmaZC31XqQi2FZD+bm/4lgD8h5KeBVLW3uOrQ6YiMEy3uWY8hHR5EEFqZarfs3PQ8Vx1C4XJs7KpDkVqo+AZCj2XSW1noiSw8YHHEsl0XmmniIrFhJtLMUxNC7o813bSebxFqHerWTbFy15A6Z0qcU07auuoWZ43MNTW76iDUqYrvUiHZEQO+AfC9FzFhD1cB7gqwQtj7aBz13stiGJ5SQtBSCR46QXHh6pBzTjXlEpdtXfUBIe/thDs86DAf/9CQCm8n3ojy1vMHnavgDvuWqr8JIeQ+qIl1rqCsV6ht4Zh107nxpHN56JxIW1GO9aIuzkLKUVtxTon1tC521N9hwO8x4A8Y8Cv1YblCshcM+NqfMOSnQxhc+vzWYe+dF3ARZy3SEp4eJmGVrj9tnlq3j45FOrSvdgVlMjqXPm/o9MQ9dHH1+oHq0HcsyKGHMr1NF5gBIU+dQ/LbbKJFCNk+S0Vaz5fy07bKWjtpHfrOfbZuetWak7bi3CPSLY5a1qcKyvRzyYS+/xahYEzIFZK9Kke9V+J2UCLt3HPotvMpIdah8jsMpiFu2uabD1ORma4KTztt6fxkBxm0w9WW63bV4vr1sJf6AVvR1f1/hzB5mt30bAgh5NHoyU/L1LZr1i4410469YY9IohyyqFrkW4pIhsS8yWRhloG5jrRnKsu56i/BfARcSHZF38R6UIyETGdnw4V4eKm3ehWwxT+FoGWPxFnyWnrUbBS4e/UONbiqkXgZWStEF4vPXz3ECUffUT8oOWfix5dSwQZSIv3DvOqb7ppQsj9cI7Qd81Rl3LScg4t1i3to3NivdRVI7GuWaQB4GnWhtryEQPeFLa/escp8wDwjGG6hOdpn2Fy2a+Q/r6D2x4QqsVHhAI0qGnsqvUQlrto2/wvHBs6PkmHNAYMJic9qCcU5o6z5yY/VObIbz0pSGNBGSHk/ml10zKfctXBFsXFV7WwshVorSGlkHdJfHPbNalrKmtsXbSH9uZZgnQd+oI45C3C9YwhWrefBCw4agkzSyGZbuccHLaEy3Ve2brquOmVFmXbTEsK0uDPfYy+mPgLiIe6TD94WdLuOYysVRdiEWu6akLI/bJG0ywt0LUex+R4PYhGLQ9tHXNtn9Z8dC4E3k1ZqHNNs1zXoXF+GgDeYvCp/XkhmV6nxVpc7BAt6xB1CIfDTA8zFx07Z1kOxWhxsZoUlEn+PFSCA/MweMhNh+26KGwe6tbo3snopgkh98/S/LTMaydtex0T9HvXhrp3Zl1r2LsltN0S9taU1lebaLU7at006w3gm2aFZkzvlZPWSGgbCA5VhFt6AZOK8eCog3hrwZZfPLo3My3mwDiNdx2KyYIjhxLs+NdTcNJ79cBzVd/CcbqvtJPeq2OtcP9Ue+CEELIJWnOtre2orZNOibUVaJhzjGpaKhBLiXOrYCNxLUhsS22Xv45isr8D8I8tuytC06zwaF6UIIubdtt1s6zQTEtEUbtpWdZFX9rx6qZVYcjKEPqOnXYcDg857bjtdvgBoD8LCJXg7uGKIEsuPiZ22MC8DlEvS+hbMjCEEHJf5ESoJ/R9UOutm06d17rpVIrzFHHuDX9rzhT6rmGbZgHzEPATwsAWEvYWt6pD4gPCaFY6Rz1A2jtLCDxuzpUqEBv9NLjrOK+tuxOVcbL1g9YFZanK7xDuBuTh638+qbbU4qjtYBwUaULItmlxhS0V3zK1rlq3mc6d11Z1t7SNzgl2av7UMPdikQZKQi29kklnJ7oNtWbeNAtR06wBmMLco/9EcZbiYK2b1jlrGY5Sh8dD/9zuQR4Ru3AtyIAuHLOFaNJ9qNtP582loOwV4f60mxaR1g5aY5to2cpvgAVlhJB7oVesWyq+7frcOW2oW1eLW9GtiXNNlDUtjjp3rD1PMU+9zFFLZycp9gguW5pmvYETJ8lXh2ZZ0hY57rYziO+oBFqv1y54Ptb0qB783qyPR9IKIW89mlbo9ASTYO/NMhCGudTL82b3ofmaFusXUKQJIfeAiEzPPkezPifU1iHbc45q38Hsm3LRORFObUNm3opvzlGnWOSsnaT+ozr4bwD8yez1CQPe+vkXxJ2dCOI03/l52zQrF/YGnFgfEIrLdK44CHRwyfusow6Cm3bVWtjDr6swNGfIiQOYcugHv1b+WegcdRjEI/wz2pt5K9501ISQ+2GJSA9qXqa2gEwEV/bRYp1y0VbYU0K8pMIbndtzzyUXEi+2oQZy41F/n3jw0iuZ7vxEOjtJF1c55g5bX4JUWmMKk4voxuHueFk/FF1Qpr8MEf397MsZpk8OxWoh9B2OsSNphalUf4+I+/i27lr3WCZirau/pUKcBWWEkPtCi09JpG3YVx8nAqwFWnchCsQCn3PULWKcE1+YdSlatqVEOyXSSeEOQi0DcnxT/XUUo5tj7RFC4jrsHfoAD05a9wkuvZbpkLN0z6nFWcR6XvUdHLU4bMk9B0etv8hwjB6PWld+yzUAoQ31YO5XRNz+M0JiORX+BuioCSH3iNWRo1mfEmmoeRFoIHbIozle1h0xd9EpN90jzK2uOnW/JWddw/6wKeSov4UTb+nnGwi9kuV4h9DZSWhjPL9IKSgTFy376Dy0ds4Sdg756UG52vAjQDe3kjy17qJU56FD+DuINNT5bMcnI6A+F2pd2VELNgT+CjpqQsi9knKKen1JpAX9ZtRuWYuzFeRc6Dsltna5Jt45cufuIemkhWXFZLr70BZ2GCIhElesxVrfoHjag9qmxRpmf+2YRez30XIQZS3EItYjRujK89i9u+uweWpx0kBqNK12Rw2wpzJCyL1hhbll/9S+NfFNCXZJoNGwrmV/mG2tLBHxE9tRa3TY+y2cID15MQbiplgiYruZWMfCnepm1AnlELnpOPQdfghAHQ+1bIe01J9hc+CH6Frc2r354ZErKEstp4a9ZFEZIeQxKDno0jEybfmr7Vvarj/PfrZeZ0U7JcCLRDnFekL9HjbUW3Pd7ia0WGuhDY9HiszCUhDi0FxKPvtoHngQWJ3fTn9J1nUDcR/fesQsLdyhJzMYAQ9NtkSYZV4X1VGkCSGPQaqYrEZJXFGYrx1vt6f2tetarnN11hNqIBSN6YKrMKpWECftqgEn1u54QIu1ntfiLcenctQ6zy1IH96DOq+uMg/FYroQLd7fhr7DNchVDrO8dK3yW4s189SEkPuiVYhL+9qis5Iotzptu39qHon51HLunKuK9jpCbQfisLjKbkdKcO0++8SDCs528L24BldtXXA4LuWetSimv/i4WVZw7rn21BK80fcSLwdct6IBSRcwT00I2T65ZlmyzbrpksPWyyGuGpZrDrvVda81n2IVwc51gJnnl376imH6e99wnAzMYYkrpcWbhlA1/BrtkI/mmHl/NbGAyzlTzbgwbY2vbUQcCtfnOkw/AMKxozovMB8ta5dYt248gxBCrk1OPIG0WOb2bdk/t1/qmnLzveKdOrbGyS67Xypeln9YREqgw3xwpPFvqLjZl3bUcRMtIP+FhM/b+XldoKadePgNFz5T9yIb56ndfikXbcPaLCgjhNw3KWddakut19vz5PbJiWuvo9b0CvYSus/T76h7SIXE8z8N0hc/RA83sDNTvX4wD3ec5gbv7LUwx+ceoqPDknbm2l1rJ22fpgywmbpu4QnI9ptOCCHbpOZ8gbxw1vZZS0xLLnzpuc7C6cHXD3C/dcRpS9Ms4Q3m+de4u9D5ekc8Fxf0D9ExwhgdIw47Ppcl7phlmNbpJlf5LzR1jSEaYF313vwBoeMTumlCyH3Q0tmJLKfcci6XnaJXvEuCWtqvJuq1853EMkf9DYCv/V+Ot4Vt/T8P5l9GqM6Ow+CpntAA7YjjrkrFgVunqz9Xzqiduf4SrKu2TzXlqu3nPSf2I4SQ7ZFy08is09tq61Ph7NIxLaHvszrhtbheOZMbzKPsquP21PNm8jvkfme1/ZoaZ8tuH91Zif4xYM8xIv/DIJzPRRt0D2V2NC3JTxNCyLaodVhi3bSsy/X1jcRyat3aeeQWN301Lu/hJNR8RF83pKVfT2k3bMPa6bPFnZkE161D2Kmp7KOf4ABdET5vU566TlZ+E0K2y5D4K+3Xcq7UfOmY1n1a15/yWWfh/EJda2OdEqpcDjqQXnfIHKc7KMkfn0KLeO24UHGeCn0z/E0IeQxaRTk1bTl3aj61rV07ytt7ruksnE8W4uEg46Et51eRd8UaF/yo5yfKdzWY86TPldoaXHV8b6Xwd+q+UutY+U0IuS9yeerec9j51h8BufU911CLEKwRdq9yGf/WKkLaZaaddEDE1opuGPCjheCAc7+zUrlpmDX6KebmBYa/CSGPxRrCeWru+ZyfcXZuUyJswVU8FGYeG9p255nnmu0Ip+GouCI8zbwATZ+vVLVIm50AACAASURBVNyW6s87VVzGfr8JIdugdRhLTf5NGb9fe4bITM23HHOz4qzJO+qP/gZ+vtCNWAedc8Q9MQDrhksh6jmxwM/D32XXb7sUbclRAwyBE0K2RK2ITO/Xcq6ez01N1+RSIl69h/spXeqt6xtmc/Pwef0sAe3mbbOvVO9pFvZQRgjZNi2CnTqmtm0Trvec3LZQpwbxuBSpJzMod3xICvswu+Ja5ydAWrhv+5shhJAcLbbp1sT31q4n4rHkoPduc82thNpXu1Sk6awJIY/FTQvltbk1oZ5/WaXqbelJLHX8IRHcjo9bcjW5a3B7l87LZlqEkMfhGsKbc+w32Ta6h+sIte6dbA3iivD+ogWp/i49jVxRWW3/HGymRQghvfS839cU26vmy2/NUbex7FHZyu90g6+lX4PtSjS3LbUMME9NCCFlLlHpfZM8nhTUOiQB6kET28xLV3nXRJl5akLIY5DrRop0sg2hbutlLGA7MpF1p5IboKO2v8A8NSGEkE62IdQ9aEE+5e5aSxFaP4/diRJCCFnA/Ql1K+e+896mW7meyh73GyKEEALKQJnU08mFvUu579pyLrTPEDghhDw89yXUKRe71h2uUQ0OtHUnClCkCSGEANiSUK9xpaWi/lwvtS2fm8tTL22mxTw1IYQQz3aE+py0NNkC5kLf8/Ra9l1jxDBCCCF3xXYlQETt1GZXpTx07/Gtgp/anmumxRA4IYQ8NNsV6h6W3GWP6PZ+fuuwl4QQQh6exxDqHKe48VLXo+foTpQQQshDcj9CfY6O6VLi29s+urStpzvR+/mmCCGEdPB4r/9zCHruKfY+XXYnSgghxPA4Qr30TnuabJW6E2WemhBCyAIeR6gtS5x1aqCP3nbWqfNw2EtCCCEZ+OrXrPU0zpWnJoQQ8nBsS6jPebW6WKxU0Z27liV5ag57SQghpMK2hPpc9AxvXntiPXlqC/PUhBBCDBTqNWCemhBCyJl4zNd+qUOSJful9j9l2EuAIXBCCCEA7lmoU8K6Vo9felCO3urxlj6+KdKEEEI89ynUpeEse1nyhEp56hrMUxNCCFHcp1BrWkPblzgX89SEEEI64St/bZinJoQQsiIUakttfOpUWH0o7Jc6pxXwVHeidt0TKNKEEPKAbFuo5eq1qPW0ic7tN6LN8baQ6na0Z/+UaJ9yPYQQQjbF473uRfR6BVSjezGrOfDS+t6BOwQ6a0IIeRgeT6h76BHvXie/ZDQtgCJNCCEPBoUaaH8KLfst6fO75bw7sJkWIYQ8IBTqGkvbYpcqvpfkqVv2I4QQcnc8zqt+jc5PNCkh7u1mtGWZIXBCCHlotifUa19xb0clp3SS0ivKuV7KKNKEEPIwbE+ot8AleykjhBBy19yXUK8d3q6dWw/KUWum1VNM1tNL2X19g4QQQgyP+Zo/VdBLxy/JU9dgV6KEEPKwPJZQWxHNtX0eMtt6WNKdKNCepyaEEPIQPJZQ16iJaE68S+HvEhxNixBCSAW+4pfS6rgvkacmhBByt1CohSU9iuVgnpoQQshKUKh7qYWrc9uYpyaEELIACnULuadUG5O6BeapCSGEFODrHThv+2sgn6fu7U4UYAicEEIejMsJ9ZuLfVKZwUxbaS0Ks5+z5PxAWpAp0oQQ8nDQUa9BaVCO1jx1DeapCSHkIaFQnwPmqQkhhKzENl/trYNT7Br27QlRnxL+Zp6aEELIArYp1C1ceqSp1idZ+mHAPDUhhBDD9oV6NNMUva5Z/lqOa+k/fElnKq1OmnlqQgi5a7Yv1OemlD/uFdrSsbUfBcxTE0LIQ8LXuuYc7amXdCfKPDUhhBDPfQr12ne1ZACO0jbmqQkhhDRyn0KdYk23XMtL93Qnyjw1IYSQAo8j1JpU72Q1IV9L6NfMU+eanz3mt0oIIXcJX+mX4Bx56lzzM4bACSHkrqBQL6UW7j6lO9Elw14CFGlCCLlDKNQ99LSRbt1e+4zWCnDmqQkh5C6hUF+DU9piW3Lumt8sIYTcBY/1Os/dbU+hWE8BWu9n9LrzXDMthsAJIeRu2K5Q54TvGndk89LXylMz/E0IIXfHdoV6S1xr2EtCCCGbh0JdYslgGkvO3ZOn7ulOlN8uIYRsHr7KUwzo613MHps7bo08tYXdiRJCyF1DoW7hlK5AmacmhBByAo8r1Dl321qkVioYazm+xlp56sf9hgkh5C7ga/wcQ1u2ft4l8tSEEEI2DYW6h9Z2zkvz2y2fw2EvCSHkoXg8oS7dca+7bn16a+apLcxTE0LIXXPbQj1gG+2DmacmhBByJvgK7+UUF53alstT9w57CTAETgghd8jtCrUWnUsXfJ3C0urw0vaWPr4p0oQQcpfcrlBvjSU/Jtbq+Yx5akIIuVvuQ6hFJE/JZ689ElaO1BMvhbyZpyaEkIeGr+9z0pqnzsE8NSGEPDy3KdRbqPQWag5ZLzNPTQghpJPbFOpWrllklvrsS+WpW50089SEELJ5tiPUW3LZNU7NU9fOtwPz1IQQcic89qu7dveD+lt6nkvnqXM/aBgCJ4SQTfKYQt1y11ZEe0PdPXnqXHeitXO2DHsJUKQJIWTDPKZQW9Z8Cmt2J9qbp7bswDw1IYRsnPsX6iUFXr1jVa/F2nnqlv0IIYTcNPf92l6jI5RWSgVipWEvmacmhBBS4L6F+hy0COuS9tJLh71syVM/gSJNCCEbhUJ9Ta417CUhhJDNQKG29OahS+53CaU8dW6/3L65nsr4rRNCyGbgK3sJPU/tXHnqGuxOlBBC7gIK9bm4xTw1IYSQzUGhXspaT+5aeWp+84QQsgm29bruKYyygnbOoqo18tS5c5wrT00IIWQTbEuot0pLnrrnPK1QpAkhZPNQqE+hZVCP3u3MUxNCCFFQqDWnPI1TuhdlnpoQQkgGvqrPwRrDXuby1L3diQIMgRNCyIahUJ+bXF66NOxlKy19fFOkCSFk01Cob5HWPHUN5qkJIWTzPK5Qj2a6BqeIKvPUhBBCEvA13cKg/ixLniDz1IQQQhq5PaG+tdGeTskh23MszVOXtjNPTQghd83tCfWtc4qo9pD7Znp6KgOYpyaEkI1DoS5xquiukacuhbxr18c8NSGEbJ7HekWv5XZrhVwlWsLdS4a9ZJ6aEELukscS6hLnfhI58S0Jd66ZVmk/gHlqQgi5IyjUOU7px/vc3YkyT00IIQ8DhXotlhR/LTn3qXnqHZinJoSQDcHX8zVoGfbyHHnqXNM3hsAJIeRmWVeovzLLb1c9++3RG+K+tWEvAYo0IYTcOOdx1NcW6LWqu3tZq4/uS3Unyjw1IYTcPAx9p7jFp1LKU+f2y5Fz17d434QQ8uDw1XxpbF567Tx1bXuumRZD4IQQcpNQqM/JkhD8pfPUDH8TQshNQ6Fem7WaaV1r2EtCCCE3BYX6VC5ZuLY0T93TnSj/RRBCyE3B1/I1uHSe2sLuRAkhZDM8nlBfuukW89SEEEJO4PGE+hy0jqa1lTw1/1UQQsjNwFfyrdA6yMcl8tSEEEJuBgq15VJPJJeXbhmvOkXpujnsJSGEbJbtCfVWmhS1jiW9xjlb3LOGeWpCCNkM2xPqW6VVjJmnJoQQ0sFjv44HM702p+ape4e9BBgCJ4SQG+exhbqHUf2txal56tL2lj6+KdKEEHLzUKiXkBPIUtj5HHnqlvU5mKcmhJBNcFmhrrm1Wy0UW/sprZGnLoW8macmhJC7ga/ipayd124Jdy/pTpR5akII2TQU6rXpFdrc/sxTE0IIwT0ItQjNuSq3S0/olAEzTnnyS87Z6qSZpyaEkJti+0L9KJyap66dbwfmqQkh5Abha/iWuFaeOlfExxA4IYRcHQr1ObhEnrq16deSYS8BijQhhNwIFOpLcMlhL3vz1JYdmKcmhJAbgkJ9KtfufnTtPHXLfoQQQi4GX8ElTnk6vQJuuxPNdS/aem7mqQkh5C6gUGuWuuNe4VzyOT156l5RzjXTokgTQsjVoVBfm60Me0kIIeQqPKZQXzuvvDalPHVuv9y+uZ7KHvNfCiGEXB2+fteip9lV7RznylPXYHeihBByc1CoL8kW89SEEEKuyu0I9Vp50S2GtbeSp76dfy2EEPIw8NW7Jpf+kZBz0OfKUxNCCLk42xTqS1z1WqJ7zjx1C8xTE0LIptmmUG8Z5qkJIYR0QKFem6VOnHlqQgghCS7/2qVD66d1NK5cnrq3O1GAIXBCCLkR6I8uwal5apjlU/LnLX18U6QJIeRmoFBfg1Pz1D3nXKOYjFEQQgi5Grch1PcmBMxTE0IIWQm+ci/FqeLNPDUhhDwkFOpb6Mmsp5/w1jx1aTvz1IQQshmuL9S3MqTipQU79+RP+UaWnLPVSd9beoIQQjbCdYR6B/fiv9WX/xqifSnhT32DpZB37bqYpyaEkJvicV+31wh5XypPXTtP6zLAEDghhFyZ7Qr1Na98VH9rsVaeurXpF/PUhBCyCbYr1K1cQlCX7rtWnrplf+apCSFkk9y/UAuPc6eONfPUOzBPTQghV6LtVfvrM1/FuVhbSK5ZZNYy7OU58tS5qnyGwAkh5CLQE12bWk55SXvpcw57CVCkCSHkgtyHUI9meo3PznFv3YkyT00IIRflPoSapCnlqXP75ci5a/4LIoSQs8LX7DU4ddjLtfPUte25ZloMgRNCyNmhULfS0ya5l1OHvbx0nprhb0IIuRgU6ktwb3lqQgghF+N+hbrWB/a1uUZf4D156p7uRG/puRJCyJ3BV+xWuHSe2sLuRAkh5CpQqNeCeWpCCCFngEJ9Ke49T81/SYQQchb4em3hXPnkU8/bOuzlJfLUhBBCzgKFek3O/TRzeemW8apTlK6Xw14SQshNsG2hvremQqfmqXvO2eKeNcxTE0LIVdi2UJ+DU8W/9ESZpyaEENIJX63X5tp56t5hLwGGwAkh5IJQqLfGqXnqnq5QmacmhJCrc36hfsSX+Cnh73PnqVvW52CemhBCLg4d9VZYI09dCnkzT00IITcJX6s1LtEn96lFZq156tp5WpcBhsAJIeRCUKjPxVpPNiW0OfFlnpoQQu6O+xTqW29f3ZOnblnfwpJztjpp5qkJIeRs3L5QD1hXeFN52tt/Css4NU9dO98OzFMTQsiZ2c4r9VLjN69Jz9PdWp469+OJIXBCCFmV2xbqWw9hn5NaM60leerWpl9Lhr0EKNKEEHIGbluo75lb6k60N09t2YF5akIIORMU6hJbDLe3sHaeumU/Qgghi7jd12lPuPeWOWee2nYnmutetPXczFMTQsjNcbtCTU7vTrQnT90ryrlmWhRpQghZFQr1NbmlPLVmre5ECSGEnMx6Qv1+tTNdj3P9bLnFn0OlPHVuv9y+uZ7KbvG+CSFkY9zmq/Q2r+oy3Fqeuga7EyWEkLPyyJK4DbaYpyaEELIaFOprc+95av4LI4SQk9jea/RSTbTWfjKX6E6099yXyFMTQgg5icsI9ZuLfMrj0pOnboF5akIIuRluz1EvDdHec/Mg5qkJIeRhuT2hfkSYpyaEEJKBr9BLcsk8deuwl7k8dW93ogBD4IQQcgYeU6jv8a5zeemW8aprtPTxTZEmhJCzcH+Sdclc9YDrVKGv9ZmteeoazFMTQsjZuC2hbr2aW7jqITO/xvl6YJ6aEELuGr4+L80l8tQt4W7mqQkhZBOsL9RvzfQeuYWxsnuuoTVPXdrOPDUhhFwFOupboiakuW/rlG9xyTlbnTTz1IQQcjIU6kck9a2XQt5LfkAwT00IIavAV2cvpSfWGv6+xTx17TytywBD4IQQsiK3I9S3cyXbYa08dWvTL+apCSHk4lAeb41L5alb9meemhBCrg6F+lrc4pNfM0+9A/PUhBCyApd7bT6KszpHM6218tSpb/sceepc73AMgRNCSDfb9TfXuPJbeVq1nPKS9tLnHPYSoEgTQshCbkN6rjmW9G08gZh76070UaIphBByBm5RptblHE2m1uIWn34pT53bL0fuB9gt3jchhNwo9/3KHMy0lVOfyi3kqW1eeu08dW17rpkWQ+CEENLFfQj1kjGXt37npw57eek8NcPfhBCyiK3LVTuXHjTjVO4tT00IIWQRjyPUt8oluhPtZWmeuqc7Uf7LI4SQJvi6PBe34OAvnae2sDtRQgg5mesL9bnCorcglOeGeWpCCLl7ri/UW+EaT+re89T810cIIVW2/aq8F9d8yTx167CXl8hTE0IIqbJtoe7l0sJ+Cz8kcnnpJU3aUufRcNhLQghZnccS6nvk1Dx1zzlb3LOGeWpCCDmZywo1nVQ/zFMTQshDw9fkuTlHX+PXzlP3DnsJMAROCCELua5Qs8eqy3Bqnrq0vaWPb4o0IYQsho56C9SE9Nx56pb1OZinJoSQk7hPob6FautbYI08dekczFMTQsjZ4SvyEtxSnrol3J3bxjw1IYRcnMsL9ZP62yojjmaNXb49auLLPDUhZF1S78Xbf1feII/kqI/RdNjYPxjmqQkhj80xM717riPUQ6dYtlWHt395vSK95Z8zzFMTQu6Hlnf3OYT8qj8Obuv1OA8ph5d6XqzDMUNmXnO+QrN1vsBbbE+tYZ6aEFLnGoJ2bJhfcq6rc1tCfWukfjhsmbX7/S7BPDUhpJ37eteuzG0L9TXyyGWxCteTFvHr/mNjv9+EkOuTew+e6nLPya1dT8RtC/UlsPny1Nd16PoSj7OzrPVPgP1+E0Jul/m7r+2Y2rabFtFLkH81fvAP56sLPaRcmHlvpn2cUiVY37ccGj9i2T/c22GN8alTMAROyL3Q+p7rKQJr/dzUdE0u9e6u3sPlg4+vcAJw7Ph0cbQDjo2PLh9iOaLkTOVzgGN2r/IZ0mds/8IPzXuexug/S74LWV56ntbtO8x/dD0DeFnw2YSQLbK2wVkSUt+UW79ssLHnZdyWnz71Ybe75r7w93lIXUFvOPyUjk1qtHR8Qgh5NGo567Xd9qU/4+ycT6htU6kBx1mo+DWxb/t5c82vyq47ffzyvMqYuC/Z4xJfe/le16G1oKwGC8oIeSRSb8FTctitorvGD4OWc9n7O9sb//yOendiG7a0iOfW5R/a0PFAj2auxVVrwV76dV0q7N0CC8oIIcvoyVn3imfpPW639WhHaXvPNZ2Fy/sZXWXdc3spwT5m1utj9D46uxyLsdsz5KaP2Tz1ASImcoYh2pY6Kp/vbudmgzKEkAdmicCW9jlm5mvnbdlnyTX1ftZZuJxQSxGZ5YBj5KxGHJWz7HsgQYiP03ypt7Igz+mz6GV3XU6+D377CHHZZSFuCe1LQVeOlNtOfbI+x0Ftt+v1upblEaEw7ADnhu1d2f0EXUC2T6wTWFRGyL1RcrA54WtxwjkXvEa90qnh+tXZSqBx/itrxFE55SNSuef4qHip1t1o2a27cxzM8pIvtOWo1pD4tf45beVfESHkEuTeh6W3Xct6e96WXHTL/M2znqMeccQewGd/1heU+os+erfnHtIrJF95nO1T+qzBHJP6UlNZ49iJypLsO6j9h2ifkKsezLH27HVO/eexiX9eCXZIu+knhOLCF9xWvp4Qcgo9bviU0HeLy24NkeeuuefNu9pb+rxeqKev7Fyh1tj5gOZOOP8PIch42l3nnHpc6d3npnt8t4SZW89rj01tO7cA1orKCCGPQOq9mBPTFpHNiXhu/9ZrLB1zFVFO0e+on9FXBAak3bV2zDYMnRP40X9B++mYUCwmohp8sb7O8MUGIR/UfsO0f/DX+sritXJsyFvrz5nT+7xqYnpJN722sKc6SEk57KUdsBBCbo1eR10KcfcIf0voO3Wta/wIKNF9nuWh72cvikcc8YIQ8s4hAmxfvnqduGqpqh6n5fDwgkgL85uWEjEt3EAQd3HTQbB12Dvsm36csWDbHxUHAEurvFuEKXVNJTfdcx5CCDmN3tBySTxT4lpz6rU3ZOm4HoHuiY32RV0TrJOjfsJxyi+m0GJWms8JNhAEWoeidYFY7KpD2Do471i09TmkKZZ21VDLQZyDSB8iwZZ9ZK79C9F7tlR912rU7Xl05fcRcSW3XpfqTnQw++ttOfgDgBDiaBXNnCCnlpFYXzqmxVGvNZ9ilTfius2zJHcrxV4A8Jrwl9atjskbP6q89REpF61FWLtlEe1jtH8s8OKmraseoj2tGOtrDsxFO0/P17YkBN5y/lNDylbIQ9vyfNMumOVlg6wQQrZFSmDtfM0110QcheNz57LHl/Yp3U/unKtaljah/g7A284z11yl7ozE7RlC4/m21McpDH5IPtTgpMO2eF6LenDTQZKtWAuHKMwd75FzwkvEaK3wtz1X6ZjcZ9a252j5J6rbzu+R7qWM1d+EbJ1WYdPzPX+5c6Q+L3Vs6npS58zdS+6+VmXd5lmpdaGDi/kDSvVSNs9LO1HWeeqDeeC5sLcWZ70vzP5hmv8tNE57wF9TPQ/dmqnWn5cTfS1YqfK11Drtakvhb7uf7JP6obGkmtxuaxFfdnxCyD1wqqM+Vbx7t9eu0R6bu8/cukUsE+pnJcApvsCOXxxf8D7za2WH4K71tnm1t/wI0I547pbDw9QSpPdzPln75dgra3GOiQVVfkDUBtDsozcXnFpXE9bSdZVy1voc9sfFHv1OmKFwQu6J3Julxb3ad7ee5ra3CnPpc1u2lX54tLBIvMtC/aEgVCk+AXjrb2aHI77AFZppdFeiIcTt9tmbB7zzYizbtUvem+XgrJ3oDt6Ha8ctcuOKzMJ2dwU2uK27Fw0SHroPDXu2dHlae4qpI60AntNVW0FOCefRHGOvWxe8pa59V1i2MOxNyD2RE7iSWFsRPhS2tYg6Ksu5/VPXn7uXlJi3UDwmCPWv/Y6/BPB9hzg/4TiFKe1IWTaM/Qo93GW8Tf+JeO/91Al6cMPwQitfinbTw2yfAXEG+jCdNSyPSoYHdQygRRqweepwJqDsqOVMPaxRTNYSqrYCbEVbL0PN1yrAT3HVut9vCjYhWyP3tjsm5muiaQU6JeAlZ10T8JbrKF1f6n5T99nKTPDTjvqbSZwC73DEE+KQ95OXxB3y3X1KqDrV6cm80xJ3kSnxDuJ7nPYJueqDF2XnkodJRkTAdYel0hhLNwI7wDXP0kF6abCVbpo1704UqH0hORnPHVVy1Pp8x8K6Fkc9mHWl3HRK7O35rJDncuIvic+yzfwo0oRsnRYRSwliSaAPiXVWlGsCXvrLXVvL/aW2pZ5Bi9UCIEL91zjiHwtu8J0S7jdelJ+NOO8Q2lK7+eMU9n7FcSommzejCoJtQ9n7aN8DRv/g3f+OGHHweWrtqCWkLRIkYivL2lHLvIi0hMaH6Org18q+cfvvsoved0QnNGs1zepx1LI+l5tObTuq4w5qPvdZellC37bq++fEfRBCbpUWx5gT65qbtW74UFhXcs6pfVtFPHVdpe2t95zax3IElhaT/YxjdOvv1TYn0IG9uhCRv1fottZxsywgVHmP5kHqau/Ri7U4ae2oQ5GYXKUWa40uJLNh7yDQQbQB7Yvr7aelnXZMyz/rVNFWfOb5uVLrehy17L9X2+z5jmabdePaSdv12j3b5b1alrC3TOmqCbl1esXazpcEsSSyKadd2jcntqlttWvL3ftS950lL9S/wBEfMeA9jvhZidMfAbyZjnYX/AXO0Uq3oi84+t7KnJMevLC+IHSIEgq/nD8G9jhgB+CA0cwDIw6QkY5H72Ldnwt0OzEdvNTKY3SfsVNrRi/Kcq5hmg5+epzOIh5f7l074zAetV7XKiglj536GlNNtrRQ2uP1OhtaTjndFketl+01tVZs2+KxEXEzLN3nN8emJmTr5EQpJXI5QSy5Z/m5L1P5ezXLel1q2z5xPjtfcumtf7XnlN0nL9T/H4APAP4LgHd+3e/hXqBAuomWuGQRY8kCD3BhbAl/S1FZXFgW/+1wwN675thFh7C3k3rtqF0gfIe9d7sDrMsMjyIEsSUbLeIf/wHBXUMJN2Bl0uZiU/vUkL1bxC/1tdp1LYNbpOICqfbUNtQtU+vIrdvWn29dNRCHwIEw5CWFmpAt0OoSS45apiXHa8V6j7y4pkQ258Jz63oEOLVcuv8u2kPfb3HEWxxno2e5gjL3v88IOWxpS20F21Z+63XOQQdxHv26/eS8JS/t5Ho3ybYI9eD3sw2MbD/cR4Sq7yDQrhBNi3OYjzPVVrDjz7jmyE/1YHxaVFFYlzq+dKwtStP77sx6vZ9sk1oHumpCtkxNrKyoWaFrCWlrgbbiXPqz51oi2vaaU/eV215z2RFzof73AL718x/gwt9fTWLmELG2oi1FVuKcpahMwt+Se47Fee6sg5t2D2znp/K/HUK4/IhxctDWTVuBDrIci7WEvd26ISnWewyT8yuJ9Fq0juPc4rxPcdX7zDZ7brtPSsRl/U7N2zw1EBw1wDw1IdumR6xzzjrlhEvu2YbDU/vURPyUv9R9966PaHfUtr9vHfp+8iJ8AHx+ulz5LZXaIsBalEd/plBY5v43Tm47uGjnnUWYD0qkS/IlflDy5GFE6tAcay7UcoSsyYn1GoLS+jtrjd68elx1TpTtPiKypf3k/xLaYesQuPzL/ClzLYSQW6dVpGW+RaitE07lqGu55pI49wq4vV4k1peeRxNP+Oc44l9hwG8ze9R6J5O21EBoopWq/N551ywFZQMOU/Mr7aZFxOXhaHGWwjJgj53fMvovIrjodJ9aRz918+6epPV0aHctIXAglKZpUbY13KUCsn6X3fM19oh0SehOEUHbXjp3LluE9pJYbwX7M1j5Tci2qL3Bam4yJX618HdKqFOOupbDbnHTJbHO3dOS5zLb3tc8Szo9kQ5OPvup5Kmf1Hyq8lsEe+9vOAh2EGUd5rZiHc9LUHaYXLSEp+cvdXmgO4R21mMk0NI8KzTHivPSuSIyaeC1hCW/r+TeSp2n2G29Fdr6+ZU6QbGkmmj1wj6/CbknekLf3rLmcAAAF+VJREFUMi2JpBZU65pz1dyp6u7ev5pYl5x27v6aaRfqd0YCfvYfpPvyfoErOLOV3/H0MOWp935eh8BFjJ0guz2Cax69q05VZwc3rUVC+k4Loe6461AJ5g7+qqRWXDfN0lnrVMg7P+KVOPLTaBG83GeUPluft/Z/pxZq16nD4ik3vUe+idY1C/QIITWWumk9nxK6mqNuddW5bS3h8dx1tAi0vb/SM8kSC7Xu79vhhCbXllry1KnKbykY22Wnh0m44Zd1EdmoloG9l2sR6RBsDevmge9hctFHf4zz29KWWtz10Ye/ByPOwDz0HdMW+u7x2z2OsvQ1p7ZJfllIOe3U/chxtWtLN087nWe4UDgh5JY5R+i7x1FbYdZtpq2wtxaZ2c/uddM5kU49k2xIPQj1X2Pejeh3OOIDhqkt9Vsc8b13zZKbTlV+v+DoHXgoKAth7yOecPBV3wflpo8zcT76fHRw0iLQ2lWHIDYQpDWEut009BWu+0Eb/NG6wxQtzoP6L9R6TJ9Wqs62IfGW30/l88WkOjtJbSt1eiLnlf1LoW7bm1lO3EuCbce51k75DVyzPiCu/CaE3Dotb7dc3rZXqK2rTuWkcx2blNpc59pe55x1Taxz91faJ7kuHfpuaaIFzB31AaHJ1YsXZslJP3mn/ISD3+Zcs7jro38Yx1mY202HyUk76dT56HlOdDeF2+MmWOKkh2gqIm3FWe5m3m2ofIprttVKy56lf+4pEc+53PjHk8Pmt49me6rlucQiSsKtr0U+Q76T1HG6eVZqmz6GbakJ2Tq1xNqaQp1z1TXhLjls6+Rz+euaw849g+qPnL5isu/gRtYqFZQdveOWgjLggB3GKOz9NLlmkfcDnrD3AW5X0b2fHLRzz+Ku95HvtRXH0of4EXvlpkNuWroQdaIf2kyPk5SLWOtwt85PB3EKAfU0sSyfWiSVCyfrTznFUcsx+8x+tsc02aaFOfVDpOS8U+tsnpoQshXWdNV6+ZQ8dUmsc2HwlGhbsU79iKiJdM5NVwlC/a+AahOtUkGZFuoXSBV4HP4+Kmetnfbeh7yP0UMPIn3w8htkNXbS2k1rVx+GsNwBkZMWkZaytrja25FqngVYOWqt+C7ttSQknhK9IbO9x1GXBvGw21Pn1gVjuX30Z9n72CGEvwkh98Aajjol0jKfqv6WeSvSr5jnrltz1qlQeGsYvBQOr+KE+p/jiN+p1/yvcOwqKBvhMsDS8Uno+euAV4w+R33AE1x3Ji5ffZjc9NxVx3loWRMy1HHY2/lmuWnni/d+fpjEOoS+g0OXILdIiSzni8gOCD2U2W1LKTW1ylFrcmXFWB9j99cCrsV7b/bJhcNtmDsXEh8L++7VOnm+Okd9rkI1QsglKOVka86zxVHnhDrnqK1g5/LXpTB36rpSAp17k9tnkNr3CKRC37/GEd8p6agVlDkRdiIt/jTkh0OTrN00F1y0ne4mGdaCOUxS6uq1h+kxili7fsm0i5bhL3ewIe/Ri/Xonboe2tKJwTz0rf+rRToOhc85VVRK4evcfvZrtiFrvc466oPZv5Snln1l22ti2Z5Ts0PIPR+QDnc/gWNTE3I/tIp1zlnX8sVLctW10bRKf7Wwdyk60PpcAFih/mvMK7+BuKDsOwxRV6LfI7hqQOqrg1DDO+kjDthjxDNCF6CpPyAOgY9whWPijePQt7SSDl/kfmozHaTdirXOU+t22CLO8/x0ruo73mZJOcul6HOVfgAMmX1SjlQ7aNlHO12bu645apjjZVtKvFPXpLsQZY6akHui11HLNCfUS111i5vuFelT3HSL2y4Uk+nKbyDOU4ub/jOOeOPnRy/MO9jwtwt7H7xIO697UAVlTgIGJZihstvJa+gdLDwWaWRl3bSMfb2Hazc9GIHW4pwag1o3+4rXITFfWjdHu/E1RLsk2LX+uoV52/N0+Dsn3FaE7TrbfahGh8Rf1Drb6QnAym9Ctklr2NdOS44656pToeuSqy5VgreIeIujrjntJmKhLhWUAcAfccQ7L0o/Ig5//wnzojJ4IZcBOI4YIlcN7PGEYRLseagbkLbKWjAk63z0NztMLnznfwbsIJnt/STU43TmMPCGFm3A9kYGPyefEnNabtqOwbyEWm9dOUG3x9mwsxbvmnDLvqk21jYnbV217u7VPg/p7xsIfX6z0xNCtk7OWbeIdWuuOlckZl11bl0tZ21/KPSEvXPPoUgQ6lJB2XcAPqhtLketl11vZKMRahn2ws0NeMI4rXOueoAMtjEon/aKwV9Z6I1bV3o75y4i4F75Yazq0PvYQRWQjZGrlpx0PNVu2k51Ey3L0r6+5bxdX5kh11a597jSeWrCrQUYyOep7b6pZVZ9E3JPNIV2kRfq3F9L+HuJWFuRrrlpu66Ui87ddzV3/YR/gSP+nREaW1AGxHnqTz4Engp/S446CLIshy5RDhjwDDfi1QDXNvrJL49+GQg9jmmxBkJGG949Q827ErFxctI6Rx2EeEyIcxz6FocdHlk+5F0qKGvlFGdda3fc+mNAn6fk1m24HIh7Eqs5alkvBWU2vy1irYvJ9H6lKAIh5FapCVct9F0KgbeIdeqvRaRzol26rpaQd4uQA0iNnvV/4ojfegEq5amBYRb+/glhyEpdVCZhbxmK8hnSZjl4raMXbXfmAa9wL2rboclOnVs/oL0XaeexdbW3DnHHYh3y04AV7HTVN8y2OUvc9SmOupWUuKUEV2ND3al9h8w+LY7aXl/KTdscNUWakFun9kYrCVRKoPVyLvzdk6tuFeySo6456SUinX0+9Z7JfukP+gcM+A1CnlrC32+9cH7Ecar+DsJ89PnoIRLr0MmIjEgd5mXIysE/uifoSnIRAvsrZuebdu28kz5gRGgzPaipddFxERughTr0VIZp3Zx4Xa+7Xqu6ueaqW3v7su7bjhNdE2V9vLjslKO2o2LJOhFrnaP+qeG6CSG3Skv4u5arroW/U+465YhzYfCUQKfmawVlpRB4SqRzIfKIWKhTeWoRoq9xxAdA9fvt2lS/BfBnL9JzV33w2eeDD3MfJqHUDvuNEuwR+8k1iVjLlUroe/A15gMOeFUFZMDBdz9qG3M5gd5h8NviJlnaUeuQd8lVx9v7WUugT6W3u86ccKdC30DcxlqHw7VTln20SMs5ofZlMRkhW6Ym2DmR1vOl8HerWLc47JpAp34k9Drr1A+V5LJ7FZby1Knw9x8BvPNu+vcY8HXGVf+AAU9enEc/3XnRFpEMYfDgqoPLcjcjvZmFm3Ned8SonPS8gEyEWaYHSN13+JFgHbUW5/BJ8bNZKtDnFOc1z51qsqWXD2abddBAWsRl3Wj20/lnEWntqhn+JuSeKIlSj6NucdU9oXC7vhbubhXr1P20PJdpXTr0rfPUQAh/6+pv6fzkm4Kr/kqJtHQ/It2RHBDcrPh2Pd3N/hvy0uK796oZlnbSMn/wjlqmoVOTebh7iK4n3PsrdG9kaWedfuRhr1t3z6n1dl3OSQPueeh2znrba2K9XvdipkC66lvC3xRpQm6Vagi3sH9OrEuuulWoc4JdC3UvEe2ai9b3mBLt5DOcC3Uq/P3vMUTDXgLAP2HAr7xIp1z1R0iRmXu1pkLg43Spwdc6Fxvk2Y1vLSNhSQX5COkEdI9xEuynyTmHKm9pP62LyELBV7lJFtQ1zvv4to83lu9bEedTsP9kSsVlNTet1z8hhLF12BuIQ9+68pvhb0K2Rotw19y0TK3gWWFMCbUsp4Q2V92dC3vvE+e1YfeWMHeLOM+eWxDq1mZa/wDgN3CC/RWQdNUfcYzaVf/sBVtaOO8gPYoButcxnTn+Agk+73xvZ7spFP4K6cDECnZoK73zgiztp/XZdegb/hp0ftq6ahF27SgD8batssO8Gru3QO0JcZHYq5q3OWstvBL2lmIyIBZs2ffH2k0QQm6Ukmi3hL71fM1Z97jr1mlO8Guh+ZaQd+75TOvyVd86/B2PpgV88NOUq5Z21V/hgJ/gXspfwb10f/Q5avhlG/p2ba2BF+/Ow1jSTqxfVW56xBgJdshHO4E+IO7gZKfEWcLujnl+OiXSmn1i3fKysstSEl/tfnP7p5ZfMtufEMLYqQIzIO5xrOSq5TiA4W9Ctk1RlBCLm0xrYl1yuj1569L2lFsvCXfrtZeeCwBgOAID/t7LjHbUv8MwCfV3GPB7DPgWA77HgB8x4DcY8BED/hIDfsaAtxjxCQOeMeI9BnzEiCeM0/TJi+iIEZ/9dOfLzsQZH7HDi8ozy7bXqYp7Nwm0dGYyRrnoMCqWdGgyTM46FK2NSpCPcL2gHTAXaRvO7m0jfUpVeC+9jj7Vlrl0LtvXtt2ntF1vs5/7ObMfEI+cpecZ/ibk1ujNT6eOOUWsD4n5HrGuLbe0py4Vmi1x3dP62FHb8HeLq5YK8O9xxDeALybDFAL/4DPG+kX7FrGLkq5PQlbZXfDoXfTgZXvwy9pRw8v13ueoX41Iz4vHwrhaIqRWpFsE+pIi3EJvM6uUe9bnsqKZctL6eB32BuaV3UBc3a1z1ECcpwbcvxdZ1iFvijQhW6bmpvXyJcS6JsKtAt0iwD1uOlrOh751UVmqqZbkqgGodtWuH/Cv4fLVH3DAR4x4hguF7wB88sfMxTo0xxLv+wIZ0OM4Oeudd9KvXpj1vEwPCEVkui9vmT9AhDZdRGZz1CHkGtb1Vn5fglSeubZ/blSq1Ll0RyVAeAY2d/+S2X9ECIXLvlZ47Xb3o8/BHDUht8oajtquOyUEviRvveQv9bk5Ma49g0roG8AU/gZCCFyE+rcYpqKy/xUD/uRD4L/24W8Jgf8RI77BgE8Y8DUG/Bkj3mDEVxjwk3fB7zDgUyYM/owBX1RI+2UqFpsLs2zRIr3zYqxdteSm9TwAn8d2Ye9cuLsU6t75bT3CeEl6rqs0hGTqPKn97braMjAXabv8s1n+s5pnnpqQLdJaUJUT7BaXmhNrK9Q14S5tz/0AyF1HS7jbTqf5cheiOVf9N/5E3wH4td9XCsu+B/ANnPt5iyPee1f9Hq647BNGvMNhctauuY67WFe57cLmX4yzfvLBcZmX3PNOTfdTzllEODhp13QrLiJ7mjnqeN5VK7vlZ6TZFcRcuMZYyjqkXKPkxHNhcHtu+ZdkQ9pAHPIG5q5ZjsuFvgGXYhEo0oRsjR5naZd7hTolljnBTolxTdBTx/eEvUv3mCQ46iOA/6PRVdcKy36BAZ8x4IN31VJcJs76LQb87AvM3iqH/YwBn/38qxffwQvwzjtscdWybu8F99ULtgiyFmYRU3HRBwx4gyDCORdt3XaKtcPb5xricS2Hnbq+3P7WIbe4agD4aJZtyJt5akK2xlpCLdM13fXS+dS09Q+J+dx9K0c9APh7zEm5aiD0VgbEhWV/CRei/AXcC/ctXHGZ5Kudsx7xFQ74GfAi61z1ATK69BFHH7z+jCPe+Kyx1G/vcfDFZAd/vBNtQMaydiLthtN0YqrdtHPcctdxMZl2zi1V3qeMRZ2iPkzKModuO2spnUPva4VZb9P9sAtaRO16O2BJat1P5jO+L1wnIWQr1IQ6tU9OxHoEOxeObpm27tsr0PZeq88mOGrZvcdV/w2QzVdrZ/2EEZ8xTM76i5p/57eL2OqpNL0Sp/3GC+6g1u8hVd/BSYswvwUmwRYXrXPU8NtlP02LU061p742pzjy2rGl7a2uOrcOmI+S9UNmPxaVEbJFbk2sWxx3TphbC8lS14fCuuRziIUaSBeVAU6s/wkD/iUwKywDUBVrCYPL/EcfEn/xQvuKAe98SFwKzt56h/yMAS8+NC7LB7jCM8lHi2jr8DeASbzdrafFWbvinEN+yqzv4RZCtr1ufKl420IwIfcMUvvnBPlPxSsihGyHnHinRKsm1nq+RbBbHPeaAl267tw9A0gJNVCvAAfmYv39FB7Pi7WuBv/gRVry1l+8UL96h/2ilsVhazG2oq3z0rIdCI4aCGK7N1O9zT2idlG+JVd9atHap/ou1R8bpe058c6tzwkyHTUhW6PFTaf2bRXsFqFuFfDe5RaBbvmxkbpnAG0ZUYfkqqUTlFQV+PcY8B2OUyW4zVkD7iX7CxwiZ/2CQyTcrv206xLUCbd0XxKPYz1gwJdJlN2PgTcYfGcbIfwtP0ZelUC/g/Tu7bBOOiXAbxPPpTRQh+Xcjrr128xdR66yXQt47jNkn9zz+JQ59iPmeeraZxFC7hUrUudw1j2Ou1eccy66dN1V0o4aKIfAgXK+Gkg7608YonbWnxHC4kGk3d9bP5WQ+Ktf9+r/JF9tnTaAyW0DQXDfFNw0MA9tr10kdgnW+CGQc7c5Wlx46Zwld/znwjaGvwm5R0pCrZfPJdZr/KWuI7euND/R5llSI2sBoQpchsKsOWu3zR332QuxzmF/8QIrueuDEm9dze16MXPbBy/8b5WT/uQdswuHO9F9BfCCAe9hx5iGF/wYK+RfNT2pOr1C2EPOmZawQtsaIZD7qH2mbWrVQ6lJ2ddgCJyQ+yMlVGuLdW79EiHuEenW+52Rd9RAm6sG0OysP2LAPwNm7vpXwOSu33vBtg77Cwb8BRC5bMCJ7otZlul7BMG1Dvsd0uHtkpN+2aDL1rS43xZ6fmzUxDRX2S3818p2dn5CyFYpiVRNsFvEWqY5gbXLPcJcW9dybaX5iMFvPY9YA3E1OIAoFA4gKjTLCfYXDPgGyIo2gJlQv2DA14iFW9Dzbwv3/lrYduvYpk5r0euQW1xvKcQNUKwJeQxahfsUwdbzPe64Z7llWpqPGIDjoPaq56qB5WL9IwZ8C0zOGkCUu/41kBRsCYsDSIo2gEi4AczEW68D5s74Xebe7XG3yinh5V56w82t+/++sv27zs8lhGyJHnd9imi3hMdL22vnaZnW7mli8OvrQg0sE2ugHAoHkAyHa8EGMBWdwa/Xog0gEm67/i/8dWhhtsL7On1OmlsX6kvnaZd8Xmvh139f+XyEkK1Qy9WuKdYyPcd87Tpq9xIxE2q/9zpiDbS7a2Au2ACmHLbMA3PRBlyR2peMeOt1dh7qOACTqFtuPS99jYKqWqg6Rc0xa/7zgvMz/E3IlqkJdWqfXrG262ri3buudh21e4gY1LaZCJ0s1kA6FA5g5q5Tgg0gymGLSFvR/uxD5DKvp1q8gbTYfjHrvsnsd+tcqy/sP9Z3yfI/Fh73Tyd8JiFka6RErLauVShbnXZtn9J+pfnU8sRgtvUJNTDMBu5oFWsgCPa3yl0DecG2LhtAFB7X64C0eCOzDARh/mXuds1+W+IUIV3CH048/h9OOPYWumYlhCylxU3n9mtx2WuId2laW5e6ztw6AA1C7Y9eLtZAEGzpGxxoE2wgL9qAc9rAXLgBZMVb0Nt+lVn/iJwqsCX+24rn+o8rnosQsjVyotYbDtfzS8LlvedNLefWAZiLtF+XpiLW5TA4kHbXQFmwgbnLBmKxTgk3kBZvwYq4xu5LYv7/C3zGf1rhHCwwI+SeaRVqu27p/FK3XBPpYvQgJdJ+fZ5usQZOE2xddAaknTaQF24gFm/hZ4r0xThXHvl3ZzovIWQrLBVru3zu+dZrisiJtN+WpyrUco5aKBzoF2wgL9qAa+alsYKdW/dXAH46g0DnfgzcKv/l2heg+A/XvgBCyBlozT2vdd5ewbbLp4p777qIxULtz94mQC3uGmgTbCCINjB32oIVb+26NSnBXrIPqXMp58sKcEIegRaxX5K/bt3n7AINlEXab29jsbsG6oKti86AuWgDc+EG2sTb8r8D+PMZRHlrQn+rxVn/77UvgBCyEpd21LV9lq5bWr19kos2+7VzkrsG6oINzEUbSAs30C7eJWrCTk7j3177AhTsFIWQrdIr+qcK6ik551VctNm3j2axBvoEG5iLNhCHxzUt4m35m8z6XnG/d/7va1/AQhgOJ+QeWeLMe0V0DSHuEd6ue1osUGcVbCAt2gDwdwD+sXBcTsBLlMSdXB8WmxHyyKwp1OfYdjaBVsctp0usgbxgA2XRBvLCDTjxBsoCXmKJuJPl/JtrXwAhZEMszXWfUojWsr3XFS/O2a8iUKsKNlAXbaEk3sLfFbYtFfZH5F9f+wIIIQ/OqcVprcefIt4zThFodY516BZroSbaQLtwW1qEnJAczHkTsiWu6byTrCHShBBCCLlx/iclfyoilYtJ9AAAAABJRU5ErkJggg=="/></g><g class="cls-4"><image width="564" height="404" transform="translate(192.22 65.18) scale(2.31)" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjMAAAGTCAYAAADdppOxAAAACXBIWXMAAATEAAAExAE8zNSDAAAgAElEQVR4nO29za4ky5Wlt9zjnJN5f6ou2WyRrUYJKpXAiYaC0JMaNPopalAPwmfoB6mBnqKhaQnooTQgUGoIVAu63Szykpk3b+Y5Ea6B2Xbbvt1+3T0iPCLWBxz6b3i4eyRo6669zKzDGRiAbsHHyp/5TWTfPy76rn3zH659A4QQQh6I4VKf65Z/V+m627FAxKTPt8JliWj57R0KnRy/u/YNEEII2SlLRETLZ5quv7Wo2ayxbxAy8fOWiJctxMrvHkzwEEIIuTe2EAY116j9nqrzthQ0qxvyVSJGC5iSeKkRLtsLEwodQgghe2Dr8swW4mXtcQDbiJpVjXWlkFkmYlLipUaw/LsLiBDmWgghhNwea0RM6/7q71wraBY1+otEzFIBkxIvOcHy+5Vi5p/PLIaYbSGEELKMtS5G7vMtYmWJsDmbqGlutCuETJuIsQImJl5SwiUlWlrFyH/eeTnpdO0bIIQQslNaG/8tXBe7r0XslI4tEjRNjfhiIWNFTMmB+TsA35tzrHBJCZacMDntXLQQQggh27CFA9O6XXtObj+AdkFT3bg3CZlaEZMTMCXxYkXLvwXwIXKPsX05/rxS8LCERAgh5Lxs4cYsESJD5bGa7dS+kRZBU9VwF4TM3I0plZO0iPl3lQJGxEtMtMQES0qU/HGn7syHa98AIYSQO2GrklGteKn9TMs+APWCptiwVwuZGjdGREzOhREB85/R4d/6fVqs6HUrWLRQ+Z8A/JS5908LRc1vF32KEEIIOTctpaU14qRVyKxyaWoETbZBXyVkWkSMdmB+7dc/mCUwFS//Wq1r0WJFSk60tJag1vLHi34bIYSQx2GpkFkiYs4hcFL7AJQFTbIx31zIxMpJ1oWJOTAiYES8pITLJ/PZ/8Gvf048R2p/6TxmYgghhFyWtSPvbiVe1p6TW8/tA5AXNEvEzFTIpMpKMTemJGJKAuaTWf436rtFdFjxYbdL5aVzujWfz3ZlQgghj0PrIHWp7RZxsnaZ2lezPZISNK1iJi1kWtyYnIhJCZh/iW7cZ4WLFiz/Qq2/qvUvkeepdWdKAuj3VVchhBBCWlnjyqx1YbY6Fjsvtx7bBtAoZjYVMtaN+TW6oogpCZjP6PDfqn0iWr5ExM1fmmc5LhQ1/3fhOMewIYQQ0kZ11+PGa9RkZFqFSs16bl9smVuPbQOIC5pZA3w2IaODvTkR8wkd/ju/LcIFcI5LTLz8hREyIla0QHkzz/QXkWeUc/5L5OlriLk3LCsRQghJs1bMbClkagRMabu0Hlvm1mPbAOaCpk3M2LCvFTI2H5NyY/6MDr8G8NE7L5/QzVyYz+jGktFndHhFhy/o8As44fIF3Uy4iAsjYufNbOt9mlgJquW4wN5KhBBCtqU1H2P3tWRblgiYLYRNal9sG0BBzGwiZFJlJREz/wrdTMQAUydGXJiUgPns9736c7Ro+RmCYBGxowVMSdgAdeLl++IZhBBCyNakxM2STIwscyIltq9V2NQ4QbF7iz3PiBY0T+rMfHkJiI/smxIyOuQrbsy/RoePwMyN0SLmyZ//F+jQo0OHDj+gw7f+2BOAHh3+hA7foMMBHQ4Q4eKu/5UXOJ3f3/t7ffPniqCR/Tbv8qLWrbChiCGEEHJZcu5MquFPiYRSGalGwMTO13SZex4QtMWQONfui15vADoRNE/2oPmwI5WTkYxMrZDRIubgRUpKxHzwLsy33n35Ua0fRuHSTYRL79dF0IiQEQemhxMuz5g6NLI/xgumgqaPnpWGM14TQghZzqWFzFZ/sXu1IkavW2FTJWiEJ3+ldFmlJGR09+taISNuzM/hSkcf0E9EzLdesPyIfuLAfECH9/68k1+KoBHhIsdOXuAM3s0JJSW3tIIm9Q60kPmvybcUh0KGEELIerYsLS0VMqfM/pbn0CIGmAuZnKCJXbDrgCHnzMxJCRkJ+1oh86+802KFzJ/Q4194ofOKDu/QT0TMn9HjW3R457c79KNI+dGLlx4dBr+UY4N3bOCFjYia8FJCjmbuxMS7cB/UvueGd8WeTIQQQrallCUpiRi93ipiOrOdumZJ3GhBo7dTgkaTFDd5MZOaARuYCxkAMyGjg77foscP3o158s7Mey9SPnnx8pMXNu/8Z5798c/o8OLXB7gczQk9RLiczFKETBA3bns6xkxc1MTGoZH936HdnSGEEEKWUePI6G3rzrQ6MlaonDAXMZ05D5iKmB5lYaOdF9luFjCalJjpxt5LgnZlXOB3Otu17rUUEzKxstIHL2JO6PGjFzJaxPyIfnRhxJ05oh8dmdO47EfhckKHr4CJwLHuzAlzIXNMrFv+JYAf/Ppr5jxCCCGknmKDHTmvtbSUclJkvcdcuAxmXQTOCfHv0gKmR96piZWTFrkzeWfGujI68CvIgHg6I6NLS1rI/Bn9pKz0FfrRjem9iDn581/Q49mLGHFhTl7WyPqAEAA+ovdCxjkwUwHj9onIKYmZH5EXNN/65R/UPo4ATAghpI1aAZM6PyVmah2ZE+ZOioiak1pqASNL+512qZ2amtITkBYyRXcmJmbmjbIeU8aWl6yQ0WFfK2T+Ah0+oscXL2R+9M7MJ/R4Ro+P3ok5+SRMD9dHqffXeUKP41heEoEThIwuNWlX5kWJFytkYhma92r7Q+LNvaHD15njhBBCSBslcXOOjMwpsq7LS51ZP6l9VtRoAaRFTI2gkevUBIBn+9POjB0cL1Ve0theS5KR0ULmBT0O3oV55/sfPfvtwQuX3u8/+WO9FzHizJy80HkdRYwTNu9GAeP2P43bQcjMxUvepfnKLz8hPsieuDQUNYQQQrajJi9TU1qy27FcjHZpYo5Mj7iIQWQ7JmzkvNLz5cpN5a7Z5kIS/J2TKy+5nAwmvZYkI6OFzNELl5+8G/PZL39U7syL3//kBYyIGC1qTnDlqTcvZJ6VQ3Py2zpHI0JGZ2q0O9PD9UCy5SXdq0l6NsWEyzuwBxMhhJBzsKa8VOvInMy6FjFayNg/67iIiIH6HDAVMwPm4kY/S03od3JOPjOTcmXiQsYJGBEyX/ty0gfvwHyL0EPJCpmDXwKH0ZUJ5SUnap7R49VfSwTMybs5z+jGfQeEXk8iWMSh6f3Lt9MdiKiR0YT1i/+k3oecL27Nn8z70j8fIYQQspxYY74k8JsTMlbA6PWSiMmhxZBs51ya1HNWuzP148x8X/jyn9DhF+jwR3Q+3+KWf+EFj+RirJDpccBPXtC8+u1OlZp69DgpkSNOzZMSNW9e1Bwi7gzQ4w3TQLAOCKfGoZF1Pc7M0TzzX/rlH4s/DCGEEBKjNgS8pryUKy2lRIz8HZEWMiVhczLn2GXu2WvcmREtZkKJSVPrynzCdGTfP8ONI/MBPb7KCJnPXsjI/4alEzHPY2np4LMyQdQM/uyjFzLS62nqzoT8jA4Iy3xOvRE1MkbNF/UO7AB6tpz0LZiZIYQQcg62KDGlQr45EaOFjBU1QNldscRKTrlr1JScxmNxZ+Yf0U16MOVcGVtemuZkunEwPOl6bYWMiJdPOODFl5rgxcuT3xYnRtZfvCsjXbmn4ka7M70KAQcxc4QWNnN3BoCf/yms63KTvDW9751fMjdDCCFkO2LiRa+39lqqETEpISNLRJax+06Vp2odmlwgeMJUzFhXBkCFK+NCv98AY3lJcjIv3o1558XIT17QHPz+4MEEIdMpkXPCAYeJiDngbSw1OdFzVO5Mp0RMjzAFgnVn5AUeEOZ00uLmFfMgsIgbLVZkeoMf1T7mZgghhGxDyZWpcWZKQV8rYOy4MlrIAPngrl6mpmW23b5TYWD7vFlEzIQL6YHyfpf8AkfMlZFB8z7Azav0tT8mTgp8NiaUlg54VUImhIDdscGLFnhxo12bE3ocvNARQSNlJlnvMZ32QByao1p3rzcoxYN5J1/UtjgwuqwkooauDCGEkO1IiZk1rkxMzIiI6dW6dmJ0YrSmNKSXqQDxmvzMzLEpB4C/RzeOK/O/APh/Iq7MASH0a8tLRy9iOvT44pfwWZifxgyMFjIHvPrl1Jlx+1zwN4ia3peXTqOo6cYszYAQBpaSU/plhnXrzIi40TkaPf6MwO7ZhBBCtqNGzLRkZayYSYkYHdy1AWDbFcbeR+o+c+2vdWe0ULHbjb2ZdPAXcOPK/EJ92dSVwejKdF7IfELny0tujBkZGA9e0PzkxYkVMp/VfnFmnr3AOfn9Jy9wRNiEEPABA9yYNIN3bsIowkHUHNWLnI4c7F6WjCkjguaL2i+IaLGlplBmYg8nQgghmuqySeT8XPA313sp5cocEbpLy7pelgRM7p7lrzdLK2b0Pv1cMbcm27spiJlYXiZFKisjrgwg48m48tJ7LyiCExPyMlDLT0bInPCkSk0iZA548tmZcJ6UmVy3bnFkeoQB9rQz00OXmGQfoMtO2p2JOTNPmLoyz9CuDIUMIYSQGC2CJidmakpMufJSb9ZTQkaLDXtvNX+1giYZ7q1h6szYKQx0iUkHf7+FG1fmr+DGWIm5MjIJJODGmOmgA79hYDx4NwYJIeOkxJMXMEHUyLYEiN0owQflyMTCwGEOp2mPpnxuRkSMDQHTlSGEENJGbWO9Ni9TyslYVyYlZGruryRocrmZXBhYb9tS00T4pMtM8xJT4KO/uIwrk3NlevR4Gd0Q98K+QLpTT8O+JyNkUoIm5GeCoBm8KyPX1GPSYBQ13bgeejKVczNSXvrit+Wtvfnl134ZejVRzBBCCImxpZiJCZpciUkHflvcmJQzI8sD5gJGjwJsXZqSoNHfW/W+6kcABjAJ/spovz/35ZfXpCsTRIwImoPKzsBnXga1rHForKARV0ZyM6HEJOWlUHKKOzPTDI18owgYAHiBEzhSPcyXmgQKG0IIeWzWZGXsdkuJKSVm9ISStULGfufBLLVoOZntlCMDxAVN7B0AGXHjxEwsL6MHypNeTMJPcFkZ4TM6vIdr+L+CK0W5rtgdXuDCuJ3Jx0A5KNJr6TSKkoO/t7hT84QDvvjjOjcjgiYIGy1qdDft0F3bCpneuzKyL5aXcb23HLFSE8eYIYQQsoySkJFlStCUBsezroz+iwmN2D1YQdNj6s5YYaMdGnv9lBPT5NIEZ8bmZYAwUJ7txQTES0wHuEkcbVYmhG6DOyPdqXvISL6h1BTmqJ4KGuDJH39SJSZ37uCF0DwIrKdACFMe5NyZMPpvN8vLyPYTXJnp1e9/BrwIoqAhhBDSQqqRTgkZWdbmZVpdGZtb0euxgK8WNfo7bJmpJTuDzH3Mzm0rM9kS06/gBI8Ef/+EMDN1510ZnZWZTh7Ze8ERul0/I3TVHpSgESETBI5bd4LGrYuzIwPrDQhzOUm5Cej8YHvy4vrJCMDAfEZtl60J6G25Eyk1aUHD8hIhhJApW+dl9HZrVkaERsyRSd1T7k87PNqdyc28HSs3xbIzReJi5nfo8GuzT/dikhKTzpN8QYe/9Od1XsT06PzUBHNX5tkIDT1WzMkImuDYWFFzwBOeJhkaXW6S7SCkgjMzHW8mjDMj3bb1ODOyLiLmgHQ3bDoyhBBC2mh1ZpaUmGLlpdhcS/b7U86PLVHpP+sAWUFjvy9WXkoJmuj+sjNj8zJAXYlJHJqDFzdHdNDB3DcjaqTb9dGLkZhDo4WMztHYULAuM4VsTnCIpvmZIGbshJOHscykRY28uW7szfQMZmYIIYSsJdZ4x1wZWZbKS7KuB8iLlZeAejFzQigr5URNjSOTKjUJ1Q5NXsyk8jIA8CuE+YlcLyaMTocWL3o0XhENz+gmouYJ0kXb5V0GJWgw5mXmZafTuD0dVE9m3tYhY/2S+/GluXsKXbRDEBj+ebRDA0x7OEluBnDds/WEk4QQQkg7NSUmWcaETKy8ZKcrSJV57PemhIxcU6/bclXMpakRULLf5may5aepmJHw798B+D/Nl9i8TO/dmc7fmPRi0iWmN4TRdt8hDGB39H/BlXEuymF0VJy7cvDujA0GT8tObqnPOUzcGSdspmUm3UVbfgB5abEeTbY3UxA4r5hDd4YQQkg7tc5MKS9jHZrceDL2u2pEkhUxWzozqTJTdtuJmX+cPVAdvwDwB3R4AUwvpiBgxKUR1+ZtFDF63YV3dWZGBtObChhxZOKB4JQ7I2PMTNVjLDMTftwQ9I0HgeVlfoXpWDOEEEJIO2tLTLngb4e8K5O6H3tNETExQZMKFNcEf9fQAbW9mdLh31COGdDhya+HXkydz60E4fLkz3XlpeDSHDDtRh0rN8Wdmbg7E0TMvNQkmZkwR5M4Ne7FyLoImOPkZadfvOvNtPaHIYQQct+UciCp4K8sW3sxpcRM7HtT16pxY2yJSdZTJabYumw39Wqai5nfqQvq8K8eX+Zn6PABYdRfIAyUp3sxDejx4ks9IlwOsBNHPuEZT3jDEwY844RnHPGMA55x8vs6PGPwUuiEZzjhYl2aqTsj4eHg8ASxFLqLh9xMmOpg+mIP5gXrHk1TkUMIIYQsJZWV0eupnkylXkyytH8HuORnafA8oE786O+348/Exp5JCZwhstTM9uWdmR/Mzcss2V/QTUb9fQHwLaQi527mMDozoafQs9/uvCtzgusRpZdHL4ekV1MY1bcfxUk8PzMfbE+mSxhgRx+OqUj3rNMZtYHyj0lBQwghZA25EpNeT+Vl9JguMQdGZ2Xsd9SGfFNB35gbU1NeElJOTVOvpriY+R7dZHLJ/xFu0kmZJVsmVhQh84aQjRFBo2eOflZC5dmfJ6UePbCdnm5AxqMJgiQEelOBYB0KDu5Pr5b9eG1gOhpwvpYnLk3cjQlTGlDYEEIIqSHXONeUmeRPCxlxP6wzI4Im9j0xMWPzMfPMad7N0dtCzIFJmQaxd6PPmR2fixk9W7bwMdJIu/Av1Ai6MrCcuC/wOZqw76T+ZNbqAzq8jk6NCJsgdIIr0ytBE0LDMYcmjDUjrsxUzEy/Q7/8MD+THXPGqsljZN+zWpdeTuzVRAghpMySnkw6L6PLMqWQbapUJe1kKh8TEzI1TkxKxMTuDeZYY2bmt9kLzieX1KP/hvFlnICRfS9exACYlJkOanlEP5aYpJv2E3rfrTsuaJzoCWPTyCjCvXJiuokroye11OWmMN2CiCt5gb1ff1X7pMKo3Zk3zKGQIYQQsoyW8K84MXo9V9KRz9ksixYwtUIm5sLUCJhYWQmY32uNkBnPKfdmkp5MwHTkX5eT6SbdksWleUOH98qRkQxNEDDdKE5kv7gkbmTdaenJCpowTcG89xIQpjAIYWA73sw0BCzrp+hLjttgB/Oe2D2bEELIelp7MnVmvVbI6FmuY1mZmh5LS/MypdyMFjJV7kzbRJMxpoPlOSHzNYIrIY6MuBlS1pGyU+8/KaPwnrxT8zYKjrhDM83ZiEMzDQgPRsiEXk0hlyMvTo8CfBqXerbs+cvXFUgpMb0iTDgpOpkQQggpk+rRlMrLdGZdC5rcd8ScmVrxUuPKILINtT93fBHtYkamMXj17gwQejIB0uEr9GQCwvQA05xMcGmCiAiD6U0dmm4iZOAFkC4z6XDvdP98vJmwDOPMhDKTiCpAXrJMazBfd+dIqenVLAkhhJAytd2yZRnrli3CIPWf0DYwnBIuqe2UoKlxYGqEyypRkxczHxovbnv6iCtzAsYg8Mm7OM/AKGxE0Mj0B1NnRgsa99nBixoRIlbQ6G0ZeC/Wc8qGgA9++TqKmnlmRj+rTDwpczTpADCgZ9YmhBBCSrQ6M9qRKfWOyomZVKkoJmRq8zGpbAwi2yWKpaY6Z8b2ZrJjzEgvJt0te/DH3Ovrxj/JyEivpl7t0yLmSR2fOzO6V1JYh9k+qc905vxpryYrYuT+QplJOzJfxn1zgjvj3gfLTIQQQhw1PXNaXBkraFLXK4mZUonJCpyabIwVMTmRk8vSNPZmsrjRf8u4MWYc0oBrQlfs6T4tYsRxOSoRc0IoO4XZt8PElgOm48RMR/S1zkyHAXMBNJ3KoJuUmsSZcSIHCCWnMM2BLjeFGbQ79mYihBCSYasxZmy36ti1eszFjJxfEigtZaWUAxNzYazIWU19ZkaP/pvj6OWGzMEEYHRvRCxIiQmAFxrSpXvqxshSBIx05QYkNixipB/XRZyEY0HI6ExNyMzIZ+1kkyHvc/B3KgJm2i3dobtohwBwR0FDCCEEU5GSa0eXiBn7OZjzdbftHlNBs7RXUspVybkypWe316lyZYAWMaNH/9WzZQvHSQMfnJgBncnSBKfm6IWKiA8dvNUZmiBseuXM9IgLkCBw3HWkJ5T0uApOTH4k4HAfr+rep45MPDfDHk2EEEKmlBpx3RVZtvW67b1kXZnYvEfalenV+aXyUcvYManSUWo79T7ssWohA1gx87vIy5apDFp4DxlE2QmeV2DMybiZtaflpxACxqTUY3MzIT8TXrjuCaVLRiH3Mg0OT6dRmDozwLRHE+DKaNaZEXEmQuYAlyMC5j2aKGQIIYTEibk1qfFVUg28dlmg1nUPp5hwqRUvNcKlRcRsxeR9TMXM36l1O8lkDD1Inrts+jMiYkJGBmO5qYP0epcB9MJ0AjqgKw+gczPWWZH5nXRPJREy3eRa8cyNiKngEIWu5SJoAB3+7ejMEEIIWYAVMHZfl1hqVwaYOjNaoGiH5pRYr3Ff7HbObakRLl1iWfpM0q1ZP2ie7Y79AplUshuP695M+sZEJIhzoierBIAwmzYQd2cwESi6h1TIzmhBE86zokauG5yZMMCf66Ltvi24MdOu2hoKGkIIIfXERI0+lmrEdeuSc2FsbmaL0tHSc6xw2cS1WS9mcrxDfO6iw+h8QIkMzdSdCetT8YPJZ922c0imn9Of78y2/ZsOniflsKl4kVKTLjNNezQ5XtVzEkIIeWSaMiCYi5iUqMmJkZigQGRfiytjvzvl0lyUWFeuKbEZs7+gw88rrm5FygswcWMEXWI6TERMyNa4bdvNe/6CbVlKrhFyM9Mf7mSWImjkWlDXO5jPHs3yzS9fzfcTQgh5dEpio1aMLPmc/WzNPrse+377fIjsT+2Lsfiz2zkzujykOUEG1puWpMRBid2miBsRGdIZO0wxMHVlYiLFui+dWbeujS5VyX1Oe1eF0YB1XkbD3AwhhJBl6N5Letvut6wROiV3xh4r3UNsO/W5JS6OvI8Z25aZvkJo6LXzErIsYVu7K9NMy/wOp2HgwAHTcG4QJGE7CBZE3BnAvvR+fIZu3D6Zc6blpbBNCCGEtJMSMrHzgGmjrgVPrUhJtYEw+3JCJOXq2HNixzZnLma+P+8XjrjpC+YiQIRGLAzssDmYeTkrPlhdzAWaW2lOaOmxcfR+LXQc8dxMR3eGEEJIhFzuRY53Zj0ndvQ5qWum9tU4M6njpWufk9nztjszMh8TAPyl2q/LSEd0eGe/ypPrBRR3OMIcR9KzyR4PS+0A2TISJmUn7eTI59/Uth5PRp9jXRlCCCGknlS7kRo0z4qVlKg5hzOTu98UNeWolpJVFW1i5lcAfu/XX737AMxH/61FjzkTw2VnAPtwtneTPX4q/DhzDdv56wI6l3NAyMlM3Z7p9Tl4HiGEkHpy7kysfGSdGJhzYix1ZkrXiF2zRYDkylKLOW9fGxkBGMAofCw27NslXoyMyDsXKl3iZ7AhYGD6g8WuF0b+lfvvx8+Fz0veR9wZ/UcIIYTkyZVtYv+hHiv5IHJOjTMTu5fYdkoM1Vyz9B2bc9mOwyIcDhUPNiRelPaSpncfRg9OMX/a8KNpUdMn/qHoz1vxIgJH7u/ZLNlFmxBCSJycK5JzMmrKNqnvWvKZmvNa72cTzjtoXi02CKyzMzKrNjDvzRSIlaFk3ZV40p9NocXNtEwUGzAvdS+EEELIlFxpaMmx1PmlfTVuzU20aefxC95vfsV02SlFKA+584JsCwPodf46PVJvYq4y49+7ROkSQgh5THJtRqqElLtW7pqtrkpp3y65XPEjHsptYzryr16WmJ4f/5Tt3aS/DyY7o687zdAALDURQgippTV4W/Mfz+vayG24qBA6f/Oamkn70LBtr2CzMql1OU+fr9dj92YHyYvle5799e09E0IIIctYU/JpdV4uWUa6iKjZR2amDvdCYtmXMK5MWjzlnCF7bD7qr7t+28B3N2PPEUIIuQitmZdSN+xSxia3f+nxXXLZwsfLZGubF2WfIHfVrZ526tzYpbP/WGoihBAypbY8dItc9d7XNa2v6MZB5XKk3BKLLduU7i51vKs4J352/HOxclK8xHTL/xAJIYRchpvNpjRSW/5a/Qy34xPIo9blVOJZmNhZXeJYivS5e/4HRQghZF9co82423bqumJmu8TO/AfK/2Tx3E08i+POFxGVmyqh1KuJEEIICdR2zV5zvS3P3y37c2YOcIJBpiFI3eGankS5p073lJqfY8VLCeZmCCGEtHNt0bH7sdS2b1a/Uuvv/PIldmKS9Muqzd5Ypl2z266xNHNDCCGElNm6DdniejcXUr68R3DJkkup1JTadw43iBBCCNmGmx6t9xxcv+ARy81MRcO8G3RsEL0+cS173tbMu2ZPl+yiTQgh5Ha5CZF0G01qiyOy1ROlRg3e+nsIIYQQsorbb5JjQkc/VWkQvT5xjdxnCCGEELIb9tE01w9Kt5x0t2tHTPSU3BlLa+8mQgghhKxmH2JmKUunLqgZObgG20XbwtwMIYQQcnau05yu6dF07juuETQUIYQQQshuaG+Wf36GuwDKpZk1pZu2uZqmtJaaCCGEEHJR9t08r50Be+nTLflcbRdtQgghhGzK5cRMzSjA5w7OtmRiartmt75B5mYIIYSQTbmfpvRSs0awpxIhhBCyK/YvZmrEw9JMTG/+CCGEEHJzXK8JL3VnjtFVnAPES0T2MzWj+taGf1OzaDM3QwghhJyd2/cjljzB2qcWcbL0OszNEEIIIZuxbTP61aZXW8dWPZkoNAghhIHmHrAAACAASURBVJBds8+muqYkFDuvhpqQcOqcfb4tQggh5KE5X/P83i9rumSfm3NmVWwX7drczJpRkAkhhBAycl2v4dzdnNeUjEo9pLa6d+ZmCCGEkFVctgltcSOW9Ha6BBQdhBBCyK64nabZ3qnNtSwZK+agPhf7bOv4NalSEyGEEELOxvXFzBYN/iGxrrdLYih2Tu33lj5Xys0wP0MIIYQs5vpiJsdSoVPqsXStCSyvdV1CCCHkjtlH87nncszSqRIIIYQQchFuq3mOlXVSLsuasWLWjCpc6qJNCCGEkE3Zj5hJNfZbzIS99hq5fE2rSCnlZvbzixBCCCE3weWbzi0HsGu9+9YZtbf4TkIIIYSclX01zVuXYljaIYQQQu6efYkZ4LICpIcrIXWIv4mabA4wz/LUTm1ACCGEkNXsT8zEOEfjXxIvNZ9d+/aYmyGEEEJWs89mMydeusQ5nfrT9Oq4kMvtrJnPiRBCCCEX5zJN9TlnrQbmT3GuMs4WPasIIYQQsinbiZmvN7vSedl6nBmbj2FuhhBCCLko+y2ipOZYWvr5VvrEem7fEpibIYQQQlZxnSZzy7JTjWjZ8ikpMgghhJBd8VhNc2ok363eQqnURAghhJDN2beYSYmAWnFQCuyWxpGpLTXVvsVUbubcAWlCCCHkjtm3mLHYu13Tuyj25LXXO9dbY26GEEIIaeY8zeU7v3zJnHNpN6J2NN/UODWEEEII2SX7b6rX5k2WuDdLJpms7aJNCCGEkE25nJh5rty3lAO2DfNqtsjLCKXczJbvhBBCCHkAru/MnKPxzj3V2lzMpUYBZm6GEEIIqeL2mkpbxgE4zQAhhBDywOxDzJTcmbW5ly6yL3Vuan9NXqZ1agNCCCGErGYfYga4TgPfYVn2pSSOamFuhhBCCFnNfsQMsEzQ1DgmMUqD5O0B5mYIIYSQIvtrJq9dgrFvpLbURAghhJCrcDvN89qQr/586albvsuWqVpzM9cWb4QQQsiNs08xU2rgl4iNNayZ+qCWVG6G+RlCCCEkyz7FDFDnWGydsdGkxMq13th+fylCCCHkqtxXE3nAdcecKZWaCCGEELI52zSzX1ee1zq5pHVeck7MOQbRK+VsWrtoMzdDCCGEbM79ega1gd8O0/FmajjXWyvlZu731yKEEEIWU9c8/tWZ7+JSWMcm1w079RlCCCGE7Ir9/7d+TQlmyVO0Tm1Qe4y5GUIIIeSi3G4TWyNylroqNdkeeXOt31HKzTA/QwghhDRxe2JmiztuFSDXKDUxN0MIIYRUcftNY63QaH3SJWUoQgghhFyc22ia15RerNg5h8tiu2jXTm1ACCGEkNWwWc1RGrtm7dsr5WZax+UhhBBCHpDzi5m9zy3U+79Lz/fUAnMzhBBCSJL7ahZl8Dv7VCmhUlOCuq83RAghhNwdt9lUx7InpQHxUvssOYcmJ3aW5mbYFZsQQghZxe2Ima0b/VbRYtn6zTE3QwghhCzidsTMNdnDW2JuhhBCCIly303imrFilny2VGoihBBCyOZcvpk9R9nknFMb1FD7Fku5GeZnCCGEkGboGeToE+u5fVuQys3svZs7IYQQcgVuS8wscVfsE27xxNd+a8zNEEIIISPXaQ63KDVtVTbqkB6fBii7M/ZYbRdtQgghhGzC9f7b/mmjb19zjS1KR0u/n7kZQgghZBOuX6gQR+QJriE/YA93Vebc91jKzTA/QwghhADYs2xIlX3W5Ga6yL7c+bHtc/aKWsJ+f0FCCCHkIuy/KWy5wx7OyZAczBq2EE3MzRBCCCFnZ/9i5hxs0StK7ztXboaihxBCCCnymGKmlr2UlEq5Gf6KhBBCHpjtm8H3fqkDqi8rr1njUGyVr6lhLyKHEEIIITf+3/QtoqL0pCnB1Boabs3N3PYvQAghhFyd22xK12RJ7Gd1r6mtsjRLKOVmmJ8hhBBCotymmGkhJ1Bix2oFzbVKTczNEEIIIROWTSzwcwADgJNfXoIDgGPiWLfxfVihoq/fwz03IYQQQnYB/3t+C1K5mNbcDH8NQgghpJnHaj517qRUJqp5M+cqNTE3QwghhFTzGGJmqejY6zQGzM0QQgghI4/Z/K196i26aBNCCCFkE263aU3Nc9QhPUnlOWn9vlJuhiUlQgghpIrbEjPXuNtSqenc5adUbmZZPzRCCCHk7rgtMVPCCovazIvMst06Q/ceYG6GEELIg/N4TV9sDBlNbnbsWlq7aBNCCCFkMY/dnKaevibgq7FipRXmZgghhJDFPLaYyVGThbnU2yvlZp5BCCGEPCwUM7XcwptiboYQQsgDkm/2/uZCd7EFqZLMklKSkHJnWsaZYW6GEEIIOSuP1ZSe82nXdtEu5WaYnyGEEEKi3J6YuXSjrkXKFj2d1sLcDCGEEDLh9sSMplbY2KfcYqC7vb455mYIIYQ8GJdr8vbuHPRYL3JKuZjScZaSCCGEkGa2FTPvN71aPVtOHFmasiB2fGtJWMrNUPQQQgghIyxG5AbBW/LZS5LKzezdBSOEEEI25NrN8TKWlINau0KfI2dzaW7z1yWEEEKauL/mrodzLGpKMUsFSmnSSrmP2LI2N3N/vwwhhBByFvbZZPbmb6noWJst2cMs2szNEEIIIVn2J2b23EhfIvzbSik3c+37I4QQQs7M4zZ1a0O+LRNRpkpNhBBCCFnN7YiZPc1iXfr+VqHE3AwhhBCymNtvLkvCoTRGTA19Yj23b0tKuZk9l+YIIYSQM3P7YmYJqbFl+sSxFHsrFzE3Qwgh5AHZVzPX4jBseedWlGxx7dYu2oQQQghZBJvSlLuSEzi5t7b0jZZyM/ylCCGEkCj300TWDGR3Ti71Jku5mScQQgghD8VtiZlL322NCNpbbkZgboYQQsiD8NhNXOvT15aahKVTGxBCCCGkmsdrPludlJbztxIlpdwMu2ITQgghI/sRM+duoM9ZDrpWqYm5GUIIIWRHYubSLH3yvWZkYjA3Qwgh5AG4z+atw7aiI3Wtmi7aS3Mz9/nLEEIIIZtz201mZ5ap45dk6zdays0wP0MIIeTBuW0xsyU9gqMTE0GlOZ6uXX5K5WaeI+cSQgghd8TtiZmWiSVrWfMWbuUNMjdDCCHkTtlH03bOUom+ts2p5NjizWyVm2EpiRBCCEmyDzFzTVrmWaotNZ3rrTI3QwghhMygmLknSrkZ5mcIIYTcIRQzJWre0JK3eM03z1+dEELIHcFmrRX9xnLZm1Iuxp7H3AwhhBCyiPOKmZezXn09tT2fWt7Subtol3IzFD2EEEIejPtyZlJPc4kGfm9vspSb2dv9EkIIIQt5vCZtyy7XrdR20SaEEEJINbcpZrTTslQAtH4u9aZacjOt35UqKd3mr0YIIYSchcdpFkulpg7ubcjfGi7lsJRyM8zPEEIIeQCuL2b22uDGBEmfWM/t2wPMzRBCCLlj2JwB62fdbpkeoXVqA0IIIYRkuZ8mc2/h2a1ESSk3cz+/ICGEELIINoUlrEjS23sqNTE3Qwgh5EGhmHkUmJshhBByp9xvU9Yh7arUTkmw9TlLczP3+ysRQgghq7nPZvLc+ZlSqcmet9VbLuVmWFIihBDygNynmNFcIxh87beays08Rc4lhBBCbpxrN7vXZesJJPfWoyoFczOEEELuiNttxq5950uFy9rczLWfmxBCCNkZl20aX+DcgGe40sdz/vTdkRIwl8zNCMzNEEIIIQD43/lTOvW31WB316KUm7k1IUkIIYQkqG9yf3nGu9gDSwbAizk1t5KbEZibIYQQcuM8RhPWJdaXsOaNteZimJshhBBCijxus1j75Fucdy63ppSbYX6GEELIA3AfYkY32kuEw7newl7eLnMzhBBC7pi9NLf7xr6l0nQIzM0QQgghF4PN15bUvM2tczMsJRFCCHlwKGbOjRUl5/6eVG6GoocQQsidQjFTy72UmlK5GeZnCCGE3Cj7FjMHuDs8qPWt2dMb2EPX6z29D0IIIaSCx2m6tnBKWjIxNeeUSlCtuZnH+TUJIYSQkcds/rYqAbWOQXOp0hNzM4QQQh6IxxQz5+CecjP8V0EIIeSGuO1m61wZmh5pIXIugVLbRZsQQgghE25bzKzFCgT7NmoEROsElSnRUgtzM4QQQsgENn0lWspHOfFz6Tddys0wP0MIIeROuC8xU3qanNhYeqzE3stDzM0QQgi5cdhknYuWN7t0agNCCCGEsFlcjHZcWt/iVqKklJvhr0sIIeQB2G9zl8p0XCvrUVsu2lNuRijlZp5ACCGE3Cz7FTP3xN5zMwJzM4QQQm4QNldb0dpFO3Vua26GvyAhhJAH53GbwtKs1zHseVv0ctrqFyjlZtgVmxBCyJ1yv2KmV3+aS5R8cmPTXPuNMzdDCCHkzrh203p73PsbY26GEELIjfEYTdU5nzLVRTvnxJTyL0tzM7WlJpacCCGE3BGPIWZyLCk7LX1re+vVlCo1PUfOJYQQQnbKPsVMi3Ow9QSLnf9LZW5SnxH2+UaXwVITIYSQG+A+m6mtn2qrkXprztm61EQIIYTcOfcpZpbSUgZqdWxSnz936Ym5GUIIIXfObYqZa2RPtixj7YlSbob5GUIIITvnNsXMWs4hKEq5mTVveg+j/T7mvxRCCCE3wOM0UbEnXStqzpXNKZWgmJshhBBCRh5HzGzBkrd1C7kZih5CCCE3DMWMsIWgWDrH014o5Wb4r4UQQsgOYfO0ltQb3Co3U9tFmxBCCHlQKGZaOZd4SImWWmqnNiCEEELujPtr4vaY/6jJzVyKUm5mj++PEEIIyXB/YuYSWHESm2Cy9Rp7g7kZQgghN8L+mqa9N/ItrM3NLJ3agBBCCHkgHqv5Sz3tXgTUVqKklJt5rF+dEELIncNmbSk5ARQ7tqfcjMDcDCGEkDuAYmYrth5Qbw8wN0MIIeQGuN1mqUus15J78i7yt5Rr5WZu95clhBBCmmCTV0tr6aj2GqlztvplSrkZlpQIIYTcOBQzlq1cmNYu2tf+JVK5mafIuYQQQsiOuHYT+hjcw1tmboYQQshOYZPUwhalJqHmzdfmYmqPE0IIIXfIfTVzNcLCPvGlMyM1XbTP1cuJuRlCCCF3yH2JmUtQemO3PLVBKTfzDEIIIWR3UMxcint608zNEEII2RFsjjRLHRLmZgghhJCrwSZuCWvf2p5zM8zPEEIIuTEoZs7BLedmBOZmCCGE3AgUM1uxpCdVat8twNwMIYSQnXDfTdHaeZVyXPLNbZ2bYSmJEELIHXHfYka4RgmnVGq6Zm7Gfk8qN0PRQwgh5AZ4DDFzK+wtNyOkcjPMzxBCCNkBFDNrsG/vGrmZPXS95r8iQgghV+R+m6FWl2PvbyKVi0mdV5ub2ftzE0IIIQXYlJ2TW8jN2O9jboYQQsiN8ZhiZsvSzJJSU45bzc085r8kQgghO4BNUI4O5+nevVVupraLNiGEEHLHUMyksELgmsIgJVpqYW6GEELIHcNmLEbqrZRCt6VjS3Mzl6KUm2F+hhBCyA6hmGmlxqG519yMwNwMIYSQHfE4zc/eBMLa3MzSqQ0IIYSQO2NfTdxT+ZSz0PoWthZGLW7P2l+slJvZ178IQgghpAibrq3IddEu5WZarnspSrmZawlPQgghxHCepvK9Wn85yzfcB7m3v7eyWArmZgghhFwZNj1LOZfYuERuhr86IYSQO4LNmmWLSR+XXPeSuRmhlJthV2xCCCE3AMXMOUkJlFpXZy89kZibIYQQsmOu3UzeNluUmu7hF2BuhhBCyBW57WbnXssgNb9KbS6m9jghhBByo7Ap25pz5WbOPXlkKTdzr8KREELIzUMxs5aSuNgqN7MXUrmZ58i5hBBCyAWgmNkD9/QrMDdDCCHkwrDJOQdbvNVr5GZYSiKEEHKDhCbz7694F1ugG+Ka0k4X2XcJ9pybsd/D3AwhhJAbgM7MFjA347BdtAkhhJALQDGzF2K/xKXKVeeC/7oIIYRcADY35+JSb7aUi7HnMTdDCCHkzqCY0ax5Gy2lpj6xv+Zae8nNUPQQQgjZCRQzt8LecjMCczOEEEKuDMXMntgqN7OnqQv4L4wQQsiZYVNTQ6/+Wj93CVrFSm1uhv86CCGE3ABsrnLEBEyu3HNvuRn7fczNEEII2SEUM0u4Vn7lVnMz/FdGCCHkjOy/mekwXPsWLso95mYIIYTcKjfRBt9G0yblngPS46e0E/uBtv/Rzv2GU6Jl6eeYmyGEkL1zmfbrhthfU9Vnf5Atfqy6a9TPoTQk9rd9x9LczKVgboYQQs7B1iLk3O3kLkXT/sQM4ASNEzXXfmnbf//a3Mut5mYIIYQsZQ9t4R7a5CT7FDPttL3gWA4nLxLC+XHnaNsfeOtfZQ95mXv5l0YIIdtRak9a25Zzn79bbqOJOZk/e8ySL1Wdi/N+Z80vlZqnKXUe52kihJBrcX/t1BVZJ2aeMOC54uXsu0fSoP53m2tZLhUCPheleZoIIYS0sGWbuP/2tXzO6me4njNzHfdkG0oh5RbxVh80bv/spbDixuZmCCGEAOWG+3bbxSvf+1P5lN0wmOXS43M6DBhmsmHAVErY7RLtP2xX+ana8/bCM4BXOPEVKwsSQgix2P+Xb81rrm0rb6mVucB/2x/O/kLi4dwa5yftoJQDWGucpb32SCKEEHItlrdH9eWclmtuxUVE0eUKFVuWlfqIctT/xX+cfWKouAcpD9Ur3a6xpHQNSiFfjhRMCCHXJNbulNqh2raqtn06hxtz0bbxVpqs+UupE0fTH/wIKMFS8+PFznHrWjyJqBFhs8VPuHZag61+WTsS8K38iyGEkP2SEyQx16S2nUoJo1bnJrdvl+wrM/OGeQ+ZHsMoHPR66hwgXj7qMUwcG0nApJMw7sgJ8wb8lPlUyqnR1ziZT9tj8u292YfIvtT29H7Tx2qOx+jhcjAHOJEoS0IIIUvZMhxcI07WlLZ2xXn+O/sntf5ZrUtDX1eaGYruy1TY1Fhv8++QpQsB2/1BKJ3Gpf2++BVL+87FtfM47K5NCCGt5EpNuazLkvLQ0rayxd25uAA6rzNj3ZDcecCAk8qt2FchwsYKnJTgOUFPiTB4NyRsd95dkaVj8G5N2AY6L2h0HyLby0nTJif0p0s9fW5CHxNCCClQ68CkBE3qnFiMoiReakSU/e5WQXT21mu5mHlWQuUJA978+kGtl+gi7ouULDRzwRLPvUxdk5hzkyIImgFQLk0oRAVBo6/Vza5ybclxyW9f4sK8+iW7aBNCiKYkKnLuTc31St/Ren19zpKKSG69mfYy07vMFz75Y7nu2DUlpqmbE39YLVxcrsW90D7644R92q0ZJi5QzBWa/mPqYcXX/Fr2B7FP29qIx86nECCEkFsl5m6Uykfxdqd8vdI+e21E9rWKjBqB1SrCigRn5h8A/C2AX2LA95FSyfcA3i35igTpoOzg8ykDDglhcYoKF8cJqaCwO8f1aNL30Kl76Ux2RkeEwzn95PtiTxL3aOw9DYljW7grJ7MkhBCyV3KOSE6E1AqS0vekRA8yx2u+71zMvut8mZkDBnyG834O5gVowRDckHjJqVfnd5hncE7+M5KRkW2dw9HOymnygwSxov/XEXOB7Ni704SNRl9JaO3RpPfr80v7YtuD2bbL0vFjYb9dEkIIaSEnNOzxktjZypnJCZeUq2TPiR3bnO3EzAEDfgTwEtkviCh5Q5AQqdyFdmgcYdmbl6hFil3XoiZ2jlxTezBTORMLAAO5SQVqNXLsWMmhab12TdftmuMpKF4IIWQrSs6JXt/qL3bN2HfXtmJ2e0snJ/mZspj5JuIxPGPe2yiGzc68qZuR4owEflMOTRAjUCLGYd2Y6Tm61BT2aSEjMzLJclpMmpac5mPNTIm/j3gxLSVYavbX7LMuCyGEkGtT02rWuDNLxIr9bM0+ux77/ty95p4rxeLP5sXMPwH4VeUtlHiDLolMB8I7+psVl6abiZrBCJnBdL3WTo6+/vTFxx0cXcYKgkb2BBk3nYzSTpoYLzVNS1BWGG1RaqpxRtaWmnLkejQd4f6FvSFMNslJJwkhJEXK0djCmUHkGrHr2X2x7dh92Xu+KOvLTE8Yxu62AHxo14V3XebFPax0w9YiRgsRjKJmmIkax+AzM0GMAFN3ZlqaOqEfm8yuUGY6TWK9uswUZI5l8FePdc+OnT0lV06KHUudr+81PG3Yjl03VUpKCSPmZggh5JzkHImcO3My27G/U8W59rqt7kzLOSlHZxVpMfMdBnzIDAD3A0JX7G+8oHlO3NQrpq6MDQAP6pgWNY7pC5iWkUSYnNS282ZO435p2t36VMiEyQpcKqaDzLQ0HVAvFKTkrgURaPEYcF6olI6XhExNWakl6KtF0Mksc1C8EELIEnIiRq+XXJmYUDk1rre4Myk3JiZWcs9tlzWfiTIVM3+NAf+pYgTbP2aOfYIrJXxGEDvAXMT0CK6LHt8lDKSX/gsOy2kiaHr/v4hcQ9wa58GcfCMemuu5VIkViabRYO3K6HSMfuW2b5QN5MaO62MD4mUmLTpSvZxiwmTpdAc5d8bOz2SXLDURQkiJnGORExXaealxYey5NefnxI5dT21vzeSadWWm3wH4BsB7hK7ROgT8EcDXCCP/6mkM3jBMgsA9BrwlfhQ5T4eBO7U8qhcuQiZs6xyNlJZ0Ex4cGhE8upkffORXOzPwewFxXqZyJzXxpQgGW4ICljkzen/rvtj9pdwXK4LezDVqy0yEEEIstQ36WmfGrsfETss1ckImJ3BS27H10rEi9ZmZ93DOxDsM+JA5TwTJAcPErZiO+xKEgF4OmGZf9IsK3azdD3KKbp+859L786V5PkWFRY/ON8hTIdONYkZEDDD1NKZBYM0x4tbon2WJM6P355wZu0+7Om/qHP39uTJUbZnJknJnPvnjnNKAEPLY5BrrNWLmFPlrETglwZMSMKl7hNlXevbY9arYJgCsHZkTXInpWe2TRv0NrmGUfXYZejBpoTL9IUTE6KxMcGp6L2CCG3Pyy1BaCsydG+vOAIiImZgwgjlrmIga2ReI9YaqETTa/WhxZmIip+TMaOQcK0RKIeDg0LHMRAh5dGoa6CVipiRkagROSSS1CBx9/7FnXuXCxKgTM3asGQn6vnjx4kb7HfCMMNpvDxcKPvh9X5RoQXZ5gsxzdFQvSERKcF/Cul46ATMVKPAOzLzxlGa7S/wB0j3bdsuWa6aIDalXk59JCZpj5pzcPn2dFkETE006H2M/U5ObifE5sZ8QQh6PVOlljTOz5i/3Xa3iJubopNyd1PtIkhcz3xoRAwC/R3BdLHbGbHFdQhjYiRadmREnZjBLJ1bcUgSODv7a0tLUkXHLfnRmHHNBE5r1eWZGjzLTKSEyFzVybUtqjODYuTF3Re+vKT/VCJrY98RKTTHXxAoXLWjEsck5M8KrWtKdIYSQXCNeEjSxMpH8HSP7Sg5OzO2pETGxe4NZTz1vieL5y8tML5iPAvyTv+IBA14x4MkLGXFyjphOMaAdGasuj6OgOfnPnWYixv4g4siErEw3ayzduginXvkuU1dGCxlgKmL0/hIxQSNiIEVJuKSum9sngd7YOblSU9zRmr/T2h5NAMtNhBASZ6kzExMeR7NsFTUxkdNSdkrdd+2zN7FNZkYclTcAXzBM5mc6QEpO0kco5GPCAHg20CtixR0/4ISjEjO25BRKTzIn9lQqTBtLaablxYqAkXIT1D5ElnY99h1lrKBJuTg15FwURI7FHBtLTNCIGNGujKZG0HxS5zMITAghlhpXRtatK2PFiBY0RywXOCkhkxI1iGzHnqkkcKqpm5vpo2+832HAOwxjt+xnTGexPiBkaJy4ce5Mj2HM0nQIY74c4MpHnRcs8mAiXESoDP7cIGjcWj+Kl1BS0vvm6J5SPcJc2WHd0S5mljTI855Q25JyYFL3Yl0Yu8yVmWLC5otfj4WAa++LEEIeixYxUyozaSGTEzgtIif3vSW3xj5P7DmtwKkSO0HM/HrSmM/5CgO+R4d3fluPM/PkxYuMAvwJTviIePkCydNMS0t67BidjwnCZipo+vFl95g2p3lnZv6SQu8nV1I6eUEDiJAJI8zExAwm+5Y0xJto0Qixp68RMZoWEaTPsbkZS2rwPEIIIbFWoVSuKTkzMfGSEi0lQRMrQZVKTrF7jgmz2PPXtJLjOVNn5h8A/G3k9NjM2cJP/mLfwImak3dhPsMJmjcvVN68eLHzK7norXs5wXlxL6j34uY4rh9x9N2vRdgcoAe5Q+Q+45NOSiFFHB13D9O8jO2erXs1xRv3+TvK/fPU7GHAuVypyqLdmbfCObqkpsULy0yEkMelNj+SEzT6r1bMpP5inykJmlo3ZqnzUv2f/fEy0y8x4CsM+CHSOOtRgH/0X/SEwYuaafdsIYwdcxrFjRMZwXXRjswRIRMzKDdmQI+DjwN3XsQcfYlJuyShfOMKVO673Qg3J788ehlzMnmZ0ANq3iV73pMJSI05k/oJYvtFRulzdAmqRejoz9oRe89NTLxYvsI0N0MIIaT0n705l6NUZrKC5g11wiYmclKCxooava2foeTWpN5F7DMT8pmZ7zDgn9DhV35bjwL8J39BGWtGeMXgzws9miQ7Ewa8k/JR6Kod5mQK+RgRMQf03p3RJaZp76Mwmq803gPghYwsp3M69f4zPfQkk+4nCO5MlxAz8Ee16DhNjkxJCYpSiUcLnZhQyV1bPpe6R0vs2rFzloijmMBhbyZCCBFyZZZYaSblylixUevMpMpQMVGTcoZacjOlZ8u9mxlzMfPXmE42KWPN/AED3vv9MtaMdM/WPZoGDPgRLmOjQ8AyR9NxlAsh6HuYlJO0gJERfUXEdH6fdWTEVZk2ir13ZtzSOTJSpOqVK9OZ64jrA78ViAV/81205SeYF7/kHh0xAaGfZTD75XrHzDmx69W4NrknahUdWsSkylGEEPLYn3r5LQAAFdFJREFUtDozer3GnYkJmhqHJiZqciUoey+lUlNKvNhnzr0bADln5j8C+JvIfunRJI2a7tH0hBAC/uJFjJSNJDfzpESMnu16wAlP45kn75mE8tI0+Dt3ZKSRns6W3SeETKeW0pspiJdc+Ne6M7m5mSypEtP0G/JCxwqc2IzaKYGDyPHYdXPnbQGDv4SQx6bkNKSEjCxzZaaYoEm5MylBE/tMLlOTcmZiwib1fPbZmqifzuAjukmPpndemAzAmJcB3OzZJ4Ty0Tuc8ObLRM844dU7NCJiQknp5DMsbv2A0P2688LDTj0gIiY4MvalufFkbF5GHJkT9CjBYZJJLWTiDo0j5sqkHBh7zAoWYC4erNCpFS+5c1Jlq5NZwhyz5x0j58WeQaP/tbF7NiGEaGrciZS7sVTMiKApuTQxAVNyZ2zpK+XQ2PXY8xZxzcu/wYB/9E1cqkdTCh0CHuDmaAKmuZkjdHZGyklTQTP4YG9wZ7QLI12ou1HOhE7ZYfLKlJgJzow4MlrIuOTOASJOpiWmqUMTGFReJtcIa+EQ23/MnBubu8l+pkXgxMpMMPsROR47L3X8YI7HzmMAmBBCYtQKmpI7Y0VNScxoUZMSN9alqXVncn+pZ25hAKwz82sM+K1vDn+BAboRl+7Z7zGMrsyfMPjczHSOpcGLmFd/LryQefbOyxNOeBtFzMnLGldWmpaUnICxORlZakEjL+cA6frtmtaQkJG1qZABOhyUO+NIuTMYj2tqArZd4nhMENnRgOWN6G0tcGJlpdw5KXfmrXBcuzciWmLloiPmokaj5/ZiuYkQQjS2ca91Z5bkZlrzM0tcmiV/ufcQ3c6XmX7mT5YeTbEQMBByM+LOyKSQL77ENIwCph97NYmIcUHc4xjThXdmDiobo4O+2pWBlz76JQRh5c5yXbN7JV6cgBEhY8tMQJAyNQPmWUoll5RTYwWLECs12fNbS0+pELAdM0bfY6rUZIWQRouaL5HjGpaYCCFkbakp5pBY8VHjzqRETuxaKQFTW2oqvYcqF6cuM2Nnz9bTGjxhwEcvIkTMyJdLqUl6NYkzc/Ti5ogTuslL6aDLS1MR041HnDxxDzbPyrjruZzMAdINex78neZvpkIm5sjExUuuN5N1WOwxK15i59ssif5cSeDknJnU/pIwknNeE59LOS0iaj6rfTIKsN1PCCGPRW2jLsuSOxPLzqSCvVbMlHI0tty0tTNT815mxMXMX8MFfXWPplQIWHfTPkGmOQilJide+jEIDJxGUTMtMZ28jxIcGZjSkogYaVwPE2dGXqArGh19CqZH6MWk8zdOLEkYGF4sdQjiZD5oHpAXL1NCoSrlOsRCrylBkyozyWe0wCmJm9z+mDNj96fKTHq/dmJyoWCAQoYQ8ijUNs41pSYramyZKVZuSmVfrBtTEwguCZkWVyYl2mreDYDWWbNtbub36PAMl5txXa6HWalJJpF0XaBPeEY3cWcGL170WC89Orz5LIuWINaVERfoNDajbkC8YebIhPLSYBwZ7cxoIeO+Ye7M2KBsjbhxMeR6alyb2hyNFTeA+2eaysyknJlYmeo1sz8lauRfnA4B1w7qRwgh90mrMyPL1F9KzJSyM6lAcE2OZo1Dg8h6E0HMSI+mX2PAP6DDr+FCwD/zx21upqbUdPBN4it6vINMZxDcmcEXmg7+xdqykjTE2pUJAibMxC3zOx0hk0dOHRlxZU5w48mkSkzamcmVmOrdmTK5of/XfFYfs0JIJnyUY0vdmxp3RgeBdalJyks/ms8SQshjkyu1rC011ZabcusxEaPXYy5Rq6jRz5srP437087MLzEtNencjJ1B+6O/4AtCr6aD92UkCBymmZT/5j+O250XNU62uPNCn6ZuFDGuoZTryx73J24MvA+kHRkZo0YPlKfFzHzE3xABXl5mEkQctRETKjHHRhNza2JZGXssVkaS74O5hj4v9flQBnRod4aZGULI49HaApQETa07U1tuyjk0S8PAVsRYQVPznLl3MmFJmQnQpaYfMOAZ3Vhq+qjEBhCEjZMsLjsjwubkX8Dgm2mZ1KBXwkIEjJRDpHylX0qY6ym4MvOu2NqN6TFMBI18V67M5PbbMlOMVsGzZsA4K3CsC6NFkRUd+lzt1tjeTr05JveqnZlYADgmamJlJgoZQsjjsHVuRq8vyc7UlJxSIeCUiKl1ZOy92+cqvZOROjHzM7gZtP8JKJaaXry4gC8fSRZFZ2eCcDjiGW6WJj2uy3SAN5eqGRDmgHLixq2L3AGkG7aTMG6GbUnbzMO/0/mYpMu3+34ragJt4V+hJFRSx2PuTE1ZKvd9WrQA8zJTi9h5jXwuFwBOlZmYmSGEPA5bihlZ1uRmrKhZImhyg+nlHJlcGLjWqckyFTM6NwN0+KVyYr7z698Ak15N32E6gF7MnZHszHQ8lw7PY2lJbtmJgDd/Zzqn4UTN1I0BZIQaN50kvK8D9HiCDLYX68U0LzUBUuQKQiQ/Y3aOcO4lGmcrcOy2dW9y4WH5F5HK1OhjOWcmJ2q0O6MH0KNDQwi5f1pKTqmyS0upKSVobIloqUuzZQDYPo99VnveiGtW/j2A3yCNnXRS92oCOnxAGBU45c58Vq7MOyNqhlFkHMdGVRrMaaDYrYsbcxxflkx/cMIwES9zISNzMslkkmGyyRACFqblonox0/vzj02f2paSwLHb1pWJDcq3xJlJDZrHMhMh5PFYk51JNeixhj9XapL1WN6lJktTI2BibkxK2NjnWUS6zPTXGPCfVFMcGw345375zpecrDvzhBNe0eEJJxzQ+R5MQUiII2O7D2s3Q/IxspSu166cJGPKhAHytCMzGBFjnRnX/RsIZSfnzoR5mjRtsqS2h9KSnkxLe0CVBI0tQZWO69mvraPz4pdfEttf+eUnYAySAxQ2hBASWJqbSYmapYJmicBpETIx96Wp5JQWMzLhpJSa/iO6sVfTN+NZIQj8AYi4M07QfPLnymdEvIgjo4UNEHosOUfm4PM24sq4GPDRR3tdmcl5OiJvxJWJdcMOPZf0uDbTnMzRb+sSSG2oVxr/SzsytfmamKDRod1YbgbqM7lSkz6eKjfJNgB8MPdGIUMIIZq1uZnW/ExMzJSETeo6LaUm+www+1LvY+RJneCaLT2DtnVnBB0EFnfmO2CSnfnohc0TXED4gBN+AgDlfBzUrU6dmkHtG/DqBY1zZqTH0gFhqskeB/Q4QmbAdusHL1yOStDowfH01AV6vBnASaEjdOOblidLXJLwPXlarp0SL3beJCtYYg4MIudY0QPMRYwVObEZskW02LFmGAQmhBBNzp1I5Upq3BkrZkqiJiVu7PqSvEzMhWl9D66BHqShl9zMP6IbZ8/+W3T43q//9+jwR3T4AR1+iQ4f0eEFPT6hwzv0+AkdntHjs9//hB4f/fIJPQYccECPzz6yexjLQ27ZmeWr2tbnhGBvP9nuxi7XoTu2E01BxOj1AR2eIA7R1H3RwmbLQfI0NQ12blbplNBJTfpYc579vtjnYpNG2s/F7jsmbOw+ujOEEKKpyc3IstadSYmZFmGTW5ZcmiVlqNgzA8DQAUO8zPRv/IkiaOwAekDanfkBA74FZuWmnyC9mlxGooP7L/IDtBPjlq+QZM3ByxMnZN78em9ETG/Ei/RgkoivFi922oKSkJHzroXOpVhasjOxc58i137CVKzEBs6TfzVaeKScGSAIFr3PujPAvOxECCGk6EqgPTtTK2pS4qRGvGzhyuTE24SnyYn/Xrkzgi416ekNAIzZmT8AeI8BP0Bm1Ab+hAHf4ISPcA3We8CXmRwHAF8jlBgO/h7CeLkuJ9Ohx2cvag5exLz5pRYvQfZM3RgdApb/lQCwHtsmPlBeGPcmx1LnxpZ7UtT+1EJsmgEgPOlrYZ8dNE/vA+L5l5ijEjvvx8h5AIUMIeRRKZVYYufVZGf0thUXpQxNKQdTm5VZKm6qcjL6WHnQPB0ETrkzgJviAMAkDPwRGPMzX+MUFTSuWORufoBrAHuEaRFevagRB+bVCxc3GWXalZG/Z4QxZXSJyb2GMDO2hIClcY+NK3OuclMJ24tIkxIuciz2uZQjA8xzMsJr5NzPkX16f8ydsf/i/uSXzMsQQogm1oi3CprWklNN+WlLAdP6/EnyYubXGPBbdNXujC43/YQT3qHHZ5zwDeDzMwPe4zQRNO/gGj9XbnIPIGHfTj20TFJ5UALm4F0a1x07npGxI/1K76XjeF6+xHRuAZMTKi3npcpRMZEi5yPyGf0vQpebYsJGl4iAeOnoY+TzQHBiUtcghBAibFFqKpWeYmKmRdzEREwsJ7PElcmWmIBpADjs+w0w9mjSQWAA+B4dfo8O/zMwCwN/jx6/QIef0OE7dPgBPb5Fhw/o8Q26MRD8Hh1+8sLkCb0f78WJlM9+/wE9vqDHsxcpr7609OQdGb189cvBl5DeIL2aggtjXZmDKStp0XJEXMC0jQLcTo2oAfKhYCAe0K35fO66qWOxUC8wdeAsLDURQkiJVMO9ptxUKjnF3JqSqMmdG7tu6j5Soiy2nKynA8DAdGqDmDsj484Aodz0DYZxMDTJz3wA8C1OXtA4l+YV3VhyesaA9+jHxk+XmA6+cCTrImrcYHxuKULoiA5P0L2UQuD3SQmWAW78mJMRMdNu2VNxY90DmONAWWDUkCrr5M6LCRd9PFVmEmIh3tg92GOfEvtjJSbhz5F9AoUMIYS0ll5KYkav1zo0Kaem1sHJCZhSiWmRKwPEnRm3X7szgHNotDsDxLtqf0SHn6PDJ3T4S+/OfEY3cWg+osfX3nF5847Nq18e/D4pGXXeoXlBNzo1RyNg9PYROieDUeAc1bYIF+3AnNCNo9TaYzXUuDYlxyRFrWNTc/1cGadU4skJrJRDI+TEyh8LnyWEkPukKRcSOb+l3GS3S25JSaTkHJ3UtWrKS7HnSD0rAOfM5MUMsKzclBM0MgbNF7gxab54EfMeHT6pEtQ7dPjsxYuIGitiRKRYYQME0SIC5x3mboycq4/p/SW2yNMsdXRqhMtacVNzvCRiPhaO/6FwnGFgQshjUCtsSg18ruRUU3YqCZIWEVMrZBBZjy1jz50tMw2wAqdUbvoOA74H8Et/vgSC/wTgO5zwA3pfcoIPBXf4CIzLN7iJBo6+rCT9jEI3arf+hBPghc4LOi9z3L43yEzcGIXOEzrfqyc4Ms/+G9zYK93E+bh0Xib1C5SESOxzVnjESj015+i8S6pbeqrMJEy73Mf5r5ljAIUMIeTRqSnH6G0rbmodmhanpiRyWoRM7HlKZaXo/pQzA/xG7cu5MwDwe3T4G+/OAIg6NBIK1qMEf4MOr6rs9AXd6My898e0U/NmykjPat+LcmG0EyPi5AiX07GujCCf0dtbs0WuBsiHa2PU9hAquSy156QCvpp/rjgHYO8mQggJZB0KzIVAqfRU81dyWtY6MSU3pvTM2TKTO25LTcB2gkZKTrrs9LUXMClR8+b/YsLmFR2+Bsb9IkZejHhpLS2dQ9TUsKYRbxE7tefWiBjABb9rKTkzAN0ZQgipcyly7karQ1MjalrEy1Ihk1sfGcWMPyM+hH+toLH5GaAsaHSO5tU7NTFR86aWVtiIuAEwihsAo8ABgqCRc/RSeEFatGwtaFqdlRK1QmPJ95cyL5atxYxAUUMIeUxSQiZ2LCcGYmJCr1/ir3QfqXtPbaPz+3Jixh3X0xusFTQf0eGvgKyokdJTStQAmAibIzp8A4zCBsDo3ABTIaKFjuYVabFyrVF/c7SKF6Cu9GNZ0l26RcwAwPcLvoMQQh6LSwua2L417stZhAwQETP+zHpBI2Lm74ExECyCBgD+xi91LycAUZcGwKz0pJ0aADNhAwQBI9siSrTAgVrK+jdqPca1SkuaJeIjRquzolk69kuph5KFgoYQQmpJCZtSaSa3XCNsUsdT10ZiX+zeYs8z0qn9s0Z7E0EDhAwN4ATNB7heT+LQAIiWngBMRA2AiVsDTIUNgIm4keW3als7LzGh8i76zIGU6FnLVoIlRW6QuhrWDGT3X1Z8luPOEEKIkHNlUsdbxYwsS0KkRcCU1kv3GXuWkc7sXydmgLKgSZWdgODSAIg6NVJ+AjC6NT9DECdf/L7vzD4gCBxgLkZi4kT2fRt5+hpypaprjW67xfduJSz+3xWfZY8mQsh9UhIqSz6fEwMlIZPbV7NdWo8tc+uxbQAVYsZ/cpmgAeK9nETQAHOXBoiLGgATt+YzOvzCL8WxiYkb2f+dvx8rMr5khAywXMzk3Ju1DslS/lQ+pZnaLtUlfrfRdQgh5HZZK2ZS11gqaGRZI2xqz80tc+uxbQBzIeP3xdlU0ABxlyYmanRIGHAOzS/hRExM2EAtgSBwZF2IiZiYm/LdbE/edamhNRR7DrYSITH+v42u8/uNrkMIIfdDreCpLTel1ltFScux2Hm59dg2gLiQ8fvjJMSM+0xK0ADzXk5A3qUB4qIGwMStATBxbPQ2EATNt+Z+PpvtkjD55gz5mNZA7KU5l9D5pzNdl2UnQshj05qjSW0vzdYsWab21WyPbClm3Od+Y/bU5miAsqgBysIGCGJGnBu7H5iLmV8k9qeoPe8SXEsUrcm7lGC5iRBCSqxxZ+z+tW7NmnNy67l9ANJCxh9Ls4mgAeIuDTAXNUDarYFZ/7lajwkc4bvMM9hz74Wtyj61/F8X/j6APZ4IIWRKTvDUZGhq1tcKlrMIGX88zypBA8RdGmAuagBE3Rog7tjYdWAqcICpyLHcq5CpZS+OyG+vfQOEEHI3LBU0drtW1CxZj22n9gEoCxl/TpmioAGQzdEA7aIGiDs2wFTcAHNRk9qX2/9X0b3nYy9iYgv+j2vfgOFaXeEJIWQf1JSbUvuWCJK17ssqIePPq6MgaNy1al0aYC5qgLiwATArRQFTcSNYkQOkxUuK1vNvkVtxQ+5J8BFCyHbUZmhy57cKG7vdGuJtEjFAvZDx59ZTJWgANIkaoCxsgLK4EWIiR/jwAEJlL/zv174BQgh5aFpKTqn9WwiUFpdopEXI+PPbWCxogHz5CYiLGmAubITfm/2x8lQNOQF07/xv176BC8PZtwkh98UWLk3r/rWuy6ZCxn+mnQpBE65dK2qAubAB4uIGSAscYC5yWvnnBxY3twZLUYSQx6K5oW/4/BpBs+b6I0uEjP/cclaLGqBO2ABlcaPJCR2yT/7DtW+AEEIeghqxsIV70/SdS0WM+vw6KgVN+K5WUSNYcSP8vVqvETotUBTVQSFCCCHnZq0js+R6a0VKbU+k1c+2WWPdLGqAtLAByuIGSAsc4e+zRx1bC6A9879e+wYIIYScgS2Ezhbipum8LUSMutZ2NAia6ffnRI1QI24sJbFDSA7mcQgh98MS4dDymdbeR5s6TWdp7BeIGqDWsbEsETnksWAZjBBCciwVFkt6HW1dLiOEEEIIuX3+f0c2a6q9ZLbLAAAAAElFTkSuQmCC"/></g></g></svg>
\ No newline at end of file
diff --git a/resources/views/reference/show.antlers.html b/public/img/adverts/.gitkeep
similarity index 100%
rename from resources/views/reference/show.antlers.html
rename to public/img/adverts/.gitkeep
diff --git a/public/img/adverts/photographer.jpg b/public/img/adverts/photographer.jpg
new file mode 100644
index 000000000..407dae608
Binary files /dev/null and b/public/img/adverts/photographer.jpg differ
diff --git a/public/img/adverts/seo-pro.jpg b/public/img/adverts/seo-pro.jpg
new file mode 100644
index 000000000..d93502ae2
Binary files /dev/null and b/public/img/adverts/seo-pro.jpg differ
diff --git a/public/img/antlers-profiler.png b/public/img/antlers-profiler.png
new file mode 100644
index 000000000..3373e6253
Binary files /dev/null and b/public/img/antlers-profiler.png differ
diff --git a/public/img/asset-actions.png b/public/img/asset-actions.png
new file mode 100644
index 000000000..b5e2807d2
Binary files /dev/null and b/public/img/asset-actions.png differ
diff --git a/public/img/asset-browser-v4.png b/public/img/asset-browser-v4.png
new file mode 100644
index 000000000..8dd001caa
Binary files /dev/null and b/public/img/asset-browser-v4.png differ
diff --git a/public/img/asset-editor-v4.png b/public/img/asset-editor-v4.png
new file mode 100644
index 000000000..67c571246
Binary files /dev/null and b/public/img/asset-editor-v4.png differ
diff --git a/public/img/configure-sites.png b/public/img/configure-sites.png
new file mode 100644
index 000000000..14fbd000b
Binary files /dev/null and b/public/img/configure-sites.png differ
diff --git a/public/img/deploying/digital-ocean-app-platform/authorize-github.png b/public/img/deploying/digital-ocean-app-platform/authorize-github.png
deleted file mode 100644
index 92cbbbe93..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/authorize-github.png and /dev/null differ
diff --git a/public/img/deploying/digital-ocean-app-platform/build-command.png b/public/img/deploying/digital-ocean-app-platform/build-command.png
deleted file mode 100644
index 2b0a86d53..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/build-command.png and /dev/null differ
diff --git a/public/img/deploying/digital-ocean-app-platform/building.png b/public/img/deploying/digital-ocean-app-platform/building.png
deleted file mode 100644
index 8237fa7ea..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/building.png and /dev/null differ
diff --git a/public/img/deploying/digital-ocean-app-platform/creating-new-app.png b/public/img/deploying/digital-ocean-app-platform/creating-new-app.png
deleted file mode 100644
index 3c1ead3d4..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/creating-new-app.png and /dev/null differ
diff --git a/public/img/deploying/digital-ocean-app-platform/edit-plan.png b/public/img/deploying/digital-ocean-app-platform/edit-plan.png
deleted file mode 100644
index 25b82032c..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/edit-plan.png and /dev/null differ
diff --git a/public/img/deploying/digital-ocean-app-platform/env-vars.png b/public/img/deploying/digital-ocean-app-platform/env-vars.png
deleted file mode 100644
index 4f7b1c0e6..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/env-vars.png and /dev/null differ
diff --git a/public/img/deploying/digital-ocean-app-platform/info-region.png b/public/img/deploying/digital-ocean-app-platform/info-region.png
deleted file mode 100644
index 7aac0a68d..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/info-region.png and /dev/null differ
diff --git a/public/img/deploying/digital-ocean-app-platform/new-app-button.png b/public/img/deploying/digital-ocean-app-platform/new-app-button.png
deleted file mode 100644
index b79230865..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/new-app-button.png and /dev/null differ
diff --git a/public/img/deploying/digital-ocean-app-platform/repo-and-branch.png b/public/img/deploying/digital-ocean-app-platform/repo-and-branch.png
deleted file mode 100644
index b51453c56..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/repo-and-branch.png and /dev/null differ
diff --git a/public/img/deploying/digital-ocean-app-platform/resources.png b/public/img/deploying/digital-ocean-app-platform/resources.png
deleted file mode 100644
index c53b644c4..000000000
Binary files a/public/img/deploying/digital-ocean-app-platform/resources.png and /dev/null differ
diff --git a/public/img/deployment-cloud-db-credentials.png b/public/img/deployment-cloud-db-credentials.png
new file mode 100644
index 000000000..b6b93d257
Binary files /dev/null and b/public/img/deployment-cloud-db-credentials.png differ
diff --git a/public/img/deployment-cloud-new-application.png b/public/img/deployment-cloud-new-application.png
new file mode 100644
index 000000000..d137ca994
Binary files /dev/null and b/public/img/deployment-cloud-new-application.png differ
diff --git a/public/img/deployment-cloud-new-bucket.png b/public/img/deployment-cloud-new-bucket.png
new file mode 100644
index 000000000..ad99f2f27
Binary files /dev/null and b/public/img/deployment-cloud-new-bucket.png differ
diff --git a/public/img/deployment-cloud-new-database-cluster.png b/public/img/deployment-cloud-new-database-cluster.png
new file mode 100644
index 000000000..d375cd6d4
Binary files /dev/null and b/public/img/deployment-cloud-new-database-cluster.png differ
diff --git a/public/img/deployment-cloud-project-overview.png b/public/img/deployment-cloud-project-overview.png
new file mode 100644
index 000000000..231fb1edb
Binary files /dev/null and b/public/img/deployment-cloud-project-overview.png differ
diff --git a/public/img/dropdown-dark-mode.svg b/public/img/dropdown-dark-mode.svg
new file mode 100644
index 000000000..02026e6c7
--- /dev/null
+++ b/public/img/dropdown-dark-mode.svg
@@ -0,0 +1 @@
+<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 9 5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m-1.715 1.462h10.918v6.658h-10.918z"/></clipPath><g transform="matrix(.791056 0 0 .74717 1.35654 -1.09258)"><path d="m-1.715 1.462h10.918v6.658h-10.918z" fill="none"/><g clip-path="url(#a)"><path d="m1.047 8.693c.222.22.583.22.806 0l3.799-3.75c.222-.219.222-.576 0-.795l-3.799-3.75c-.223-.219-.584-.219-.806 0-.223.219-.223.576 0 .795l3.396 3.353-3.396 3.352c-.223.22-.223.576 0 .795z" fill="#fff" transform="matrix(0 1.33838 -1.26413 0 9.48304 .284673)"/></g></g></svg>
\ No newline at end of file
diff --git a/public/img/dropdown.svg b/public/img/dropdown.svg
new file mode 100644
index 000000000..33e29739d
--- /dev/null
+++ b/public/img/dropdown.svg
@@ -0,0 +1 @@
+<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 9 5" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m-1.715 1.462h10.918v6.658h-10.918z"/></clipPath><g transform="matrix(.791056 0 0 .74717 1.35654 -1.09258)"><path d="m-1.715 1.462h10.918v6.658h-10.918z" fill="none"/><g clip-path="url(#a)"><path d="m1.047 8.693c.222.22.583.22.806 0l3.799-3.75c.222-.219.222-.576 0-.795l-3.799-3.75c-.223-.219-.584-.219-.806 0-.223.219-.223.576 0 .795l3.396 3.353-3.396 3.352c-.223.22-.223.576 0 .795z" transform="matrix(0 1.33838 -1.26413 0 9.48304 .284673)"/></g></g></svg>
\ No newline at end of file
diff --git a/public/img/favicon-16x16.png b/public/img/favicon-16x16.png
deleted file mode 100644
index 5f83bb9d5..000000000
Binary files a/public/img/favicon-16x16.png and /dev/null differ
diff --git a/public/img/favicon-32x32.png b/public/img/favicon-32x32.png
deleted file mode 100644
index 3772aa272..000000000
Binary files a/public/img/favicon-32x32.png and /dev/null differ
diff --git a/public/img/favicons/apple-touch-icon-114x114.png b/public/img/favicons/apple-touch-icon-114x114.png
new file mode 100644
index 000000000..84693fd8d
Binary files /dev/null and b/public/img/favicons/apple-touch-icon-114x114.png differ
diff --git a/public/img/favicons/apple-touch-icon-120x120.png b/public/img/favicons/apple-touch-icon-120x120.png
new file mode 100644
index 000000000..78b466373
Binary files /dev/null and b/public/img/favicons/apple-touch-icon-120x120.png differ
diff --git a/public/img/favicons/apple-touch-icon-144x144.png b/public/img/favicons/apple-touch-icon-144x144.png
new file mode 100644
index 000000000..797aa79aa
Binary files /dev/null and b/public/img/favicons/apple-touch-icon-144x144.png differ
diff --git a/public/img/favicons/apple-touch-icon-152x152.png b/public/img/favicons/apple-touch-icon-152x152.png
new file mode 100644
index 000000000..4fbc60eae
Binary files /dev/null and b/public/img/favicons/apple-touch-icon-152x152.png differ
diff --git a/public/img/favicons/apple-touch-icon-57x57.png b/public/img/favicons/apple-touch-icon-57x57.png
new file mode 100644
index 000000000..87f730ec7
Binary files /dev/null and b/public/img/favicons/apple-touch-icon-57x57.png differ
diff --git a/public/img/favicons/apple-touch-icon-60x60.png b/public/img/favicons/apple-touch-icon-60x60.png
new file mode 100644
index 000000000..58bd72ace
Binary files /dev/null and b/public/img/favicons/apple-touch-icon-60x60.png differ
diff --git a/public/img/favicons/apple-touch-icon-72x72.png b/public/img/favicons/apple-touch-icon-72x72.png
new file mode 100644
index 000000000..b6e5e457f
Binary files /dev/null and b/public/img/favicons/apple-touch-icon-72x72.png differ
diff --git a/public/img/favicons/apple-touch-icon-76x76.png b/public/img/favicons/apple-touch-icon-76x76.png
new file mode 100644
index 000000000..5a0dd7ea8
Binary files /dev/null and b/public/img/favicons/apple-touch-icon-76x76.png differ
diff --git a/public/img/favicons/favicon-128.png b/public/img/favicons/favicon-128.png
new file mode 100644
index 000000000..fafb1e412
Binary files /dev/null and b/public/img/favicons/favicon-128.png differ
diff --git a/public/img/favicons/favicon-16x16.png b/public/img/favicons/favicon-16x16.png
new file mode 100644
index 000000000..fd9c72a54
Binary files /dev/null and b/public/img/favicons/favicon-16x16.png differ
diff --git a/public/img/favicons/favicon-196x196.png b/public/img/favicons/favicon-196x196.png
new file mode 100644
index 000000000..c7442b322
Binary files /dev/null and b/public/img/favicons/favicon-196x196.png differ
diff --git a/public/img/favicons/favicon-32x32.png b/public/img/favicons/favicon-32x32.png
new file mode 100644
index 000000000..19c1f11b0
Binary files /dev/null and b/public/img/favicons/favicon-32x32.png differ
diff --git a/public/img/favicons/favicon-96x96.png b/public/img/favicons/favicon-96x96.png
new file mode 100644
index 000000000..61c792777
Binary files /dev/null and b/public/img/favicons/favicon-96x96.png differ
diff --git a/public/img/favicons/favicon.ico b/public/img/favicons/favicon.ico
new file mode 100644
index 000000000..fbcc14f4e
Binary files /dev/null and b/public/img/favicons/favicon.ico differ
diff --git a/public/img/favicons/mstile-144x144.png b/public/img/favicons/mstile-144x144.png
new file mode 100644
index 000000000..797aa79aa
Binary files /dev/null and b/public/img/favicons/mstile-144x144.png differ
diff --git a/public/img/favicons/mstile-150x150.png b/public/img/favicons/mstile-150x150.png
new file mode 100644
index 000000000..db7fee49d
Binary files /dev/null and b/public/img/favicons/mstile-150x150.png differ
diff --git a/public/img/favicons/mstile-310x150.png b/public/img/favicons/mstile-310x150.png
new file mode 100644
index 000000000..687af79a5
Binary files /dev/null and b/public/img/favicons/mstile-310x150.png differ
diff --git a/public/img/favicons/mstile-310x310.png b/public/img/favicons/mstile-310x310.png
new file mode 100644
index 000000000..de0ebd48e
Binary files /dev/null and b/public/img/favicons/mstile-310x310.png differ
diff --git a/public/img/favicons/mstile-70x70.png b/public/img/favicons/mstile-70x70.png
new file mode 100644
index 000000000..fafb1e412
Binary files /dev/null and b/public/img/favicons/mstile-70x70.png differ
diff --git a/public/img/field-validation-custom-rule.png b/public/img/field-validation-custom-rule.png
new file mode 100644
index 000000000..1f111506f
Binary files /dev/null and b/public/img/field-validation-custom-rule.png differ
diff --git a/public/img/fieldtypes/icons/dictionary.svg b/public/img/fieldtypes/icons/dictionary.svg
new file mode 100644
index 000000000..414738237
--- /dev/null
+++ b/public/img/fieldtypes/icons/dictionary.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23.5 19.5a2 2 0 0 1 -2 2h-19a2 2 0 0 1 -2 -2v-1h23Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="m2.5 21.5 0 2" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="m21.5 21.5 0 2" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="M12 18.5H7v-17a1 1 0 0 1 1 -1h3a1 1 0 0 1 1 1Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="M17.144 18.5 15.156 2.094a1 1 0 0 1 0.872 -1.113L19.006 0.62a1 1 0 0 1 1.113 0.873L22.18 18.5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="M15 18.5h-3v-15h2a1 1 0 0 1 1 1Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="M7 18.5H2v-17a1 1 0 0 1 1 -1h3a1 1 0 0 1 1 1Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="m9 15.5 1 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="m4 15.5 1 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="m4.5 3.5 0 9" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="m9.5 3.5 0 9" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path><path d="M18 13.5a1 1 0 1 0 2 0 1 1 0 1 0 -2 0" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"></path></svg>
diff --git a/public/img/fieldtypes/icons/group.svg b/public/img/fieldtypes/icons/group.svg
new file mode 100644
index 000000000..77d7d81b1
--- /dev/null
+++ b/public/img/fieldtypes/icons/group.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-0.5 -0.5 24 24"><path d="M1.438.477h20.125s.958 0 .958.959V21.56s0 .958-.959.958H1.438s-.958 0-.958-.958V1.436s0-.959.959-.959M12.938 6.227h6.708M10.063 10.06h9.583M10.063 13.894h9.583M10.063 17.727h6.708" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><path d="M3.833 4.31h2.875s.48 0 .48.48v2.875s0 .479-.48.479H3.833s-.479 0-.479-.48V4.79s0-.48.48-.48M3.833 10.06h2.875s.48 0 .48.48v2.875s0 .479-.48.479H3.833s-.479 0-.479-.48V10.54s0-.48.48-.48M3.833 15.81h2.875s.48 0 .48.48v2.875s0 .479-.48.479H3.833s-.479 0-.479-.48V16.29s0-.48.48-.48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/icons/icon.svg b/public/img/fieldtypes/icons/icon.svg
new file mode 100644
index 000000000..13640caa9
--- /dev/null
+++ b/public/img/fieldtypes/icons/icon.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" stroke-width="1.5"><path d="M6,23.249,4.1,19.923a2.263,2.263,0,0,1,3.848-2.378l1.8,2.7V9a2.25,2.25,0,1,1,4.5,0v8.25h3.379A4.332,4.332,0,0,1,21.75,21.6v1.653" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M18 0.749L23.25 5.999" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M18 5.999L23.25 0.749" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M7.5 0.749L3.75 5.999 0.75 2.999" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/icons/navs.svg b/public/img/fieldtypes/icons/navs.svg
new file mode 100644
index 000000000..60dec871c
--- /dev/null
+++ b/public/img/fieldtypes/icons/navs.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M16.5 23.248H21a.75.75 0 0 0 .75-.75v-4.939a.752.752 0 0 0-.219-.53l-1.06-1.061a.747.747 0 0 0-.53-.22H16.5a.75.75 0 0 0-.75.75v6c0 .414.336.75.75.75zM16.5 9.748H21A.75.75 0 0 0 21.75 9V4.059a.752.752 0 0 0-.219-.53l-1.06-1.061a.747.747 0 0 0-.53-.22H16.5a.75.75 0 0 0-.75.75V9a.75.75 0 0 0 .75.748zM2.25.748v1.5M2.25 5.248v3M2.25 11.248v3M2.25 17.248v1.5a1.5 1.5 0 0 0 1.5 1.5h1.5M8.25 20.248h3M14.25 20.248h1.5M2.25 6.748h3M8.25 6.748h3M14.25 6.748h1.5"/></g></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/icons/spacer.svg b/public/img/fieldtypes/icons/spacer.svg
new file mode 100644
index 000000000..a7fb429af
--- /dev/null
+++ b/public/img/fieldtypes/icons/spacer.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m17.5 14.999 3-3-3-3m-14 3h17m-14 3-3-3 3-3m-6-3.5v13m23-13v13"></path></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/icons/taggable.svg b/public/img/fieldtypes/icons/taggable.svg
new file mode 100644
index 000000000..9f3168d94
--- /dev/null
+++ b/public/img/fieldtypes/icons/taggable.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23.03 14.545a.552.552 0 0 1-.249 1l-5.544 1.692-1.693 5.543a.551.551 0 0 1-1 .249L1.452 9.938a2.789 2.789 0 0 1-.708-1.707L.738 1.737a1 1 0 0 1 1-1h6.491a2.782 2.782 0 0 1 1.707.707z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/><circle cx="5.737" cy="5.737" r="2" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/icons/user-groups.svg b/public/img/fieldtypes/icons/user-groups.svg
new file mode 100644
index 000000000..7b9294337
--- /dev/null
+++ b/public/img/fieldtypes/icons/user-groups.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width=".667" d="M11.333 13.133c2.566.217 4.334.674 4.334 1.2 0 .734-3.432 1.334-7.667 1.334s-7.667-.6-7.667-1.334c0-.526 1.757-.982 4.306-1.2m7.528-9.966a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0zm1.5 2.166a2 2 0 0 0-2 2V9h1L13 12h1.333l.334-3h1V7.333a2 2 0 0 0-2-2zM.833 3.167a1.5 1.5 0 1 0 3 0 1.5 1.5 0 1 0-3 0zm1.5 2.166a2 2 0 0 0-2 2V9h1l.334 3H3l.333-3h1V7.333a2 2 0 0 0-2-2zm3.834-3.166a1.833 1.833 0 1 0 3.666 0 1.833 1.833 0 1 0-3.666 0zM10.333 7a2.333 2.333 0 0 0-4.666 0v2h1.055L7 12.333h2L9.278 9h1.055z"/></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/icons/user-roles.svg b/public/img/fieldtypes/icons/user-roles.svg
new file mode 100644
index 000000000..1c8bb7069
--- /dev/null
+++ b/public/img/fieldtypes/icons/user-roles.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width=".667"><path d="M9 6a3.667 3.667 0 1 0-4.667 3.525v.808L3.667 11l.666.667v.666L3.667 13l.666.667v1l1 1 1-1V9.525A3.667 3.667 0 0 0 9 6z"/><path d="M4 4.999a1.333 1.333 0 1 0 2.667 0 1.333 1.333 0 1 0-2.667 0zm2.333 5.01a3.671 3.671 0 0 0 3.617.022l.717.636v1h1l.333.35V13h.878l.708.667H15v-1.414l-3.636-3.636a3.667 3.667 0 0 0-3.667-5.422"/><path d="M5.333 4.667v-3a1.333 1.333 0 0 1 2.667 0v1.502"/></g></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/icons/user_groups.svg b/public/img/fieldtypes/icons/user_groups.svg
deleted file mode 100644
index 197a67f0d..000000000
--- a/public/img/fieldtypes/icons/user_groups.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 16"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M3 3.5H1C.7 3.5.5 3.3.5 3V1C.5.7.7.5 1 .5h2c.3 0 .5.2.5.5v2c0 .3-.2.5-.5.5zM3 15.5H1c-.3 0-.5-.2-.5-.5v-2c0-.3.2-.5.5-.5h2c.3 0 .5.2.5.5v2c0 .3-.2.5-.5.5zM14 3.5h-2c-.3 0-.5-.2-.5-.5V1c0-.3.2-.5.5-.5h2c.3 0 .5.2.5.5v2c0 .3-.2.5-.5.5zM14 15.5h-2c-.3 0-.5-.2-.5-.5v-2c0-.3.2-.5.5-.5h2c.3 0 .5.2.5.5v2c0 .3-.2.5-.5.5zM3.5 1.5h8M13.5 3.5v9M11.5 14.5h-8M1.5 12.5v-9M4.5 6c0-.8.7-1.5 1.5-1.5h3c.8 0 1.5.7 1.5 1.5M7.5 4.5v7M5.5 11.5h4"/></g></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/icons/user_roles.svg b/public/img/fieldtypes/icons/user_roles.svg
deleted file mode 100644
index 197a67f0d..000000000
--- a/public/img/fieldtypes/icons/user_roles.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 16"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M3 3.5H1C.7 3.5.5 3.3.5 3V1C.5.7.7.5 1 .5h2c.3 0 .5.2.5.5v2c0 .3-.2.5-.5.5zM3 15.5H1c-.3 0-.5-.2-.5-.5v-2c0-.3.2-.5.5-.5h2c.3 0 .5.2.5.5v2c0 .3-.2.5-.5.5zM14 3.5h-2c-.3 0-.5-.2-.5-.5V1c0-.3.2-.5.5-.5h2c.3 0 .5.2.5.5v2c0 .3-.2.5-.5.5zM14 15.5h-2c-.3 0-.5-.2-.5-.5v-2c0-.3.2-.5.5-.5h2c.3 0 .5.2.5.5v2c0 .3-.2.5-.5.5zM3.5 1.5h8M13.5 3.5v9M11.5 14.5h-8M1.5 12.5v-9M4.5 6c0-.8.7-1.5 1.5-1.5h3c.8 0 1.5.7 1.5 1.5M7.5 4.5v7M5.5 11.5h4"/></g></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/icons/width.svg b/public/img/fieldtypes/icons/width.svg
new file mode 100644
index 000000000..a7fb429af
--- /dev/null
+++ b/public/img/fieldtypes/icons/width.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m17.5 14.999 3-3-3-3m-14 3h17m-14 3-3-3 3-3m-6-3.5v13m23-13v13"></path></svg>
\ No newline at end of file
diff --git a/public/img/fieldtypes/screenshots/.meta/array.png.yaml b/public/img/fieldtypes/screenshots/.meta/array.png.yaml
deleted file mode 100644
index 8cf6a801a..000000000
--- a/public/img/fieldtypes/screenshots/.meta/array.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 63712
-last_modified: 1577735182
-width: 1048
-height: 964
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/assets-grid.png.yaml b/public/img/fieldtypes/screenshots/.meta/assets-grid.png.yaml
deleted file mode 100644
index 9f6c659db..000000000
--- a/public/img/fieldtypes/screenshots/.meta/assets-grid.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 80863
-last_modified: 1577735182
-width: 1086
-height: 704
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/assets-list.png.yaml b/public/img/fieldtypes/screenshots/.meta/assets-list.png.yaml
deleted file mode 100644
index 36f84f78a..000000000
--- a/public/img/fieldtypes/screenshots/.meta/assets-list.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 18548
-last_modified: 1577735182
-width: 1082
-height: 546
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/bard-buttons.png.yaml b/public/img/fieldtypes/screenshots/.meta/bard-buttons.png.yaml
deleted file mode 100644
index 76577cda7..000000000
--- a/public/img/fieldtypes/screenshots/.meta/bard-buttons.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 10047
-last_modified: 1577735182
-width: 1466
-height: 82
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/bard.jpg.yaml b/public/img/fieldtypes/screenshots/.meta/bard.jpg.yaml
deleted file mode 100644
index cc284992d..000000000
--- a/public/img/fieldtypes/screenshots/.meta/bard.jpg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 260409
-last_modified: 1577735182
-width: 1272
-height: 1800
-mime_type: image/jpeg
diff --git a/public/img/fieldtypes/screenshots/.meta/button_group.png.yaml b/public/img/fieldtypes/screenshots/.meta/button_group.png.yaml
deleted file mode 100644
index 7a4d31710..000000000
--- a/public/img/fieldtypes/screenshots/.meta/button_group.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 19103
-last_modified: 1587578538
-width: 500
-height: 212
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/checkboxes.png.yaml b/public/img/fieldtypes/screenshots/.meta/checkboxes.png.yaml
deleted file mode 100644
index 975d81d36..000000000
--- a/public/img/fieldtypes/screenshots/.meta/checkboxes.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 46672
-last_modified: 1577735182
-width: 704
-height: 400
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/code.png.yaml b/public/img/fieldtypes/screenshots/.meta/code.png.yaml
deleted file mode 100644
index e745e8e07..000000000
--- a/public/img/fieldtypes/screenshots/.meta/code.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 39036
-last_modified: 1577735182
-width: 974
-height: 480
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/collections.png.yaml b/public/img/fieldtypes/screenshots/.meta/collections.png.yaml
deleted file mode 100644
index 4bd95df6d..000000000
--- a/public/img/fieldtypes/screenshots/.meta/collections.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 26791
-last_modified: 1633477301
-width: 722
-height: 302
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/color.png.yaml b/public/img/fieldtypes/screenshots/.meta/color.png.yaml
deleted file mode 100644
index 2542a7541..000000000
--- a/public/img/fieldtypes/screenshots/.meta/color.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 44665
-last_modified: 1577735182
-width: 1064
-height: 690
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/date-and-time.png.yaml b/public/img/fieldtypes/screenshots/.meta/date-and-time.png.yaml
deleted file mode 100644
index eeba42792..000000000
--- a/public/img/fieldtypes/screenshots/.meta/date-and-time.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 4738
-last_modified: 1577735182
-width: 984
-height: 214
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/date-range.png.yaml b/public/img/fieldtypes/screenshots/.meta/date-range.png.yaml
deleted file mode 100644
index 657c3ae5a..000000000
--- a/public/img/fieldtypes/screenshots/.meta/date-range.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 12646
-last_modified: 1577735182
-width: 602
-height: 660
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/date.png.yaml b/public/img/fieldtypes/screenshots/.meta/date.png.yaml
deleted file mode 100644
index 6490631b3..000000000
--- a/public/img/fieldtypes/screenshots/.meta/date.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 15380
-last_modified: 1577735182
-width: 982
-height: 774
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/entries.png.yaml b/public/img/fieldtypes/screenshots/.meta/entries.png.yaml
deleted file mode 100644
index 7a577dec9..000000000
--- a/public/img/fieldtypes/screenshots/.meta/entries.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 16396
-last_modified: 1606229362
-width: 1110
-height: 348
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/form.png.yaml b/public/img/fieldtypes/screenshots/.meta/form.png.yaml
deleted file mode 100644
index 26e89dc60..000000000
--- a/public/img/fieldtypes/screenshots/.meta/form.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 16495
-last_modified: 1635434125
-width: 760
-height: 276
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/grid.png.yaml b/public/img/fieldtypes/screenshots/.meta/grid.png.yaml
deleted file mode 100644
index 598108816..000000000
--- a/public/img/fieldtypes/screenshots/.meta/grid.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 105375
-last_modified: 1633477599
-width: 1550
-height: 730
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/html.png.yaml b/public/img/fieldtypes/screenshots/.meta/html.png.yaml
deleted file mode 100644
index 64fe1093a..000000000
--- a/public/img/fieldtypes/screenshots/.meta/html.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 3293
-last_modified: 1620868757
-width: 520
-height: 150
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/integer.png.yaml b/public/img/fieldtypes/screenshots/.meta/integer.png.yaml
deleted file mode 100644
index 06cbb5029..000000000
--- a/public/img/fieldtypes/screenshots/.meta/integer.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 2663
-last_modified: 1577735182
-width: 792
-height: 212
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/link.png.yaml b/public/img/fieldtypes/screenshots/.meta/link.png.yaml
deleted file mode 100644
index fa8e45299..000000000
--- a/public/img/fieldtypes/screenshots/.meta/link.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 15126
-last_modified: 1620423852
-width: 930
-height: 486
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/list.png.yaml b/public/img/fieldtypes/screenshots/.meta/list.png.yaml
deleted file mode 100644
index 334f32ed8..000000000
--- a/public/img/fieldtypes/screenshots/.meta/list.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 10192
-last_modified: 1577735182
-width: 778
-height: 346
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/markdown-dark-mode.png.yaml b/public/img/fieldtypes/screenshots/.meta/markdown-dark-mode.png.yaml
deleted file mode 100644
index 59104f596..000000000
--- a/public/img/fieldtypes/screenshots/.meta/markdown-dark-mode.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 23774
-last_modified: 1587578391
-width: 1344
-height: 800
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/markdown.png.yaml b/public/img/fieldtypes/screenshots/.meta/markdown.png.yaml
deleted file mode 100644
index 46d925f82..000000000
--- a/public/img/fieldtypes/screenshots/.meta/markdown.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 39973
-last_modified: 1587578391
-width: 1118
-height: 560
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/radio.png.yaml b/public/img/fieldtypes/screenshots/.meta/radio.png.yaml
deleted file mode 100644
index cd72cb9a5..000000000
--- a/public/img/fieldtypes/screenshots/.meta/radio.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 5705
-last_modified: 1577735182
-width: 320
-height: 320
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/range.png.yaml b/public/img/fieldtypes/screenshots/.meta/range.png.yaml
deleted file mode 100644
index 0e34df275..000000000
--- a/public/img/fieldtypes/screenshots/.meta/range.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 3235
-last_modified: 1577735182
-width: 986
-height: 226
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/replicator.png.yaml b/public/img/fieldtypes/screenshots/.meta/replicator.png.yaml
deleted file mode 100644
index c893bf400..000000000
--- a/public/img/fieldtypes/screenshots/.meta/replicator.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 154846
-last_modified: 1633478210
-width: 1322
-height: 1224
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/revealer.gif.yaml b/public/img/fieldtypes/screenshots/.meta/revealer.gif.yaml
deleted file mode 100644
index 2a1c8dd9d..000000000
--- a/public/img/fieldtypes/screenshots/.meta/revealer.gif.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 29875
-last_modified: 1577735182
-width: 974
-height: 220
-mime_type: image/gif
diff --git a/public/img/fieldtypes/screenshots/.meta/section.png.yaml b/public/img/fieldtypes/screenshots/.meta/section.png.yaml
deleted file mode 100644
index 7466e5474..000000000
--- a/public/img/fieldtypes/screenshots/.meta/section.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 14696
-last_modified: 1577735182
-width: 548
-height: 174
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/select.png.yaml b/public/img/fieldtypes/screenshots/.meta/select.png.yaml
deleted file mode 100644
index 24c27e31c..000000000
--- a/public/img/fieldtypes/screenshots/.meta/select.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 26013
-last_modified: 1587578391
-width: 836
-height: 544
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/sites.png.yaml b/public/img/fieldtypes/screenshots/.meta/sites.png.yaml
deleted file mode 100644
index 6931383be..000000000
--- a/public/img/fieldtypes/screenshots/.meta/sites.png.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-data: {  }
-size: 5520
-last_modified: 1666639510
-width: 1040
-height: 238
-mime_type: image/png
-duration: null
diff --git a/public/img/fieldtypes/screenshots/.meta/slug.png.yaml b/public/img/fieldtypes/screenshots/.meta/slug.png.yaml
deleted file mode 100644
index 921e3fee7..000000000
--- a/public/img/fieldtypes/screenshots/.meta/slug.png.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-data: {  }
-size: 12665
-last_modified: 1666575592
-width: 598
-height: 204
-mime_type: image/png
-duration: null
diff --git a/public/img/fieldtypes/screenshots/.meta/structures.png.yaml b/public/img/fieldtypes/screenshots/.meta/structures.png.yaml
deleted file mode 100644
index d9fd2e2aa..000000000
--- a/public/img/fieldtypes/screenshots/.meta/structures.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 9067
-last_modified: 1620867343
-width: 824
-height: 298
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/table.gif.yaml b/public/img/fieldtypes/screenshots/.meta/table.gif.yaml
deleted file mode 100644
index 59e8465d0..000000000
--- a/public/img/fieldtypes/screenshots/.meta/table.gif.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 221388
-last_modified: 1577735182
-width: 1000
-height: 620
-mime_type: image/gif
diff --git a/public/img/fieldtypes/screenshots/.meta/taggable.png.yaml b/public/img/fieldtypes/screenshots/.meta/taggable.png.yaml
deleted file mode 100644
index b63b698f2..000000000
--- a/public/img/fieldtypes/screenshots/.meta/taggable.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 14683
-last_modified: 1635433680
-width: 1116
-height: 256
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/tags.png.yaml b/public/img/fieldtypes/screenshots/.meta/tags.png.yaml
deleted file mode 100644
index a253f2f1f..000000000
--- a/public/img/fieldtypes/screenshots/.meta/tags.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 14683
-last_modified: 1587578391
-width: 1116
-height: 256
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/taxonomies.png.yaml b/public/img/fieldtypes/screenshots/.meta/taxonomies.png.yaml
deleted file mode 100644
index a63decc79..000000000
--- a/public/img/fieldtypes/screenshots/.meta/taxonomies.png.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-data: {  }
-size: 11643
-last_modified: 1666641374
-width: 1082
-height: 304
-mime_type: image/png
-duration: null
diff --git a/public/img/fieldtypes/screenshots/.meta/template.png.yaml b/public/img/fieldtypes/screenshots/.meta/template.png.yaml
deleted file mode 100644
index 09cc3d2d4..000000000
--- a/public/img/fieldtypes/screenshots/.meta/template.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 20860
-last_modified: 1587578391
-width: 978
-height: 618
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/terms.png.yaml b/public/img/fieldtypes/screenshots/.meta/terms.png.yaml
deleted file mode 100644
index 9b13e6537..000000000
--- a/public/img/fieldtypes/screenshots/.meta/terms.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 10681
-last_modified: 1598241429
-width: 598
-height: 244
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/text.png.yaml b/public/img/fieldtypes/screenshots/.meta/text.png.yaml
deleted file mode 100644
index ae1a24117..000000000
--- a/public/img/fieldtypes/screenshots/.meta/text.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 7668
-last_modified: 1577735182
-width: 1044
-height: 244
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/textarea.png.yaml b/public/img/fieldtypes/screenshots/.meta/textarea.png.yaml
deleted file mode 100644
index 134ee9dcc..000000000
--- a/public/img/fieldtypes/screenshots/.meta/textarea.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 16826
-last_modified: 1577735182
-width: 992
-height: 400
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/time.gif.yaml b/public/img/fieldtypes/screenshots/.meta/time.gif.yaml
deleted file mode 100644
index fc60da866..000000000
--- a/public/img/fieldtypes/screenshots/.meta/time.gif.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 23827
-last_modified: 1577735182
-width: 340
-height: 270
-mime_type: image/gif
diff --git a/public/img/fieldtypes/screenshots/.meta/toggle.png.yaml b/public/img/fieldtypes/screenshots/.meta/toggle.png.yaml
deleted file mode 100644
index 5d0861bdf..000000000
--- a/public/img/fieldtypes/screenshots/.meta/toggle.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 10346
-last_modified: 1577735182
-width: 210
-height: 172
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/user-groups.png.yaml b/public/img/fieldtypes/screenshots/.meta/user-groups.png.yaml
deleted file mode 100644
index 3684975bb..000000000
--- a/public/img/fieldtypes/screenshots/.meta/user-groups.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 34406
-last_modified: 1635438868
-width: 850
-height: 416
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/user-roles.png.yaml b/public/img/fieldtypes/screenshots/.meta/user-roles.png.yaml
deleted file mode 100644
index b83cb22cc..000000000
--- a/public/img/fieldtypes/screenshots/.meta/user-roles.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 31289
-last_modified: 1635440549
-width: 840
-height: 400
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/users.png.yaml b/public/img/fieldtypes/screenshots/.meta/users.png.yaml
deleted file mode 100644
index cf75ed9a2..000000000
--- a/public/img/fieldtypes/screenshots/.meta/users.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 9808
-last_modified: 1577735182
-width: 1002
-height: 484
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/.meta/video.jpg.yaml b/public/img/fieldtypes/screenshots/.meta/video.jpg.yaml
deleted file mode 100644
index 85715e1b4..000000000
--- a/public/img/fieldtypes/screenshots/.meta/video.jpg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 81562
-last_modified: 1577735182
-width: 1050
-height: 852
-mime_type: image/jpeg
diff --git a/public/img/fieldtypes/screenshots/.meta/yaml.png.yaml b/public/img/fieldtypes/screenshots/.meta/yaml.png.yaml
deleted file mode 100644
index 7bcf004db..000000000
--- a/public/img/fieldtypes/screenshots/.meta/yaml.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 9048
-last_modified: 1577735182
-width: 1018
-height: 420
-mime_type: image/png
diff --git a/public/img/fieldtypes/screenshots/color.png b/public/img/fieldtypes/screenshots/color.png
index a8e1cf6c9..87bd9977e 100644
Binary files a/public/img/fieldtypes/screenshots/color.png and b/public/img/fieldtypes/screenshots/color.png differ
diff --git a/public/img/fieldtypes/screenshots/dictionary.png b/public/img/fieldtypes/screenshots/dictionary.png
new file mode 100644
index 000000000..7ce65df73
Binary files /dev/null and b/public/img/fieldtypes/screenshots/dictionary.png differ
diff --git a/public/img/fieldtypes/screenshots/group.png b/public/img/fieldtypes/screenshots/group.png
new file mode 100644
index 000000000..93c41333f
Binary files /dev/null and b/public/img/fieldtypes/screenshots/group.png differ
diff --git a/public/img/fieldtypes/screenshots/icon.png b/public/img/fieldtypes/screenshots/icon.png
new file mode 100644
index 000000000..ad060861d
Binary files /dev/null and b/public/img/fieldtypes/screenshots/icon.png differ
diff --git a/public/img/fieldtypes/screenshots/markdown-dark-mode-v4.png b/public/img/fieldtypes/screenshots/markdown-dark-mode-v4.png
new file mode 100644
index 000000000..09a2a07a8
Binary files /dev/null and b/public/img/fieldtypes/screenshots/markdown-dark-mode-v4.png differ
diff --git a/public/img/fieldtypes/screenshots/markdown-dark-mode.png b/public/img/fieldtypes/screenshots/markdown-dark-mode.png
deleted file mode 100644
index f9007a6b8..000000000
Binary files a/public/img/fieldtypes/screenshots/markdown-dark-mode.png and /dev/null differ
diff --git a/public/img/fieldtypes/screenshots/navs.png b/public/img/fieldtypes/screenshots/navs.png
new file mode 100644
index 000000000..76b268604
Binary files /dev/null and b/public/img/fieldtypes/screenshots/navs.png differ
diff --git a/public/img/fieldtypes/screenshots/radio.png b/public/img/fieldtypes/screenshots/radio.png
index 704ab78fc..552ec2f72 100644
Binary files a/public/img/fieldtypes/screenshots/radio.png and b/public/img/fieldtypes/screenshots/radio.png differ
diff --git a/public/img/fieldtypes/screenshots/spacer.png b/public/img/fieldtypes/screenshots/spacer.png
new file mode 100644
index 000000000..388132a1f
Binary files /dev/null and b/public/img/fieldtypes/screenshots/spacer.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/array.png b/public/img/fieldtypes/screenshots/v4/array.png
new file mode 100644
index 000000000..5d9817d09
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/array.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/assets-list.png b/public/img/fieldtypes/screenshots/v4/assets-list.png
new file mode 100644
index 000000000..315bfeb57
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/assets-list.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/bard-with-sets.png b/public/img/fieldtypes/screenshots/v4/bard-with-sets.png
new file mode 100644
index 000000000..809f37bb0
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/bard-with-sets.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/grid.png b/public/img/fieldtypes/screenshots/v4/grid.png
new file mode 100644
index 000000000..870c07fb5
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/grid.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/list.png b/public/img/fieldtypes/screenshots/v4/list.png
new file mode 100644
index 000000000..eedb6b159
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/list.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/markdown.png b/public/img/fieldtypes/screenshots/v4/markdown.png
new file mode 100644
index 000000000..09702a0af
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/markdown.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/replicator.png b/public/img/fieldtypes/screenshots/v4/replicator.png
new file mode 100644
index 000000000..a0163228c
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/replicator.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/textarea.png b/public/img/fieldtypes/screenshots/v4/textarea.png
new file mode 100644
index 000000000..c85ffe064
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/textarea.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/toggle.png b/public/img/fieldtypes/screenshots/v4/toggle.png
new file mode 100644
index 000000000..ec2ed28ad
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/toggle.png differ
diff --git a/public/img/fieldtypes/screenshots/v4/video.png b/public/img/fieldtypes/screenshots/v4/video.png
new file mode 100644
index 000000000..aaf467c3b
Binary files /dev/null and b/public/img/fieldtypes/screenshots/v4/video.png differ
diff --git a/public/img/fieldtypes/screenshots/width.png b/public/img/fieldtypes/screenshots/width.png
new file mode 100644
index 000000000..5fe467423
Binary files /dev/null and b/public/img/fieldtypes/screenshots/width.png differ
diff --git a/public/img/footer/waterfall-mask.svg b/public/img/footer/waterfall-mask.svg
new file mode 100644
index 000000000..4dd62f4b0
--- /dev/null
+++ b/public/img/footer/waterfall-mask.svg
@@ -0,0 +1 @@
+<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 2785 69" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path clip-rule="evenodd" d="m-61.576 836.464h2847.58v158.536h-2847.58z"/></clipPath><g transform="matrix(.978022 0 0 .431701 60.2223 -361.102)"><path d="m-61.576 836.464h2847.58v158.536h-2847.58z" fill="none"/><g clip-path="url(#a)"><path d="m0 855s312.103-28.413 522-25c183.845 2.99 483.6 22.192 569 22 37.45-.084 601.83 14.692 710.85 17.948 83.53 2.494 258.39 11.811 345.86 12.052 82.3.227 638.29 0 638.29 0v9.967h-2786z" transform="matrix(1.02247 0 0 2.58399 -62.1723 -1303.95)"/></g></g></svg>
\ No newline at end of file
diff --git a/public/img/footer/waterfall.avif b/public/img/footer/waterfall.avif
new file mode 100644
index 000000000..3fab20ab1
Binary files /dev/null and b/public/img/footer/waterfall.avif differ
diff --git a/public/img/globals-site-config.png b/public/img/globals-site-config.png
new file mode 100644
index 000000000..cbfa665d0
Binary files /dev/null and b/public/img/globals-site-config.png differ
diff --git a/public/img/guides/contribution-guide/pull-request-banner.png b/public/img/guides/contribution-guide/pull-request-banner.png
index 1fff1698e..ce952021e 100644
Binary files a/public/img/guides/contribution-guide/pull-request-banner.png and b/public/img/guides/contribution-guide/pull-request-banner.png differ
diff --git a/public/img/guides/contribution-guide/pull-request-form.png b/public/img/guides/contribution-guide/pull-request-form.png
index 63326d937..59b43aa17 100644
Binary files a/public/img/guides/contribution-guide/pull-request-form.png and b/public/img/guides/contribution-guide/pull-request-form.png differ
diff --git a/public/img/guides/contribution-guide/release.png b/public/img/guides/contribution-guide/release.png
index 0063235fa..f3ebb7acb 100644
Binary files a/public/img/guides/contribution-guide/release.png and b/public/img/guides/contribution-guide/release.png differ
diff --git a/public/img/herd-dmg-finder.jpg b/public/img/herd-dmg-finder.jpg
new file mode 100644
index 000000000..68a0f6e82
Binary files /dev/null and b/public/img/herd-dmg-finder.jpg differ
diff --git a/public/img/herd-fresh-statamic-site.jpg b/public/img/herd-fresh-statamic-site.jpg
new file mode 100644
index 000000000..fda51859c
Binary files /dev/null and b/public/img/herd-fresh-statamic-site.jpg differ
diff --git a/public/img/herd-installation-success.jpg b/public/img/herd-installation-success.jpg
new file mode 100644
index 000000000..6ca71253c
Binary files /dev/null and b/public/img/herd-installation-success.jpg differ
diff --git a/public/img/herd-menu-bar-item.jpg b/public/img/herd-menu-bar-item.jpg
new file mode 100644
index 000000000..e455de8a9
Binary files /dev/null and b/public/img/herd-menu-bar-item.jpg differ
diff --git a/public/img/herd-password-prompt.jpg b/public/img/herd-password-prompt.jpg
new file mode 100644
index 000000000..bc457d42f
Binary files /dev/null and b/public/img/herd-password-prompt.jpg differ
diff --git a/public/img/herd-settings-php-versions.jpg b/public/img/herd-settings-php-versions.jpg
new file mode 100644
index 000000000..edd6541cb
Binary files /dev/null and b/public/img/herd-settings-php-versions.jpg differ
diff --git a/public/img/herd-statamic-cli.jpg b/public/img/herd-statamic-cli.jpg
new file mode 100644
index 000000000..322c24d50
Binary files /dev/null and b/public/img/herd-statamic-cli.jpg differ
diff --git a/public/img/herd-valet-detected.jpg b/public/img/herd-valet-detected.jpg
new file mode 100644
index 000000000..c9727a65a
Binary files /dev/null and b/public/img/herd-valet-detected.jpg differ
diff --git a/public/img/herd-welcome-screen.jpg b/public/img/herd-welcome-screen.jpg
new file mode 100644
index 000000000..531b66402
Binary files /dev/null and b/public/img/herd-welcome-screen.jpg differ
diff --git a/public/img/icons/digital-ocean.svg b/public/img/icons/digital-ocean.svg
new file mode 100644
index 000000000..a3f37495c
--- /dev/null
+++ b/public/img/icons/digital-ocean.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 354 264" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
+    <g id="Artboard1" transform="matrix(0.983803,0,0,1,5.72829,-45.125)">
+        <rect x="-5.823" y="45.125" width="359.823" height="263.575" style="fill:none;"/>
+        <clipPath id="_clip1">
+            <rect x="-5.823" y="45.125" width="359.823" height="263.575"/>
+        </clipPath>
+        <g clip-path="url(#_clip1)">
+            <g transform="matrix(1.01646,0,0,1,-5.64796,0.125047)">
+                <path d="M177,221.5L177,187.3C213.2,187.3 241.3,151.4 227.4,113.3C222.3,99.3 211,88 196.9,82.9C158.8,69.1 122.9,97.1 122.9,133.3L88.8,133.3C88.8,75.6 144.6,30.6 205.1,49.5C231.5,57.8 252.6,78.8 260.8,105.2C279.7,165.7 234.7,221.5 177,221.5Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <g>
+                    <rect x="143" y="153.4" width="34.1" height="34.1" style="fill:rgb(0,128,255);"/>
+                    <rect x="116.9" y="187.5" width="26.1" height="26.1" style="fill:rgb(0,128,255);"/>
+                    <rect x="95" y="165.6" width="21.9" height="21.9" style="fill:rgb(0,128,255);"/>
+                </g>
+                <path d="M31.2,256.1C26.8,253 21.2,251.5 14.8,251.5L0.8,251.5L0.8,296L14.9,296C21.3,296 26.9,294.4 31.3,291.1C33.7,289.4 35.6,287 37,284C38.3,281 39,277.4 39,273.5C39,269.6 38.3,266.1 37,263.1C35.6,260.1 33.7,257.7 31.2,256.1ZM9,259L13.4,259C18.3,259 22.3,260 25.4,261.9C28.8,264 30.5,267.9 30.5,273.5C30.5,279.3 28.8,283.4 25.4,285.6C22.5,287.5 18.5,288.5 13.5,288.5L9,288.5L9,259Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M48.7,250.9C47.3,250.9 46.2,251.4 45.2,252.3C44.3,253.2 43.8,254.3 43.8,255.7C43.8,257.1 44.3,258.2 45.2,259.2C46.1,260.1 47.3,260.6 48.7,260.6C50,260.6 51.2,260.1 52.2,259.2C53.1,258.3 53.6,257.1 53.6,255.7C53.6,254.3 53.1,253.2 52.2,252.3C51.2,251.4 50,250.9 48.7,250.9Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <rect x="44.7" y="264.6" width="7.9" height="31.4" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M81.3,267.2C78.9,265.1 76.3,263.8 73.4,263.8C69,263.8 65.4,265.3 62.6,268.3C59.8,271.2 58.3,275 58.3,279.6C58.3,284 59.7,287.8 62.5,290.8C65.3,293.7 69,295.2 73.3,295.2C76.3,295.2 79,294.4 81.1,292.7L81.1,293.4C81.1,296 80.4,298 79,299.4C77.6,300.8 75.7,301.5 73.3,301.5C69.7,301.5 67.4,300.1 64.6,296.3L59.2,301.5L59.3,301.7C60.5,303.3 62.2,304.9 64.6,306.4C66.9,307.9 69.9,308.7 73.4,308.7C78.1,308.7 81.9,307.3 84.7,304.4C87.5,301.5 88.9,297.7 88.9,293L88.9,264.5L81.1,264.5L81.1,267.2L81.3,267.2ZM79.2,285.8C77.8,287.4 76,288.1 73.8,288.1C71.5,288.1 69.8,287.3 68.4,285.8C67,284.2 66.4,282.2 66.4,279.7C66.4,277.1 67.1,275.1 68.4,273.5C69.7,271.9 71.6,271.2 73.8,271.2C76.1,271.2 77.8,272 79.2,273.5C80.6,275.1 81.3,277.2 81.3,279.7C81.3,282.2 80.6,284.2 79.2,285.8Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <rect x="95.8" y="264.6" width="7.9" height="31.4" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M99.8,250.9C98.4,250.9 97.3,251.4 96.3,252.3C95.4,253.2 94.9,254.3 94.9,255.7C94.9,257.1 95.4,258.2 96.3,259.2C97.2,260.1 98.4,260.6 99.8,260.6C101.1,260.6 102.3,260.1 103.3,259.2C104.2,258.3 104.7,257.1 104.7,255.7C104.7,254.3 104.2,253.2 103.3,252.3C102.3,251.4 101.2,250.9 99.8,250.9Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M121,256.1L113.2,256.1L113.2,264.6L108.7,264.6L108.7,271.8L113.2,271.8L113.2,284.8C113.2,288.9 114,291.8 115.6,293.5C117.2,295.2 120.1,296 124.1,296C125.4,296 126.7,296 127.9,295.9L128.3,295.9L128.3,288.7L125.6,288.8C123.7,288.8 122.5,288.5 121.9,287.8C121.3,287.1 121,285.7 121,283.6L121,271.7L128.4,271.7L128.4,264.5L121,264.5L121,256.1Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <rect x="165.4" y="251.4" width="7.9" height="44.6" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M253.1,284.8C251.7,286.4 250.2,287.8 249.1,288.5C248,289.2 246.6,289.6 245,289.6C242.7,289.6 240.8,288.8 239.3,287C237.8,285.3 237,283 237,280.4C237,277.7 237.8,275.5 239.3,273.8C240.8,272.1 242.7,271.2 245,271.2C247.5,271.2 250.2,272.8 252.5,275.5L257.7,270.5C254.3,266.1 250,264 244.8,264C240.5,264 236.7,265.6 233.6,268.7C230.5,271.8 229,275.7 229,280.4C229,285.1 230.6,289 233.6,292.1C236.7,295.2 240.4,296.8 244.8,296.8C250.5,296.8 255.1,294.3 258.3,289.8L253.1,284.8Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M285.6,269C284.5,267.4 283,266.2 281.1,265.3C279.2,264.4 277,263.9 274.6,263.9C270.2,263.9 266.6,265.5 263.9,268.7C261.3,271.9 259.9,275.8 259.9,280.5C259.9,285.3 261.4,289.2 264.2,292.2C267.1,295.2 270.9,296.7 275.6,296.7C280.9,296.7 285.3,294.5 288.6,290.3L288.8,290.1L283.6,285.1C283.1,285.7 282.4,286.3 281.8,286.9C281,287.6 280.3,288.2 279.5,288.6C278.3,289.2 277,289.5 275.5,289.5C273.3,289.5 271.5,288.9 270.1,287.6C268.8,286.4 268,284.8 267.8,282.8L288.7,282.8L288.8,279.9C288.8,277.9 288.5,275.9 288,274.1C287.5,272.3 286.7,270.6 285.6,269ZM268.3,276.4C268.7,274.9 269.4,273.6 270.4,272.7C271.5,271.6 272.9,271.1 274.5,271.1C276.4,271.1 277.9,271.6 278.9,272.7C279.8,273.7 280.4,274.9 280.5,276.4L268.3,276.4Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M315.9,267C313.5,265 310.2,263.9 306.1,263.9C303.5,263.9 301,264.5 298.8,265.6C296.7,266.6 294.7,268.4 293.4,270.6L293.5,270.7L298.6,275.5C300.7,272.2 303,271 306.1,271C307.8,271 309.1,271.4 310.2,272.3C311.2,273.2 311.8,274.3 311.8,275.7L311.8,277.2C309.8,276.6 307.9,276.3 306,276.3C302.1,276.3 298.9,277.2 296.5,279C294.1,280.8 292.9,283.5 292.9,286.9C292.9,289.9 293.9,292.2 296,294C298.1,295.7 300.6,296.6 303.6,296.6C306.6,296.6 309.4,295.4 312,293.3L312,295.9L319.8,295.9L319.8,275.7C319.5,272 318.3,269 315.9,267ZM301.9,284C302.8,283.4 304.1,283.1 305.7,283.1C307.6,283.1 309.6,283.5 311.7,284.2L311.7,287.3C310,288.9 307.7,289.7 304.9,289.7C303.5,289.7 302.5,289.4 301.7,288.8C301,288.2 300.6,287.5 300.6,286.5C300.6,285.4 301,284.6 301.9,284Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M349.9,267.6C347.7,265.1 344.6,263.9 340.7,263.9C337.6,263.9 335,264.8 333.1,266.6L333.1,264.7L325.4,264.7L325.4,296L333.3,296L333.3,278.7C333.3,276.3 333.9,274.4 335,273.1C336.1,271.8 337.6,271.1 339.7,271.1C341.5,271.1 342.8,271.7 343.8,272.9C344.8,274.1 345.3,275.8 345.3,277.8L345.3,296L353.2,296L353.2,277.8C353.2,273.5 352.1,270 349.9,267.6Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M155.5,267C153.1,265 149.8,263.9 145.7,263.9C143.1,263.9 140.6,264.5 138.4,265.6C136.3,266.6 134.3,268.4 133,270.6L133.1,270.7L138.2,275.5C140.3,272.2 142.6,271 145.7,271C147.4,271 148.7,271.4 149.8,272.3C150.8,273.2 151.4,274.3 151.4,275.7L151.4,277.2C149.4,276.6 147.5,276.3 145.6,276.3C141.7,276.3 138.5,277.2 136.1,279C133.7,280.8 132.5,283.5 132.5,286.9C132.5,289.9 133.5,292.2 135.6,294C137.7,295.7 140.2,296.6 143.2,296.6C146.2,296.6 149,295.4 151.6,293.3L151.6,295.9L159.4,295.9L159.4,275.7C159.1,272 157.9,269 155.5,267ZM141.5,284C142.4,283.4 143.7,283.1 145.3,283.1C147.2,283.1 149.2,283.5 151.3,284.2L151.3,287.3C149.6,288.9 147.3,289.7 144.5,289.7C143.1,289.7 142.1,289.4 141.3,288.8C140.6,288.2 140.2,287.5 140.2,286.5C140.2,285.4 140.6,284.6 141.5,284Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+                <path d="M202,296.7C189.3,296.7 179,286.4 179,273.7C179,261 189.3,250.7 202,250.7C214.7,250.7 225,261 225,273.7C225,286.4 214.7,296.7 202,296.7ZM202,258.8C193.8,258.8 187.1,265.5 187.1,273.7C187.1,281.9 193.8,288.6 202,288.6C210.2,288.6 216.9,281.9 216.9,273.7C216.9,265.5 210.2,258.8 202,258.8Z" style="fill:rgb(0,128,255);fill-rule:nonzero;"/>
+            </g>
+        </g>
+    </g>
+</svg>
diff --git a/public/img/icons/docker.svg b/public/img/icons/docker.svg
new file mode 100644
index 000000000..d80f90db1
--- /dev/null
+++ b/public/img/icons/docker.svg
@@ -0,0 +1,3 @@
+<svg width="84" height="67" viewBox="0 0 84 67" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M82.3149 27.7342C80.2717 26.3679 74.9027 25.7844 70.9993 26.8288C70.7888 22.9664 68.7843 19.7116 65.1167 16.8718L63.7591 15.9664L62.8543 17.3239C61.0756 20.0061 60.3263 23.5795 60.5919 26.8277C60.8012 28.829 61.5021 31.0787 62.8543 32.711C57.774 35.6385 53.0915 34.9739 32.3537 34.9739H0.335557C0.241886 39.6256 0.994566 48.5743 6.72287 55.859C7.35543 56.6637 8.0497 57.442 8.80238 58.192C13.4595 62.8251 20.4959 66.2222 31.018 66.232C47.07 66.2462 60.8233 57.6271 69.1887 36.7858C71.9416 36.8307 79.2083 37.2762 82.7645 30.4492C82.8516 30.3343 83.6693 28.6385 83.6693 28.6385L82.3138 27.7331L82.3149 27.7342ZM21.231 23.4799H12.2275V32.4242H21.231V23.4799ZM32.8628 23.4799H23.8593V32.4242H32.8628V23.4799ZM44.4946 23.4799H35.4911V32.4242H44.4946V23.4799ZM56.1265 23.4799H47.1229V32.4242H56.1265V23.4799ZM9.59914 23.4799H0.595634V32.4242H9.59914V23.4799ZM21.231 12.1829H12.2275V21.1272H21.231V12.1829ZM32.8628 12.1829H23.8593V21.1272H32.8628V12.1829ZM44.4946 12.1829H35.4911V21.1272H44.4946V12.1829ZM44.4946 0.884766H35.4911V9.82909H44.4946V0.884766Z" fill="#1D63ED" style="fill:#1D63ED;fill:color(display-p3 0.1137 0.3882 0.9294);fill-opacity:1;"/>
+</svg>
diff --git a/public/img/icons/forge.svg b/public/img/icons/forge.svg
new file mode 100644
index 000000000..1ff73614b
--- /dev/null
+++ b/public/img/icons/forge.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 109 21"><path d="M38.971.659c2.062 0 3.013.37 3.595 1.11.846 1.11 1.322 3.33-.053 8.775s-2.907 7.613-4.335 8.776c-.952.74-2.115 1.11-4.176 1.11h-6.608c-2.062 0-3.066-.37-3.595-1.11-.846-1.11-1.322-3.33.106-8.776 1.374-5.445 2.96-7.612 4.388-8.775.952-.74 2.115-1.11 4.176-1.11h6.502zM29.35 15.619c.106.159.37.212 1.216.212h2.537c.846 0 1.163-.053 1.375-.212.264-.211.74-.74 1.797-5.075 1.11-4.335.899-4.863.74-5.075-.106-.159-.37-.211-1.216-.211h-2.485c-.846 0-1.163.053-1.374.211-.264.211-.74.74-1.797 5.075-1.163 4.388-.952 4.864-.793 5.075zm25.639-1.586c-.211-.264-.423-.37-1.692-.37h-2.485a.62.62 0 0 0-.581.476l-1.427 5.815a.62.62 0 0 1-.582.476h-5.128c-.264 0-.423-.212-.37-.476l4.705-18.82a.62.62 0 0 1 .582-.476h12.053c1.956 0 3.013.264 3.595 1.004.634.899.846 1.85.159 4.599-.899 3.701-2.273 4.758-4.652 5.234v.053c1.85.476 2.855 1.11 2.22 3.965l-.793 4.388c-.053.264-.317.529-.581.529h-5.234c-.212 0-.423-.159-.37-.423l.687-3.965c.211-1.427.106-1.692-.106-2.009zm-.37-4.652c1.11 0 1.427-.053 1.639-.211.37-.264.634-.74.899-1.903s.212-1.586 0-1.85c-.159-.159-.423-.211-1.533-.211h-2.749a.62.62 0 0 0-.581.476L51.5 8.958c-.053.264.106.476.37.476h2.749v-.053zM80.47.5c2.115 0 3.225.264 3.859 1.004.74.899 1.004 2.273.423 5.339a.62.62 0 0 1-.582.476h-4.916c-.264 0-.423-.211-.37-.423.212-1.216-.053-1.374-.212-1.586-.106-.159-.317-.211-1.216-.211h-2.537c-.899 0-1.163.053-1.374.211-.317.264-.899 1.163-1.85 5.181s-.793 4.969-.634 5.234c.106.159.37.211 1.269.211h2.696c.793 0 1.11-.053 1.322-.211.264-.211.793-.74 1.11-2.168l.053-.159h-3.806c-.264 0-.423-.211-.37-.476l.74-3.172a.62.62 0 0 1 .582-.476H83.8c.264 0 .423.211.37.476l-.476 1.956c-1.11 4.811-2.432 6.502-3.806 7.612-1.004.846-2.432 1.163-4.282 1.163h-6.608c-2.062 0-3.066-.37-3.648-1.163-.899-1.163-1.374-3.33-.053-8.828s2.855-7.718 4.282-8.828C70.531.87 71.694.5 73.756.5h6.714zm20.617 19.983H85.281c-.264 0-.423-.212-.37-.476L89.351.976A.62.62 0 0 1 89.933.5h18.396c.318 0 .476.317.265.634-.793 1.269-3.859 3.965-7.296 3.965h-6.396a.62.62 0 0 0-.581.476l-.476 2.115c-.053.264.106.476.37.476h8.616c.265 0 .423.211.371.476l-.741 3.33a.62.62 0 0 1-.581.476h-8.617a.62.62 0 0 0-.582.476l-.582 2.432c-.053.264.106.476.37.476h9.674c.265 0 .423.211.37.476l-.846 3.648c-.052.317-.317.529-.581.529zM25.121.659H3.446a.62.62 0 0 0-.582.476l-.529 1.903c-.053.211.053.37.211.476.846.264 5.392.37 4.705 2.908l-.159.687-1.85 6.925-.159.687c-.687 2.537-3.119 2.643-4.123 2.908-.211.053-.37.264-.423.476L.01 20.007c-.053.264.106.476.37.476h8.828a.62.62 0 0 0 .582-.476l1.586-6.132a.62.62 0 0 1 .582-.476h5.657a.62.62 0 0 0 .581-.476l.846-3.278c.053-.264-.106-.476-.37-.476h-5.656c-.264 0-.423-.211-.37-.476l.793-2.96a.62.62 0 0 1 .582-.476h8.511a.62.62 0 0 0 .581-.476l2.273-3.595c.106-.317 0-.529-.264-.529z" fill="#18b69b"/></svg>
\ No newline at end of file
diff --git a/public/img/icons/fortrabbit-dark-mode.svg b/public/img/icons/fortrabbit-dark-mode.svg
new file mode 100644
index 000000000..12e4cab42
--- /dev/null
+++ b/public/img/icons/fortrabbit-dark-mode.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="723px" height="125px" viewBox="0 0 723 125" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>•fortrabbit</title>
+    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" font-family="Georgia-BoldItalic, Georgia" font-size="128" font-style="italic" font-weight="bold">
+        <g id="Artboard" transform="translate(-125.000000, -128.000000)" fill="#ffffff">
+            <text id="•fortrabbit">
+                <tspan x="117" y="225">•fortrabbit</tspan>
+            </text>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/public/img/icons/laravel-cloud-dark-mode.svg b/public/img/icons/laravel-cloud-dark-mode.svg
new file mode 100644
index 000000000..dbfe08e0a
--- /dev/null
+++ b/public/img/icons/laravel-cloud-dark-mode.svg
@@ -0,0 +1 @@
+<svg class="size-6 shrink-0 text-strong" viewBox="0 0 98 98" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M97.466 64.97 64.98 97.457H0v-64.97L32.485 0h64.98v64.98-.01Zm-64.98-45.477v6.501h38.986v38.987h6.5V19.493H32.486Zm0-6.5h51.978V64.97h6.5V6.49H32.486v6.501Zm0 19.492v32.486H64.97V32.485H32.485Z" fill="#fff"></path></svg>
\ No newline at end of file
diff --git a/public/img/icons/laravel-herd.png b/public/img/icons/laravel-herd.png
new file mode 100644
index 000000000..d86d21338
Binary files /dev/null and b/public/img/icons/laravel-herd.png differ
diff --git a/public/img/icons/laravel.svg b/public/img/icons/laravel.svg
new file mode 100644
index 000000000..c1cf5dec7
--- /dev/null
+++ b/public/img/icons/laravel.svg
@@ -0,0 +1,3 @@
+<svg width="62" height="63" viewBox="0 0 62 63" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M61.762 14.2858C61.7847 14.3693 61.7962 14.4554 61.7964 14.5419V27.984C61.7964 28.1565 61.7508 28.326 61.6641 28.4753C61.5773 28.6245 61.4526 28.7484 61.3025 28.8342L49.9881 35.3298V48.2046C49.9881 48.555 49.8014 48.8785 49.4967 49.0549L25.8788 62.6121C25.8248 62.6427 25.7658 62.6623 25.7068 62.6832C25.6847 62.6905 25.6638 62.704 25.6405 62.7101C25.4754 62.7535 25.3018 62.7535 25.1367 62.7101C25.1097 62.7028 25.0851 62.6881 25.0593 62.6783C25.0053 62.6587 24.9487 62.6415 24.8971 62.6121L1.28419 49.0549C1.13418 48.969 1.00954 48.8451 0.922833 48.6958C0.836121 48.5466 0.790402 48.3772 0.790283 48.2046L0.790283 7.87844C0.790283 7.79023 0.802569 7.70447 0.824685 7.62116C0.832056 7.59298 0.849257 7.56725 0.859086 7.53908C0.877516 7.48762 0.894716 7.43494 0.921746 7.38716C0.940175 7.35531 0.967205 7.32958 0.989321 7.30018C1.01758 7.26097 1.04338 7.22054 1.07655 7.18624C1.10481 7.15806 1.14167 7.13724 1.17361 7.11273C1.20924 7.08333 1.24119 7.05148 1.28173 7.0282L13.0901 0.249583C13.2396 0.1638 13.409 0.118652 13.5815 0.118652C13.754 0.118652 13.9235 0.1638 14.073 0.249583L25.88 7.0282H25.8825C25.9218 7.0527 25.955 7.08333 25.9906 7.11151C26.0226 7.13601 26.0582 7.15806 26.0865 7.18502C26.1209 7.22054 26.1454 7.26097 26.1749 7.30018C26.1958 7.32958 26.2241 7.35531 26.2413 7.38716C26.2695 7.43617 26.2855 7.48762 26.3051 7.53908C26.315 7.56725 26.3322 7.59298 26.3395 7.62239C26.3622 7.70587 26.3737 7.79195 26.3739 7.87844V33.0658L36.2128 27.4167V14.5407C36.2128 14.4549 36.2251 14.3679 36.2472 14.2858C36.2558 14.2564 36.2718 14.2307 36.2816 14.2025C36.3012 14.1511 36.3184 14.0984 36.3455 14.0506C36.3639 14.0188 36.3909 13.993 36.4118 13.9636C36.4413 13.9244 36.4659 13.884 36.5003 13.8497C36.5285 13.8215 36.5642 13.8007 36.5961 13.7762C36.633 13.7468 36.6649 13.7149 36.7042 13.6917L48.5138 6.91304C48.6632 6.82714 48.8327 6.78192 49.0052 6.78192C49.1777 6.78192 49.3472 6.82714 49.4967 6.91304L61.3038 13.6917C61.3455 13.7162 61.3775 13.7468 61.4143 13.775C61.4451 13.7995 61.4807 13.8215 61.5089 13.8485C61.5433 13.884 61.5679 13.9244 61.5974 13.9636C61.6195 13.993 61.6466 14.0188 61.6638 14.0506C61.692 14.0984 61.708 14.1511 61.7276 14.2025C61.7387 14.2307 61.7547 14.2564 61.762 14.2858ZM59.8282 27.4167V16.2387L55.6963 18.6105L49.9881 21.8877V33.0658L59.8294 27.4167H59.8282ZM48.0211 47.6374V36.452L42.4063 39.6496L26.3727 48.7743V60.0651L48.0211 47.6374ZM2.75854 9.57523V47.6374L24.4045 60.0639V48.7756L13.0962 42.3939L13.0925 42.3914L13.0876 42.389C13.0495 42.3669 13.0176 42.3351 12.9819 42.3081C12.9512 42.2836 12.9156 42.264 12.8886 42.2371L12.8861 42.2334C12.8542 42.2028 12.832 42.1648 12.805 42.1305C12.7804 42.0974 12.7509 42.0692 12.7313 42.0349L12.7301 42.0312C12.7079 41.9945 12.6944 41.9504 12.6785 41.9087C12.6625 41.872 12.6416 41.8377 12.6318 41.7985C12.6195 41.7519 12.617 41.7017 12.6121 41.6539C12.6072 41.6171 12.5974 41.5804 12.5974 41.5436V41.5412V15.2243L6.89041 11.9459L2.75854 9.57523ZM13.5827 2.23184L3.74513 7.87844L13.5803 13.525L23.4166 7.87721L13.5803 2.23184H13.5827ZM18.6987 37.4713L24.4057 34.1953V9.57523L20.2738 11.9471L14.5656 15.2243V39.8444L18.6987 37.4713ZM49.0052 8.89529L39.1688 14.5419L49.0052 20.1885L58.8404 14.5407L49.0052 8.89529ZM48.0211 21.8877L42.3129 18.6105L38.181 16.2387V27.4167L43.888 30.6927L48.0211 33.0658V21.8877ZM25.3874 47.0775L39.8151 38.8643L47.0271 34.7601L37.1981 29.1172L25.8813 35.614L15.567 41.5351L25.3874 47.0775Z" fill="#FF2D20" style="fill:#FF2D20;fill:color(display-p3 1.0000 0.1765 0.1255);fill-opacity:1;"/>
+</svg>
diff --git a/public/img/icons/linode.svg b/public/img/icons/linode.svg
new file mode 100644
index 000000000..fa887ce32
--- /dev/null
+++ b/public/img/icons/linode.svg
@@ -0,0 +1 @@
+<svg height="64" viewBox="0 0 32 32" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m9.545 14.42-1.2-8.258-4.975-3.088 1.612 7.8 4.562 3.556zm1.38 9.443-.852-5.823-4.356-3.63 1.17 5.648 4.038 3.804zm-3.383-.64.862 4.165 3.596 3.817-.614-4.205-3.842-3.78zm11.644-1.806-1.837-1.402.014.33a.19.19 0 0 1 -.084.166l-1.386.934 1.507 1.23c.02.02.03.027.035.036l.022.042c.008.027.01.037.01.048l.064 1.45 1.7 1.423-.036-4.26zm6.3-4.507-.36 4.153-1.2-.828.13-2.118c0-.024-.002-.033-.003-.04-.006-.032-.012-.046-.02-.06s-.02-.028-.032-.04a.23.23 0 0 0 -.032-.028l-2.56-1.69.037-1.856 4.03 2.51" fill="#123d10"/><path d="m16.59 11.116-.335-7.84-7.53 2.894 1.23 8.4 6.635-3.453zm.4 9.135-.246-5.78-6.27 3.57.88 6.01 5.638-3.798zm.127 2.93-5.333 3.816.648 4.422 4.872-3.88-.186-4.357zm2.465-1.762.036 4.275 3.8-3.032.253-4.17-4.1 2.926zm9.48-6.782-.534 3.955-2.998 2.4.352-4.068 3.18-2.276" fill="#33b652"/><path d="m17.472 22.812-.008-.042a.21.21 0 0 0 -.019-.044c-.015-.024-.023-.032-.03-.04l-1.52-1.24 1.386-.934a.19.19 0 0 0 .084-.166l-.014-.33 1.837 1.402.036 4.26-1.7-1.423-.062-1.44zm-7.398-4.772.852 5.823-4.038-3.804-1.17-5.648 4.356 3.63zm6.904 2.212-5.638 3.798-.88-6.01 6.27-3.57.246 5.78zm-.725-16.975.335 7.84-6.635 3.453-1.23-8.4 7.53-2.894zm-7.918 2.883 1.2 8.258-4.562-3.556-1.612-7.8zm.07 21.225-.862-4.165 3.843 3.78.615 4.203-3.596-3.817zm8.885.152-4.872 3.88-.648-4.422 5.333-3.816.186 4.357zm6.116-4.876-3.8 3.032-.036-4.275 4.1-2.926-.253 4.17zm.53-2.428.13-2.118c0-.024-.002-.033-.003-.04-.006-.032-.012-.046-.02-.06s-.02-.028-.032-.04a.23.23 0 0 0 -.032-.028l-2.56-1.69.037-1.856 4.03 2.51-.36 4.153-1.2-.828zm1.58.747.352-4.068 3.18-2.276-.534 3.955-2.998 2.4zm3.97-6.77-.006-.03c-.002-.01-.006-.02-.01-.03a.23.23 0 0 0 -.027-.045c-.02-.023-.03-.03-.04-.038l-4.368-2.42c-.06-.033-.133-.032-.192.008l-3.674 2.246c-.006 0-.01.01-.016.013s-.013.01-.02.015l-.016.02c-.005.008-.01.01-.014.018s-.008.017-.01.026-.006.013-.008.02-.003.02-.004.03l-.042 1.97-1.494-.987c-.062-.04-.142-.042-.205 0l-2.15 1.314-.093-2.186-.007-.042c-.002-.008-.004-.013-.007-.02a.19.19 0 0 0 -.011-.024c-.004-.008-.008-.013-.013-.02s-.01-.013-.015-.02-.012-.01-.02-.016l-2.25-1.514 2.094-1.1c.066-.034.106-.104.103-.178l-.352-8.228c-.001-.01-.003-.02-.005-.03-.006-.03-.013-.045-.022-.06s-.022-.03-.032-.04c-.017-.017-.022-.02-.028-.024-.017-.008-.02-.008-.022-.015l-5.637-2.708a.19.19 0 0 0 -.14-.011l-7.697 2.398-.05.028-.04.037c-.006.008-.01.015-.014.023s-.01.015-.013.024-.006.02-.01.03c-.006.03-.005.04-.005.05s0 .018.001.027l1.718 8.302c.01.044.034.084.07.112l2.33 1.817-1.685.802c-.02.008-.022.015-.026.016l-.027.023c-.022.024-.028.036-.034.047-.014.028-.02.045-.02.062a.24.24 0 0 0 .002.055l1.292 6.25a.19.19 0 0 0 .056.1l1.622 1.528-1.075.658c-.014.008-.026.02-.038.03-.017.02-.025.033-.032.045a.22.22 0 0 0 -.021.065c-.002.018-.001.036.003.055l1 4.842c.007.034.024.066.048.092l4.048 4.298c.006.008.013.01.02.017.02.017.033.024.047.03.027.008.05.013.072.013s.038 0 .056-.01.022-.008.027-.015c.008 0 .014-.01.02-.014l5.223-4.157c.048-.04.074-.097.072-.157l-.122-2.85 1.74 1.464c.02.015.03.023.04.028s.02.008.025.015c.02.008.038.01.057.01s.037-.008.056-.01c.017-.008.022-.008.026-.015.01-.008.017-.01.026-.017l4.186-3.337c.043-.034.068-.084.072-.138l.127-2.09 1.27.884c.012.008.015.015.02.015.007.008.015.008.023.01.033.015.05.015.067.015s.038 0 .056-.01.02-.008.026-.015c.01-.008.02-.012.03-.018l3.415-2.722c.04-.03.064-.076.07-.124l.604-4.47.001-.037" fill="#231f20"/></svg>
\ No newline at end of file
diff --git a/public/img/icons/netlify.svg b/public/img/icons/netlify.svg
new file mode 100644
index 000000000..d355ce978
--- /dev/null
+++ b/public/img/icons/netlify.svg
@@ -0,0 +1 @@
+<svg fill="none" height="209" viewBox="0 0 512 209" width="512" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m0 0h512v208.126h-512z"/></clipPath><g clip-path="url(#a)"><path d="m117.436 207.036v-52.432l1.093-1.094h10.923l1.093 1.094v52.432l-1.093 1.094h-10.923z" fill="#05bdba"/><path d="m117.436 53.5225v-52.42911l1.093-1.09339h10.923l1.093 1.09339v52.42911l-1.093 1.0934h-10.923z" fill="#05bdba"/><path d="m69.9539 169.238h-1.5445l-7.7225-7.726v-1.545l18.0332-18.029 8.1775.004 1.0972 1.089v8.178z" fill="#05bdba"/><path d="m69.9462 38.8917h-1.5445l-7.7225 7.7264v1.5445l18.0332 18.0294 8.1775-.0038 1.0972-1.0896v-8.1774z" fill="#05bdba"/><path d="m1.09339 97.5104h74.27771l1.0934 1.0934v10.9222l-1.0934 1.094h-74.27771l-1.09339-1.094v-10.9222z" fill="#05bdba"/><path d="m440.999 97.5104h69.911l1.094 1.0934v10.9222l-1.094 1.094h-74.277l-1.094-1.094 4.366-10.9222z" fill="#05bdba"/><g fill="#014847"><path d="m212.056 108.727-1.093 1.094h-33.884l-1.093 1.093c0 2.187 2.187 8.743 10.93 8.743 3.28 0 6.556-1.093 7.65-3.28l1.093-1.093h13.117l1.093 1.093c-1.093 6.557-6.556 16.397-22.953 16.397-18.58 0-27.327-13.117-27.327-28.417 0-15.2994 8.743-28.4162 26.233-28.4162 17.491 0 26.234 13.1168 26.234 28.4162v4.374zm-16.397-10.9299c0-1.0934-1.093-8.7433-9.837-8.7433-8.743 0-9.836 7.6499-9.836 8.7433l1.093 1.0934h17.487z"/><path d="m242.66 115.284c0 2.186 1.093 3.28 3.28 3.28h9.836l1.094 1.093v10.93l-1.094 1.094h-9.836c-9.837 0-18.58-4.374-18.58-16.397v-24.0472l-1.094-1.0934h-7.649l-1.094-1.0934v-10.9301l1.094-1.0934h7.649l1.094-1.0933v-9.8367l1.093-1.0934h13.117l1.093 1.0934v9.8367l1.094 1.0933h12.023l1.094 1.0934v10.9301l-1.094 1.0934h-12.023l-1.094 1.0934v24.0472z"/><path d="m283.1 131.681h-13.117l-1.094-1.094v-74.3234l1.094-1.0934h13.117l1.093 1.0934v74.3234z"/><path d="m312.61 68.2871h-13.117l-1.094-1.0934v-10.9301l1.094-1.0934h13.117l1.093 1.0934v10.9301zm0 63.3939h-13.117l-1.094-1.094v-52.4633l1.094-1.0933h13.117l1.093 1.0933v52.4633z"/><path d="m363.98 56.2636v10.9301l-1.094 1.0934h-9.836c-2.187 0-3.281 1.0934-3.281 3.2801v4.3736l1.094 1.0934h10.93l1.093 1.0934v10.93l-1.093 1.0934h-10.93l-1.094 1.0934v39.3466l-1.093 1.093h-13.117l-1.093-1.093v-39.3466l-1.094-1.0934h-7.649l-1.094-1.0934v-10.93l1.094-1.0934h7.649l1.094-1.0934v-4.3736c0-12.0234 8.743-16.397 18.58-16.397h9.836l1.094 1.0934z"/><path d="m404.42 132.774c-4.374 10.93-8.743 17.487-24.047 17.487h-5.467l-1.093-1.094v-10.93l1.093-1.093h5.467c5.463 0 6.556-1.094 7.65-4.374v-1.093l-17.487-42.627v-10.9301l1.094-1.0934h9.836l1.094 1.0934 13.117 37.1641h1.093l13.117-37.1641 1.093-1.0934h9.837l1.093 1.0934v10.9301l-17.486 43.72z"/><path d="m135.454 131.681-1.093-1.094.007-31.6698c0-5.4631-2.148-9.699-8.743-9.8366-3.391-.088-7.271-.0077-11.416.1682l-.619.6346.008 40.7036-1.094 1.094h-13.1127l-1.0934-1.094v-53.0482l1.0934-1.0934 29.5097-.2676c14.784 0 20.767 10.1578 20.767 21.6231v32.7861l-1.093 1.094z"/></g></g></svg>
\ No newline at end of file
diff --git a/public/img/icons/ploi-dark-mode.png b/public/img/icons/ploi-dark-mode.png
new file mode 100644
index 000000000..873c3603a
Binary files /dev/null and b/public/img/icons/ploi-dark-mode.png differ
diff --git a/public/img/icons/ploi.png b/public/img/icons/ploi.png
new file mode 100644
index 000000000..147be5d83
Binary files /dev/null and b/public/img/icons/ploi.png differ
diff --git a/public/img/icons/social/bluesky.svg b/public/img/icons/social/bluesky.svg
new file mode 100644
index 000000000..982d6ef18
--- /dev/null
+++ b/public/img/icons/social/bluesky.svg
@@ -0,0 +1 @@
+<svg height="530" width="600" xmlns="http://www.w3.org/2000/svg"><path d="m135.72 44.03c66.496 49.921 138.02 151.14 164.28 205.46 26.262-54.316 97.782-155.54 164.28-205.46 47.98-36.021 125.72-63.892 125.72 24.795 0 17.712-10.155 148.79-16.111 170.07-20.703 73.984-96.144 92.854-163.25 81.433 117.3 19.964 147.14 86.092 82.697 152.22-122.39 125.59-175.91-31.511-189.63-71.766-2.514-7.3797-3.6904-10.832-3.7077-7.8964-.0174-2.9357-1.1937.51669-3.7077 7.8964-13.714 40.255-67.233 197.36-189.63 71.766-64.444-66.128-34.605-132.26 82.697-152.22-67.108 11.421-142.55-7.4491-163.25-81.433-5.9562-21.282-16.111-152.36-16.111-170.07 0-88.687 77.742-60.816 125.72-24.795z" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/public/img/icons/social/discord.svg b/public/img/icons/social/discord.svg
new file mode 100644
index 000000000..21116f0bc
--- /dev/null
+++ b/public/img/icons/social/discord.svg
@@ -0,0 +1 @@
+<svg height="256" preserveAspectRatio="xMidYMid" viewBox="0 -28.5 256 256" width="256" xmlns="http://www.w3.org/2000/svg"><path d="m216.856339 16.5966031c-16.571337-7.75331645-34.290195-13.3881043-52.814775-16.5966031-2.275041 4.11318106-4.93294 9.64549908-6.765465 14.0464379-19.692104-2.9614483-39.203132-2.9614483-58.5330827 0-1.8321746-4.40093882-4.5504325-9.93325684-6.8458268-14.0464379-18.5445827 3.2084988-36.2837946 8.86399117-52.8551312 16.6376612-33.42453537 50.5088528-42.4853774 99.7631518-37.95494761 148.3180598 22.16890891 16.555194 43.65325271 26.611976 64.77502181 33.192855 5.2150826-7.17745 9.8662303-14.807241 13.8730814-22.848315-7.6311949-2.899686-14.9402415-6.478059-21.8464273-10.632298 1.8321746-1.357374 3.6243438-2.776511 5.3558032-4.236706 42.1228202 19.70193 87.8903382 19.70193 129.5099332 0 1.751813 1.460195 3.543631 2.879332 5.355803 4.236706-6.926539 4.174593-14.255589 7.752966-21.886784 10.653002 4.006851 8.02037 8.637996 15.670866 13.873082 22.847965 21.142122-6.580879 42.646399-16.637311 64.815325-33.213209 5.315798-56.28752-9.080862-105.0894778-38.05561-148.3591179zm-131.3824638 118.4982869c-12.6448471 0-23.0146535-11.804735-23.0146535-26.179989 0-14.3752538 10.1483733-26.2003423 23.0146535-26.2003423 12.8666312 0 23.2360868 11.804384 23.0146538 26.2003423.020002 14.375254-10.1480226 26.179989-23.0146538 26.179989zm85.0513618 0c-12.644847 0-23.014653-11.804735-23.014653-26.179989 0-14.3752538 10.148022-26.2003423 23.014653-26.2003423 12.866281 0 23.236087 11.804384 23.014654 26.2003423 0 14.375254-10.148373 26.179989-23.014654 26.179989z" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/public/img/icons/social/github.svg b/public/img/icons/social/github.svg
new file mode 100644
index 000000000..d5e649185
--- /dev/null
+++ b/public/img/icons/social/github.svg
@@ -0,0 +1 @@
+<svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/public/img/icons/social/mastodon.svg b/public/img/icons/social/mastodon.svg
new file mode 100644
index 000000000..cd61cab3d
--- /dev/null
+++ b/public/img/icons/social/mastodon.svg
@@ -0,0 +1 @@
+<svg fill="#fff" height="79" viewBox="0 0 74 79" width="74" xmlns="http://www.w3.org/2000/svg"><path d="m73.7014 17.9592c-1.1398-8.33886-8.524-14.91044-17.2774-16.18384-1.4768-.21517-7.0723-.99826-20.0339-.99826h-.0968c-12.9652 0-15.7468.78309-17.2236.99826-8.5097 1.23812-16.28093 7.14302-18.166394 15.58064-.90688457 4.1553-1.003667 8.7621-.835194 12.9879.240163 6.0601.286762 12.1096.845948 18.1451.38658 4.009 1.06096 7.9861 2.01809 11.9015 1.79226 7.2312 9.04735 13.249 16.15545 15.704 7.6103 2.5603 15.7945 2.9854 23.6364 1.2276.8626-.1976 1.7158-.4268 2.5593-.6879 1.9034-.5961 4.1366-1.2628 5.7783-2.4339.0225-.0164.041-.0376.054-.0621.013-.0244.0203-.0514.0212-.079v-5.8484c-.0004-.0258-.0066-.0512-.0183-.0743-.0116-.0231-.0283-.0433-.049-.0592-.0206-.0159-.0446-.027-.0701-.0326-.0256-.0056-.0521-.0055-.0776.0003-5.0242 1.181-10.1727 1.773-15.3382 1.7637-8.8896 0-11.2805-4.1518-11.9652-5.8802-.5503-1.4938-.8998-3.0521-1.0395-4.6351-.0014-.0265.0036-.0531.0145-.0774.0109-.0244.0276-.0458.0485-.0627.021-.0168.0457-.0285.0721-.0342s.0538-.0052.08.0015c4.9405 1.173 10.005 1.765 15.0873 1.7637 1.2223 0 2.441 0 3.6634-.0317 5.1115-.1411 10.499-.3986 15.5281-1.3652.1255-.0246.2509-.0458.3585-.0776 7.9325-1.4991 15.4815-6.2047 16.2486-18.1203.0287-.4691.1004-4.9137.1004-5.4005.0036-1.6543.5413-11.7357-.0789-17.9298zm-12.2089 29.7326h-8.3411v-20.1063c0-4.2329-1.7923-6.3917-5.4378-6.3917-4.0075 0-6.0148 2.5538-6.0148 7.5981v11.0055h-8.291v-11.0055c0-5.0443-2.0109-7.5981-6.0184-7.5981-3.624 0-5.4342 2.1588-5.4378 6.3917v20.1063h-8.334v-20.7166c0-4.2329 1.0981-7.5957 3.2942-10.0884 2.2654-2.4868 5.237-3.7637 8.9255-3.7637 4.2691 0 7.4952 1.6155 9.6459 4.8431l2.0755 3.4287 2.079-3.4287c2.1507-3.2276 5.3768-4.8431 9.6388-4.8431 3.6849 0 6.6564 1.2769 8.929 3.7637 2.1962 2.4904 3.2942 5.8532 3.2942 10.0884z" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/public/img/icons/social/statamic.svg b/public/img/icons/social/statamic.svg
new file mode 100644
index 000000000..e17bd7682
--- /dev/null
+++ b/public/img/icons/social/statamic.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 139.56 111.63"><path fill="#fff" d="M112.46 110.48c9.62-.6 13.78-5.17 14.72-15.49.73-8.04 1-12.06 1.36-20.11.43-9.6 5.28-15.13 9.96-17.7 1.41-.8 1.4-2.65 0-3.54-4.88-2.94-9.61-9.19-9.98-17.45-.36-7.9-.63-11.85-1.35-19.75-1.02-11.13-4.55-14.67-14.18-15.28a793 793 0 0 0-86.42 0c-9.62.61-13.16 4.15-14.18 15.28-.72 7.9-.99 11.85-1.35 19.75-.38 8.26-5.1 14.51-9.98 17.45a2.01 2.01 0 0 0 0 3.54c4.69 2.49 9.53 8.01 9.96 17.7.36 8.04.63 12.06 1.36 20.11.94 10.32 5.1 14.89 14.72 15.49 28.52 1.53 56.85 1.53 85.36 0M69.55 92.63c-8.77.49-19.7-3.8-25.95-9.95-1.23-1.13-1.73-2.53-1.76-3.92-.03-1.11.23-2.31 1.04-3.23.87-1.14 1.31-1.71 2.18-2.85 1.1-1.38 2.3-2.02 3.7-2.01 1.58.01 3.08.67 4.68 1.71 5.06 3.3 10.63 5.2 17.31 5.2 5.1 0 9.78-2.89 9.23-6.57-2.18-14.6-38.37-6.19-37.83-30.63.29-12.86 13.14-21.88 25.75-21.57 9.77.25 17.47 3.09 23.08 6.71 1.4.95 2.37 2.83 2.41 4.69.02 1.12-.23 2.13-.86 3.06-.65 1-.97 1.49-1.63 2.49-1.18 1.66-2.57 2.49-4.34 2.48-1.21 0-2.52-.48-3.92-1.14-4.2-2.17-8.56-3.31-13.85-3.31-5.47 0-9.15 3.52-8.76 6.1 2.18 14.47 37.35 5.97 37.84 30.07.3 14.88-15.58 22.52-28.34 22.68Z"/></svg>
\ No newline at end of file
diff --git a/public/img/icons/social/x.svg b/public/img/icons/social/x.svg
new file mode 100644
index 000000000..437e2bfdd
--- /dev/null
+++ b/public/img/icons/social/x.svg
@@ -0,0 +1,3 @@
+<svg width="1200" height="1227" viewBox="0 0 1200 1227" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M714.163 519.284L1160.89 0H1055.03L667.137 450.887L357.328 0H0L468.492 681.821L0 1226.37H105.866L515.491 750.218L842.672 1226.37H1200L714.137 519.284H714.163ZM569.165 687.828L521.697 619.934L144.011 79.6944H306.615L611.412 515.685L658.88 583.579L1055.08 1150.3H892.476L569.165 687.854V687.828Z" fill="white"/>
+</svg>
diff --git a/public/img/icons/terminal.svg b/public/img/icons/terminal.svg
new file mode 100644
index 000000000..906ce0c41
--- /dev/null
+++ b/public/img/icons/terminal.svg
@@ -0,0 +1,10 @@
+<svg width="83" height="62" viewBox="0 0 83 62" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="5.41016" y="3.71201" width="57.5352" height="39.777" fill="white" style="fill:white;fill-opacity:1;"/>
+<path d="M9.35738 8.42111L9.35736 8.42113C8.73135 9.05168 8.73787 10.0612 9.35724 10.6853C9.35728 10.6853 9.35731 10.6853 9.35734 10.6854L15.2014 16.5757L9.35736 22.4621C8.74724 23.0767 8.73427 24.0987 9.35734 24.7264L9.35736 24.7264C9.98542 25.359 10.994 25.3523 11.6155 24.7264L11.6155 24.7264L18.298 17.9954C18.6811 17.6096 18.8233 17.0753 18.738 16.5788C18.8292 16.0801 18.6833 15.5443 18.298 15.1562L11.6155 8.42526C11.0006 7.8059 9.9838 7.79022 9.35738 8.42111ZM0.724609 8.52929C0.724609 4.11857 4.26668 0.552551 8.63626 0.552551H73.8266C78.1921 0.552551 81.7382 4.1227 81.7382 8.52929V53.002C81.7382 57.4127 78.1962 60.9787 73.8266 60.9787H8.63626C4.27078 60.9787 0.724609 57.4086 0.724609 53.002V8.52929ZM20.7406 22.2401C19.9545 22.2401 19.3206 22.8866 19.3206 23.6709C19.3206 24.4637 19.9588 25.0976 20.7406 25.0976H30.8855C31.6688 25.0976 32.3055 24.4581 32.3055 23.6709C32.3055 22.8825 31.6758 22.2401 30.8855 22.2401H20.7406Z" fill="url(#paint0_linear_2422_1546)" stroke="#292537" style="stroke:#292537;stroke:color(display-p3 0.1608 0.1451 0.2157);stroke-opacity:1;"/>
+<defs>
+<linearGradient id="paint0_linear_2422_1546" x1="41.2314" y1="0.0525513" x2="41.2314" y2="61.4787" gradientUnits="userSpaceOnUse">
+<stop stop-color="#2E2E2E" style="stop-color:#2E2E2E;stop-color:color(display-p3 0.1800 0.1800 0.1800);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:black;stop-opacity:1;"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/public/img/icons/ubuntu.svg b/public/img/icons/ubuntu.svg
new file mode 100644
index 000000000..be7fe6e3f
--- /dev/null
+++ b/public/img/icons/ubuntu.svg
@@ -0,0 +1,8 @@
+<svg width="69" height="67" viewBox="0 0 69 67" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M11.0263 41.1353C16.1451 41.1353 20.2948 36.9263 20.2948 31.7342C20.2948 26.5421 16.1451 22.3331 11.0263 22.3331C5.90745 22.3331 1.75781 26.5421 1.75781 31.7342C1.75781 36.9263 5.90745 41.1353 11.0263 41.1353Z" fill="#F94C0F" style="fill:#F94C0F;fill:color(display-p3 0.9759 0.2999 0.0594);fill-opacity:1;"/>
+<path d="M49.6298 20.527C54.7487 20.527 58.8983 16.318 58.8983 11.1259C58.8983 5.93386 54.7487 1.72485 49.6298 1.72485C44.511 1.72485 40.3613 5.93386 40.3613 11.1259C40.3613 16.318 44.511 20.527 49.6298 20.527Z" fill="#F94C0F" style="fill:#F94C0F;fill:color(display-p3 0.9759 0.2999 0.0594);fill-opacity:1;"/>
+<path d="M8.37817 44.8169C10.6579 50.6514 14.6363 55.6427 19.7833 59.1259C24.9303 62.6091 31.0015 64.4187 37.1881 64.3137C35.3805 62.0069 34.3806 59.1558 34.3459 56.2094C33.5165 56.0936 32.7213 55.9547 31.9603 55.7926C28.6791 55.087 25.5961 53.6429 22.9388 51.5668C20.2816 49.4908 18.1181 46.8359 16.608 43.7981C14.0455 45.0314 11.1579 45.3889 8.37817 44.8169Z" fill="#F94C0F" style="fill:#F94C0F;fill:color(display-p3 0.9759 0.2999 0.0594);fill-opacity:1;"/>
+<path d="M47.541 65.3789C52.6598 65.3789 56.8094 61.1699 56.8094 55.9779C56.8094 50.7858 52.6598 46.5768 47.541 46.5768C42.4221 46.5768 38.2725 50.7858 38.2725 55.9779C38.2725 61.1699 42.4221 65.3789 47.541 65.3789Z" fill="#F94C0F" style="fill:#F94C0F;fill:color(display-p3 0.9759 0.2999 0.0594);fill-opacity:1;"/>
+<path d="M55.8164 45.5116C58.0797 47.3503 59.684 49.8929 60.3822 52.7476C64.4682 47.6146 66.8239 41.288 67.1033 34.6968C67.3827 28.1056 65.5711 21.5972 61.9345 16.1274C60.8787 18.7986 58.996 21.0496 56.5698 22.5415C58.4566 26.0962 59.3809 30.0947 59.2486 34.1296C59.1163 38.1646 57.932 42.0919 55.8164 45.5116Z" fill="#F94C0F" style="fill:#F94C0F;fill:color(display-p3 0.9759 0.2999 0.0594);fill-opacity:1;"/>
+<path d="M11.049 18.3504C11.9697 18.3486 12.8879 18.4456 13.7885 18.6398C15.3145 18.9748 16.7709 19.5783 18.0917 20.4228C20.1319 17.4091 22.8553 14.9361 26.0333 13.2115C29.2113 11.487 32.7509 10.5613 36.3547 10.5123C36.3813 9.77346 36.4653 9.03793 36.6058 8.31251C37.0489 6.23997 37.9636 4.30122 39.2768 2.65102C33.4353 2.17278 27.581 3.40017 22.4051 6.18822C17.2292 8.97626 12.9481 13.2085 10.0674 18.3851C10.3984 18.3619 10.718 18.3504 11.049 18.3504Z" fill="#F94C0F" style="fill:#F94C0F;fill:color(display-p3 0.9759 0.2999 0.0594);fill-opacity:1;"/>
+</svg>
diff --git a/public/img/icons/vercel-dark-mode.svg b/public/img/icons/vercel-dark-mode.svg
new file mode 100644
index 000000000..c16b18818
--- /dev/null
+++ b/public/img/icons/vercel-dark-mode.svg
@@ -0,0 +1 @@
+<svg fill="none" height="1000" viewBox="0 0 1155 1000" width="1155" xmlns="http://www.w3.org/2000/svg"><path d="m577.344 0 577.346 1000h-1154.69z" fill="#fff"/></svg>
diff --git a/public/img/installing-forge-new-site.png b/public/img/installing-forge-new-site.png
new file mode 100644
index 000000000..78f03b0e7
Binary files /dev/null and b/public/img/installing-forge-new-site.png differ
diff --git a/public/img/installing-forge-pick-statamic.png b/public/img/installing-forge-pick-statamic.png
new file mode 100644
index 000000000..332e6ff90
Binary files /dev/null and b/public/img/installing-forge-pick-statamic.png differ
diff --git a/public/img/installing-pick-kit.png b/public/img/installing-pick-kit.png
new file mode 100644
index 000000000..449f1bca0
Binary files /dev/null and b/public/img/installing-pick-kit.png differ
diff --git a/public/img/label-experimental-doc.jpg b/public/img/label-experimental-doc.jpg
deleted file mode 100644
index 34f128d75..000000000
Binary files a/public/img/label-experimental-doc.jpg and /dev/null differ
diff --git a/public/img/label-experimental-hackerman.jpg b/public/img/label-experimental-hackerman.jpg
deleted file mode 100644
index 64cb57ab2..000000000
Binary files a/public/img/label-experimental-hackerman.jpg and /dev/null differ
diff --git a/public/img/label-experimental-rick.jpg b/public/img/label-experimental-rick.jpg
deleted file mode 100644
index 8abbf890a..000000000
Binary files a/public/img/label-experimental-rick.jpg and /dev/null differ
diff --git a/public/img/label-pro-freddie.jpg b/public/img/label-pro-freddie.jpg
deleted file mode 100644
index 76c38f05b..000000000
Binary files a/public/img/label-pro-freddie.jpg and /dev/null differ
diff --git a/public/img/label-pro-magnum.jpg b/public/img/label-pro-magnum.jpg
deleted file mode 100644
index 8d2e80c46..000000000
Binary files a/public/img/label-pro-magnum.jpg and /dev/null differ
diff --git a/public/img/label-pro-miyagi.jpg b/public/img/label-pro-miyagi.jpg
deleted file mode 100644
index 2071a4f51..000000000
Binary files a/public/img/label-pro-miyagi.jpg and /dev/null differ
diff --git a/public/img/label-pro-mrt.jpg b/public/img/label-pro-mrt.jpg
deleted file mode 100644
index 424fdc7b9..000000000
Binary files a/public/img/label-pro-mrt.jpg and /dev/null differ
diff --git a/public/img/label-pro-rocky.jpg b/public/img/label-pro-rocky.jpg
deleted file mode 100644
index e51ecdc05..000000000
Binary files a/public/img/label-pro-rocky.jpg and /dev/null differ
diff --git a/public/img/label-pro-sigourney.jpg b/public/img/label-pro-sigourney.jpg
deleted file mode 100644
index b5c394c86..000000000
Binary files a/public/img/label-pro-sigourney.jpg and /dev/null differ
diff --git a/public/img/laravel-cloud-logo.svg b/public/img/laravel-cloud-logo.svg
new file mode 100644
index 000000000..7147803f5
--- /dev/null
+++ b/public/img/laravel-cloud-logo.svg
@@ -0,0 +1 @@
+<svg class="size-6 shrink-0 text-strong" viewBox="0 0 98 98" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M97.466 64.97 64.98 97.457H0v-64.97L32.485 0h64.98v64.98-.01Zm-64.98-45.477v6.501h38.986v38.987h6.5V19.493H32.486Zm0-6.5h51.978V64.97h6.5V6.49H32.486v6.501Zm0 19.492v32.486H64.97V32.485H32.485Z" fill="currentColor"></path></svg>
\ No newline at end of file
diff --git a/public/img/laravel-herd.png b/public/img/laravel-herd.png
new file mode 100644
index 000000000..d86d21338
Binary files /dev/null and b/public/img/laravel-herd.png differ
diff --git a/public/img/meerkat.webp b/public/img/meerkat.webp
new file mode 100644
index 000000000..3e421ba35
Binary files /dev/null and b/public/img/meerkat.webp differ
diff --git a/resources/views/troubleshooting/show.antlers.html b/public/img/navigation/.gitkeep
similarity index 100%
rename from resources/views/troubleshooting/show.antlers.html
rename to public/img/navigation/.gitkeep
diff --git a/public/img/navigation/computer.png b/public/img/navigation/computer.png
new file mode 100644
index 000000000..c0047a654
Binary files /dev/null and b/public/img/navigation/computer.png differ
diff --git a/public/img/navigation/eyes.png b/public/img/navigation/eyes.png
new file mode 100644
index 000000000..3116c84b0
Binary files /dev/null and b/public/img/navigation/eyes.png differ
diff --git a/public/img/navigation/fieldtypes-dark-mode.png b/public/img/navigation/fieldtypes-dark-mode.png
new file mode 100644
index 000000000..743ce2330
Binary files /dev/null and b/public/img/navigation/fieldtypes-dark-mode.png differ
diff --git a/public/img/navigation/fieldtypes.png b/public/img/navigation/fieldtypes.png
new file mode 100644
index 000000000..1a2eb51f3
Binary files /dev/null and b/public/img/navigation/fieldtypes.png differ
diff --git a/public/img/navigation/indiana-jones.png b/public/img/navigation/indiana-jones.png
new file mode 100644
index 000000000..58ba61f17
Binary files /dev/null and b/public/img/navigation/indiana-jones.png differ
diff --git a/public/img/navigation/joystick.png b/public/img/navigation/joystick.png
new file mode 100644
index 000000000..e7e403e77
Binary files /dev/null and b/public/img/navigation/joystick.png differ
diff --git a/public/img/navigation/lego.png b/public/img/navigation/lego.png
new file mode 100644
index 000000000..f2bcf34c2
Binary files /dev/null and b/public/img/navigation/lego.png differ
diff --git a/public/img/navigation/nike-air-jordans.png b/public/img/navigation/nike-air-jordans.png
new file mode 100644
index 000000000..7368c8c04
Binary files /dev/null and b/public/img/navigation/nike-air-jordans.png differ
diff --git a/public/img/navigation/racoon.png b/public/img/navigation/racoon.png
new file mode 100644
index 000000000..863d1d359
Binary files /dev/null and b/public/img/navigation/racoon.png differ
diff --git a/public/img/navigation/rubiks-cube.png b/public/img/navigation/rubiks-cube.png
new file mode 100644
index 000000000..4cb37012b
Binary files /dev/null and b/public/img/navigation/rubiks-cube.png differ
diff --git a/public/img/navigation/sunglasses.png b/public/img/navigation/sunglasses.png
new file mode 100644
index 000000000..b4e0a9ddf
Binary files /dev/null and b/public/img/navigation/sunglasses.png differ
diff --git a/public/img/navigation/toucan.png b/public/img/navigation/toucan.png
new file mode 100644
index 000000000..d50f7c752
Binary files /dev/null and b/public/img/navigation/toucan.png differ
diff --git a/public/img/navigation/triforce.png b/public/img/navigation/triforce.png
new file mode 100644
index 000000000..85262e923
Binary files /dev/null and b/public/img/navigation/triforce.png differ
diff --git a/public/img/neat.svg b/public/img/neat.svg
deleted file mode 100644
index e45f48a41..000000000
--- a/public/img/neat.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 277.8 152.2"><path d="M277.8 60.3c-1.4-2.7-2.9-5.9-4.4-8.9-.4-.7-.7-1.4-1.1-2.1-.2-.3-.4-.7-.5-1-.1-.2-.3-.3-.4-.5-.6-.6-1.1-1.1-1.7-1.4-.2-.1-.4-.2-.5-.3-.2-.9-.3-1.6 0-2-.3-.5-.5-1-.8-1.4l-.1-.2-.2-.3-.4-.7-.2-.3c-.1 0 0-.1-.1-.1l-.1-.2-.5-.6c-1.4-1.6-3.2-2.7-5.2-3.3-.4-.1-.9-.2-1.4-.3l-.8-.2c-.5-.1-.9-.2-1.4-.2-.9-.1-1.7-.2-2.4-.1-1.7.3-4.1-.7-6.2-.5-1.8.2-5-.2-7.2-.1-1.3.1-3.7 0-4.8-1.2-.5.4-.7.5-1.1.8-.3-.2-.5-.4-.7-.5l-.2-.3c-1.6-.2-2.7-.6-3.5-1l-.8 4.8.8-4.9c-.7-.3-1.5-.6-2.5-.8-2.4-.7-4.3-.9-7.7-1.5-.7-.1-8.8-2.1-9.3-2.1-1.4 0-2.8 0-4.2-.1-1.5-.1-4-.7-3.8.1 0 .1-1.2.1-2 0-1.6-.2-3.3-.4-5-.7-.4.1-.9.1-1.3.3v-.2l-3.1-.5c-.3-1.1-.3-.9-1-1.3-1.4-.8-4.1-1.4-6.4-1.3-3 .2-6.5-.4-9.8-.8-1.4-.2-2.7-.3-3.9-.3h-1c0-.1.1-.3.5-.4-2.8-.4-2.3-1.3-4.7-1.8-2.5-.5-5-1-7.4-1.4-1.7-.3-4.3-.5-5-.3-1.3.4-3.6.1-5.6 0-.7 0-1.4-.1-2.1-.1-.5-.2-1-.3-1.5-.5-.1-.2-.2-.4-.4-.7-.3.1-.8 0-1.4 0-.5-.2-1.1-.6-1.6-.7l2.8.5c-1.8-.3-1.7-1-4.8-.9-1-.3-2-.7-2.9-1.1-1.1-.1-2.1-.2-3-.2-3.7-.2-7.4-.6-11.2-1.5-.4-.1-1-.1-1.4-.2l-6.7-.3c-.6-.3-1.2-.7-1.8-1-1.9-1-3.4-.3-5.5-.8.3-.7-.5-1.2-4-1.5-2.2-.2-4.7-.7-7-1-.8-.1-1.5 0-2.3.1-.4-.3-.4-.6-.1-.8-1.7-.6-2.9-1.1-4.4-1.5-1.4 0-2.9-.3-4.2-.4-2.6-.2-5.1-.3-7.7-1.2-3.5-.1-8.4-1.3-10.8-.4-.2.1-.4.1-.6.2-.8-.4-1.4-.9-1.5-1.4-2.2-.5-4.3-1-6.4-1.4-1.8-.4-3.9-.8-5.2-.6-1.6.2-4-.8-6.1-.6-1.8.2-5-.2-7.2-.1-1.3.1-3.7 0-4.8-1.2-.5.4-.7.5-1.1.8-.3-.2-.5-.4-.7-.5-.1-.1-.1-.2-.3-.2-2.7-.2-4.4-.5-6-.9l1.7 4.7L26.8 0c-1.1 0-2.7.5-3.9 1.6-.3.2-.5.5-.7.7-.2.3-.3.6-.5.9-.3.6-.7 1.2-1 1.8-.6 1.9-1.2 3.8-2.1 6.6-.2.6-3.2 8.4-3.3 9-.2 1.4-.4 2.7-.7 4.2-.3 1.5-1.2 3.9-.4 3.8.1 0-.1 1.2-.3 1.9-.4 1.6-.9 3.2-1.3 4.9.1.4 0 .9.1 1.3h-.2l-.9 3c-1.1.1-.9.1-1.5.8-1 1.3-1.9 3.9-2.1 6.2-.2 3-1.3 6.4-2.1 9.6-.3 1.4-.7 2.7-.8 3.8 0 .3-.1.7-.1 1-.1 0-.3-.2-.3-.6-.8 2.7-1.6 2.1-2.4 4.4l-1.2 3.6-.6 1.8c0 .2-.3.9-.4 1.4.1.6-.1 1.1-.1 1.7-.1 1.6.3 3.7 1 5.2.2.5.3.6.4.8.1.2.2.3.3.5.2.3.4.5.5.6 1.1.9 2.1 2.9 3.1 4.7.4.6.7 1.2 1.1 1.8.1.5.3 1 .4 1.5-.1.2-.2.4-.4.7.3.2.4.7.7 1.2.1.6.1 1.2.3 1.7l-1.2-2.6c.7 1.7.1 1.9 1.9 4.5.2 1 .5 2 .7 3 .1.2.3.5.4.7l.2.3.1.2.2.3c.5.8.9 1.5 1.4 2.2.4.7.8 1.3 1.3 2 .5.5 1.1 1 1.8 1.4.7.4 1.4.7 2.2.9.4.1.7.2 1.1.2l1.2-.1 2.4-.3 1.2-.1h.4l.4-.1c1-.1 1.9-.3 2.9-.4.4 0 1-.2 1.4-.3l6.5-1.8 2.1.3c2.1.4 3.3-.8 5.5-1-.1.7.9 1 4.3.1 2.1-.5 4.7-.8 7-1.3.8-.2 1.4-.5 2.1-.9.4.2.6.4.3.8 1.8 0 3.1.1 4.6.1 1.2-.1 2.7-.3 3.9-.6 2.6-.6 5-1.3 7.7-1.3 3.3-1 8.4-1.5 10.4-3 .2-.1.3-.2.5-.4.9.1 1.6.4 1.8.8 2.2-.2 4.4-.4 6.5-.7 1.9-.2 3.9-.4 5.1-1 1.5-.8 4.1-.6 6-1.5 1.6-.7 4.8-1.4 6.9-2.2 1.2-.5 3.5-1.2 4.9-.4.4-.5.5-.8.8-1.1.3.1.6.2.8.3l.3.2c1.6-.3 2.7-.3 3.7-.2l-.8-4.8.8 4.9h2.7c2.5-.1 4.4-.5 7.8-1 .7-.1 9-.8 9.5-1 1.3-.4 2.6-.8 4-1.2 1.4-.4 4.1-.6 3.6-1.3-.1-.1 1.2-.5 1.9-.6 1.6-.3 3.3-.6 5-.9.4-.3.8-.4 1.2-.7 0 0 0 .1.1.1l3.1-.5c.6.9.5.8 1.4 1 1.6.3 4.3 0 6.5-.8 2.8-1.1 6.3-1.6 9.5-2.3 1.4-.3 2.7-.6 3.8-1 .3-.1.6-.2.9-.4 0 .1 0 .3-.4.5 2.8-.5 2.6.5 5 .2 2.5-.3 5-.6 7.5-1 1.7-.3 4.3-.9 4.8-1.3 1.1-.8 3.4-1.2 5.3-1.8.7-.2 1.3-.4 2-.6h1.6c.2.1.4.3.6.5.2-.2.8-.2 1.3-.4.6 0 1.2.2 1.8.1l-2.8.4c1.8-.3 1.9.4 4.8-.6 1 0 2.1.1 3.1.1 1-.2 2-.5 2.9-.7 3.5-1 7.2-1.7 11.1-2.2.4 0 1-.2 1.4-.3l6.5-1.8 2.1.3c2.1.4 3.3-.8 5.5-1-.1.7.9 1 4.3.1 2.1-.5 4.7-.8 7-1.3.8-.2 1.4-.5 2.1-.9.4.2.6.4.3.8 1.8 0 3.1.1 4.6.1.3 0 .6 0 .9-.1.6-.1 1.3-.2 1.9-.3 1.4-.2 2.7-.5 3.9-.7.7-.1 1.3-.3 2-.4 1.3-.9 2.7-1.7 4-2.5l.5-.3.3-.1.2-.2c.2-.2.4-.6.6-.9l.6-1.2.2-.5c.1 0 .3-.1.2-.3z" fill="#010101"/><path d="M43.7 27.9c-1.1-.1-2.3.6-2.7 1.6l-25.7 69c-.4 1 .2 2.1 1.3 2.3l224.6 46.9c1.1.2 2.2-.5 2.5-1.5l26.2-86c.3-1.1-.3-2-1.4-2.2L43.7 27.9z" fill="#44bb93"/><path d="M137 120.9c-1.4-.1-2.8-.2-4.3-.4s-4.1-.9-3.9-.2c0 .1-1.3-.1-2-.2-1.7-.3-3.4-.6-5.1-1-.4.1-.9 0-1.3.1v-.1l-3.1-.7c-.5-.1-.3-.7-1-1.2-1.4-.8-4.2-1.4-6.5-1.5-3.1-.1-6.6-.9-9.9-1.4-1.4-.2-2.8-.5-4-.5h-1c0-.1.1-.2.5-.3-2.8-.6-2.3-1.2-4.7-1.8-2.5-.6-5.1-1.2-7.6-1.7-1.8-.3-4.4-.8-5.1-.6-1.4.2-3.7-.2-5.7-.4-.7-.1-1.4-.2-2.2-.2-.5-.2-1-.4-1.5-.5-.1-.2-.2-.3-.4-.6-.3.1-.8-.1-1.4-.1-.6-.2-1.2.2-1.7-.7l2.9.6c-1.7-1.2-1.7-.9-4.9-1.1-1-.4-2-.7-3-1.1-1.1-.2-2.1-.3-3.1-.4-3.7-.4-7.5-1.1-11.5-2.1-.4-.1-1-.2-1.5-.2l-6.8-.8c-.6-.3-1.3-.6-1.9-.9-2-1-3.4-.5-5.6-1.1.3-.5-.5-1-4.1-1.5-1.1-.2-2.3-.4-3.5-.6l-.7-.1h-.5c-.2 0-.5.2-.8.1.2-.2.4-.4.7-.5.1-.2.3-.3.4-.4.1-.1.3-.1.3-.1h.1c.1-.3.3-.6.4-1 .2-.7.5-1.3.7-2 .8-2.6 1.5-5.1 2.8-7.5.9-3.5 3-8.2 2.9-10.7v-.6c.5-.8 1-1.3 1.4-1.3.9-2.1 1.8-4.2 2.6-6.2.8-1.8 1.6-3.8 1.7-5.1.2-1.7 1.5-4 1.8-6.1.3-1.8 2.1-4.7 2.5-6.9.2-1.3.8-3.7 2-4.6-.2-.6-.3-.8-.4-1.1.2-.3.4-.4.6-.6l.3-.2c1.6-4.6 2.1-4.5 3.7-8.7.1-.1.1-.3.2-.4 0-.1.1-.2.1-.2-.1-.1 0-.1.1 0s.1.2.1.2L42.6 24c-1.2 0-2.8.5-4.2 1.7-.8.7-1.2 1.6-1.7 2.4-.4 1.1-.9 2.3-1.4 3.5-.4.9-.8 2-1.2 3.3-.2.6-3.7 8.5-3.8 9-.3 1.4-.7 2.7-1.1 4.2-.4 1.5-1.5 3.9-.8 3.8.1 0-.2 1.2-.5 2-.5 1.6-1.1 3.2-1.7 4.9 0 .4-.1.9-.1 1.3H26l-1.1 3c-.9.2-.8.1-1.3.8-1 1.3-2.1 3.9-2.5 6.2-.6 3-1.9 6.4-2.9 9.6-.5 1.4-.9 2.7-1.1 3.8-.1.3-.1.7-.2 1-.1 0-.2-.2-.2-.6-1 2.7-1.6 2.1-2.5 4.4l-1.5 3.6-.4.9c-.1.1-.1.4-.2.7l-.2.8c-.3 1.1-.5 2.2-.8 3.2l-.3 1.2c0 .2-.1.4-.1.6 0 .2-.1.4-.1.6.1.7.4 1.5.8 2.2.4.6 1 1.1 1.4 1.4.6.2 1.1.3 1.4.3 1.2.1 2.6.4 4.2.8l1.2.3c.3 0 .5.1.8.1.5.1 1.1.1 1.6.2.7.1 1.4.2 2.2.2.5.2 1 .4 1.5.5.1.2.2.3.4.6.3-.1.8.1 1.4.1.6.2 1.1.6 1.7.7l-2.9-.6c1.8.4 1.7.9 4.9 1.1 1 .4 2 .7 3 1.1 1.1.2 2.1.3 3.1.4 3.7.4 7.5 1.1 11.5 2.1.4.1 1 .2 1.5.2l6.8.8c.6.3 1.3.6 1.9.9 2 1 3.4.5 5.6 1.1-.3.5.5 1 4.1 1.5 2.2.3 4.8 1 7.2 1.3.8.1 1.5.1 2.3.1.4.3.5.5.1.7 1.7.6 2.9 1.1 4.5 1.6 1.1.3 2.7.7 4 .9 2.7.4 5.2.7 7.8 1.6 3.5.3 8.6 1.7 11 1.2.2 0 .4-.1.6-.1.8.4 1.4.8 1.5 1.2 2.2.6 4.4 1.1 6.5 1.7 1.9.5 3.9 1 5.3.9 1.7-.1 4.1.9 6.3.9 1.8 0 5.1.6 7.4.6 1.3 0 3.8.3 4.9 1.3.5-.3.8-.4 1.1-.6.3.2.5.3.7.5l.2.2c1.7.3 2.7.7 3.6 1.1l1.9-8.9c-2.6-.1-8.1-1.1-8.6-1.2zM260.6 61.9h3.1c.1 0 .1-.1.2-.1.3-.1.6.1 1.2-.4h.3c.1.1.2.2.2.3 0 .2-.1.4-.1.7 0 .1-.1.3-.1.5-.1.3-.2.7-.3 1.1 0 .4-.1.9 0 1.3h-.1l-.9 3.1c-.1.5-.8.2-1.2.9-.9 1.3-1.8 4.1-2.1 6.3-.4 3.1-1.5 6.5-2.3 9.8-.4 1.4-.7 2.7-.9 3.9 0 .3-.1.7-.1 1-.1 0-.2-.2-.2-.5-.8 2.8-1.4 2.2-2.2 4.6-.8 2.5-1.7 4.9-2.4 7.4-.5 1.7-1.1 4.3-1.1 5 .1 1.4-.5 3.6-.9 5.7-.1.7-.3 1.4-.4 2.1-.2.5-.5 1-.7 1.5-.2.1-.4.2-.6.4 0 .3-.2.8-.3 1.4-.2.5.1 1.3-.8 1.6l.9-2.8c-1.3 1.5-1.1 1.6-1.6 4.8-.4.9-.9 1.9-1.4 2.9-.3 1.1-.5 2.1-.7 3-.7 3.7-1.8 7.4-3.1 11.2-.1.4-.3 1-.4 1.4l-.3 1.7-.2.8v.3c0 .4.1.9-.2 1.2-.3 0-.6-.2-.8-.5-.2-.2-.3-.3-.4-.3h-.5c-.9-.1-1.8-.1-2.9-.4.3-.5-.5-1-4.1-1.5-2.2-.3-4.8-1-7.2-1.3-.8-.1-1.5-.1-2.3-.1-.4-.3-.5-.5-.1-.7-1.7-.6-2.9-1.1-4.5-1.6-1.1-.3-2.7-.7-4-.9-2.7-.4-5.2-.7-7.8-1.6-3.5-.3-8.6-1.7-11-1.2-.2 0-.4.1-.6.1-.8-.4-1.4-.8-1.5-1.2-2.2-.6-4.4-1.1-6.5-1.7-1.9-.5-4-1-5.3-.9-1.7.1-4.1-.9-6.3-.9-1.8 0-4.9-1.4-7.2-1.4-1.3 0-3.8-.3-4.9-1.3-.5.3-.7.4-1.1.6-.3-.2-.5-.3-.7-.5l-.2-.2c-4.8-.9-4.8-1.4-9.1-2.4-.5-.1-1.4-.4-1.6-.4-1.1 0-3-1-4.3-1.2h-.1l-1.9 9c.7.3 1.6.6 2.6.9 2.5.7 4.4 1.1 7.8 1.8.7.1 9 2.4 9.5 2.4 1.4.1 2.8.2 4.3.4s4.1.9 3.9.2c0-.1 1.3 0 2 .2 1.7.3 3.4.6 5.1 1 .4-.1.9 0 1.3-.1v.1l3.1.7c.3.9.3.7 1 1.2 1.4.8 4.2 1.4 6.5 1.5 3.1.1 6.6.9 9.9 1.4 1.4.2 2.8.5 4 .5h1c0 .1-.1.2-.5.3 2.8.6 2.3 1.2 4.8 1.8 2.5.6 5.1 1.2 7.6 1.7 1.8.3 4.4.8 5.1.6 1.4-.2 3.7.2 5.7.4.7.1 1.4.2 2.2.2.5.2 1 .4 1.5.5.1.2.2.3.4.6.3-.1.8.1 1.4.1.6.2 1.1.6 1.7.7l-2.9-.6c.9.2 1.3.4 1.9.6.3.1.6.2 1.1.3.2 0 .5.1.8.1.2 0 .3 0 .5.1h.6l2.7.6 1.4.3c.2 0 .5.1.7.1.2 0 .4 0 .7-.1.9-.3 1.7-.7 2.4-1.3l.9-.9c.1-.2.2-.3.3-.5.1-.2.1-.4.2-.6.3-.8.5-1.6.8-2.4l.4-1.2.2-.6.1-.3c.2-.9.5-1.9.7-2.8.5-1.9 1.1-3.8 1.8-5.7.2-.4.3-1 .4-1.4l1.4-6.7c.4-.6.7-1.2 1.1-1.8 1.2-1.9.8-3.4 1.6-5.5.5.4 1-.4 1.9-3.9.5-2.2 1.4-4.7 2-7 .2-.8.2-1.5.3-2.3.3-.3.5-.4.7 0 .8-1.6 1.4-2.8 2-4.3.4-1.1.9-2.7 1.2-3.9.6-2.6 1.1-5.2 2.3-7.7.6-3.5 2.4-8.4 2.2-10.9v-.6c.5-.8.9-1.3 1.4-1.4.8-2.2 1.5-4.3 2.2-6.4.6-1.8 1.3-3.8 1.4-5.2 0-.2 0-.5.1-.8 0-.1.1-.3.1-.4v-.2l.1-.4c.3-1.1.7-2.2 1-3.4 0-.8.1-1.6.1-2.4 0-.4.1-.8 0-1.1-.1-.3-.2-.6-.4-.9-.3-.6-.9-1.4-1.6-1.9-.6-.6-1.9-.6-2.9-.9l-3.3-.6c-.3 0-.5-.1-.8-.1-.2 0-.6-.1-.7-.1h-.9c-1.3.1-3.8 0-5-1-.5.3-.7.4-1 .6-.3-.2-.5-.3-.8-.4l-.3-.2c-1.7-.2-2.8-.5-3.7-.8l-1.2 9c2.5.6 8.1 1.2 8.5 1.2z" fill="#010101"/><path d="M51.7 33.9c1.4 0 2.8 0 4.3.1s4.2.6 3.9-.1c0-.1 1.3 0 2 0 1.7.2 3.4.4 5.2.6.4-.1.9-.1 1.3-.2v.1l3.2.4c.5.1.3.7 1.1 1.1 1.5.7 4.3 1.1 6.6 1 3.1-.1 6.7.4 10 .7 1.5.1 2.8.3 4 .2h1c0 .1-.1.2-.5.3 2.9.3 2.4 1.1 4.9 1.4 2.6.4 5.1.9 7.7 1.2 1.8.2 4.5.4 5.1.3 1.3-.3 3.7-.1 5.7 0 .7 0 1.4.1 2.2.1.5.1 1.1.3 1.6.4.1.2.3.3.4.6.3-.1.8 0 1.4 0 .6.2 1.2-.3 1.7.6l-2.9-.4c1.7 1 1.8.8 5 .8 1 .3 2 .6 3.1.9 1.1.1 2.2.2 3.1.2 3.7.1 7.6.6 11.6 1.2.5.1 1 .1 1.5.1l6.9.3c.6.3 1.3.5 1.9.8 2 .9 3.5.2 5.7.7-.3.5.6 1 4.2 1.2 2.2.2 4.9.6 7.2.8.8.1 1.5 0 2.3-.1.4.2.5.5.1.7 1.7.5 3 .9 4.6 1.3 1.2.3 2.8.5 4 .6 2.7.2 5.3.3 7.9 1 3.6.1 8.7 1.1 11.1.4.2 0 .4-.1.6-.1.9.3 1.5.7 1.6 1.1 2.3.4 4.4.8 6.6 1.2 1.9.3 4 .7 5.3.5 1.7-.2 4.2.6 6.3.4 1.8-.1 5 1 7.3.9 1.3-.1 3.8 0 5 1 .5-.3.7-.4 1-.6.3.2.5.3.8.4l.3.2c4.8.6 4.9 1.1 9.3 1.7.6.1 1.4.3 1.6.3 1.1-.1 3.1.8 4.4.9h.1l1.2-9.1c-.7-.2-1.6-.5-2.7-.7-2.5-.6-4.4-.7-7.9-1.2-.7-.1-9.1-1.7-9.7-1.7-1.4 0-2.8 0-4.3-.1s-4.2-.6-3.9.1c0 .1-1.3 0-2 0-1.7-.2-3.4-.4-5.2-.6-.4.1-.9.1-1.3.2v-.1l-3.2-.4c-.4-.9-.3-.7-1.1-1.1-1.5-.7-4.3-1.1-6.6-1-3.1.1-6.7-.4-10-.7-1.5-.1-2.8-.3-4-.2h-1c0-.1.1-.2.5-.3-2.9-.3-2.4-1.1-4.9-1.4-2.6-.4-5.1-.9-7.7-1.2-1.8-.2-4.5-.4-5.1-.3-1.3.3-3.7.1-5.7 0-.7 0-1.4-.1-2.2-.1-.5-.1-1.1-.3-1.6-.4-.1-.2-.3-.3-.4-.6-.3.1-.8 0-1.4 0-.6-.2-1.1-.5-1.7-.6l2.9.4c-1.8-.2-1.8-.8-5-.8-1-.3-2-.6-3.1-.9-1.1-.1-2.2-.2-3.1-.2-3.7-.1-7.6-.6-11.6-1.2-.5-.1-1-.1-1.5-.1l-6.9-.3c-.6-.3-1.3-.5-1.9-.8-2-.9-3.5-.2-5.7-.7.3-.5-.6-1-4.2-1.2-2.2-.1-4.9-.6-7.2-.8-.8-.1-1.5 0-2.3.1-.4-.2-.5-.5-.1-.7-1.7-.5-3-.9-4.6-1.3-1.2-.3-2.8-.5-4-.6-2.7-.2-5.3-.3-7.9-1-3.6-.1-8.7-1.1-11.1-.4-.2 0-.4.1-.6.1-.9-.3-1.5-.7-1.6-1.1-2.3-.4-4.4-.8-6.6-1.2-1.9-.3-4-.7-5.3-.5-1.7.2-4.2-.6-6.3-.4-1.8.1-5.1-.2-7.4-.1-1.3.1-3.8 0-5-1-.5.3-.7.4-1 .6-.3-.2-.5-.3-.8-.4l-.3-.2c-1.3-.2-3.7-.5-5.2-.8l2.5 9.3H45.5c.9.1 1.9.2 2.8.3 1.7 0 3.2.2 3.4.2z" fill="#010101"/><g fill="#010101"><path d="M95.7 59c-.6-.9-1.5-1.4-2.6-1.5-1-.1-2.1.2-3.1.9-.9.6-1.8 2-2.8 4.1-.9 2-1.7 4.1-2.4 6.3-.7 2.1-1.4 4-2.1 5.7-.6 1.4-1 1.9-1.1 2.1-.2-.1-.8-.5-1.9-2.1-1.3-2-1.4-2.6-1.4-2.7.2-.6 0-1.4-.6-2.7-.7-1.2-.7-1.5-.7-1.5.2-.6.2-1.6-.2-3.1s-.7-3.1-1.1-4.6c-.6-2.5-1.4-4.2-2.5-5.1-1.1-1-2.7-1.2-4.7-.6-.7.2-1.9 1-4 4.9-1.4 2.7-3.5 7.5-6.3 14.2l-.1.1c-2.8 6.9-3 8.6-2.8 9.3.2.9 1.2 1.6 2.9 2 .8.2 1.5.2 2.1.1.7-.2 1.3-.6 2-1.5.6-.7 1.1-1.7 1.7-2.9.5-1.2 1.2-2.9 2.1-5 1.8-4.4 2.6-6.1 3-6.7.2.2.4.6.7 1.3.8 1.8.7 2.2.7 2.2v.1c-.1.4-.1 1 .7 2.6.6 1.2.5 1.6.5 1.6-.3.6 0 1.4.7 2.6.4.7.6 1 .6 1.1-.2.6.1 1.5 3 5.1 1.5 1.9 2.5 3 3.2 3.5.7.5 1.7.9 2.9 1.1l3.2.5L91 75.3c2.4-6.2 3.8-10.2 4.4-12.1.7-2.2.8-3.5.3-4.2zM110.5 81.9c2.3.3 4.2.5 5.7.6 1.5.1 2.8 0 3.7-.2 1.1-.2 1.9-.6 2.3-1.3.4-.6.5-1.4.3-2.3-.2-.8-.9-1.4-2-1.8-.9-.3-2.9-.8-6.3-1.5-2.2-.4-4.3-.9-6.5-1.3l1.8-4.7c1.7.1 3.3.2 5 .3 2.3.1 4.7.3 7 .6 2.4.3 4.2.5 5.5.6 1.4.1 2.3.1 3 0 1.3-.3 2.3-.8 3.1-1.6 1.1-1.1 1.1-2.1 1-2.8-.3-1.1-1.6-1.6-2.6-1.8-1.2-.3-4.5-.8-10.7-1.8-7.4-1.1-11.6-1.6-13.3-1.6-.4 0-.6 0-.8.1-1.1.3-2.3 1-3.8 2.4-1 .9-2 2.2-2.8 3.8-.8 1.6-2.2 5-4.3 10.4-2.2 5.6-3.4 8.9-3.8 10.3-.5 1.6-.4 2.8.1 3.6.5.6 1.6 1.1 3.3 1.6 1.6.5 5.1 1.3 10.1 2.4 5.7 1.2 9.4 2 10.7 2.1.3 0 .7.1 1 .1 1 0 1.9-.2 2.7-.6 1.5-.7 2.2-1.3 2.4-2 .4-1.1-.8-2.2-1.2-2.5-.6-.6-2.4-1.5-10.6-3.3-2.7-.6-5.4-1.2-8.1-1.9l2.6-6.6c1.9.2 3.7.4 5.5.7zM167.3 100.1c-.2-.9-.3-2.5-.4-5-.1-2.4-.1-5.1 0-8.1.1-3.5.1-6.3-.1-8.5s-.4-3.6-.5-4.2c-.1-.4-.1-.8 0-1 .6-1.6.1-2.5-.5-3-.7-.6-1.8-1-3.6-1.2-1.3-.2-2.3-.2-3 .1-.7.2-1.6.8-2.9 1.8-2.4 1.8-2.9 2.3-3 2.7 0 0-.1.1-.3.1-.4.2-1 .5-1.8 1s-1.6 1.1-2.5 1.9c-1.5 1.4-3.7 3.3-6.6 5.6-3.2 2.5-4.8 3.8-5.6 4.5-1.5 1.2-2.9 2.4-4.4 3.5-3.2 2.5-5.2 4.3-6.1 5.3-1.4 1.7-1.1 3-.5 3.8.9 1.3 2.3 1.7 4.2 1.1 1.6-.5 3.7-1.9 6.5-4.1 1.5-1.2 2.8-2.1 3.7-2.5.8-.4 1.9-.5 3-.5h.2c1.4 0 3.7.3 7 .8 4 .6 6.6 1.1 7.6 1.6.8.4.8.7.6 1.2-.2.6-.4 1.7.2 5.5.4 2.8.7 3.5.9 3.9.4.6 1.2 1 2.3 1.1h.8c1.3 0 2.5-.4 3.5-1.3.7-.6 1.1-1 1.3-1.4.2-.4.3-1.1.3-2 0-.8-.1-1.7-.3-2.7zm-10.2-16.8c0 1.2-.1 2.2-.3 3l-.4 1.6-3.5-.5c-2.6-.3-3.8-.6-4.3-.7.2-.3.7-.7 1.6-1.5 1.3-1 2.5-2.1 3.8-3.2.6-.5 1.4-1 2.2-1.6.3-.2.5-.3.7-.4 0 .1 0 .2.1.4.1.8.2 1.7.1 2.9zM212.1 82.1c1.4-.3 2.5-1 3.2-1.9.7-1 .9-2.2.5-3.5l-.8-2.1-.5-.1c-5.4-.6-10.8-1.3-16.1-2-9.4-1.2-14.7-1.7-16.8-1.7-.5 0-.8 0-1.1.1-1.3.4-2.2 1.4-2.7 3-.7 2.1 0 3.1.7 3.6.5.4 1.8 1 6.6 1.7 2.1.3 3.4.5 3.9.6 1.4.4 1.6 1.1 1.6 1.8-.1.8-.9 3.5-4.2 11.8-2.1 5.2-3.5 8.6-4 10.2-.6 1.7-.8 3.1-.6 4.2.1 1.1.4 1.9.8 2.3.4.4 1.2.8 2.4 1l3 .6 5.8-15c4.8-12.5 6.1-14.5 6.3-14.8.1 0 .4-.2 1.7-.2.9 0 2 .1 3.3.3 3.4.3 5.6.4 7 .1zM225.5 79.8c-.6-1.1-1.6-1.8-3-1.8h-.2c-1.2 0-2.4.5-3.4 1.4-.7.6-1.3 1.2-1.6 1.8-.3.6-.5 1.3-.7 2-.1.5-.3 1.6-1.1 4.3-.6 2.2-1.5 4.8-2.6 7.7-1.3 3.6-2.1 5.9-2.4 7-.3 1.3-.2 2.3.2 3.1.7 1.3 1.6 2 2.6 2 .8 0 1.6-.4 2.4-1.2.6-.6 1.8-2.5 5.9-12.8 2-5 3.3-8.3 3.7-9.8.5-1.8.6-2.9.2-3.7zM210.4 109.9h-.1c-.7 0-1.5.4-2.7 1.3-.9.7-1.4 1.3-1.5 1.7-.2.5-.1 1.2.1 2.1.4 1.4 1 2.2 2 2.3h.4c.8 0 1.7-.3 2.9-1.1 1.5-.9 2.2-1.6 2.4-2.3.2-.8-.1-1.7-1.1-2.7-.8-.7-1.6-1.2-2.4-1.3z"/></g></svg>
\ No newline at end of file
diff --git a/public/img/palms-left.png b/public/img/palms-left.png
deleted file mode 100644
index e358500ad..000000000
Binary files a/public/img/palms-left.png and /dev/null differ
diff --git a/public/img/palms-right.png b/public/img/palms-right.png
deleted file mode 100644
index 20af0797d..000000000
Binary files a/public/img/palms-right.png and /dev/null differ
diff --git a/public/img/paper-tear-dark-mode.png b/public/img/paper-tear-dark-mode.png
new file mode 100644
index 000000000..467a1cbe2
Binary files /dev/null and b/public/img/paper-tear-dark-mode.png differ
diff --git a/public/img/paper-tear-large-dark-mode.png b/public/img/paper-tear-large-dark-mode.png
new file mode 100644
index 000000000..71b7b83c1
Binary files /dev/null and b/public/img/paper-tear-large-dark-mode.png differ
diff --git a/public/img/paper-tear-large.png b/public/img/paper-tear-large.png
new file mode 100644
index 000000000..553cd9d95
Binary files /dev/null and b/public/img/paper-tear-large.png differ
diff --git a/public/img/paper-tear.png b/public/img/paper-tear.png
new file mode 100644
index 000000000..0197ce733
Binary files /dev/null and b/public/img/paper-tear.png differ
diff --git a/public/img/password-reset-link.png b/public/img/password-reset-link.png
new file mode 100644
index 000000000..5c55623ee
Binary files /dev/null and b/public/img/password-reset-link.png differ
diff --git a/public/img/pizza-slice.svg b/public/img/pizza-slice.svg
deleted file mode 100644
index ca8c318dc..000000000
--- a/public/img/pizza-slice.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" height="40" width="40"><g transform="matrix(0.6666666666666666,0,0,0.6666666666666666,0,0)"><path d="M23.32 10.23a2 2 0 0 0-3.74 1.39c-.82-2.59-3.3-4.43-6.77-5.4-.16-.05-.51-.13-.51-.14a1.842 1.842 0 0 1-.67-.45 2 2 0 0 1-.48-.79 2.025 2.025 0 0 1 .56-2.08.971.971 0 0 1 .88-.24 19.167 19.167 0 0 1 2.08.53c4.34 1.32 7.51 3.77 8.65 7.18z" style="stroke:#191919;stroke-linecap:round;stroke-linejoin:round;fill:#ffbc44"></path><path d="m22.09 12.93-5.59 1.76v-2.1l3.08-.97a2 2 0 0 1 3.74-1.39 2.163 2.163 0 0 1-1.23 2.7zm-8.59.61v2.09l-3 .95v-2.1l3-.94zm-6 3.98-6.4 2.02-.6-1.91 6.99-2.2.01 2.09z" style="stroke:#191919;stroke-linecap:round;stroke-linejoin:round;fill:#ffdda1"></path><path d="m19.58 11.62-3.08.97v7.91a1.5 1.5 0 0 1-3 0v-6.96l-3 .94V18a1.5 1.5 0 0 1-3 0v-.48l-.01-2.09-6.99 2.2 5.92-6.38a4.084 4.084 0 0 0 2.54 0c1.79-.57 2.89-2.12 2.47-3.47a2.079 2.079 0 0 0-.8-1.07l1-1.08a1.842 1.842 0 0 0 .67.45c0 .01.35.09.51.14 3.47.97 5.95 2.81 6.77 5.4z" style="fill:#ff808c;stroke:#191919;stroke-linecap:round;stroke-linejoin:round"></path><path d="M8.96 11.25a4.084 4.084 0 0 1-2.54 0l4.21-4.54a2.079 2.079 0 0 1 .8 1.07c.42 1.35-.68 2.9-2.47 3.47z" style="fill:#ffef5e;stroke:#191919;stroke-linecap:round;stroke-linejoin:round"></path></g></svg>
diff --git a/public/img/pro-badges/.gitkeep b/public/img/pro-badges/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/public/img/pro-badges/artwork/.gitkeep b/public/img/pro-badges/artwork/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/public/img/pro-badges/artwork/pro-doc-brown.jpg b/public/img/pro-badges/artwork/pro-doc-brown.jpg
new file mode 100644
index 000000000..32b623c0e
Binary files /dev/null and b/public/img/pro-badges/artwork/pro-doc-brown.jpg differ
diff --git a/public/img/pro-badges/artwork/pro-marty-mcfly.jpg b/public/img/pro-badges/artwork/pro-marty-mcfly.jpg
new file mode 100644
index 000000000..bdee84fde
Binary files /dev/null and b/public/img/pro-badges/artwork/pro-marty-mcfly.jpg differ
diff --git a/public/img/pro-badges/icons/.gitkeep b/public/img/pro-badges/icons/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/public/img/pro-badges/icons/pro-sheriff-badge.png b/public/img/pro-badges/icons/pro-sheriff-badge.png
new file mode 100644
index 000000000..18d38fb5c
Binary files /dev/null and b/public/img/pro-badges/icons/pro-sheriff-badge.png differ
diff --git a/public/img/quick-start/.meta/editing-home.png.yaml b/public/img/quick-start/.meta/editing-home.png.yaml
deleted file mode 100644
index c0c46f104..000000000
--- a/public/img/quick-start/.meta/editing-home.png.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-data: {  }
-size: 54612
-last_modified: 1577735182
-width: 1280
-height: 812
diff --git a/public/img/quick-start/.meta/installed.png.yaml b/public/img/quick-start/.meta/installed.png.yaml
deleted file mode 100644
index bd8fbab4c..000000000
--- a/public/img/quick-start/.meta/installed.png.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-data: {  }
-size: 26853
-last_modified: 1577735182
-width: 1600
-height: 960
diff --git a/public/img/quick-start/.meta/login.png.yaml b/public/img/quick-start/.meta/login.png.yaml
deleted file mode 100644
index c9bea9746..000000000
--- a/public/img/quick-start/.meta/login.png.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-data: {  }
-size: 178301
-last_modified: 1577735182
-width: 1600
-height: 960
diff --git a/public/img/quick-start/.meta/make-user.png.yaml b/public/img/quick-start/.meta/make-user.png.yaml
deleted file mode 100644
index 3e65d8e22..000000000
--- a/public/img/quick-start/.meta/make-user.png.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-data: {  }
-size: 26083
-last_modified: 1577735182
-width: 906
-height: 568
diff --git a/public/img/quick-start/.meta/new-home.png.yaml b/public/img/quick-start/.meta/new-home.png.yaml
deleted file mode 100644
index cc829b29b..000000000
--- a/public/img/quick-start/.meta/new-home.png.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-data: {  }
-size: 5726
-last_modified: 1577735182
-width: 1600
-height: 960
diff --git a/public/img/quick-start/.meta/pages-collection.png.yaml b/public/img/quick-start/.meta/pages-collection.png.yaml
deleted file mode 100644
index e6a2cd999..000000000
--- a/public/img/quick-start/.meta/pages-collection.png.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-data: {  }
-size: 38076
-last_modified: 1577735182
-width: 1600
-height: 960
diff --git a/public/img/quick-start/.meta/pages-structure.png.yaml b/public/img/quick-start/.meta/pages-structure.png.yaml
deleted file mode 100644
index 0b134915a..000000000
--- a/public/img/quick-start/.meta/pages-structure.png.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-data: {  }
-size: 32109
-last_modified: 1577735182
-width: 1600
-height: 960
diff --git a/public/img/repositories/form-submissions.svg b/public/img/repositories/form-submissions.svg
new file mode 100644
index 000000000..390fa88d8
--- /dev/null
+++ b/public/img/repositories/form-submissions.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><defs/><path d="M21.23 16.776A1.5 1.5 0 0 1 19.755 18H2.558a1.5 1.5 0 0 1 -1.475 -1.776l1.688 -9A1.5 1.5 0 0 1 4.245 6h17.2a1.5 1.5 0 0 1 1.474 1.776Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/><path d="M22.917 7.776 12 12 2.771 7.224" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/></svg>
\ No newline at end of file
diff --git a/public/img/repositories/sites.svg b/public/img/repositories/sites.svg
new file mode 100644
index 000000000..5e9e976f2
--- /dev/null
+++ b/public/img/repositories/sites.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M.5 6.504h20m-17-2.25h0m0 0a.25.25 0 1 0 .25.25.25.25 0 0 0-.25-.25m2 0h0m0 0a.25.25 0 1 0 .25.25.25.25 0 0 0-.25-.25m2 0h0m0 0a.25.25 0 1 0 .25.25.25.25 0 0 0-.25-.25"/><rect width="20" height="15" x=".5" y="2.504" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" rx="2" ry="2"/><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M20.5 10.504h3m-3-4.004h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2h-16a2 2 0 0 1-2-2v-2"/></svg>
\ No newline at end of file
diff --git a/public/img/social-placeholder.jpg b/public/img/social-placeholder.jpg
new file mode 100644
index 000000000..b650caa0f
Binary files /dev/null and b/public/img/social-placeholder.jpg differ
diff --git a/public/img/social-placeholder.png b/public/img/social-placeholder.png
deleted file mode 100644
index 6d311d911..000000000
Binary files a/public/img/social-placeholder.png and /dev/null differ
diff --git a/public/img/splatter-colorful.png b/public/img/splatter-colorful.png
deleted file mode 100644
index 8bc2629e5..000000000
Binary files a/public/img/splatter-colorful.png and /dev/null differ
diff --git a/public/img/splatter-feedback.png b/public/img/splatter-feedback.png
deleted file mode 100644
index 609f0f91c..000000000
Binary files a/public/img/splatter-feedback.png and /dev/null differ
diff --git a/public/img/splatter-palm-old.png b/public/img/splatter-palm-old.png
deleted file mode 100644
index 2e5ac5e69..000000000
Binary files a/public/img/splatter-palm-old.png and /dev/null differ
diff --git a/public/img/splatter-palm.png b/public/img/splatter-palm.png
deleted file mode 100644
index c16e6490a..000000000
Binary files a/public/img/splatter-palm.png and /dev/null differ
diff --git a/public/img/splatter-sponsors.png b/public/img/splatter-sponsors.png
deleted file mode 100644
index 13b5bb328..000000000
Binary files a/public/img/splatter-sponsors.png and /dev/null differ
diff --git a/public/img/splatter-tall.jpg b/public/img/splatter-tall.jpg
deleted file mode 100644
index 138374db5..000000000
Binary files a/public/img/splatter-tall.jpg and /dev/null differ
diff --git a/public/img/starter-kit-module-confirmation.png b/public/img/starter-kit-module-confirmation.png
new file mode 100644
index 000000000..eba2ff23a
Binary files /dev/null and b/public/img/starter-kit-module-confirmation.png differ
diff --git a/public/img/starter-kit-module-custom-prompt.png b/public/img/starter-kit-module-custom-prompt.png
new file mode 100644
index 000000000..ee82c0069
Binary files /dev/null and b/public/img/starter-kit-module-custom-prompt.png differ
diff --git a/public/img/starter-kit-select-module-customization.png b/public/img/starter-kit-select-module-customization.png
new file mode 100644
index 000000000..25449ee59
Binary files /dev/null and b/public/img/starter-kit-select-module-customization.png differ
diff --git a/public/img/starter-kit-select-module-disable-skip-option.png b/public/img/starter-kit-select-module-disable-skip-option.png
new file mode 100644
index 000000000..97e23ea7f
Binary files /dev/null and b/public/img/starter-kit-select-module-disable-skip-option.png differ
diff --git a/public/img/starter-kit-select-module.png b/public/img/starter-kit-select-module.png
new file mode 100644
index 000000000..e3ecdeb2b
Binary files /dev/null and b/public/img/starter-kit-select-module.png differ
diff --git a/public/img/theme-dark.svg b/public/img/theme-dark.svg
new file mode 100644
index 000000000..230fb98ba
--- /dev/null
+++ b/public/img/theme-dark.svg
@@ -0,0 +1 @@
+<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.01086 0 0 1.03661 -1.45173 -.841974)"><path d="m1.436.812h22.753v22.188h-22.753z" fill="none"/><path d="m9.98 9.361 6.18-1.14-6.22-1.06 1.7-2.459-2.38 1.699-1.12-6.199-1.06 6.239-2.44-1.739 1.68 2.459-6.18 1.06 6.18 1.14-1.68 2.361 2.44-1.681 1.06 6.181 1.14-6.141 2.36 1.641z" fill="#fff" fill-rule="nonzero" transform="matrix(1.28142 0 0 1.24959 2.38173 1.756985)"/></g></svg>
\ No newline at end of file
diff --git a/public/img/theme-light.svg b/public/img/theme-light.svg
new file mode 100644
index 000000000..0da40882f
--- /dev/null
+++ b/public/img/theme-light.svg
@@ -0,0 +1 @@
+<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.01086 0 0 1.03661 -1.45173 -.841974)"><path d="m1.436.812h22.753v22.188h-22.753z" fill="none"/><path d="m12.477 6.475c-1.335 0-2.615.53-3.558 1.473-.944.943-1.474 2.224-1.474 3.558s.53 2.614 1.474 3.558c.943.943 2.223 1.473 3.558 1.473 1.334 0 2.614-.53 3.557-1.473.944-.943 1.474-2.224 1.474-3.558-.002-1.334-.532-2.613-1.475-3.556-.944-.943-2.222-1.473-3.556-1.475zm0 8.625c-.954 0-1.867-.379-2.541-1.053-.675-.674-1.053-1.588-1.053-2.541s.378-1.867 1.053-2.541c.674-.675 1.587-1.053 2.541-1.053.953 0 1.866.378 2.54 1.053.675.674 1.053 1.588 1.053 2.541-.001.952-.38 1.866-1.054 2.54-.673.674-1.587 1.053-2.539 1.054zm.718 3.594v2.156c0 .397-.321.719-.718.719-.398 0-.719-.322-.719-.719v-2.156c0-.398.321-.719.719-.719.397 0 .718.321.718.719zm-1.437-14.376v-2.156c0-.397.321-.719.719-.719.397 0 .718.322.718.719v2.156c0 .398-.321.719-.718.719-.398 0-.719-.321-.719-.719zm-6.469 7.907h-2.156c-.397 0-.719-.322-.719-.719s.322-.719.719-.719h2.156c.397 0 .719.322.719.719s-.322.719-.719.719zm17.25-.719c0 .191-.075.374-.21.509-.135.134-.318.21-.509.21h-2.156c-.397 0-.719-.322-.719-.719s.322-.719.719-.719h2.156c.191 0 .374.076.509.211.135.134.21.318.21.508zm-2.947 6.099c.281.281.281.736 0 1.017s-.736.281-1.017 0l-1.524-1.525c-.139-.134-.218-.318-.22-.51-.001-.193.075-.378.211-.515s.321-.212.514-.21c.193.001.377.08.511.219zm-14.231-12.197c-.281-.282-.281-.736 0-1.018.281-.281.736-.281 1.017 0l1.525 1.526c.138.134.217.318.219.51.002.194-.075.379-.21.515-.137.136-.322.212-.515.21-.192-.001-.377-.08-.51-.219zm2.542 10.672c.28.281.28.736 0 1.016l-1.525 1.526c-.281.281-.736.281-1.017 0s-.281-.736 0-1.017l1.525-1.525c.135-.135.317-.21.508-.21s.374.075.509.21zm9.148-9.148c-.281-.281-.281-.736 0-1.016l1.524-1.525c.281-.282.736-.282 1.017 0 .281.281.281.735 0 1.017l-1.525 1.524c-.281.281-.735.281-1.016 0z" fill-rule="nonzero" transform="matrix(.989261 0 0 .964685 .446879 .81224)"/></g></svg>
\ No newline at end of file
diff --git a/public/img/tiles/.gitkeep b/public/img/tiles/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/public/img/tiles/antlers-dark-mode.png b/public/img/tiles/antlers-dark-mode.png
new file mode 100644
index 000000000..a1541dd2c
Binary files /dev/null and b/public/img/tiles/antlers-dark-mode.png differ
diff --git a/public/img/tiles/antlers.png b/public/img/tiles/antlers.png
new file mode 100644
index 000000000..19245a8bb
Binary files /dev/null and b/public/img/tiles/antlers.png differ
diff --git a/public/img/tiles/cat.png b/public/img/tiles/cat.png
new file mode 100644
index 000000000..e2eedd8ca
Binary files /dev/null and b/public/img/tiles/cat.png differ
diff --git a/public/img/tiles/cd.png b/public/img/tiles/cd.png
new file mode 100644
index 000000000..3059b43ab
Binary files /dev/null and b/public/img/tiles/cd.png differ
diff --git a/public/img/tiles/fieldtypes-dark-mode.png b/public/img/tiles/fieldtypes-dark-mode.png
new file mode 100644
index 000000000..d486e215c
Binary files /dev/null and b/public/img/tiles/fieldtypes-dark-mode.png differ
diff --git a/public/img/tiles/fieldtypes.png b/public/img/tiles/fieldtypes.png
new file mode 100644
index 000000000..346ee0ae7
Binary files /dev/null and b/public/img/tiles/fieldtypes.png differ
diff --git a/public/img/tiles/floppy-disk.png b/public/img/tiles/floppy-disk.png
new file mode 100644
index 000000000..e3ab7ee56
Binary files /dev/null and b/public/img/tiles/floppy-disk.png differ
diff --git a/public/img/tiles/modern-people.png b/public/img/tiles/modern-people.png
new file mode 100644
index 000000000..c9131a7ef
Binary files /dev/null and b/public/img/tiles/modern-people.png differ
diff --git a/public/img/tiles/modifiers.png b/public/img/tiles/modifiers.png
new file mode 100644
index 000000000..3809a64c0
Binary files /dev/null and b/public/img/tiles/modifiers.png differ
diff --git a/public/img/tiles/repositories.png b/public/img/tiles/repositories.png
new file mode 100644
index 000000000..a5aed915d
Binary files /dev/null and b/public/img/tiles/repositories.png differ
diff --git a/public/img/tiles/stereo.png b/public/img/tiles/stereo.png
new file mode 100644
index 000000000..6b555f209
Binary files /dev/null and b/public/img/tiles/stereo.png differ
diff --git a/public/img/tiles/tags.png b/public/img/tiles/tags.png
new file mode 100644
index 000000000..3d16e18df
Binary files /dev/null and b/public/img/tiles/tags.png differ
diff --git a/public/img/tiles/variables.png b/public/img/tiles/variables.png
new file mode 100644
index 000000000..b07a6806b
Binary files /dev/null and b/public/img/tiles/variables.png differ
diff --git a/public/img/tiles/widgets.png b/public/img/tiles/widgets.png
new file mode 100644
index 000000000..1f25e4133
Binary files /dev/null and b/public/img/tiles/widgets.png differ
diff --git a/public/img/tip-troll.webp b/public/img/tip-troll.webp
new file mode 100644
index 000000000..2602ec402
Binary files /dev/null and b/public/img/tip-troll.webp differ
diff --git a/public/img/tips/.meta/cli-1622823765.svg.yaml b/public/img/tips/.meta/cli-1622823765.svg.yaml
deleted file mode 100644
index c8366fe2d..000000000
--- a/public/img/tips/.meta/cli-1622823765.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 1420
-last_modified: 1622823765
-width: 64
-height: 64
-mime_type: image/svg
diff --git a/public/img/tips/.meta/cli.svg.yaml b/public/img/tips/.meta/cli.svg.yaml
deleted file mode 100644
index 5cbc4074f..000000000
--- a/public/img/tips/.meta/cli.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 1420
-last_modified: 1622822792
-width: 64
-height: 64
-mime_type: image/svg
diff --git a/public/img/tips/.meta/database.svg.yaml b/public/img/tips/.meta/database.svg.yaml
deleted file mode 100644
index 3341d972e..000000000
--- a/public/img/tips/.meta/database.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 2196
-last_modified: 1622823355
-width: 64
-height: 64
-mime_type: image/svg
diff --git a/public/img/tips/.meta/development.svg.yaml b/public/img/tips/.meta/development.svg.yaml
deleted file mode 100644
index 94bcd31a9..000000000
--- a/public/img/tips/.meta/development.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 4438
-last_modified: 1622823878
-width: 64
-height: 64
-mime_type: image/svg
diff --git a/public/img/tips/.meta/devops.svg.yaml b/public/img/tips/.meta/devops.svg.yaml
deleted file mode 100644
index ee7f6e835..000000000
--- a/public/img/tips/.meta/devops.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 6629
-last_modified: 1622823951
-width: 64
-height: 64
-mime_type: image/svg
diff --git a/public/img/tips/.meta/laravel.svg.yaml b/public/img/tips/.meta/laravel.svg.yaml
deleted file mode 100644
index b1f4b16aa..000000000
--- a/public/img/tips/.meta/laravel.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 2679
-last_modified: 1622824033
-width: '444'
-height: '453'
-mime_type: image/svg
diff --git a/public/img/tips/.meta/localization.svg.yaml b/public/img/tips/.meta/localization.svg.yaml
deleted file mode 100644
index 983fa710d..000000000
--- a/public/img/tips/.meta/localization.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 6010
-last_modified: 1622824236
-width: 64
-height: 64
-mime_type: image/svg
diff --git a/public/img/tips/.meta/performance.svg.yaml b/public/img/tips/.meta/performance.svg.yaml
deleted file mode 100644
index 6cc660c63..000000000
--- a/public/img/tips/.meta/performance.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 3961
-last_modified: 1622824440
-width: 64
-height: 64
-mime_type: image/svg
diff --git a/public/img/tips/.meta/privacy.svg.yaml b/public/img/tips/.meta/privacy.svg.yaml
deleted file mode 100644
index 2f5d48ef3..000000000
--- a/public/img/tips/.meta/privacy.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 4317
-last_modified: 1622823349
-width: 64
-height: 64
-mime_type: image/svg
diff --git a/public/img/tips/.meta/troubleshooting.svg.yaml b/public/img/tips/.meta/troubleshooting.svg.yaml
deleted file mode 100644
index fa057fae4..000000000
--- a/public/img/tips/.meta/troubleshooting.svg.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 4482
-last_modified: 1622824503
-width: 64
-height: 64
-mime_type: image/svg
diff --git a/public/img/tips/customize-columns.png b/public/img/tips/customize-columns.png
new file mode 100644
index 000000000..f677bcaec
Binary files /dev/null and b/public/img/tips/customize-columns.png differ
diff --git a/public/img/triangle-pink.svg b/public/img/triangle-pink.svg
deleted file mode 100644
index e0cd2b342..000000000
--- a/public/img/triangle-pink.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <polygon points="1,1 1,9 7,5" fill="#002F3C"></polygon>
-    <polygon points="0,0 0,8 6,4" fill="#FC6EB3"></polygon>
-</svg>
\ No newline at end of file
diff --git a/public/img/triangle-purple.svg b/public/img/triangle-purple.svg
deleted file mode 100644
index 7b3fe7697..000000000
--- a/public/img/triangle-purple.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <polygon points="1,1 1,9 7,5" fill="#002F3C"></polygon>
-    <polygon points="0,0 0,8 6,4" fill="#7C67CB"></polygon>
-</svg>
\ No newline at end of file
diff --git a/public/img/triangle-teal.svg b/public/img/triangle-teal.svg
deleted file mode 100644
index 775b777db..000000000
--- a/public/img/triangle-teal.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<svg width="9px" height="9px" viewBox="0 0 9 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <polygon points="1,1 1,9 7,5" fill="#002F3C"></polygon>
-    <polygon points="0,0 0,8 6,4" fill="#01D7B0"></polygon>
-</svg>
\ No newline at end of file
diff --git a/public/img/triangle.svg b/public/img/triangle.svg
deleted file mode 100644
index 956dd265b..000000000
--- a/public/img/triangle.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg width="8px" height="8px" viewBox="0 0 8 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <polygon points="0,0 0,8 6,4"></polygon>
-</svg>
\ No newline at end of file
diff --git a/public/img/tv.svg b/public/img/tv.svg
deleted file mode 100644
index 75665b038..000000000
--- a/public/img/tv.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24"><g transform="matrix(1,0,0,1,0,0)"><defs><style>.b{fill:none;stroke:#191919;stroke-linecap:round;stroke-linejoin:round}</style></defs><path d="m21.5 21.5-1.707 1.707a1 1 0 0 1-.707.293H4.914a1 1 0 0 1-.707-.293L2.5 21.5" style="fill:gray"></path><path class="b" d="m21.5 21.5-1.707 1.707a1 1 0 0 1-.707.293H4.914a1 1 0 0 1-.707-.293L2.5 21.5"></path><rect x=".5" y="5.5" width="23" height="16" rx="1" style="fill:#e3e3e3"></rect><path d="M22.5 5.5h-21a1 1 0 0 0-1 1v3.158a1 1 0 0 1 1-1h21a1 1 0 0 1 1 1V6.5a1 1 0 0 0-1-1z" style="fill:#ffffff"></path><rect class="b" x=".5" y="5.5" width="23" height="16" rx="1"></rect><path class="b" d="M20.5 9.25a.25.25 0 1 1-.25.25.25.25 0 0 1 .25-.25m-1 6.25h2m-2 2h2"></path><rect x="2.5" y="7.5" width="15" height="12" rx="1" style="fill:#66e1ff"></rect><path class="b" d="m12.5 5.5-5-5m5 5 5-5"></path><path d="M3.5 7.5a1 1 0 0 0-1 1v10a.977.977 0 0 0 .193.559L14.251 7.5z" style="fill:#c2f3ff"></path><rect class="b" x="2.5" y="7.5" width="15" height="12" rx="1"></rect></g></svg>
diff --git a/public/img/user-avatar.png b/public/img/user-avatar.png
new file mode 100644
index 000000000..e4e984dea
Binary files /dev/null and b/public/img/user-avatar.png differ
diff --git a/public/img/user-impersonation.jpg b/public/img/user-impersonation.jpg
new file mode 100644
index 000000000..9e20e2b4c
Binary files /dev/null and b/public/img/user-impersonation.jpg differ
diff --git a/public/img/user-language-preference.png b/public/img/user-language-preference.png
new file mode 100644
index 000000000..3bc87bd44
Binary files /dev/null and b/public/img/user-language-preference.png differ
diff --git a/public/img/vite-manifest-not-found.png b/public/img/vite-manifest-not-found.png
new file mode 100644
index 000000000..11770590b
Binary files /dev/null and b/public/img/vite-manifest-not-found.png differ
diff --git a/public/img/widgets/.meta/collection.png.yaml b/public/img/widgets/.meta/collection.png.yaml
deleted file mode 100644
index 51f6af46d..000000000
--- a/public/img/widgets/.meta/collection.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 66127
-last_modified: 1633971392
-width: 930
-height: 636
-mime_type: image/png
diff --git a/public/img/widgets/.meta/form.png.yaml b/public/img/widgets/.meta/form.png.yaml
deleted file mode 100644
index 2800ad4e8..000000000
--- a/public/img/widgets/.meta/form.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 58797
-last_modified: 1633973980
-width: 1254
-height: 422
-mime_type: image/png
diff --git a/public/img/widgets/.meta/updater.png.yaml b/public/img/widgets/.meta/updater.png.yaml
deleted file mode 100644
index 5851359a9..000000000
--- a/public/img/widgets/.meta/updater.png.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-data: {  }
-size: 25424
-last_modified: 1633974094
-width: 930
-height: 274
-mime_type: image/png
diff --git a/public/img/ziggy.svg b/public/img/ziggy.svg
deleted file mode 100644
index c1e8cf89e..000000000
--- a/public/img/ziggy.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 149.98 4.15"><polygon points="0 2 5 0 10 2 15 0 20 2 25 0 30 2 35 0 40 2 45 0 50 2 55 0 60 2 65 0 69.99 2 74.98 0 79.98 2 84.98 0 89.98 2 94.98 0 99.98 2 104.98 0 109.98 2 114.98 0 119.98 2 124.98 0 129.98 2 134.98 0 139.98 2 144.98 0 149.98 2 149.98 4.15 144.98 2.15 139.98 4.15 134.98 2.15 129.98 4.15 124.98 2.15 119.98 4.15 114.98 2.15 109.98 4.15 104.98 2.15 99.98 4.15 94.98 2.15 89.98 4.15 84.98 2.15 79.98 4.15 74.99 2.16 70 4.15 65 2.15 60 4.15 55 2.15 50 4.15 45 2.15 40 4.15 35 2.15 30 4.15 25 2.15 20 4.15 15 2.15 10 4.15 5 2.15 0 4.15 0 2" fill="#ff269e"/></svg>
\ No newline at end of file
diff --git a/public/img/zigs-bottom-left.svg b/public/img/zigs-bottom-left.svg
deleted file mode 100644
index 36bba0575..000000000
--- a/public/img/zigs-bottom-left.svg
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="125px" height="220px" viewBox="0 0 125 220" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <!-- Generator: Sketch 58 (84663) - https://sketch.com -->
-    <title>Group 8</title>
-    <desc>Created with Sketch.</desc>
-    <defs>
-        <polygon id="path-1" points="0.00016750503 0.14625 118.618017 0.14625 118.618017 32.1428571 0.00016750503 32.1428571"></polygon>
-        <polygon id="path-3" points="0.00864100186 0.16453125 31.8530288 0.16453125 31.8530288 13.4157778 0.00864100186 13.4157778"></polygon>
-        <polygon id="path-5" points="0.300386667 0.0423062033 51.935 0.0423062033 51.935 54.2665845 0.300386667 54.2665845"></polygon>
-        <polygon id="path-7" points="0.393385714 0.0143846154 14.9390687 0.0143846154 14.9390687 16.5774063 0.393385714 16.5774063"></polygon>
-    </defs>
-    <g id="Docs" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="Desktop-HD-Copy-4" transform="translate(-170.000000, -1571.000000)">
-            <g id="Group-8" transform="translate(169.000000, 1566.000000)">
-                <g id="Group-19" transform="translate(96.785714, 60.000000) rotate(56.000000) translate(-96.785714, -60.000000) translate(37.000000, 42.000000)">
-                    <g id="Group-3" transform="translate(0.031288, 3.698168)">
-                        <mask id="mask-2" fill="white">
-                            <use xlink:href="#path-1"></use>
-                        </mask>
-                        <g id="Clip-2"></g>
-                        <path d="M118.571534,27.5387312 C118.527983,27.2528289 118.49532,26.958468 118.384348,26.6937124 C118.226893,26.1451692 117.897745,25.720968 117.665332,25.5158459 C117.620525,25.4862406 117.574461,25.4570583 117.527559,25.421532 C117.418681,25.2020301 117.359636,25.0256673 117.394812,24.9267011 L117.247407,24.740188 L117.126804,24.6052726 L116.889784,24.346015 C116.732748,24.1726128 116.577387,24.0017481 116.421607,23.8296147 C116.150668,23.5306015 115.847903,23.2036748 115.599995,23.0717199 C115.288436,22.9063534 114.978552,22.446203 114.599153,22.2123214 C114.277543,22.0118515 113.768746,21.5432425 113.366316,21.2789098 C113.136415,21.1287688 112.730215,20.8107237 112.667401,20.4833741 C112.536328,20.4782989 112.483983,20.4757613 112.404837,20.4728008 C112.378455,20.4042857 112.35961,20.3531109 112.33951,20.2998214 L112.326528,20.2300376 C112.071921,19.9843139 111.92996,19.7952632 111.825688,19.6256673 L111.833645,19.6176316 C111.729791,19.4827162 111.600813,19.3321523 111.438333,19.1591729 C111.043858,18.7421617 110.71848,18.4490695 110.103318,17.996532 C110.045947,17.9495865 109.659429,17.6256203 109.275843,17.3041917 C108.872993,17.0081391 108.4714,16.7158929 108.41738,16.6896711 C108.133877,16.558562 107.877595,16.4126504 107.568548,16.2878853 C107.253638,16.1550846 106.747354,15.8370395 106.754055,16.0112876 C106.755311,16.0205921 106.689565,15.9994455 106.605394,15.9664568 C106.517872,15.9321992 106.431189,15.8966729 106.310585,15.8353477 C106.248608,15.808703 106.196682,15.771062 106.129261,15.752453 L105.910248,15.7181955 L105.613764,15.6720959 C105.436209,15.6458741 105.255303,15.6175376 105.072304,15.5883553 C104.981851,15.6141541 104.881767,15.6056955 104.794246,15.6353008 C104.791733,15.6357237 104.794664,15.6065414 104.791733,15.6069643 L104.135113,15.4923496 C104.070624,15.290188 104.079418,15.3223308 103.920707,15.233938 C103.622967,15.0689944 103.040887,14.9480357 102.561404,14.9594549 C101.920278,14.9755263 101.180325,14.8418797 100.486854,14.7543327 C100.184926,14.7158459 99.9043551,14.6798966 99.6614728,14.6798966 C99.5902832,14.6807425 99.5199311,14.6824342 99.4516728,14.6828571 C99.4508353,14.6540977 99.4805674,14.6308365 99.5597135,14.6096898 C98.9688395,14.5170677 99.0701801,14.3512782 98.5651524,14.2497744 C98.3034258,14.1973308 98.0387679,14.1436184 97.7749474,14.0894831 L97.2171557,13.9858647 L96.6811396,14.0679135 C96.285409,14.1347368 95.7041665,14.2595019 95.5831441,14.3368985 C95.3318866,14.5132613 94.8524034,14.6435244 94.4294532,14.7877444 C94.2866552,14.8384962 94.1446947,14.8888252 93.9910088,14.9425376 C93.8720802,14.9518421 93.7569205,14.9687594 93.6455297,14.9886372 C93.6082598,14.9662218 93.5634522,14.9408459 93.5069193,14.9091259 C93.4575053,14.9548026 93.3410893,14.9831391 93.2263483,15.0317763 C93.1028134,15.0520771 92.965878,15.0309305 92.8419243,15.0702632 L93.4436861,14.8829041 C93.0617746,15.0009023 93.0236673,14.8803665 92.4030611,15.1798026 C92.1786044,15.2051786 91.9491225,15.252547 91.717128,15.3100658 C91.4976964,15.4145301 91.284965,15.5173026 91.1002907,15.6141541 L90.5433365,15.89625 C90.3703876,15.9922556 90.1945073,16.0861466 90.0144394,16.1783459 C89.6555599,16.3597838 89.2824424,16.533609 88.895087,16.6972838 C88.8067281,16.7357707 88.702875,16.79625 88.6279165,16.8321992 L87.4415621,17.4674436 C87.3012767,17.4670207 87.155966,17.4657519 87.0127492,17.4653289 C86.5688609,17.458562 86.3695299,17.7190883 85.9281542,17.8155169 C85.9327606,17.6793327 85.739711,17.6573402 85.0575468,17.8662688 C84.6287339,18.0011842 84.1107246,18.1043797 83.6639049,18.1724718 C83.5093815,18.2003853 83.3887779,18.2621335 83.2359296,18.3285338 C83.150502,18.2955451 83.1203511,18.2490226 83.1777216,18.1821992 C83.1031818,18.177547 82.9834157,18.1796617 82.9595463,18.1686654 C82.9281391,18.1593609 82.8975694,18.1496335 82.9021758,18.133985 C82.8891942,18.1242575 82.9231139,18.1238346 82.8736999,18.1094549 L82.7618903,18.0726598 C82.6856756,18.0502444 82.6094608,18.0278289 82.5319897,18.0045677 C82.2924575,17.940282 81.9620538,17.8848778 81.7003272,17.8556955 C81.1446293,17.7952162 80.6069381,17.7639192 80.0625468,17.5824812 C79.6923607,17.5668327 79.2438659,17.4957801 78.8251034,17.446297 C78.7204127,17.4348778 78.6186534,17.4247274 78.5185692,17.4145771 C78.4720865,17.4107707 78.4109472,17.4048496 78.3816338,17.4056955 L78.361952,17.4196523 C78.3376637,17.4255733 78.3058378,17.4238816 78.2568426,17.4204981 C78.1856529,17.4056955 78.1190697,17.3972368 78.0583491,17.396391 C78.0185666,17.3972368 77.9783654,17.3951222 77.9356517,17.3896241 C77.8016476,17.2576692 77.7245953,17.1405169 77.7363207,17.0449342 C77.5482963,16.9298966 77.3611094,16.8309305 77.1793664,16.7082801 C76.9992985,16.5784398 76.8196494,16.4502914 76.6416753,16.3225658 C76.3330473,16.0958741 75.9791929,15.8700282 75.7300292,15.7816353 C75.4130259,15.6725188 75.0600091,15.2783459 74.6651159,15.1129793 C74.3217306,14.9755263 73.8472726,14.5534398 73.4402354,14.3368985 C73.2103348,14.2252444 72.8045538,13.8788628 72.7404831,13.5608177 C72.6098292,13.5553195 72.5566464,13.5536278 72.4783378,13.5506673 C72.4519557,13.4808835 72.4326927,13.4297086 72.4130108,13.377265 L72.3996104,13.3066353 C72.1450028,13.0617575 72.0042985,12.8735526 71.8987704,12.7031109 L71.9067269,12.6946523 C71.8016175,12.5597368 71.6734761,12.4091729 71.5105775,12.2361936 C71.1177782,11.8187594 70.7911434,11.5265132 70.1768187,11.0743985 C70.1194482,11.0270301 69.7320928,10.702218 69.3480875,10.3820583 C68.946913,10.0860056 68.5440634,9.7937594 68.4896242,9.76711466 C68.2065407,9.6368515 67.950258,9.48967105 67.6403737,9.36659774 C67.3267206,9.23421992 66.8191803,8.91490602 66.8267181,9.09 C66.8271368,9.09888158 66.7618099,9.07731203 66.6772198,9.04390038 C66.5913735,9.01091165 66.5013395,8.97369361 66.3798984,8.91279135 C66.3191778,8.88572368 66.2693451,8.84554511 66.1994117,8.83158835 L65.9795614,8.79733083 L65.6864276,8.75207707 C65.5084535,8.7250094 65.3279668,8.6975188 65.1449676,8.6687594 C65.0545148,8.69286654 64.9535931,8.68525376 64.8664904,8.71485902 C64.8635591,8.71570489 64.8669092,8.68609962 64.8635591,8.68609962 L64.2081957,8.57190789 C64.1432875,8.36974624 64.1520815,8.40146617 63.9929517,8.31307331 C63.6964678,8.14728383 63.1131315,8.02717105 62.6344859,8.03943609 C61.9929416,8.05423872 61.2525694,7.91974624 60.5599361,7.83262218 C60.256752,7.79413534 59.9765998,7.75776316 59.7341363,7.75776316 C59.6633654,7.75903195 59.5921758,7.75945489 59.5234987,7.76030075 C59.5234987,7.73281015 59.5532309,7.70828008 59.632377,7.68840226 C59.0410843,7.59493421 59.1428436,7.42914474 58.6386534,7.32764098 C58.3760893,7.27392857 58.1114313,7.2206391 57.8476109,7.16777256 L57.6503737,7.12801692 C57.5356328,7.10771617 57.4066539,7.0806485 57.2873066,7.06457707 L56.7533843,7.14662594 C56.3576537,7.21387218 55.7764112,7.33694549 55.6549701,7.41603383 C55.4037125,7.59281955 54.9246481,7.72265977 54.5021167,7.86645677 C54.3588999,7.91763158 54.2165206,7.96838346 54.064091,8.02209586 C53.9443249,8.03140038 53.8291652,8.04916353 53.7186119,8.06861842 C53.6800858,8.04662594 53.637372,8.02167293 53.5804203,7.98741541 C53.5305875,8.03520677 53.4129152,8.0618515 53.2985931,8.11133459 C53.1758956,8.13205827 53.0381227,8.11175752 52.914169,8.15024436 L53.5163496,7.96288534 C53.1336006,8.08172932 53.095912,7.95992481 52.4761434,8.25978383 C52.2508491,8.28431391 52.0213672,8.33379699 51.7893727,8.39046992 C51.5695224,8.49578008 51.3572098,8.59770677 51.1725355,8.69455827 L50.6164188,8.9775 C50.4438886,9.07392857 50.2680083,9.16739662 50.0883592,9.25917293 C49.7286421,9.44145677 49.3555246,9.61443609 48.9681693,9.77768797 C48.8798104,9.81659774 48.7759572,9.8762312 48.7018363,9.91260338 L47.5146444,10.5474248 C47.3747777,10.5474248 47.2298858,10.546156 47.0862503,10.5465789 C46.6423619,10.5389662 46.4426122,10.7994925 46.0012364,10.896344 C46.0058428,10.7601598 45.813212,10.7377444 45.130629,10.9466729 C44.7026537,11.0824342 44.1842256,11.1852068 43.7374059,11.2516071 C43.5828825,11.2816353 43.4635352,11.3429605 43.3094306,11.408938 C43.2244218,11.3751034 43.1934334,11.3290038 43.2516413,11.2626034 C43.0518916,11.2592199 42.9719079,11.2444173 42.9781894,11.2126974 C43.0049902,11.2042387 42.9099311,11.1763252 42.8358101,11.1517951 C42.7591766,11.1293797 42.6829618,11.1065414 42.6050719,11.083703 C42.3655397,11.0181485 42.0355548,10.9635902 41.7734095,10.9356767 C41.2172928,10.8743515 40.6800204,10.8426316 40.1347915,10.6611936 C39.7658617,10.6455451 39.317367,10.5744925 38.8986044,10.5245865 C38.7939137,10.5140132 38.6908981,10.5034398 38.5920702,10.4928665 C38.5481001,10.4894831 38.4790043,10.4822932 38.4605787,10.4852538 L38.4396406,10.5000564 C38.4132586,10.502594 38.3864577,10.5047086 38.3307623,10.4979417 C38.2599914,10.4827162 38.1934082,10.4742575 38.1326876,10.4742575 C38.0937427,10.4738346 38.0535415,10.4721429 38.0099902,10.4666447 C37.8759862,10.3351128 37.7989339,10.2183835 37.8114967,10.1219549 C37.6234723,10.0064944 37.4354479,9.90837406 37.253705,9.78403195 C37.0740558,9.65503759 36.8952442,9.5268891 36.7155951,9.3987406 C36.4073858,9.17120301 36.0535314,8.94620301 35.8052052,8.85654135 C35.4877832,8.74869361 35.1356039,8.35494361 34.7411295,8.18830827 C34.3977442,8.05043233 33.9232862,7.62834586 33.5154115,7.41095865 C33.2855108,7.29972744 32.8797299,6.95292293 32.8169155,6.63530075 C32.6850053,6.62980263 32.6330787,6.62768797 32.5539326,6.62515038 C32.5271318,6.55494361 32.5078687,6.5037688 32.4890244,6.45132519 L32.4752052,6.38154135 C32.2205976,6.13539474 32.0798934,5.94718985 31.9739464,5.77717105 L31.3324022,6.43440789 L31.9823217,5.76828947 C31.877631,5.63464286 31.7486522,5.48407895 31.5861723,5.31067669 C31.193373,4.89324248 30.8663194,4.60057331 30.251576,4.14930451 C30.1942055,4.10066729 29.8076876,3.77754699 29.4236823,3.45654135 C29.0212515,3.16048872 28.6196582,2.86824248 28.5648003,2.84244361 C28.2821356,2.71218045 28.0254341,2.56457707 27.7155498,2.44277256 C27.4014779,2.30912594 26.8943564,1.9893891 26.9027316,2.16490602 C26.9031504,2.17294173 26.8374047,2.15179511 26.7519771,2.11880639 C26.6686434,2.0862406 26.5752593,2.04733083 26.4538182,1.98642857 C26.3922601,1.96020677 26.3441024,1.9174906 26.2712377,1.90649436 L26.0513873,1.87223684 L25.7607661,1.82782895 C25.5832108,1.80033835 25.4031429,1.77284774 25.2188873,1.74451128 C25.1284346,1.76946429 25.0279316,1.7618515 24.9412477,1.7906109 C24.9387352,1.7918797 24.9412477,1.76227444 24.9378976,1.76227444 L24.2825342,1.64808271 C24.2184635,1.44507519 24.2260013,1.47806391 24.0672902,1.38967105 C23.7703876,1.22430451 23.1878888,1.10503759 22.7079869,1.11518797 C22.0672802,1.1312594 21.3269079,0.997612782 20.6338559,0.909642857 C20.3306718,0.872424812 20.0509384,0.835629699 19.8088936,0.835629699 C19.7368664,0.836898496 19.6665143,0.837744361 19.5978373,0.838590226 C19.5969997,0.811099624 19.6275694,0.786992481 19.7067155,0.766691729 C19.115004,0.673646617 19.2167633,0.507434211 18.7125732,0.406776316 C18.4504278,0.35306391 18.1853511,0.300197368 17.9223682,0.246484962 L17.7238747,0.207152256 C17.6024336,0.186851504 17.4759673,0.157669173 17.358295,0.14625 L16.8268853,0.228298872 C16.4319922,0.294699248 15.850331,0.419464286 15.7293086,0.497283835 C15.4788886,0.674492481 14.9981491,0.803909774 14.5760365,0.949398496 C14.4336572,0.999304511 14.2912779,1.04921053 14.1380108,1.10419173 C14.0182447,1.11391917 13.9039225,1.13083647 13.7925317,1.14986842 C13.7544243,1.12787594 13.7112918,1.10292293 13.6547588,1.07035714 C13.6045073,1.1168797 13.4880913,1.14394737 13.3733504,1.19343045 C13.2498154,1.215 13.1124613,1.19343045 12.9885075,1.23191729 L13.5906881,1.04413534 C13.2083579,1.16297932 13.1706693,1.04159774 12.5500631,1.34145677 C12.3251876,1.36556391 12.0957057,1.41504699 11.8645488,1.47214286 C11.6438609,1.57703008 11.430292,1.6793797 11.2464552,1.77580827 L10.6911761,2.05959586 C10.5182271,2.15517857 10.3419281,2.24906955 10.1626977,2.34 C9.80381816,2.52355263 9.4307007,2.69610902 9.04208903,2.85978383 C8.95373013,2.89657895 8.85155206,2.95494361 8.77240594,3.00358083 L7.54794416,3.74667293 C7.40640241,3.76824248 7.25899799,3.79108083 7.11326861,3.81307331 C6.65807369,3.87778195 6.48721856,4.1700282 6.04877414,4.33708647 C6.02992983,4.1975188 5.82724874,4.21147556 5.17439789,4.58238722 C4.76777943,4.8137312 4.25982042,5.02646617 3.82263229,5.25823308 C3.67397158,5.33774436 3.56718712,5.43628759 3.43067052,5.54963346 C3.33309884,5.54667293 3.2866162,5.51368421 3.32430483,5.43163534 C2.96040015,5.53736842 2.6856919,5.60461466 2.37329502,5.72218985 C2.25478521,5.76659774 2.12119995,5.82538534 1.98552088,5.89093985 L1.78577113,5.99371241 C1.70201861,6.03854323 1.61952238,6.08379699 1.54205131,6.12524436 C1.35402691,6.22463346 1.17605282,6.33036654 0.998078722,6.43271617 C0.83015493,6.53887218 0.611560865,6.61838346 0.546652666,6.77359962 C0.364909708,7.02862782 0.185260563,7.27900376 0.00016750503,7.53614662 C0.027805835,7.73619361 0.0964828974,7.96796053 0.143384306,8.19845865 C0.202429829,8.3600188 0.26273164,8.52707707 0.324289738,8.69878759 C0.356953219,8.78548872 0.379985161,8.87218985 0.419348843,8.96142857 L0.558796781,9.23591165 C0.667256288,9.43891917 0.778647133,9.64827068 0.886687877,9.85043233 C1.09313783,10.2268421 1.30419416,10.5609586 1.50771278,10.7254793 C1.54079502,10.7521241 1.57387726,10.7796147 1.60654074,10.8130263 C1.62580382,10.9128383 1.63292279,10.996156 1.6316665,11.0718609 C1.64004175,11.158985 1.63417907,11.2291917 1.60654074,11.2731767 C1.90595599,11.8627444 2.33937525,12.3605357 2.84733426,12.7407519 C3.28745372,13.0782519 3.8594834,13.3201692 4.22799447,13.3256673 C4.67690795,13.352312 5.38629175,13.5307895 5.94575855,13.3506203 C6.17775302,13.2833741 6.50522535,13.1844079 6.82934759,13.0439944 C6.98554603,12.9725188 7.15933249,12.8807425 7.28831137,12.8041917 C7.40472736,12.7301786 7.51528068,12.6561654 7.61117731,12.5842669 C7.83102767,12.4180545 8.26737827,12.1448402 8.59275679,12.1989756 C8.64342706,12.0763252 8.66269014,12.027265 8.69325981,11.9528289 C8.76738078,11.952406 8.82140116,11.9515602 8.87709658,11.9519831 L8.94744869,11.9646711 C9.26361444,11.8077632 9.48765241,11.7392481 9.68112072,11.6990695 L9.68614588,11.7100658 C9.84276308,11.6698872 10.0211559,11.6161748 10.2296997,11.5408929 C10.7351461,11.3594549 11.0902568,11.1733647 11.7594394,10.8667387 C11.7925216,10.8536278 11.9210817,10.8011842 12.095287,10.7301316 C12.1832271,10.6950282 12.2828926,10.6552726 12.388002,10.6138252 C12.4876675,10.5816823 12.5931957,10.5470019 12.6978863,10.5118985 C13.1179052,10.3761372 13.52913,10.2378383 13.5760314,10.2107707 C13.8130511,10.0733177 14.0772902,9.96969925 14.3436232,9.84958647 C14.6241942,9.72989662 15.1451348,9.61147556 15.0324877,9.48882519 C15.0203436,9.47359962 15.2582007,9.36744361 15.4039301,9.33360902 C15.7314024,9.25113722 16.0655749,9.16655075 16.4131479,9.07815789 C16.4847563,9.01979323 16.5768841,8.99018797 16.6455611,8.92970865 C16.6476549,8.92717105 16.6556114,8.95593045 16.6585428,8.95550752 C16.6593803,8.93816729 17.284174,8.85696429 17.284174,8.85696429 C17.4022651,9.03163534 17.3846771,9.0037218 17.5513446,9.04093985 C17.6283969,9.05870301 17.7209434,9.06716165 17.8214464,9.06969925 C17.8721167,9.07012218 17.9252995,9.07012218 17.9797387,9.06673872 L18.0932233,9.16443609 C18.1208617,9.16105263 18.1380309,9.26424812 18.1409623,9.26424812 L18.1589691,9.26424812 L18.2536094,9.17120301 C18.3800757,9.18389098 18.5073795,9.13694549 18.6275644,9.13356203 C19.2682711,9.11791353 20.0086434,9.22533835 20.7021142,9.31288534 C21.0048795,9.35137218 21.2846129,9.37378759 21.5274952,9.37294173 C21.5991036,9.37209586 21.669037,9.36575188 21.7368765,9.36490602 C21.7385516,9.39324248 21.7088194,9.4131203 21.6288358,9.43384398 C22.2205473,9.52646617 22.118788,9.69098684 22.6229781,9.7912218 C22.6669482,9.79968045 22.669042,9.80094925 22.6719733,9.80179511 L22.6874676,9.80644737 L22.7527945,9.84662594 L23.0706353,10.027218 C23.2883919,10.1490226 23.5065672,10.2687124 23.7264175,10.3786748 C24.035883,10.5410808 24.4981969,10.8164098 24.6330385,10.8261372 C24.9110968,10.8658929 25.3244155,11.0896241 25.6749198,11.3146241 C25.7984547,11.3869455 25.9215709,11.4584211 26.0543187,11.5353947 C26.133046,11.6144831 26.2109359,11.6918797 26.2867319,11.7680075 C26.2905008,11.8103008 26.2946884,11.8597838 26.2992948,11.9232237 C26.3633654,11.9342199 26.4479555,12.0056955 26.5488773,12.0653289 C26.6351424,12.1456861 26.6824625,12.2691823 26.7687276,12.3465789 C26.7687276,12.3465789 26.6686434,12.2480357 26.549296,12.1617575 C26.4320425,12.0750564 26.3143702,11.9883553 26.3143702,11.9883553 C26.6171356,12.2074342 26.5354769,12.3064004 27.0559987,12.6362876 C27.1853964,12.7965789 27.3110252,12.9543327 27.4420978,13.1184305 C27.6100216,13.2360056 27.7787829,13.396297 27.9312125,13.5155639 C28.5472123,14.0048966 29.0928599,14.5572462 29.7691615,15.1793797 C29.8437012,15.2500094 29.9437855,15.3269831 30.0237691,15.3845019 C30.4261999,15.7000094 30.8633881,15.9207801 31.2808944,16.1846898 C31.3717658,16.3039568 31.4647311,16.4278759 31.5572777,16.5501034 C31.8437113,16.9413158 32.2076159,16.921015 32.5882711,17.2217199 C32.4831617,17.3075752 32.6025091,17.4864756 33.2976549,17.8531579 C33.5254618,17.9576222 33.7658315,18.0840789 34.0091325,18.2139192 L34.3742935,18.408468 L34.6046129,18.527735 L34.7398732,18.5970959 C34.789706,18.6131673 34.8504266,18.6161278 34.9044469,18.6267011 C34.9752178,18.6364286 35.0635767,18.6474248 35.1129907,18.6503853 C35.1510981,18.6491165 35.1908805,18.6482707 35.2302442,18.6482707 C35.306459,18.6415038 35.3885365,18.6347368 35.4760578,18.6283929 C35.5539477,18.6867575 35.5732108,18.7408929 35.4949022,18.7874154 C35.8516879,18.908797 36.1113207,19.014953 36.4308365,19.1008083 C36.6686937,19.165094 36.9995161,19.2204981 37.2608239,19.2484117 C37.8169406,19.3097368 38.3550506,19.340188 38.9002794,19.5224718 C39.6385578,19.5533459 40.6938395,19.8062594 41.1950983,19.665 C41.234462,19.6540038 41.2771758,19.6425846 41.3228209,19.6353947 C41.500795,19.72125 41.6188861,19.8113346 41.6385679,19.9064944 C42.1029756,20.0113816 42.5535641,20.1124624 43.0024776,20.2135432 C43.1008868,20.2355357 43.2026461,20.2571053 43.3010553,20.2795207 C43.3802015,20.2934774 43.4593476,20.3078571 43.5368187,20.3226598 C43.6327153,20.3361936 43.7378247,20.3725658 43.8152958,20.3454981 C43.897792,20.3315414 43.9786132,20.3175846 44.0573405,20.3044737 C44.1084296,20.2926316 44.1599374,20.2812124 44.2080951,20.2702162 C44.2985478,20.246532 44.3797877,20.2198872 44.448046,20.1877444 C44.6214137,20.1103477 44.8534082,20.0756673 45.1000594,20.0380263 C45.222338,20.0194173 45.3483856,20.0012312 45.4715018,19.9750094 C45.5887553,19.9411748 45.7026587,19.9009962 45.8081869,19.8498214 C46.1616225,19.6726128 46.8546745,19.4937124 47.2960503,19.2657519 C47.5473078,19.1295677 48.0293036,18.914718 48.3555196,19.0094549 C48.4237779,18.8952632 48.4509975,18.8487406 48.4916175,18.7793797 C48.5678322,18.7886842 48.6231089,18.7950282 48.6808981,18.802218 L48.7512503,18.8229417 C49.0958919,18.6943703 49.3324927,18.6224718 49.5406177,18.5932895 L49.5452241,18.6047086 C49.7123104,18.5696053 49.9057787,18.520968 50.1323292,18.4516071 C50.6838395,18.2845489 51.0050304,18.0878853 51.6851009,17.7850658 C51.7181831,17.7706861 51.8459057,17.7182425 52.0209484,17.646344 C52.1997601,17.5693703 52.4158415,17.4928195 52.6235478,17.4298026 C53.0427291,17.2927726 53.4543727,17.1548966 53.5004366,17.1278289 C53.7391313,16.9912218 54.0025329,16.8876034 54.2676097,16.7670677 C54.5485993,16.6469549 55.06954,16.5289568 54.9573116,16.4063064 C54.9455863,16.3910808 55.1830246,16.2861936 55.3291728,16.2515132 C55.6562264,16.1686184 55.9903989,16.084032 56.3383906,15.9956391 C56.4108365,15.9381203 56.5021268,15.9080921 56.5712226,15.8471898 C56.5728976,15.8454981 56.5808541,15.8734117 56.5833667,15.8729887 C56.5850418,15.8552256 57.208998,15.7757143 57.208998,15.7757143 C57.3275078,15.9503853 57.3090822,15.921203 57.4761685,15.9584211 C57.5536396,15.9770301 57.6449298,15.9863346 57.7466891,15.9876034 C57.8316979,15.9922556 57.9983654,15.9782989 58.0138597,15.9799906 C58.0435918,15.9757613 58.0565734,15.9757613 58.0611798,15.977453 C58.0695551,15.977453 58.0595048,15.9753383 58.0842118,15.9778759 L58.1788521,15.9876034 C58.3061559,15.9998684 58.4326222,16.0057895 58.5523883,16.002406 C59.1935138,15.9876034 59.9338861,16.1195583 60.6269381,16.2079511 C60.9297035,16.246438 61.2098556,16.2823872 61.4523192,16.2815414 C61.5239276,16.2811184 61.5938609,16.2794267 61.6629567,16.2794267 C61.6633755,16.3064944 61.6336434,16.3306015 61.554916,16.3513252 C62.14579,16.4439474 62.0440307,16.6097368 62.5486396,16.7108177 C62.5926097,16.7196992 62.588422,16.7192763 62.5938659,16.7218139 L62.6093602,16.7268891 L62.6746871,16.7679135 L62.9954593,16.9489286 C63.2132158,17.0715789 63.4309723,17.19 63.6516602,17.2991165 C63.960707,17.4644831 64.4226021,17.7385432 64.5578624,17.7486936 C64.8367583,17.7880263 65.2492394,18.0117575 65.6001625,18.2371805 C65.7236974,18.308656 65.8463949,18.3805545 65.9791426,18.4571053 C66.05787,18.5361936 66.1357598,18.6140132 66.2115558,18.689718 C66.2149059,18.7328571 66.2190936,18.7819173 66.2241187,18.8449342 C66.2877706,18.8555075 66.3731982,18.9286748 66.4732824,18.9866165 C66.5599663,19.0682425 66.6056114,19.1913158 66.6931328,19.2691353 C66.6931328,19.2691353 66.592211,19.1701692 66.47412,19.0843139 C66.3568664,18.9976128 66.2391942,18.9100658 66.2391942,18.9100658 C66.5419595,19.1295677 66.4594633,19.2289568 66.9812414,19.558844 C67.1093828,19.7187124 67.2354303,19.8768891 67.3677593,20.0409868 C67.5352643,20.158562 67.7040257,20.3192763 67.8560365,20.4389662 C68.472455,20.9266071 69.0189401,21.4789568 69.6948229,22.1015132 C69.7693627,22.1721429 69.8694469,22.2486936 69.9490118,22.3066353 C70.3510239,22.621297 70.7894683,22.8416447 71.2061371,23.1068233 C71.2965898,23.2252444 71.3899738,23.3491635 71.4833579,23.4718139 C71.768954,23.8626034 72.1332774,23.8423026 72.5143514,24.1430075 C72.4088232,24.2297086 72.5277518,24.4081861 73.2228976,24.7748684 C73.451542,24.8789098 73.6919117,25.0062124 73.9339565,25.1352068 L74.299955,25.3297556 L74.5315307,25.4507143 L74.6663722,25.5200752 C74.7182988,25.5331861 74.7765068,25.5378383 74.8322022,25.5471429 C74.9021356,25.5564474 74.9942633,25.5691353 75.0382334,25.57125 C75.0767596,25.5699812 75.1157045,25.5695583 75.1559057,25.5691353 C75.2321205,25.5627914 75.3137792,25.5556015 75.4013006,25.5492575 C75.4791904,25.608468 75.4984535,25.6621805 75.4209824,25.7082801 C75.7769306,25.8296617 76.0361446,25.9358177 76.3556605,26.02125 C76.5951927,26.0859586 76.92434,26.1422086 77.1869042,26.1701222 C77.7430209,26.2310244 78.280712,26.2623214 78.8251034,26.4441823 C79.5646381,26.4746335 80.6190822,26.7279699 81.1195035,26.5875564 C81.1605423,26.5761372 81.2019997,26.5655639 81.2489012,26.5583741 C81.4268753,26.6450752 81.54371,26.733468 81.5642294,26.8290508 C82.0286371,26.9330921 82.4783881,27.0350188 82.9281391,27.1356767 C83.0265483,27.1576692 83.1266325,27.1800846 83.226298,27.2020771 C83.307538,27.2168797 83.3887779,27.2312594 83.4675053,27.2469079 C83.565077,27.2625564 83.6664175,27.2921617 83.7451449,27.2659398 C83.8268036,27.2515602 83.9080435,27.2371805 83.9859334,27.2253383 C84.0370224,27.2126504 84.0864364,27.2016541 84.1350128,27.1910808 C84.224628,27.1673966 84.3067055,27.1411748 84.374545,27.109032 C84.7120677,26.9432425 85.3230423,26.9935714 85.7334296,26.771109 C86.0864464,26.5939004 86.7799173,26.4145771 87.221293,26.1861936 C87.4729693,26.0495865 87.9545463,25.8355827 88.2811811,25.9303195 C88.3490206,25.815282 88.3762402,25.7687594 88.4172789,25.6998214 C88.4934937,25.7091259 88.5483516,25.715047 88.6053033,25.7218139 L88.6760742,25.7421147 C89.0211346,25.614812 89.2577354,25.5429135 89.4658604,25.5128853 L89.4704668,25.5243045 C89.6379718,25.4892011 89.8306026,25.4409868 90.0579907,25.371203 C90.609501,25.2041447 90.9306919,25.0079041 91.609506,24.7046617 C91.6685516,24.6864756 92.1379844,24.4678195 92.547953,24.3502444 C92.9675531,24.2140602 93.3787779,24.0757613 93.4256793,24.0482707 C93.6639552,23.9133553 93.9269381,23.808468 94.1936899,23.6883553 C94.4738421,23.5678195 94.9947827,23.4506673 94.8829731,23.327594 C94.8704102,23.3115226 95.1086861,23.2070583 95.2539967,23.1732237 C95.5814691,23.0894831 95.9152228,23.0061654 96.2640521,22.9173496 C96.3352417,22.8598308 96.428207,22.8289568 96.4968841,22.7693233 C96.4981403,22.7672086 96.5065156,22.7946992 96.5086094,22.7951222 C96.5094469,22.777782 97.1346595,22.6974248 97.1346595,22.6974248 C97.2523317,22.8725188 97.2351625,22.8433365 97.4014112,22.8814004 C97.4788823,22.8995865 97.5710101,22.9080451 97.6723506,22.9101598 C97.7594532,22.9135432 97.9194205,22.9012782 97.9378461,22.9017011 C98.0203423,22.8991635 97.9164892,22.8936654 98.1049323,22.9118515 C98.2318174,22.9236936 98.3582837,22.9287688 98.4784686,22.9262312 C99.1195941,22.9101598 99.8595475,23.0438064 100.5526,23.1305075 C100.854527,23.1694173 101.13468,23.2053665 101.377562,23.2045207 C101.44917,23.2036748 101.519522,23.2028289 101.587781,23.202406 C101.588199,23.2298966 101.559305,23.2540038 101.480996,23.2738816 C102.071451,23.3673496 101.969692,23.533562 102.474301,23.6350658 C102.536697,23.6473308 102.509477,23.6435244 102.531253,23.6498684 L102.597836,23.6917387 L102.919864,23.8740226 C103.137621,23.9966729 103.356215,24.1155169 103.576065,24.2242105 C103.885531,24.3895771 104.347426,24.6640602 104.482686,24.6750564 C104.761163,24.7131203 105.173645,24.9385432 105.524986,25.1626974 C105.64894,25.2341729 105.771219,25.3060714 105.903129,25.3826222 C105.982694,25.4621335 106.060584,25.5395301 106.13638,25.6160808 C106.13973,25.658797 106.143918,25.7078571 106.149361,25.7708741 C106.212595,25.7818703 106.297185,25.8550376 106.398106,25.9121335 C106.484371,25.9933365 106.530435,26.1172556 106.617538,26.1954981 C106.617538,26.1954981 106.516616,26.096532 106.399781,26.0102538 C106.281272,25.9231297 106.164018,25.8364286 106.164018,25.8364286 C106.467202,26.0550846 106.383868,26.1544737 106.905228,26.4843609 C107.033788,26.6450752 107.159836,26.802406 107.291327,26.9665038 C107.45967,27.0840789 107.62885,27.246062 107.780023,27.3644831 C108.388904,27.8533929 108.976009,28.4061654 109.548876,29.0257613 C109.614203,29.0968139 109.704656,29.1742105 109.776683,29.2325752 L110.892266,30.1325752 C110.961781,30.2598778 111.034227,30.3914098 111.105416,30.5216729 C111.296372,30.9014662 111.715554,31.0723308 112.18373,31.4039098 C112.12636,31.4474718 112.138923,31.5155639 112.280464,31.6306015 C112.422425,31.7392951 112.700902,31.8932425 113.180804,32.0061654 C113.777122,32.1429252 114.511213,32.2083271 115.14815,32.052688 C115.363813,31.9939004 115.527549,31.9114286 115.719761,31.7904699 C115.839946,31.7946992 115.895642,31.827265 115.829058,31.9139662 C116.311892,31.7828571 116.678309,31.6415977 117.054776,31.3738816 C117.193806,31.2736466 117.348329,31.1383083 117.488614,30.9873214 C117.619687,30.827453 117.746153,30.6599718 117.849588,30.5077162 C117.969773,30.3512312 118.048919,30.1752914 118.123459,29.9968139 C118.197579,29.8217199 118.278819,29.6478947 118.344146,29.4702632 C118.425805,29.1035808 118.572372,28.7470489 118.618017,28.3579511 C118.609642,28.1037688 118.63058,27.8233647 118.571534,27.5387312" id="Fill-1" fill="#000000" mask="url(#mask-2)"></path>
-                    </g>
-                    <path d="M111.216626,20.481222 C109.940902,19.2169154 107.566938,17.5619828 105.941244,16.8037334 L97.3065645,15.3160925 C95.5221336,15.4871482 92.7319552,16.2483252 91.1079273,17.0099204 L89.2647514,17.8744 C87.6403068,18.635577 84.848462,19.3729149 83.0602814,19.511767 L78.2215281,18.6778181 C76.5820848,17.9480083 74.1972885,16.3160783 72.9215642,15.0526081 L71.4975191,13.639412 C70.2217948,12.3746871 67.8482475,10.7184998 66.2221364,9.96150514 L57.587874,8.4713548 C55.8030265,8.6407376 53.0136814,9.40400573 51.3884036,10.1656009 L49.5443944,11.030917 C47.9191166,11.7941851 45.128105,12.5302684 43.3399244,12.6674475 L38.5040875,11.8339169 C36.8646442,11.1036888 34.4802646,9.47134062 33.2045402,8.207034 L31.7792453,6.7934196 C30.5031043,5.52869476 28.1287238,3.87376215 26.503446,3.11509454 L17.8704334,1.62954473 C16.0851693,1.79934575 13.2962408,2.56177742 11.670963,3.32337264 L4.70780782,6.58472327 C3.08294662,7.34631849 1.74597749,8.01172101 1.73794111,8.06274496 C1.72806236,8.11460537 2.34217656,9.40024167 3.10169502,10.9184134 C3.85996358,12.4378397 5.81146354,13.0576553 7.43632474,12.2973147 L12.4550627,9.94561243 C14.0799239,9.18401721 16.8721854,8.44793397 18.6595327,8.30740899 L23.4987027,9.13843024 C25.1373127,9.86782182 27.5208591,11.4997518 28.7970001,12.7661496 L30.2231282,14.1806004 C31.498436,15.4453253 33.8723998,17.1015126 35.4980943,17.8589255 L44.1323567,19.3440571 C45.9172043,19.1750925 48.7065493,18.4126608 50.3309939,17.6498109 L52.1725033,16.788259 C53.7965312,16.0254091 56.5887927,15.2884894 58.37614,15.150892 L63.2161432,15.981495 C64.8551699,16.7113048 67.2391329,18.3444895 68.5152739,19.6087961 L69.9422353,21.0245017 C71.2179597,22.2888083 73.5915069,23.9445773 75.2180347,24.7024085 L83.848964,26.1896312 C85.6329783,26.0198302 88.42274,25.258235 90.0471846,24.4966398 L91.8907771,23.631742 C93.5152217,22.8701467 96.3074831,22.1340635 98.0944138,21.9956297 L102.934834,22.8270691 C104.573444,23.5572972 106.957407,25.1900636 108.233964,26.4543703 L112.059888,30.2485448 C113.336445,31.5128514 115.369188,31.5191248 116.579085,30.2631828 C117.788565,29.0059861 117.734819,26.9428619 116.459512,25.6785552 L111.216626,20.481222 Z" id="Fill-4" fill="#0ECC98"></path>
-                    <path d="M72.4114301,15.2832603 C72.6356917,15.4609118 72.9287944,15.6406532 73.190644,15.8308448 C73.4698095,16.0293964 73.8997498,16.4519979 73.9276241,16.2797805 C73.9284688,16.2689124 74.1759589,16.4022555 74.3094178,16.4933803 C74.6088555,16.70071 74.9146283,16.9122197 75.2322266,17.1325075 C75.3259857,17.1525717 75.4159437,17.2060761 75.5080134,17.2181982 C75.5122368,17.2186162 75.4978773,17.2432784 75.4995667,17.2457865 L76.0853497,17.6111215 C76.1710843,17.6650439 76.0743689,17.790445 76.1943129,17.9359102 C76.4160405,18.2084484 76.9359387,18.5629153 77.4473902,18.6991844 C77.6121021,18.7497629 77.780615,18.8099554 77.950395,18.8776719 L78.215201,18.9871888 C78.3406354,19.0377672 78.4441083,19.1146799 78.6121988,19.1205319 C78.9897692,19.1715283 79.3736745,19.2229428 79.7465991,19.2726852 C80.0515273,19.3103055 80.3340715,19.3458358 80.5798723,19.3454178 C80.6499804,19.3454178 80.7222002,19.3437458 80.791886,19.3433277 C80.7914637,19.370916 80.7619,19.3947422 80.6820781,19.4148063 C81.2775749,19.5071851 81.1753691,19.6710424 81.6842866,19.7705273 C82.2143209,19.8737741 82.7498457,19.9899791 83.2777684,20.0706537 C83.4226304,20.0886279 83.648159,20.1504924 83.80189,20.098242 L84.0193942,20.0593676 C84.0755652,20.0476636 84.1313138,20.0372135 84.1849507,20.0263454 C84.3994985,19.981619 84.5789922,19.9335486 84.6414983,19.8959283 C84.91095,19.737923 85.4194452,19.6647724 85.8405163,19.5092751 C85.9853783,19.4607867 86.1302403,19.4122983 86.286083,19.3604659 C86.4068718,19.3504338 86.5242818,19.3416557 86.6383131,19.3312056 C86.6759012,19.3554498 86.7198243,19.3834561 86.7759953,19.4198224 C86.8287876,19.377604 86.9483093,19.3583759 87.0661416,19.3178295 C87.1924207,19.3019454 87.2781554,19.1410141 87.453848,19.2843893 C87.453848,19.2843893 87.301384,19.3295336 87.1493422,19.374678 C86.9956111,19.4160603 86.839346,19.4478286 86.839346,19.4478286 C87.2819564,19.5456414 87.2659076,19.4666388 87.8973031,19.1790524 C88.1278997,19.1472841 88.3534283,19.1159339 88.589093,19.0845836 C88.8133545,19.008089 89.0295917,18.9081862 89.2171098,18.8103734 C89.5900344,18.6185098 89.9768961,18.4416943 90.3679813,18.2703129 C90.7303474,18.0893174 91.1066507,17.919608 91.4968911,17.7578407 C91.5860045,17.7202204 91.6898997,17.6621179 91.7697216,17.6148835 C92.1878364,17.3536314 92.5759651,17.1646938 92.9801427,16.948586 C93.1152909,16.9385539 93.2567742,16.9285219 93.3974128,16.9172358 C93.8341105,16.8996796 94.0402115,16.6572376 94.4828219,16.5531548 C94.4862006,16.69862 94.6762527,16.6952759 95.3553725,16.457014 C95.7861574,16.3199088 96.309012,16.221678 96.7676713,16.0895889 C96.9226694,16.0574027 97.0417687,15.9959562 97.1942328,15.9299116 C97.2829238,15.9608439 97.3162885,16.0059883 97.2622292,16.0724508 C97.4362326,16.0774668 97.590386,16.0820649 97.7386267,16.0866629 C97.8788429,16.090843 98.0646717,16.0845729 98.0667834,16.098785 C98.084944,16.101293 98.0726962,16.1079811 98.0764972,16.1100711 C98.0950801,16.1155052 98.203621,16.1355693 98.2657047,16.1464374 C98.4118337,16.1719356 98.5621861,16.1928358 98.6935332,16.2062119 C99.2543983,16.2672404 99.7966805,16.2977547 100.346565,16.4766601 C101.091992,16.5080104 102.155017,16.7579764 102.660133,16.6183633 C102.701945,16.6074952 102.743334,16.5966271 102.789791,16.5899391 C102.969285,16.6743758 103.087962,16.7621565 103.109079,16.8578793 C103.576185,16.9611261 104.030198,17.0610289 104.483789,17.1609318 C104.87952,17.2482945 105.315795,17.3410913 105.596228,17.305979 C105.772765,17.2838248 105.991114,17.3226991 106.220866,17.3624094 L106.395292,17.3920877 L106.470046,17.4033738 L106.480604,17.4012837 C106.484405,17.3979397 106.497075,17.3979397 106.521149,17.4042098 C106.549445,17.4113158 106.545222,17.3983577 106.60984,17.4180039 C106.951089,17.5145627 107.449025,17.9254601 107.878121,18.0893174 C108.124344,18.1808602 108.574557,18.398222 108.691967,18.6929144 C108.82078,18.6703422 108.872305,18.6607281 108.950438,18.646516 C108.987603,18.7062905 109.015055,18.7518529 109.042085,18.7965792 L109.066158,18.8601158 C109.846639,19.4240024 109.825522,19.5172172 110.491127,20.0673097 C110.572216,20.1387883 110.679912,20.2658613 110.715389,20.2850895 C110.906708,20.3841563 111.117032,20.7465653 111.315954,20.8903585 C111.321022,20.8978826 111.325667,20.9016446 111.330313,20.9070786 L112.850308,19.3830381 C112.744301,19.250531 112.614643,19.1013038 112.450776,18.9303403 C112.053356,18.5177709 111.725199,18.2280946 111.105207,17.7816669 C111.046924,17.7335965 110.657106,17.4142419 110.270244,17.0965592 C109.8648,16.8043748 109.45851,16.5151164 109.404029,16.4900362 C109.118528,16.3604552 108.859635,16.215826 108.547527,16.093769 C108.230773,15.9616799 107.720167,15.6465053 107.727769,15.8191407 C107.727769,15.8283368 107.661462,15.8074366 107.576572,15.7748323 C107.489148,15.7413921 107.401301,15.7062798 107.279245,15.6456693 C107.217162,15.6193351 107.164792,15.5812968 107.097218,15.5633226 L106.87549,15.5290463 L106.576475,15.4839019 C106.398248,15.4571497 106.215798,15.4299795 106.030814,15.4015553 C105.939589,15.4266355 105.838228,15.4182754 105.749959,15.4483717 C105.74827,15.4487897 105.749959,15.4195294 105.747847,15.4191114 L105.085621,15.3066685 C105.020581,15.1051908 105.028605,15.1377951 104.868962,15.0508504 C104.570369,14.887411 103.982896,14.7686981 103.498052,14.7799841 C102.851875,14.7950323 102.105181,14.6641972 101.406634,14.5764165 C101.102128,14.5392142 100.818316,14.5036839 100.574205,14.5036839 C100.501985,14.5053559 100.431032,14.5053559 100.362191,14.5061919 C100.361769,14.4781857 100.39091,14.4547775 100.470732,14.4334593 C99.8752354,14.3419165 99.9778636,14.1788952 99.4685237,14.0789924 C99.2037177,14.0259059 98.9372223,13.9728195 98.6715717,13.9201511 L98.1090172,13.8169042 L97.5671574,13.8984149 C97.1688925,13.9648774 96.5822648,14.0865164 96.4593644,14.1646831 C96.2068062,14.3381545 95.7228067,14.4677356 95.2970898,14.6094387 C95.1534949,14.6604352 95.0094775,14.7093416 94.8553241,14.763682 C94.7341131,14.7724601 94.6188148,14.7883442 94.5060505,14.8084084 C94.4684624,14.7870902 94.4241169,14.761174 94.3675236,14.7285697 C94.316843,14.7753861 94.1990106,14.8029743 94.08329,14.8514627 C93.9587002,14.8715269 93.8201733,14.8514627 93.6955836,14.8895011 L94.3029058,14.7043255 C93.9177334,14.8213665 93.8788783,14.7005635 93.2538179,14.9977639 C93.0265999,15.0228442 92.7951586,15.0692425 92.5616056,15.125255 C92.3398781,15.2293379 92.1253303,15.3313307 91.9390792,15.4262175 L91.3769471,15.7062798 C91.2033661,15.8007486 91.0255618,15.8939633 90.8439564,15.9846701 C90.4824349,16.1639936 90.1061316,16.335793 89.7154688,16.4971423 C89.6263555,16.5347626 89.5216156,16.5949551 89.4464394,16.6313214 L88.2495331,17.2579086 C88.1080498,17.2587446 87.9619208,17.2574906 87.8166365,17.2570726 C87.3693804,17.2499665 87.1679251,17.5078746 86.7227807,17.6035974 C86.7270041,17.4681643 86.5335732,17.4464281 85.8443173,17.6533398 C85.4131101,17.7866829 84.8898331,17.8890938 84.4391983,17.9559743 C84.2837779,17.9839805 84.1621445,18.044591 84.0079911,18.1106356 C83.9222564,18.0776133 83.8914257,18.032887 83.9492861,17.9655884 C83.8736875,17.9609904 83.7528988,17.9634984 83.7300926,17.9517943 C83.6984172,17.9425982 83.6667418,17.9334021 83.6718099,17.917936 C83.6587174,17.9079039 83.6937715,17.9079039 83.6426686,17.8932738 L83.530749,17.8573255 C83.4534611,17.8347533 83.3765955,17.8130171 83.2976183,17.7896089 C83.0564632,17.7260724 82.7240831,17.671314 82.4596994,17.6433077 C81.8988343,17.5831152 81.3565522,17.551765 80.8070902,17.3724415 C80.4337433,17.3569754 79.9818415,17.2867508 79.5595033,17.2382624 C79.4543411,17.2273943 79.3508683,17.2156902 79.2499295,17.2064941 C79.2047393,17.2031501 79.1413886,17.1968801 79.1122472,17.1977161 L79.0928197,17.2115102 C79.0683241,17.2173622 79.037071,17.2161082 78.9859681,17.2123462 C78.9137483,17.1977161 78.8474412,17.189774 78.7862022,17.189774 C78.7469247,17.189356 78.7051132,17.187266 78.6624571,17.1814139 C78.5264642,17.0514149 78.4495987,16.9364639 78.4618465,16.8411591 C78.2722166,16.7274622 78.0830091,16.6300674 77.8997144,16.5075924 C77.7176866,16.3801013 77.5377706,16.2538643 77.3570099,16.1276273 C77.0465913,15.9035774 76.6892932,15.6807816 76.4388467,15.5921648 C76.1174474,15.484738 75.7631057,15.0955768 75.3644185,14.9308834 C75.0181012,14.7962863 74.5400144,14.3787008 74.128657,14.1638471 C73.8963711,14.0543302 73.4871254,13.7119854 73.4237747,13.3972288 C73.2911605,13.3917947 73.2387906,13.3901227 73.159391,13.3867787 C73.1323613,13.3182261 73.1125115,13.2676477 73.0930839,13.2153973 L73.0799914,13.1460087 C72.8232098,12.9035667 72.6813042,12.7171372 72.5744526,12.5499358 L71.0645938,14.0626902 C71.4780628,14.4430734 72.3379433,15.2285018 72.4114301,15.2832603" id="Fill-6" fill="#000000"></path>
-                    <path d="M32.6904095,8.62210385 C32.9151071,8.7988751 33.2086499,8.97940744 33.4692483,9.16955145 C33.7488531,9.36805345 34.1788194,9.78929557 34.2075402,9.61753911 C34.2075402,9.60709164 34.4542006,9.74165509 34.5889347,9.83150336 C34.8875458,10.0391991 35.1933372,10.2514918 35.5109548,10.4708887 C35.6047195,10.49053 35.694683,10.544021 35.7871807,10.5569759 C35.7914043,10.5569759 35.7761992,10.5820498 35.778311,10.5837214 L36.3637072,10.9502188 C36.4490247,11.0037099 36.351881,11.1290795 36.4726771,11.2740905 C36.6952628,11.5469785 37.2139255,11.9017747 37.7249856,12.0388455 C37.8909746,12.0889934 38.058653,12.1491708 38.2288656,12.2168705 L38.4907311,12.3251063 C38.618285,12.3748363 38.7179628,12.4559087 38.8856412,12.4605055 C39.2653463,12.5119071 39.6509644,12.5633087 40.0243339,12.6138745 C40.3297029,12.6514854 40.6126867,12.6865889 40.8568129,12.6870068 C40.9290371,12.6865889 41.000839,12.686171 41.0688395,12.6849173 C41.0701066,12.7116628 41.0401188,12.735483 40.960292,12.7559601 C41.5554026,12.8483158 41.4536129,13.0129679 41.9625613,13.1115921 C42.4926278,13.2156489 43.0269179,13.3314069 43.5548727,13.4120614 C43.6946751,13.4287774 43.9248633,13.4939696 44.077759,13.4404785 C44.2758476,13.4091361 44.3425811,13.393256 44.4629547,13.3694357 C44.6775155,13.3247205 44.855753,13.2770801 44.9199523,13.2390513 C45.1881533,13.0815034 45.697524,13.0087889 46.1186207,12.8533305 C46.2643362,12.8048543 46.4083622,12.7567959 46.5646368,12.7049764 C46.6841658,12.6941111 46.80285,12.6849173 46.9173106,12.6753056 C46.9540562,12.6995437 46.9975597,12.7267072 47.0545788,12.7630644 C47.1073743,12.7212745 47.2264809,12.7028869 47.3447427,12.6623507 C47.4706071,12.6456348 47.556347,12.4851616 47.7324726,12.6276651 C47.7324726,12.6276651 47.5804217,12.6732161 47.4279484,12.7183492 C47.2737856,12.7597212 47.1179334,12.7914815 47.1179334,12.7914815 C47.5601482,12.888852 47.5440984,12.8107049 48.1755322,12.5227725 C48.4057205,12.4922659 48.6321075,12.4609234 48.8682088,12.4283273 C49.0920616,12.3526876 49.3083118,12.2523919 49.4962637,12.1550214 C49.8687886,11.9636237 50.2556738,11.7860167 50.647205,11.6146781 C51.0095931,11.4341458 51.3863416,11.2628072 51.7761833,11.1014982 C51.8648797,11.0647231 51.9696259,11.0057994 52.0494527,10.9589947 C52.4667481,10.6978079 52.8549004,10.5072459 53.2586801,10.292028 C53.3951036,10.2824163 53.5357508,10.271133 53.6763979,10.2611035 C54.1126997,10.2431338 54.3183908,9.99991663 54.7614504,9.8971135 C54.764407,10.0412886 54.9544706,10.0387812 55.6344763,9.79848935 C56.0640203,9.66309009 56.587329,9.56446595 57.0455936,9.43199198 C57.2014459,9.39856007 57.3197077,9.33921842 57.4730258,9.27193669 C57.5612998,9.30327911 57.5955113,9.3479943 57.5401816,9.41485813 C57.7146178,9.41987291 57.8696253,9.4248877 58.0174527,9.42906669 C58.1551433,9.43366358 58.3473188,9.4261414 58.3494306,9.44076786 C58.368437,9.44327525 58.355766,9.44912584 58.359145,9.45163323 C58.3422504,9.44996164 58.4072944,9.46249861 58.4351704,9.46793129 L58.5441403,9.48757254 C58.6902781,9.51306438 58.8393726,9.53395932 58.9719948,9.54858579 C59.5324715,9.60792743 60.0747866,9.63885196 60.6247042,9.8181306 C61.3697539,9.84905512 62.4341105,10.0993766 62.9388352,9.96063413 C62.9793822,9.94893296 63.0216185,9.93806759 63.0680786,9.93179911 C63.2475832,10.0166326 63.3662674,10.1052272 63.3869632,10.1992544 C63.8549423,10.3024755 64.3085609,10.4027712 64.762602,10.5030669 C65.1575121,10.5912436 65.5942362,10.6831814 65.8742634,10.6484958 C66.0512338,10.626765 66.2691735,10.6652117 66.4989394,10.7049121 L66.673798,10.734583 L66.75278,10.746702 L66.7641839,10.7454483 C66.7684075,10.7421051 66.7789666,10.7404335 66.8034637,10.7471199 C66.8326068,10.7546421 66.8250042,10.7400156 66.8887812,10.7600748 C67.2304735,10.8570273 67.7284403,11.2674041 68.1575619,11.4308026 C68.4042224,11.5223224 68.8544621,11.7387941 68.9714569,12.0334128 C69.0994331,12.0104284 69.1522286,12.0016525 69.2303659,11.9886977 C69.2666892,12.0476214 69.2937204,12.0923366 69.3215965,12.1370518 L69.3460935,12.2005724 C70.1257771,12.764736 70.1050812,12.8575095 70.7719936,13.4070466 C70.8526651,13.479761 70.9599455,13.6063844 70.9958464,13.6256078 C71.1875996,13.7250677 71.397092,14.0869682 71.595603,14.2311433 C71.6010937,14.2378297 71.6057397,14.2415908 71.6099633,14.2461877 L73.1300505,12.723364 C73.0244596,12.5900542 72.8943715,12.4417001 72.7309168,12.2699436 C72.3330501,11.8578953 72.0044511,11.5687092 71.3839987,11.1219753 C71.3265572,11.0751706 70.9367155,10.75506 70.5498303,10.4374568 C70.1439387,10.1457634 69.7380471,9.8565773 69.6831398,9.83066757 C69.3971996,9.70195469 69.1395577,9.55694376 68.8270085,9.43575307 C68.5098133,9.30286121 67.9983308,8.98818332 68.0067781,9.16119348 C68.0067781,9.16955145 67.9404669,9.14907441 67.8551495,9.11647829 C67.7694096,9.08346427 67.6777567,9.04668917 67.5552712,8.98651172 C67.4931837,8.95976619 67.4433448,8.91964789 67.3719653,8.90543933 L67.1510691,8.87200741 L66.8558368,8.82771013 C66.6759098,8.8005467 66.4947158,8.77338327 66.3092981,8.74538404 C66.2189122,8.77004007 66.1167002,8.76209999 66.0301156,8.79051712 C66.0263144,8.79177082 66.0292709,8.76293579 66.0267367,8.7616821 L65.3644703,8.64926728 C65.299004,8.44909369 65.3087183,8.48127191 65.1477977,8.39393103 C64.8483418,8.23011465 64.2621009,8.11143136 63.7772273,8.12271463 C63.1305884,8.13817689 62.3838493,8.00612083 61.6839925,7.91877995 C61.380313,7.88116904 61.0973292,7.84481184 60.8523583,7.84522974 C60.7809788,7.84690133 60.7091769,7.84731923 60.6403316,7.84731923 C60.6403316,7.8197379 60.6694747,7.79675346 60.7493015,7.77669431 C60.1533462,7.68392075 60.256403,7.52094016 59.7470323,7.42022652 C59.4830549,7.36840705 59.216121,7.31408019 58.9496095,7.26142493 L58.7506762,7.22339612 C58.6349485,7.20333698 58.5040157,7.17784514 58.3844868,7.16071128 L57.845973,7.24094788 C57.4464169,7.30739381 56.860176,7.4294203 56.7381128,7.5079853 C56.4846946,7.68224915 56.0010881,7.81221572 55.5753454,7.95304766 C55.4304746,8.00319553 55.2868709,8.0533434 55.1335529,8.10725237 C55.0127568,8.11519245 54.8966068,8.1327442 54.7842581,8.15113175 C54.7466677,8.13023681 54.7023195,8.10516287 54.6453004,8.07340255 C54.5941944,8.11978933 54.4771996,8.14611697 54.3623167,8.19501114 C54.2377193,8.21507029 54.0979169,8.19501114 53.973742,8.23262205 L54.5806787,8.04707492 C54.1963277,8.16450452 54.1570479,8.04498543 53.5315271,8.34127577 C53.3042954,8.36593181 53.0732624,8.41440808 52.8396953,8.46998864 C52.6179543,8.57404547 52.4029711,8.67559492 52.2162864,8.77129377 L51.656232,9.05045026 C51.4817958,9.14614911 51.3039806,9.23892268 51.1227866,9.32877095 C50.7612432,9.51013908 50.3853394,9.68022395 49.9938082,9.84236874 C49.9042671,9.87997964 49.7999433,9.93973919 49.7251849,9.9752606 L48.5273612,10.6033627 C48.3867141,10.6025269 48.2409986,10.6016911 48.0957055,10.6012732 C47.6479999,10.5945868 47.4469547,10.8524305 47.001361,10.9472935 C47.006007,10.8123122 46.812142,10.7905814 46.1236891,10.9978593 C45.6920333,11.1307511 45.1683022,11.2323006 44.7180625,11.2987465 C44.5622102,11.3284173 44.4422589,11.3885948 44.2872514,11.4529512 C44.2006668,11.4203551 44.1702567,11.375222 44.2272758,11.3087761 C44.0274977,11.3062687 43.9455591,11.2912243 43.9531617,11.2598819 C43.9797706,11.251106 43.883894,11.2231068 43.8091356,11.1992866 C43.7318431,11.1771379 43.6549729,11.1554072 43.5759908,11.1328406 C43.3348211,11.0684842 43.0019985,11.0124857 42.7380211,10.9849044 C42.1771221,10.9251449 41.634807,10.8942203 41.0857341,10.7149417 C40.7119422,10.6986436 40.2604353,10.6284366 39.8380715,10.5795425 C39.7324806,10.5682592 39.6290015,10.5578117 39.5284789,10.5473642 C39.4849754,10.5448568 39.414863,10.5373347 39.3954343,10.5390063 L39.3747385,10.5544685 C39.3481296,10.5569759 39.3215206,10.5590654 39.2649239,10.552379 C39.1935444,10.5377526 39.1263886,10.5289767 39.0655682,10.5289767 C39.0254436,10.5285588 38.9853191,10.527723 38.9418156,10.5214545 C38.8058145,10.39107 38.7293666,10.2765657 38.7411928,10.1808669 C38.5511291,10.0667805 38.3619102,9.97108161 38.1790267,9.84696562 C37.9974102,9.72034225 37.8170609,9.59330097 37.6358669,9.4666776 C37.3258519,9.24268377 36.9681097,9.01994364 36.717648,8.93093116 C36.3974963,8.82311324 36.0422884,8.43404933 35.6439993,8.27023295 C35.2985058,8.1344158 34.8195453,7.71818846 34.4085853,7.50380631 C34.1758629,7.39306309 33.7665924,7.05122176 33.7032379,6.73570807 C33.5714604,6.73069328 33.5182425,6.72902169 33.4384158,6.7256785 C33.4118069,6.65714307 33.3923781,6.6065773 33.372527,6.55433993 L33.3594337,6.48580451 C33.1022142,6.24258733 32.9603,6.0570402 32.853442,5.88904483 L31.3443362,7.40225687 C31.7569856,7.782127 32.6186077,8.56735909 32.6904095,8.62210385" id="Fill-8" fill="#000000"></path>
-                    <g id="Group-12" transform="translate(1.025431, 0.088281)">
-                        <mask id="mask-4" fill="white">
-                            <use xlink:href="#path-3"></use>
-                        </mask>
-                        <g id="Clip-11"></g>
-                        <path d="M7.11847403,10.5775875 C6.87051484,10.7341031 6.62339054,10.8910406 6.36916976,11.051775 C6.18090445,11.186775 5.78725881,11.2331812 5.87116419,11.3648062 C5.88160019,11.3812594 5.6904128,11.4517125 5.57352968,11.4652125 C5.31262987,11.4998062 5.03711967,11.4863062 4.76077458,11.4310406 C4.68897495,11.4517125 4.61174861,11.4424312 4.53660946,11.4677437 C4.53535714,11.4690094 4.54203618,11.4407437 4.53994898,11.4403219 C4.53994898,11.4403219 4.42014378,11.3943375 4.29992115,11.3475094 C4.18429035,11.2905562 4.07116419,11.2314937 4.07116419,11.2314937 C4.0081308,11.1918375 4.09370594,11.0606344 4.02441095,10.9484156 C3.89416976,10.7328375 3.65038497,10.4691656 3.42329777,10.241775 C3.35275046,10.1898844 3.24880798,10.0215562 3.16156308,9.884025 C3.07056122,9.73974375 2.98289889,9.58786875 2.89690631,9.43304062 C2.72325139,9.12380625 2.56295455,8.80191562 2.39723098,8.49479062 C2.35089518,8.40704062 2.35548701,8.42265 2.33628479,8.39269687 L2.29454082,8.33447812 C2.26532004,8.29524375 2.23275974,8.25643125 2.19059833,8.21424375 C2.16638683,8.19019687 2.13716605,8.1644625 2.11337199,8.13619687 C2.14634972,8.14210312 2.18558905,8.16024375 2.23568182,8.18893125 C2.21814935,8.14547812 2.20312152,8.11172812 2.23484694,8.10160312 C2.27533859,8.09316562 2.3175,8.09822812 2.35506957,8.10329062 C2.43354824,8.11341562 2.49908627,8.13450937 2.53999536,8.1205875 L2.60595083,8.09991562 C2.59342764,8.10835312 2.68902134,8.06363437 2.74078386,8.04000937 L2.92070037,7.95732187 C3.16156308,7.8472125 3.40200835,7.73415 3.63619202,7.61644687 C3.96763915,7.44980625 4.449782,7.18613437 4.53994898,7.07813437 C4.72904917,6.85243125 5.16193414,6.64022812 5.53136827,6.41579062 C5.65618275,6.33900937 5.7818321,6.26265 5.91666512,6.1799625 C6.02645176,6.14705625 6.13540353,6.11415 6.23976345,6.0820875 C6.28067254,6.09854062 6.32659091,6.117525 6.38586735,6.14115 C6.42719388,6.08968125 6.53489332,6.04791562 6.63633117,5.98505625 C6.75279685,5.95004062 6.80831633,5.78129062 6.99992115,5.89857187 L6.45140538,6.15760312 C6.87928108,6.16435312 6.85339981,6.10993125 7.40191558,5.73657187 C7.61397495,5.67666562 7.82227737,5.618025 8.03851113,5.55643125 C8.23679499,5.44505625 8.42923469,5.33874375 8.59621058,5.23707187 C9.25868738,4.83207187 9.97417904,4.46925937 10.7468599,4.14315 C10.8349397,4.106025 10.9376299,4.04738437 11.0161085,3.99886875 C11.4297913,3.7364625 11.8138358,3.5440875 12.2129082,3.32682187 C12.3469063,3.31669687 12.4859137,3.30615 12.6249212,3.29518125 C13.0561364,3.27619687 13.2598469,3.03150937 13.6981586,2.92772812 C13.7010807,3.073275 13.8885111,3.0715875 14.5601716,2.8285875 C14.9859601,2.69147812 15.502333,2.59149375 15.95609,2.459025 C16.1097078,2.42400937 16.2261735,2.36410312 16.3781215,2.29660312 C16.4653664,2.32824375 16.4983442,2.37338437 16.4449119,2.4404625 C16.6164796,2.44594687 16.76968,2.44974375 16.9157839,2.4539625 C17.0489471,2.45986875 17.2468135,2.45143125 17.2476484,2.46535312 C17.2701902,2.46704062 17.2551623,2.4742125 17.2589193,2.47674375 C17.2438915,2.47505625 17.295654,2.48518125 17.3290492,2.49193125 L17.4367486,2.51175937 C17.5807653,2.53665 17.728539,2.55816562 17.8591976,2.57166562 C18.4135575,2.6328375 18.9495501,2.66363437 19.4926391,2.84461875 C20.2290028,2.8758375 21.2809508,3.12769687 21.7793738,2.98763437 C21.8207004,2.97582187 21.8616095,2.965275 21.9075278,2.95810312 C22.0853571,3.04416562 22.2022403,3.13275937 22.2235297,3.22894687 C22.685218,3.33272812 23.1348006,3.4344 23.5818785,3.53522812 C23.9730195,3.62424375 24.4050696,3.71579062 24.6822495,3.67993125 C24.8559045,3.65968125 25.0721382,3.69722812 25.298808,3.73772812 L25.4712106,3.76810312 L25.5526113,3.78075937 L25.5630473,3.77907187 C25.5688915,3.77611875 25.5772403,3.77274375 25.6018692,3.78075937 C25.6302551,3.7870875 25.6252458,3.77443125 25.6845223,3.79215 C26.0218135,3.88918125 26.513975,4.30472812 26.9380937,4.46925937 C27.181461,4.56122812 27.6272866,4.78018125 27.7429174,5.07760312 C27.870654,5.0544 27.9207468,5.0459625 27.9979731,5.03161875 C28.0342904,5.09194687 28.0618414,5.13624375 28.0893924,5.18180625 L28.112769,5.24550937 C28.8837801,5.81630625 28.863743,5.90954062 29.5220455,6.46430625 C29.6021939,6.53644687 29.708641,6.66554062 29.7437059,6.68410312 C29.933641,6.78493125 30.1406911,7.150275 30.3368878,7.29624375 C30.3423145,7.30299375 30.3473237,7.30636875 30.3514981,7.31143125 L31.8530288,5.77285312 C31.7486688,5.63869687 31.6200974,5.48850937 31.4581308,5.3159625 C31.0657375,4.89915 30.7405519,4.6089 30.1277505,4.15749375 C30.0701438,4.11024375 29.6848469,3.78666562 29.3024722,3.46688437 C28.9013126,3.17157187 28.5005705,2.88005625 28.4458859,2.85347812 C28.1636967,2.7239625 27.908641,2.57672812 27.5993182,2.4539625 C27.2862384,2.32065 26.7807189,2.0034 26.7882328,2.17805625 C26.7890677,2.1873375 26.7231122,2.16582187 26.6387894,2.13291562 C26.5557189,2.10043125 26.4622124,2.060775 26.3415724,2.00044687 C26.2802087,1.9747125 26.2317857,1.932525 26.1587338,1.92029062 L25.9399954,1.88654062 L25.6511271,1.84266562 C25.4737152,1.81482187 25.2933813,1.78697812 25.1113776,1.75955625 C25.0203757,1.784025 24.9206076,1.77643125 24.8337801,1.80554062 C24.8316929,1.80638437 24.8337801,1.777275 24.8312755,1.77685312 L24.1763126,1.66294687 C24.1132792,1.46086875 24.1212106,1.49335312 23.9638358,1.40475937 C23.6674536,1.23980625 23.086795,1.12041562 22.6075742,1.13138437 C21.968474,1.14699375 21.2304406,1.014525 20.5399954,0.926775 C20.2386039,0.889228125 19.9593367,0.852525 19.7172217,0.853790625 C19.646257,0.854634375 19.5761271,0.854634375 19.5080844,0.85505625 C19.5072495,0.828478125 19.5364703,0.80443125 19.6153664,0.783759375 C19.0255241,0.690525 19.1282143,0.52515 18.6243646,0.42474375 C18.3630473,0.371165625 18.0996429,0.3175875 17.8374907,0.264853125 L17.638372,0.225196875 C17.5173145,0.204946875 17.3916651,0.175415625 17.2743646,0.164446875 L16.745051,0.246290625 C16.3505705,0.312525 15.7715816,0.43655625 15.6496892,0.515025 C15.4008952,0.692634375 14.9220918,0.820884375 14.5017301,0.965165625 C14.3589657,1.01494687 14.2174536,1.06599375 14.0646707,1.11999375 C13.9457004,1.129275 13.8313219,1.14699375 13.7194481,1.16597812 C13.6822959,1.14404062 13.6397171,1.11957187 13.5829453,1.08666562 C13.5332699,1.13391562 13.4168043,1.16049375 13.3024258,1.20985312 C13.1792811,1.22968125 13.0419434,1.20943125 12.9183813,1.24782187 L13.5186596,1.06050937 C13.138372,1.17947812 13.0995501,1.05755625 12.4821568,1.35750937 C12.2571568,1.38113437 12.0292347,1.43091562 11.7975557,1.48786875 C11.5788173,1.59207187 11.3667579,1.69332187 11.182667,1.79161875 L10.6291419,2.0725875 C10.4559045,2.16919687 10.2805798,2.26243125 10.1019156,2.35355625 C9.74333488,2.53580625 9.3713961,2.708775 8.98568182,2.87161875 C8.89760204,2.90832187 8.79449443,2.96738437 8.71559833,3.01505625 L7.49500464,3.75629062 C7.35349258,3.77822812 7.20697124,3.80143125 7.06170223,3.82210312 C6.60836271,3.88707187 6.43762987,4.1785875 6.00098794,4.34438437 C5.98303803,4.2055875 5.7797449,4.22035312 5.12979128,4.58907187 C4.72403989,4.8198375 4.21726809,5.0324625 3.78187848,5.26407187 C3.63326994,5.34338437 3.52682282,5.44168125 3.39073748,5.55516562 C3.29347403,5.5522125 3.24713822,5.51888437 3.28470779,5.435775 C2.92237013,5.5420875 2.64769481,5.60874375 2.33628479,5.72644687 C2.21940167,5.77074375 2.08498609,5.82980625 1.95015306,5.89519687 L1.7518692,5.9977125 C1.66712894,6.04243125 1.5857282,6.08757187 1.50850186,6.12891562 C1.26388219,6.25800937 1.03429035,6.39765 0.804281076,6.52843125 L0.633130798,6.62757187 C0.584290353,6.66469687 0.563835807,6.71574375 0.528770872,6.75919687 L0.333409091,7.0270875 L0.161423933,7.265025 L0.117592764,7.325775 L0.0958858998,7.35530625 L0.0841975881,7.36965 C0.135542672,7.38779062 0.014067718,7.34686875 0.0265909091,7.35150937 L0.0265909091,7.35235312 L0.0265909091,7.3544625 L0.0270083488,7.35994687 L0.0261734694,7.36922812 L0.0211641929,7.51815 L0.0132328386,7.6683375 L0.00864100186,7.74216562 L0.0299304267,7.83118125 C0.0578988868,7.95057187 0.0858673469,8.07207187 0.115505566,8.196525 C0.173112245,8.35810312 0.232806122,8.52474375 0.295422078,8.69686875 C0.327564935,8.78293125 0.350941558,8.87025937 0.39059833,8.95885312 L0.528770872,9.23138437 C0.636470315,9.43472812 0.747926716,9.6427125 0.85479128,9.8452125 C1.06100649,10.2202594 1.27056122,10.5535406 1.47385436,10.7168062 C1.5068321,10.74465 1.53980983,10.77165 1.57320501,10.8049781 C1.59240724,10.9053844 1.59825139,10.9880719 1.59783395,11.0631656 C1.60618275,11.1509156 1.59908627,11.2201031 1.57320501,11.2635562 C1.87083952,11.8524937 2.30372449,12.3490406 2.81007885,12.7283062 C3.24839054,13.0649625 3.81903061,13.3058531 4.18554267,13.3117594 C4.63345547,13.3379156 5.34018089,13.5163687 5.89746289,13.3362281 C6.12914193,13.2699937 6.45599722,13.1700094 6.77951299,13.0299469 C6.935218,12.9594937 7.10887291,12.8679469 7.2370269,12.7915875 C7.35307514,12.7173375 7.4620269,12.6430875 7.55845547,12.5717906 C7.77761132,12.4064156 8.21258349,12.1334625 8.53693414,12.1874625 C8.5870269,12.0651187 8.60664657,12.0161812 8.63795455,11.9423531 C8.71058905,11.9415094 8.76485622,11.9410875 8.82121058,11.9406656 L8.89008813,11.9537437 C9.20608998,11.7972281 9.42858534,11.7288844 9.62269481,11.6892281 L8.72436456,9.7439625 C8.2242718,9.99793125 7.19486549,10.5282281 7.11847403,10.5775875" id="Fill-10" fill="#000000" mask="url(#mask-4)"></path>
-                    </g>
-                    <path d="M47.7254323,17.0277575 C47.4712099,17.1453167 47.2219804,17.2772021 46.9452899,17.3682157 C46.6598618,17.470606 46.1343579,17.5565632 46.2404573,17.6846564 C46.2516913,17.6977186 46.0103673,17.7908389 45.866405,17.8325535 C45.5435301,17.9307302 45.2135819,17.9589612 44.869071,18.0284855 C44.7958416,18.0798913 44.7030567,18.1043302 44.6327398,18.1595282 C44.6310755,18.161635 44.6260826,18.1342467 44.622754,18.1342467 C44.622754,18.1342467 44.4983473,18.1536292 44.3743567,18.1734331 C44.3285883,18.1822816 44.3077845,18.1658486 44.2807396,18.1650059 C44.222905,18.1553146 44.18421,18.1477301 44.18421,18.1477301 C44.0889286,18.1321399 44.1280397,17.9783438 43.9711791,17.8898583 C43.6761813,17.7255283 43.0974196,17.6050195 42.6205966,17.6168176 C41.9835843,17.6324079 41.2487942,17.498837 40.5593564,17.4111943 C40.2585335,17.3736934 39.9801787,17.3382992 39.7396868,17.3378778 C39.6685378,17.3391419 39.598221,17.3395633 39.5312327,17.3399846 C39.5299845,17.3125963 39.559942,17.2885788 39.6381642,17.2687749 C39.050665,17.1760759 39.1517715,17.0100604 38.6504,16.9093556 C38.1290568,16.8057012 37.6010564,16.6889847 37.0813776,16.607241 C36.7256327,16.5524643 36.1377173,16.4833614 36.0578308,16.5288682 C36.0465967,16.6872993 35.5597879,16.4117304 35.1953053,16.2709964 C35.0659057,16.2187479 34.9365061,16.1664993 34.7979528,16.1104586 C34.711409,16.0434625 34.6311064,15.9650897 34.5499716,15.895144 C34.5428983,15.8517441 34.5345767,15.8032877 34.5237588,15.7392412 C34.4613474,15.7329208 34.3727232,15.6659247 34.2699524,15.6140975 C34.1825765,15.536146 34.0144818,15.5799674 34.0169783,15.3562257 L34.5042032,15.6756159 C34.2924205,15.3136684 34.2645435,15.3663383 33.6824532,15.1080451 C33.5285051,14.9685752 33.3787178,14.812251 33.2351716,14.6546627 C33.0529303,14.5371035 32.8773463,14.4220724 32.7163249,14.3268452 C32.5561356,14.2316181 32.3971946,14.1325987 32.2378375,14.029787 C32.0822251,13.9236045 31.9453362,13.8018317 31.7984614,13.6830084 C31.5097046,13.4318784 31.2251087,13.2039231 30.9400967,12.8908532 C30.8756049,12.8204862 30.7857325,12.7433775 30.7141674,12.6852299 L29.6061572,11.7868922 C29.5333439,11.6604844 29.4422233,11.5294417 29.3627528,11.3996631 C29.1027053,10.9892593 28.7565301,10.9311117 28.4078585,10.5839118 C28.5251919,10.505539 28.4095228,10.3294108 27.753371,9.90847302 C27.5474135,9.7786944 27.3327183,9.62279151 27.117607,9.46436046 C26.8941742,9.31562067 26.6632521,9.17320128 26.4418997,9.04384401 C26.290032,8.95577995 26.1481501,8.91743626 25.9767268,8.85886734 C25.9243012,8.77291007 25.9247173,8.7147625 26.0154218,8.70296445 C25.868131,8.57360718 25.737067,8.45899749 25.6130764,8.34860139 C25.4774356,8.24747519 25.3442913,8.15224802 25.1936719,8.05617813 C24.9631658,7.90828106 24.6594303,7.75153545 24.3740023,7.62217819 C24.2604135,7.57835683 24.1763662,7.50588306 24.0403093,7.48776461 L23.6945502,7.44183646 C23.5580773,7.42666753 23.4224366,7.41065588 23.2867958,7.39422288 C23.0163465,7.35672191 22.7479775,7.30363066 22.477112,7.21303844 C21.7435701,7.18312194 20.6950588,6.93157051 20.197848,7.07230447 C20.1570726,7.08283845 20.1162971,7.09379379 20.0696966,7.1009569 C19.8920322,7.01542099 19.775947,6.92735692 19.7555593,6.83128703 C19.6403063,6.80558412 19.5258854,6.77945985 19.4114645,6.75375695 L19.2154927,6.71119967 C19.1081451,6.69476666 18.9903956,6.65600162 18.8909535,6.65723551 L18.4191234,6.70445792 L18.050064,6.73858802 C17.6210897,6.77945985 17.1363612,6.81780354 16.8887961,6.97412779 C16.5659211,7.15194136 15.9942328,7.17258796 15.5794051,7.37273356 C15.2348942,7.55265392 14.5084256,7.61543644 14.0690494,7.84844806 C13.8173235,7.96474319 13.3409165,8.24199752 13.0013985,8.17163054 C12.9398193,8.29298198 12.9136065,8.34101692 12.8765758,8.41475478 C12.7991856,8.41180526 12.7413511,8.4113839 12.6822683,8.40969847 L12.609455,8.39537226 C12.3577291,8.49818389 12.176736,8.57360718 12.0369345,8.63512562 C11.8913079,8.69453726 11.7718941,8.73667318 11.6549768,8.7767023 C11.42031,8.85633918 11.1931325,8.92923432 10.7783048,9.1192673 C10.6726215,9.16856632 10.5024464,9.22123622 10.4679121,9.24736049 C10.286503,9.38893717 9.84046961,9.44961289 9.61037962,9.58149831 C9.60164202,9.5836051 9.59581696,9.58613326 9.58832759,9.58866141 L10.4895481,11.545032 C10.6455766,11.5045815 10.8224088,11.4502262 11.0296147,11.376067 C11.5322344,11.1953039 11.8842346,11.0103272 12.549124,10.7048418 C12.5824101,10.6913583 12.7093132,10.6391098 12.883233,10.5683215 C12.9701928,10.5320846 13.0692189,10.4928982 13.1728218,10.451605 C13.272264,10.4191603 13.3779473,10.3854516 13.4819663,10.3509001 C13.8992904,10.2152225 14.3087091,10.0778594 14.3536454,10.0504711 C14.5895604,9.91395069 14.8521043,9.81071769 15.1167286,9.69020897 C15.3954995,9.57054297 15.913098,9.45340512 15.8011736,9.33121096 C15.7899395,9.31646339 16.0254385,9.21070224 16.1702329,9.17741487 C16.4947721,9.09398575 16.8272168,9.00929256 17.1729759,8.92207121 C17.2441249,8.86476637 17.3369099,8.83484987 17.4047302,8.77375279 C17.4063945,8.77206735 17.4138839,8.80029841 17.4167964,8.7994557 C17.4184607,8.78260133 18.0375817,8.70212173 18.0375817,8.70212173 C18.1561634,8.87614306 18.1391043,8.84749064 18.3042864,8.88457025 C18.3816765,8.90226733 18.4727972,8.91069452 18.5730715,8.91322267 C18.6234167,8.91490811 18.6758422,8.91280131 18.7299321,8.91027316 L18.8418565,8.90437413 C18.8697336,8.90100325 18.8867927,8.90016054 18.8892892,8.90184597 C18.8959464,8.90226733 18.8934499,8.89973918 18.9075965,8.90142461 L19.0024618,8.91111587 C19.1281168,8.92375665 19.2533556,8.92923432 19.3727694,8.92544209 C20.0097817,8.91027316 20.745404,9.04257993 21.4340096,9.12980128 C21.7348326,9.16772361 22.0123552,9.20311778 22.2536793,9.20311778 C22.3256604,9.2018537 22.3951451,9.20143234 22.4637976,9.20058962 C22.4633815,9.22755661 22.4342562,9.25199544 22.3552018,9.27222068 C22.942701,9.36449834 22.8420106,9.53009249 23.3433821,9.63079733 C23.3870701,9.63922451 23.3895666,9.63964587 23.3924791,9.64175267 L23.4078739,9.64723034 L23.4719496,9.6868381 L23.7881673,9.86675846 C24.0041107,9.9881099 24.2213024,10.1065118 24.4393262,10.2156439 C24.7468063,10.3799739 25.2065702,10.6530147 25.3405467,10.6635486 C25.6172372,10.7023137 26.027488,10.9252127 26.3761597,11.1493758 C26.498486,11.2218495 26.6208123,11.2922165 26.7527084,11.3693252 C26.8313468,11.4481194 26.9087369,11.5252281 26.9836306,11.6010728 C26.9869592,11.6436301 26.991536,11.6929291 26.9961128,11.7557116 C27.0601885,11.7658242 27.1438198,11.8387194 27.243678,11.8972883 C27.3293897,11.9773465 27.3759902,12.1008048 27.462534,12.1770708 C27.462534,12.1770708 27.3626757,12.0793154 27.2440941,11.9937795 C27.1275928,11.9074009 27.0115076,11.8206009 27.0115076,11.8206009 C27.3114984,12.0397077 27.2303636,12.137463 27.7479621,12.4661232 C27.8761135,12.6258183 28.0017684,12.7829852 28.1320002,12.9464726 C28.2988466,13.0636105 28.4665252,13.2237269 28.6171447,13.3425502 C29.2291924,13.8296414 29.7717554,14.3799365 30.4449663,15.0001772 C30.5177796,15.0709655 30.6172218,15.1472315 30.6958601,15.204115 C31.0961252,15.5188703 31.5305084,15.7375557 31.9453362,16.0017479 C32.0356246,16.1209926 32.1288256,16.2436081 32.2203624,16.3658022 C32.5041261,16.7555595 32.8656961,16.7349129 33.2451574,17.0344992 C33.139058,17.1208779 33.2584718,17.2995341 33.9491579,17.6640098 C34.1759193,17.7680855 34.4143308,17.8944933 34.6569031,18.0234292 L35.0188891,18.2159903 L35.2477309,18.3364991 L35.3812913,18.4060233 C35.4316365,18.422035 35.4919675,18.4249845 35.5456413,18.4342544 C35.6159581,18.444367 35.7033341,18.4553223 35.7528471,18.4582719 C35.7911261,18.4582719 35.8298212,18.4565864 35.8693484,18.4565864 C35.9454903,18.4498447 36.0270411,18.4431029 36.114001,18.4367825 C36.190559,18.4949301 36.2101146,18.5484427 36.1331405,18.5952136 C36.4859729,18.7157223 36.74394,18.8219048 37.0609899,18.9074407 C37.2989853,18.9706446 37.6268531,19.0266854 37.8869006,19.0549164 C38.4394495,19.1151708 38.974107,19.14593 39.516254,19.3266931 C40.2493798,19.3578737 41.2983073,19.6094251 41.7951019,19.4691125 C41.8362934,19.4589999 41.8770689,19.4472018 41.9228372,19.4408814 C42.1000856,19.5255746 42.2165869,19.6153241 42.2373907,19.7101299 C42.6979867,19.8137843 43.1452684,19.9157532 43.5921339,20.0160367 C43.6903278,20.0371046 43.7906021,20.0590153 43.8887961,20.080926 C43.9670183,20.0948309 44.0448245,20.1099998 44.1222147,20.1255901 C44.2179121,20.1369668 44.3227633,20.1748891 44.3997373,20.1475007 C44.4812882,20.1331745 44.5611748,20.119691 44.6398131,20.1066289 C44.6909905,20.0948309 44.7413357,20.0830328 44.7904326,20.0720775 C44.879889,20.0489027 44.9601916,20.0219357 45.0292602,19.9911765 C45.2002674,19.9128037 45.4316057,19.8778309 45.6758422,19.8411726 C45.7977525,19.8234755 45.9234074,19.804093 46.0444855,19.7779688 C46.1614029,19.7446814 46.2749916,19.7050736 46.3794266,19.6540892 C46.7297626,19.4771183 47.4192004,19.2980407 47.8577445,19.0721922 C48.1082222,18.9352504 48.5854613,18.7220427 48.9108327,18.8168485 C48.9778209,18.7022388 49.0052819,18.6563107 49.0464734,18.5872078 C49.120951,18.5960563 49.1767052,18.6019553 49.2337076,18.6082757 L49.3036084,18.6289223 C49.6464549,18.5029359 49.8819539,18.4308835 50.0883276,18.400967 L49.3019441,16.411309 C48.8571589,16.6443206 47.7990778,16.9864643 47.7254323,17.0277575" id="Fill-13" fill="#000000"></path>
-                    <path d="M87.6091783,24.3093202 C87.3546893,24.4260101 87.1051983,24.5599719 86.8278011,24.6501223 C86.5420736,24.752068 86.0168514,24.8375845 86.1230621,24.9669124 C86.1343079,24.979129 85.8918977,25.0722282 85.7486174,25.1139333 C85.4249873,25.2133515 85.0942765,25.2407336 84.7489877,25.3106633 C84.676931,25.3616362 84.5840488,25.3860695 84.5132417,25.4416762 C84.5115756,25.4446251 84.5057444,25.4159792 84.5040784,25.4159792 C84.5040784,25.4159792 84.3782916,25.4357785 84.2516719,25.4555779 C84.2037729,25.4661095 84.1841969,25.4488377 84.1571236,25.4484164 C84.1017274,25.4391486 84.0646578,25.4324084 84.0646578,25.4324084 C83.969693,25.4159792 84.0088451,25.262218 83.8505704,25.1733314 C83.5565127,25.0086174 82.9771439,24.8893999 82.4994042,24.9003527 C81.8621402,24.915097 81.1257463,24.782399 80.4360017,24.6943549 C80.1356963,24.6564412 79.8570495,24.6206338 79.6158888,24.6210551 C79.5450817,24.6218976 79.4751076,24.6227402 79.4063831,24.6235827 C79.4063831,24.595358 79.4351224,24.571346 79.5138433,24.5511254 C78.9257278,24.4584474 79.0269403,24.2928909 78.5254594,24.1926302 C78.0031528,24.0889994 77.4754316,23.9714669 76.9543746,23.8905843 C76.5974234,23.8345563 76.0130565,23.7663116 75.928088,23.8105443 C75.9172587,23.9702031 75.4307722,23.6951181 75.0659073,23.5539949 C74.9367885,23.5017582 74.8072531,23.4499428 74.6685545,23.3934935 C74.5815034,23.3277764 74.5011165,23.2477364 74.4203131,23.1778067 C74.4128159,23.135259 74.4049022,23.0868138 74.3940728,23.0223605 C74.331596,23.016884 74.2420458,22.9490606 74.1391672,22.8976665 C74.0521161,22.8197328 73.8842616,22.8639654 73.8859277,22.6398533 L74.3740802,22.9591709 C74.1620754,22.5968844 74.1341691,22.6499636 73.5518848,22.3913079 C73.3981917,22.2522909 73.2474142,22.0964235 73.1037174,21.9380284 C72.9217015,21.8209172 72.7446837,21.705491 72.584743,21.6107068 C72.4239692,21.5159225 72.2648614,21.4169256 72.1045042,21.3141373 C71.949145,21.2088215 71.8121124,21.0866551 71.6650836,20.9674375 C71.3751909,20.7163645 71.090713,20.4876185 70.8058185,20.1754623 C70.7412591,20.1055326 70.6508759,20.0284414 70.5792357,19.9707283 L69.4700632,19.0725947 C69.3971735,18.9470582 69.3059573,18.815624 69.22682,18.6846111 C68.9652502,18.2751431 68.6199614,18.2182725 68.270091,17.8690451 C68.3875475,17.7906901 68.2730066,17.6137595 67.6140839,17.1950237 C67.4091598,17.0640108 67.1950725,16.9089858 66.978486,16.7505908 C66.7560684,16.6018848 66.524904,16.4594978 66.3033194,16.3301699 C66.1512924,16.2421258 66.0088451,16.2029483 65.8368255,16.144814 C65.7847615,16.0580337 65.785178,15.9998994 65.8751447,15.988104 C65.7285323,15.8591974 65.5981639,15.7446138 65.4736267,15.6350853 C65.3378437,15.5331395 65.2045597,15.4383553 65.0537822,15.3418859 C64.8238674,15.1961288 64.5164812,15.03647 64.2361684,14.9092484 C64.1232935,14.8650157 64.0362424,14.7955073 63.9046245,14.7731803 L63.7021995,14.7462195 L63.553088,14.7272626 C63.4164719,14.7112546 63.2806889,14.6952466 63.1453224,14.6796598 C62.8745893,14.6409036 62.6059388,14.5878244 62.3347892,14.4985166 C61.6000614,14.4677644 60.5500336,14.2154276 60.0523013,14.3561295 C60.011483,14.3675037 59.9710813,14.3788778 59.9248485,14.3847755 C59.7478307,14.299259 59.6312072,14.2107937 59.6107981,14.1155881 C59.4950077,14.0894698 59.3800502,14.0637727 59.2663424,14.0384969 L59.0751632,13.9967919 C58.9672865,13.9782563 58.851496,13.9445552 58.749034,13.9390788 C58.465389,13.9660396 58.1846597,13.9934217 57.9035138,14.0195401 C57.4749225,14.0616664 56.9880195,14.0983163 56.7406111,14.2541838 C56.417814,14.4332208 55.8451095,14.4534414 55.4302631,14.6535415 C55.0837248,14.8317359 54.3573272,14.8961892 53.9170736,15.1291479 C53.6659166,15.2462591 53.1885934,15.5213441 52.8487193,15.4522569 C52.7862424,15.5731595 52.7612517,15.6220261 52.7237655,15.6940621 C52.6458777,15.6923771 52.5879825,15.690692 52.5296708,15.6898495 L52.4563646,15.6759478 C51.9490525,15.8806818 51.7466274,15.9805213 51.4996356,16.0567699 C51.2651391,16.13681 51.0385564,16.2096886 50.622877,16.4000996 C50.5174993,16.4485449 50.3454797,16.5020454 50.3125752,16.5273212 C50.1309758,16.6671806 49.7144634,16.678976 49.4957944,16.7914533 C49.4874642,16.7931384 49.4820495,16.795666 49.4749688,16.797351 L50.2680084,18.8008798 C50.4346134,18.7654937 50.6257926,18.7170484 50.8515423,18.6479612 C51.4005056,18.4815621 51.7199706,18.2865172 52.3959703,17.9844713 C52.4546985,17.966357 52.9211924,17.7494063 53.3289581,17.6314526 C53.7471365,17.4953845 54.1557352,17.3567888 54.2019681,17.3302492 C54.4385471,17.1946024 54.7005334,17.0905504 54.9654353,16.9709115 C55.2449151,16.8504302 55.7622235,16.7337402 55.6505982,16.6111526 C55.6393524,16.5959871 55.8759314,16.4906713 56.0204612,16.4569702 C56.3453409,16.3752451 56.6785508,16.2905711 57.0242561,16.2029483 C57.0954797,16.1456565 57.189195,16.1153256 57.2562535,16.0542424 C57.2579196,16.0525573 57.2654168,16.080782 57.2687489,16.0803607 C57.2687489,16.0635102 57.8906019,15.9830488 57.8906019,15.9830488 C58.0080584,16.1578732 57.9909814,16.1292272 58.1559203,16.1662984 C58.2333916,16.183149 58.3246078,16.192838 58.4249873,16.1953656 C58.5107889,16.1995782 58.6740617,16.1860978 58.6907222,16.1865191 C58.7207111,16.1835702 58.7340395,16.1827277 58.7377881,16.1844128 C58.7469514,16.1852553 58.7365386,16.1818852 58.7606963,16.1844128 L58.8556611,16.1949443 C58.9822809,16.207161 59.1068181,16.2122161 59.2267737,16.208846 C59.8648707,16.1932593 60.6008481,16.3267998 61.2905926,16.4140013 C61.5913146,16.4514938 61.8699614,16.4881437 62.1111221,16.4873011 C62.1823457,16.4860374 62.2531528,16.4856161 62.3202113,16.4843523 C62.3210443,16.512577 62.2914719,16.5361677 62.2131676,16.5572309 C62.8004501,16.6494876 62.6992376,16.8137803 63.2015515,16.9144622 C63.2461184,16.9228875 63.2398707,16.9233088 63.2469514,16.9254151 L63.2615293,16.930049 L63.3277548,16.9717541 L63.6459703,17.1524761 C63.8621402,17.2737999 64.0791432,17.3917537 64.2982287,17.5017034 C64.6056149,17.6655749 65.0654445,17.9381323 65.2003946,17.9495064 C65.4761258,17.9882627 65.88764,18.2102685 66.2366774,18.4352232 C66.3591321,18.5072592 66.4811702,18.5780315 66.6136211,18.6542801 C66.6919255,18.7334777 66.7698133,18.8114114 66.844369,18.8868175 C66.8481176,18.9293651 66.8518662,18.9782317 66.8576974,19.0409999 C66.9210073,19.0515315 67.0051428,19.1239888 67.1046893,19.1821232 C67.1913238,19.2630058 67.2375567,19.3860147 67.3233583,19.4635271 C67.3233583,19.4635271 67.2233953,19.3653728 67.1055223,19.2790138 C66.9893153,19.1926548 66.8722753,19.1058745 66.8722753,19.1058745 C67.1742468,19.324089 67.0909444,19.4235071 67.6099188,19.7516713 C67.7373716,19.9109089 67.8631584,20.0684614 67.9939432,20.2314903 C68.1617977,20.3494441 68.3296522,20.5095242 68.4804297,20.6283205 C69.093536,21.115301 69.6362517,21.6650497 70.3101687,22.284307 C70.3834749,22.3550792 70.4826049,22.4317491 70.5625752,22.489041 C70.9628437,22.8028822 71.3980991,23.0215179 71.812529,23.2856501 C71.9029121,23.4052889 71.9957944,23.5278765 72.0882602,23.6492004 C72.3719051,24.0388691 72.7346874,24.0182272 73.1137137,24.3181667 C73.0087526,24.4045257 73.1266256,24.5818776 73.8197022,24.947113 C74.046285,25.0507438 74.2849466,25.1771228 74.5269403,25.3064507 L74.8901391,25.4993893 L75.120887,25.6198706 L75.2545875,25.6889578 C75.3074845,25.702017 75.3653798,25.7074934 75.4195264,25.71634 C75.4890839,25.7264503 75.5807167,25.7386669 75.6244505,25.7399307 C75.6619366,25.7395095 75.7015053,25.7382457 75.7414905,25.7378244 C75.8168792,25.7319267 75.8980991,25.7247652 75.9859832,25.718025 C76.0626215,25.7765806 76.0817811,25.8296598 76.0051428,25.8764201 C76.3583453,25.9977439 76.6169995,26.1039023 76.9347985,26.1885763 C77.1722106,26.2534508 77.5004223,26.3086363 77.7607426,26.3364397 C78.3138711,26.3975229 78.8490895,26.4286964 79.3918052,26.6089971 C80.1257,26.6410132 81.1753113,26.8929287 81.6730436,26.7530692 C81.7142783,26.7408526 81.75468,26.7307423 81.8009129,26.7235808 C81.9783472,26.8090973 82.0949706,26.8975626 82.1157963,26.9940319 C82.576459,27.0976627 83.0242098,27.1979234 83.4715441,27.2994479 C83.5694246,27.320511 83.6693875,27.3436805 83.7685175,27.3643224 C83.8493209,27.3799092 83.9297078,27.3946534 84.0092616,27.4093976 C84.105476,27.4258269 84.207105,27.4548941 84.2841598,27.4283545 C84.3657963,27.4144528 84.4470162,27.4005511 84.5253205,27.3870707 C84.575302,27.3756965 84.6244505,27.3643224 84.6715164,27.3533696 C84.7610665,27.3306214 84.842703,27.3032392 84.910178,27.272487 C85.2463035,27.1065092 85.8544116,27.1570608 86.2621772,26.9346338 C86.6137137,26.7577031 87.3030417,26.5803512 87.7420458,26.3537115 C87.9915367,26.2163796 88.470526,26.0036416 88.7962387,26.0975834 C88.8641302,25.983421 88.8903705,25.9375033 88.9311887,25.8684161 C89.0065775,25.8768413 89.0619736,25.8831603 89.1194523,25.890743 L89.1890099,25.9105424 C89.5322161,25.7833209 89.7687952,25.7121273 89.9749688,25.6817964 L89.1873438,23.6925905 C88.7416756,23.9255492 87.6841506,24.2680364 87.6091783,24.3093202" id="Fill-15" fill="#000000"></path>
-                    <path d="M112.522591,22.6229554 C112.759637,22.8004292 112.993726,22.9766648 113.23711,23.1599167 C113.488522,23.3547252 113.860782,23.7695185 113.908952,23.6089666 C113.913599,23.5928702 114.129518,23.7538348 114.245717,23.8561917 C114.501778,24.0926858 114.765022,24.3345454 115.036716,24.5863105 C115.125872,24.6168525 115.20531,24.6800002 115.293622,24.7043512 C115.297002,24.7055894 115.277987,24.7270514 115.2801,24.7287023 L115.757995,25.1901341 C115.82856,25.2569963 115.70729,25.358115 115.787573,25.5194923 C115.863208,25.6684878 116.004337,25.8496761 116.176312,26.0254989 C116.263778,26.1138231 116.357582,26.2009091 116.455612,26.2813913 C116.540543,26.3486663 116.625051,26.4151158 116.711672,26.481978 C117.13675,26.7044393 117.36957,27.2480043 117.46591,27.7412162 C117.530136,27.9628521 117.506474,28.1667405 117.540277,28.3499925 C117.549996,28.405711 117.563517,28.4593659 117.555911,28.5101316 C117.526333,28.5084807 117.506474,28.4849551 117.484924,28.4263475 C117.36957,28.8498082 117.24323,28.7573567 117.06703,29.0491566 C116.882802,29.350862 116.630967,29.6191363 116.331385,29.7970228 C116.131522,29.9394145 115.785883,30.082219 115.706445,30.1490812 C115.550105,30.3100458 115.180803,30.3562715 114.850375,30.3451278 C114.735021,30.3504933 114.623893,30.3302695 114.49882,30.3211895 C114.421072,30.2778529 114.344592,30.2336908 114.269802,30.1915924 C114.262197,30.1536212 114.254168,30.1094592 114.24276,30.0520897 C114.1929,30.0586934 114.113462,30.0260878 114.033179,29.9881166 C113.96853,29.929509 113.811767,29.9910057 113.848528,29.7834027 C113.841345,29.7941337 114.220787,30.0099913 114.225013,30.0004985 C114.065715,29.7086986 114.050926,29.7924828 113.622891,29.5700215 C113.496973,29.4003896 113.371901,29.2340595 113.24387,29.0615385 C113.070206,28.9158449 112.901611,28.7738659 112.748229,28.6541743 C112.134698,28.1766461 111.542717,27.6367956 110.964257,27.0317339 C110.897917,26.9623953 110.806226,26.888104 110.734394,26.8303218 L109.609164,25.9512076 C109.536065,25.8282142 109.442683,25.6998552 109.3624,25.571909 C109.098311,25.1699103 108.746334,25.1146045 108.392244,24.7732771 C108.510978,24.6952712 108.394779,24.5223374 107.72674,24.1112587 C107.518004,23.9828997 107.301663,23.8314279 107.082364,23.6758288 C106.856304,23.5301353 106.620948,23.3906326 106.397,23.2643374 C106.24235,23.1780769 106.097418,23.139693 105.923753,23.083149 C105.870091,22.997714 105.870513,22.94117 105.963472,22.9296136 C105.813893,22.8033183 105.681637,22.6906431 105.555297,22.5829206 C105.417971,22.4834528 105.28318,22.3905886 105.13022,22.2964862 C104.897399,22.1536818 104.58176,21.9951936 104.302037,21.873851 C104.188796,21.829689 104.097527,21.7636522 103.967807,21.7376503 L103.606956,21.69225 C103.468362,21.6761535 103.330613,21.6604698 103.19371,21.6447861 C102.919058,21.6076404 102.645673,21.5556365 102.371021,21.4673123 C101.625657,21.437183 100.560851,21.1911962 100.055913,21.3282224 C100.014504,21.3397788 99.9735175,21.3500971 99.9261928,21.3571135 C99.747035,21.2733294 99.6283007,21.1862434 99.6071736,21.0925538 C99.4901295,21.0665518 99.3739305,21.0422007 99.2585765,21.0161988 L99.0692777,20.9765767 C98.9585717,20.9575911 98.8427952,20.9278746 98.7371597,20.9179691 C98.4477185,20.9447965 98.1629252,20.9707985 97.8764418,20.9972132 C97.4420686,21.0384862 96.9481171,21.0735682 96.6958595,21.2266909 C96.3692346,21.4008628 95.7882394,21.4214993 95.3665425,21.6175459 C95.0154101,21.7917178 94.2776518,21.8548655 93.8322926,22.0822795 C93.5762322,22.1982566 93.0924216,22.4665309 92.7476274,22.3988432 C92.6842461,22.5172966 92.6593161,22.5647605 92.6208648,22.6353373 C92.5426945,22.6340991 92.4826936,22.6324482 92.4239602,22.6316227 L92.3491703,22.6175899 C91.8345142,22.8185893 91.6295814,22.9159935 91.3785914,22.991523 C91.1407003,23.0703544 90.9108375,23.1405184 90.4891406,23.327485 C90.3822375,23.3749489 90.2085727,23.4269529 90.1739243,23.4525421 C89.989696,23.591632 89.5675766,23.6002993 89.345742,23.7121491 C89.3368687,23.7129745 89.3322207,23.7150382 89.3258826,23.7171018 L90.1299799,25.6800442 C90.2989967,25.6457876 90.493366,25.5983237 90.7223838,25.5302233 C91.2776039,25.3671951 91.6029612,25.1756885 92.2874792,24.8797613 C92.3479027,24.8616012 92.8215722,24.6486327 93.2352408,24.5343066 C93.6582053,24.4005822 94.072719,24.2656196 94.1200437,24.2387921 C94.3608926,24.1071314 94.626249,24.0051871 94.8945631,23.8871464 C95.1785113,23.7699312 95.7033084,23.6551924 95.5913348,23.5355008 C95.5786586,23.5202298 95.8186624,23.4182855 95.965707,23.3848544 C96.2957123,23.3043721 96.6333233,23.2218262 96.983188,23.1347402 C97.0558653,23.0794345 97.1496696,23.0488925 97.2181214,22.9902848 C97.2210792,22.9882212 97.2286849,23.0162868 97.2316427,23.0154614 C97.2320653,22.9985394 97.8624979,22.921359 97.8624979,22.921359 C97.9812322,23.0914036 97.9643305,23.0637507 98.1312346,23.1000709 C98.2098274,23.1165801 98.3036317,23.1264856 98.4046192,23.1281366 C98.493353,23.1314384 98.6551866,23.119882 98.6729334,23.119882 C98.7557516,23.1178183 98.6526513,23.1120401 98.8415276,23.1297875 C98.9695578,23.1421694 99.0971655,23.1471221 99.2188576,23.1438203 C99.8653468,23.1285493 100.612401,23.2585591 101.311285,23.3439942 C101.616361,23.3807271 101.899041,23.4166346 102.144116,23.4158091 C102.216793,23.4153964 102.287357,23.414571 102.356654,23.41292 C102.357077,23.4405729 102.327921,23.4640985 102.248061,23.4839095 C102.843423,23.5751228 102.74159,23.7369128 103.251176,23.8347298 C103.313289,23.8475244 103.286247,23.8442226 103.307796,23.8508262 L103.37498,23.890861 L103.700338,24.0699857 C103.920482,24.1892646 104.140626,24.3044162 104.362461,24.4109004 C104.674297,24.5722777 105.140783,24.8397266 105.277687,24.8500448 C105.5591,24.8880159 105.974459,25.1071754 106.328549,25.3271603 C106.453621,25.3981498 106.577426,25.4666629 106.710949,25.541367 C106.791232,25.6189602 106.869402,25.6957279 106.946305,25.7683683 C106.949685,25.810054 106.953911,25.8587561 106.958981,25.9198401 C107.022785,25.9305711 107.108561,26.0019734 107.210394,26.0585173 C107.297015,26.1373487 107.343072,26.2582785 107.431383,26.333808 C107.431383,26.333808 107.329973,26.2380547 107.211239,26.1538579 C107.091659,26.0688356 106.973348,25.984226 106.973348,25.984226 C107.279691,26.1971945 107.195182,26.2950114 107.721247,26.6165278 C107.850967,26.7729524 107.978998,26.9269006 108.111253,27.0870397 C108.281115,27.202604 108.451822,27.359854 108.604782,27.4750056 C109.218736,27.9521211 109.810717,28.4911461 110.388754,29.097446 C110.454671,29.1663718 110.546785,29.2410759 110.618195,29.2980326 L111.744269,30.1771468 C111.815256,30.3013785 111.887511,30.4293247 111.959343,30.5572709 C112.152022,30.9270767 112.574987,31.0938195 113.047811,31.4169868 C112.9895,31.4599107 113.003022,31.5271856 113.145418,31.6394481 C113.28866,31.7451069 113.570073,31.8949278 114.054306,32.0051266 C114.656006,32.1376128 115.397144,32.2015859 116.039408,32.0505269 C116.256595,31.9931574 116.422654,31.9130879 116.616178,31.7942217 C116.737447,31.7979363 116.791955,31.8301292 116.726039,31.9143261 C117.213652,31.7872053 117.582954,31.6485282 117.962397,31.387683 C118.103103,31.2902788 118.259021,31.1582053 118.400573,31.0112735 C118.533251,30.854849 118.660013,30.6905826 118.765226,30.5419999 C118.886496,30.3897026 118.965511,30.2180071 119.041146,30.0446606 C119.115936,29.8725523 119.197909,29.7033332 119.262558,29.5303994 C119.346222,29.1713246 119.494534,28.8233935 119.540168,28.4445076 C119.531295,28.1964571 119.553267,27.9224046 119.492844,27.6446375 C119.449322,27.366045 119.415518,27.0791978 119.303967,26.8204163 C119.145514,26.2851059 118.813396,25.8703126 118.577618,25.6717896 C118.533251,25.6424858 118.487194,25.6140074 118.439869,25.5797509 C118.330008,25.3647187 118.270852,25.1930232 118.305501,25.0964444 L118.156766,24.9140179 L118.035496,24.7835953 L117.795915,24.5289411 C117.637884,24.3601347 117.479854,24.1933919 117.323091,24.0254109 C117.050128,23.733611 116.744631,23.414571 116.494908,23.286212 C116.180115,23.1240093 115.867434,22.6753721 115.484611,22.4454817 C115.160521,22.2506733 114.645865,21.7941942 114.240224,21.5362382 C114.008671,21.3893064 113.598806,21.0789337 113.535002,20.7598936 C113.403169,20.7553536 113.350351,20.75329 113.270068,20.7504008 C113.243448,20.6827132 113.224434,20.6327729 113.204152,20.5803562 L113.19063,20.5126685 C112.934147,20.2728726 112.790905,20.0892079 112.68527,19.9237033 L111.175105,21.417372 C111.588774,21.7941942 112.449069,22.5688878 112.522591,22.6229554" id="Fill-17" fill="#000000"></path>
-                </g>
-                <g id="Group-17-Copy-2" transform="translate(29.500000, 198.000000) rotate(87.000000) translate(-29.500000, -198.000000) translate(1.000000, 170.000000)">
-                    <g id="Group-3" transform="translate(4.560620, 0.590771)">
-                        <mask id="mask-6" fill="white">
-                            <use xlink:href="#path-5"></use>
-                        </mask>
-                        <g id="Clip-2"></g>
-                        <path d="M27.1384533,15.2482387 L27.1384533,15.2482387 L26.94692,15.1713971 L27.1384533,15.2482387 Z M51.87312,3.28178752 C51.82762,3.14720619 51.73922,3.00133739 51.6031533,2.84548352 C51.5008867,2.67660565 51.1927867,2.58674005 50.8556533,2.43045205 C50.4643533,2.16215765 50.0747867,1.89473152 49.67612,1.61992512 C49.3931533,1.52181099 49.1201533,1.42586752 48.8744533,1.35206485 C48.3843533,1.20315712 47.8942533,1.03210859 47.40112,0.83848512 L47.0314867,0.688274987 L46.9378867,0.650071253 L46.7779867,0.599277653 L46.45992,0.495519787 C46.0326533,0.352255787 45.6001867,0.207255253 45.16122,0.06095232 C44.97012,0.00668565333 44.74392,0.0813565867 44.5627867,0.15081792 C44.3361533,0.25240512 44.12382,0.39306432 43.9942533,0.580175787 L43.66622,1.28607659 L43.35292,1.97200725 C43.30482,2.08010645 43.24372,2.20600512 43.2090533,2.29804139 L43.13972,2.52248832 C43.0179533,2.66792299 42.89012,2.81726485 42.76402,2.96617259 C42.3657867,3.42548565 42.46242,3.86526272 42.1746867,4.41096832 C42.02822,4.28810859 41.83842,4.47956139 41.52252,5.41338219 C41.3244867,5.99729152 41.01032,6.65022805 40.78412,7.26018539 C40.70612,7.46856939 40.69052,7.65698325 40.6562867,7.88707392 C40.5561867,7.96782272 40.4794867,7.97650539 40.4413533,7.86059179 C40.1748533,8.27735979 39.95732,8.57734592 39.74932,8.95981739 C39.5937533,9.24547712 39.4212867,9.65226005 39.3055867,9.98003072 C39.06032,10.6746441 38.85882,11.3562334 38.4575533,11.9974483 C38.3262533,12.4667465 38.1000533,13.0198323 37.9093867,13.5425289 C37.8144867,13.803443 37.72912,14.0565427 37.6701867,14.2875017 C37.64592,14.3643433 37.66022,14.3582654 37.66672,14.3717235 L37.6892533,14.4129662 C37.7100533,14.4494334 37.7286867,14.4837299 37.7490533,14.5193289 C37.76422,14.5462451 37.7780867,14.5757662 37.7867533,14.604419 C37.7061533,14.6096286 37.6311867,14.5436403 37.54842,14.4177417 C37.5193867,14.4255561 37.4842867,14.4003763 37.46652,14.3760649 C37.4569867,14.3643433 37.4487533,14.3534899 37.4426867,14.343939 C37.4205867,14.3278761 37.4968533,14.3448073 37.2940533,14.2714387 C36.7987533,14.0856297 36.25102,13.8867966 35.8813867,13.8876649 C35.41512,13.8867966 34.78202,13.5325438 34.19572,13.4934718 C33.6995533,13.4587411 32.90222,12.9755507 32.2734533,12.9147721 C31.9137867,12.8813438 31.2477533,12.7584841 30.9842867,12.4059678 C30.8252533,12.4828094 30.7615533,12.5158035 30.66622,12.5618217 C30.59602,12.4958334 30.5422867,12.4454739 30.4889867,12.3955486 L30.4326533,12.3182729 C30.27492,12.2696499 30.1375533,12.2271049 30.0131867,12.1880329 C29.9789533,12.1767454 29.9611867,12.1684969 29.91482,12.1563411 C29.8623867,12.1437513 29.8125533,12.1324638 29.7631533,12.1203081 C29.6643533,12.0968649 29.57162,12.0742899 29.4827867,12.0525833 C29.1291867,11.9644542 28.84232,11.8850078 28.5558867,11.8059955 C28.4124533,11.7664894 28.27032,11.7278515 28.12212,11.687043 C27.9886533,11.6970281 27.84132,11.7048425 27.6805533,11.7556361 C27.5193533,11.7986153 27.3455867,11.8715497 27.1735533,11.9822537 C26.99762,12.0903529 26.84292,12.2266707 26.7059867,12.4624051 C26.5941867,12.6291123 26.4225867,12.8496521 26.3454533,12.9560147 C26.3064533,13.0515241 26.2886867,13.0962398 26.2808867,13.1231561 C26.24232,13.2677225 26.17862,13.4305225 26.1001867,13.6085171 C26.0598867,13.6953438 26.0165533,13.7878142 25.9723533,13.8837577 C25.9437533,13.9328147 25.91472,13.9844766 25.88482,14.0365726 C25.7708533,14.2310643 25.6486533,14.4298974 25.5966533,14.5974729 C25.58972,14.6078921 25.5866867,14.6152723 25.5823533,14.6248233 L25.5853867,14.6256915 C25.3314533,15.3203049 24.8170867,16.7581545 24.78762,16.8745022 C24.6935867,17.2517641 24.6021533,17.6264211 24.4942533,18.0158387 C24.3824533,18.4208851 24.0604867,19.0829385 24.2892867,19.0612318 C24.3126867,19.0594953 24.2251533,19.4028947 24.15842,19.5960841 C23.9980867,20.0276126 23.8338533,20.4695603 23.6626867,20.9280051 C23.67222,21.0526014 23.6353867,21.1802366 23.6522867,21.3009257 C23.6522867,21.3009257 23.6145867,21.2931113 23.61372,21.2965843 L23.28872,22.1110185 C23.24062,22.2304051 23.0460533,22.1327251 22.8861533,22.3120222 C22.5884533,22.6471731 22.27342,23.3643614 22.1611867,23.988211 C22.0103867,24.8208787 21.6359867,25.7386366 21.3343867,26.6090739 C21.2039533,26.9885065 21.08262,27.3410227 21.01762,27.6540329 C20.9998533,27.7469374 20.9820867,27.8381054 20.9647533,27.9271027 C20.9270533,27.9188542 20.9036533,27.8737043 20.8984533,27.765171 C20.6154867,28.5018953 20.4226533,28.3221641 20.1552867,28.9434089 L20.0499867,29.1873918 C20.0265867,29.2420926 20.0261533,29.2403561 20.02182,29.2451315 L20.0109867,29.2624969 L19.9676533,29.3271827 C19.9494533,29.3701619 19.9065533,29.4096681 19.85672,29.4044585 C19.8233533,29.4005513 19.7843533,29.4014195 19.7392867,29.4122729 C19.7158867,29.4166142 19.7184867,29.4318089 19.5789533,29.4070633 C19.4788533,29.3936051 19.40042,29.3896979 19.35492,29.3970782 C18.9705533,29.4608958 18.35782,29.2933203 17.7979533,29.1930355 C17.6072867,29.1596073 17.4170533,29.126179 17.21252,29.0905801 C17.0738533,29.0267625 16.93822,28.9638131 16.80692,28.9030345 C16.7826533,28.8496361 16.75362,28.7892915 16.7167867,28.7102793 C16.6305533,28.7263422 16.4875533,28.6738121 16.33242,28.6468958 C16.18682,28.579171 15.9844533,28.7050697 15.8990867,28.4107273 L16.66522,28.6351742 C16.2509533,28.2453225 16.22712,28.3247689 15.3608867,28.2171038 C15.1017533,28.0899027 14.8417533,27.9627017 14.57612,27.8337641 C14.28362,27.7699465 14.00022,27.7078654 13.7475867,27.6640179 C13.4949533,27.6201705 13.24232,27.5693769 12.98882,27.5151102 L12.60662,27.4278494 L11.96702,27.3119358 C11.7477533,27.2698249 11.5284867,27.2281481 11.30792,27.1864713 L10.9759867,27.1200489 C10.8689533,27.1087614 10.77362,27.1339411 10.6661533,27.1534771 C10.45772,27.2016659 10.2475533,27.2889267 10.0659867,27.4122206 C9.97455333,27.4699603 9.89048667,27.5420265 9.81638667,27.6123561 C9.73622,27.6766078 9.69895333,27.8046771 9.63698667,27.8988841 C9.53602,28.0846931 9.42378667,28.3278078 9.34058667,28.5157875 C9.24005333,28.748483 9.11308667,29.0215529 9.04158667,29.2117033 L8.90942,29.6640702 L8.64552,30.5675017 C8.52375333,30.7142387 8.39895333,30.8640147 8.27415333,31.014659 C7.88155333,31.4778793 7.98295333,31.9163539 7.70128667,32.4659667 C7.55352,32.3452777 7.36502,32.538467 7.05952,33.4757609 C6.86842,34.0614067 6.56162,34.7173822 6.34148667,35.3303785 C6.26652,35.5387625 6.25308667,35.7284787 6.22145333,35.9594377 C6.12135333,36.0401865 6.04465333,36.0488691 6.00565333,35.9338238 C5.74435333,36.354499 5.52942,36.6566558 5.32532,37.0404297 C5.17322,37.3295625 5.00552,37.7367795 4.89372,38.0662867 C4.65582,38.7630707 4.46168667,39.4468307 4.06778667,40.0928211 C3.81732,41.0357587 3.18335333,42.3160179 3.22798667,43.0054217 C3.23102,43.0614249 3.23362,43.1187305 3.22972,43.1795091 C3.06592,43.3822494 2.91425333,43.5059774 2.78122,43.5029385 C2.51168667,44.0681801 2.24952,44.6173587 1.98865333,45.1648009 C1.76028667,45.6414793 1.51415333,46.1706878 1.48165333,46.5405694 C1.44135333,47.0050921 1.03315333,47.6063667 0.94302,48.1881054 C0.930886667,48.2653811 0.85722,48.5610259 0.775753333,48.8189011 C0.687353333,49.085459 0.589853333,49.3793673 0.490186667,49.6810899 L0.33592,50.1408371 L0.300386667,50.2558825 L0.305586667,50.3592062 C0.306453333,50.4264969 0.324653333,50.5011678 0.334186667,50.5706291 C0.397886667,50.8562889 0.54522,51.1276222 0.723753333,51.2925929 C0.802186667,51.3967849 1.00715333,51.4584318 1.19088667,51.5465609 C1.37895333,51.6320851 1.57525333,51.7271603 1.76505333,51.8304841 C1.95442,51.9329395 2.13858667,52.0436435 2.30368667,52.1630302 C2.38732,52.2220723 2.46532,52.2841534 2.53768667,52.3484051 C2.61005333,52.4126569 2.62348667,52.439139 2.65945333,52.4921033 C2.82412,52.4282857 2.88998667,52.4026718 2.98922,52.3649022 C3.05378667,52.4374025 3.10232,52.491235 3.15128667,52.5463699 L3.20112,52.6266846 C3.81472,52.868931 4.11545333,53.0295603 4.40102,53.1897555 C4.54575333,53.2692019 4.68615333,53.3464777 4.85645333,53.4398163 C5.05578667,53.5405353 5.12945333,53.5839486 5.75865333,53.8513747 C5.92375333,53.9208361 6.13868667,54.0245939 6.28515333,54.093187 C6.41082,54.1196691 6.49575333,54.1361662 6.53302,54.1370345 C6.65825333,54.1392051 6.81078667,54.1635166 6.98065333,54.1995497 C7.06558667,54.2190857 7.15572,54.2394899 7.24888667,54.2607625 C7.33902,54.2703134 7.42092,54.2672745 7.51668667,54.2577235 C7.89412,54.2316755 8.30318667,54.054115 8.50078667,53.8648329 C8.51812,53.8526771 8.44315333,53.8465993 8.45528667,53.8379166 L7.42785333,52.3662046 L7.42785333,52.3653363 L8.45355333,53.8340094 C8.61475333,53.5305502 8.86262,53.1446057 9.08015333,52.7339155 C9.28598667,52.3392883 9.59452,51.8261427 9.62225333,51.6746302 C9.79342,51.2161854 9.94465333,50.8289385 9.95938667,50.7716329 C10.05992,50.3948051 10.1604533,50.0218846 10.27312,49.6337694 C10.3909867,49.2300254 10.72422,48.5727475 10.49542,48.5909811 C10.47202,48.5931518 10.5647533,48.2506206 10.6340867,48.0582995 C10.80092,47.6298099 10.9720867,47.1895987 11.1484533,46.7333246 C11.14152,46.6091625 11.1796533,46.4815273 11.16492,46.3604041 C11.1640533,46.3560627 11.2017533,46.3690867 11.2034867,46.3651795 L11.53932,45.5550867 C11.58872,45.4365683 11.7819867,45.536419 11.9440533,45.3592926 C12.2460867,45.0280489 12.57152,44.3156361 12.6919867,43.6930889 C12.8531867,42.8621577 13.23972,41.9496094 13.5525867,41.0839475 C13.6890867,40.7058174 13.8151867,40.3559059 13.8840867,40.0437641 C13.9035867,39.9512937 13.9217867,39.8596915 13.9408533,39.7711283 C13.9776867,39.7789427 14.0010867,39.8249609 14.00542,39.9334942 C14.2970533,39.2006771 14.48772,39.3834473 14.7628867,38.7648073 C14.9015533,38.4600457 15.04022,38.1531134 15.17802,37.8479177 C15.2083533,37.8045043 15.2265533,37.7641299 15.2464867,37.7146387 C15.2750867,37.6490846 15.3504867,37.6490846 15.4011867,37.6143539 C15.4180867,37.6043689 15.4310867,37.5904766 15.4414867,37.5752819 C15.46532,37.5379465 15.4947867,37.513635 15.5376867,37.4988745 C15.65772,37.5075571 15.7881533,37.5253566 15.9233533,37.5492339 C16.1950533,37.6026323 16.4875533,37.6582014 16.76792,37.7129022 C16.9585867,37.7463305 17.1483867,37.7793246 17.35422,37.8144894 C17.4915867,37.8778729 17.6276533,37.9421246 17.75852,38.0024691 C17.7836533,38.0558675 17.8126867,38.1162121 17.84952,38.1956585 C17.93532,38.1791614 18.07832,38.2312574 18.2338867,38.2581737 C18.3794867,38.3263326 18.58142,38.2013022 18.66722,38.4947763 L17.9006533,38.2707635 C18.3153533,38.6606153 18.3378867,38.5811689 19.20412,38.6888339 C19.4649867,38.816035 19.7249867,38.9432361 19.9901867,39.0721737 C20.2822533,39.1355571 20.5656533,39.1972041 20.8191533,39.2419198 C21.3222533,39.3296147 21.83012,39.4403187 22.34232,39.5731635 L22.53472,39.6243913 L22.63092,39.6508734 L22.6798867,39.6643315 L22.7613533,39.6799603 C22.98192,39.7238078 23.2037867,39.7689577 23.4260867,39.8128051 C23.64882,39.8605598 23.8732867,39.9074462 24.0981867,39.955635 C24.3334867,40.0298718 24.53282,40.0059945 24.7490533,39.9408745 C24.9457867,39.8870419 25.1676533,39.7485534 25.3058867,39.6165769 C25.37392,39.5553641 25.4280867,39.4889417 25.48312,39.4246899 L25.6135533,39.1802729 C25.6984867,39.0196435 25.78342,38.8577118 25.8878533,38.7131454 L26.04602,38.2138921 C26.0932533,38.0610771 26.1625867,37.8531273 26.1751533,37.7854025 L26.3250867,37.2014931 C26.4442533,37.0538878 26.5677533,36.9006387 26.6903867,36.7486921 C27.0773533,36.2806963 26.96902,35.8430899 27.2437533,35.2908723 C27.3936867,35.4098249 27.57872,35.2144649 27.8716533,34.2728297 C28.0540867,33.6841449 28.35352,33.0229598 28.5645533,32.408227 C28.6373533,32.1985406 28.6477533,32.0088243 28.6754867,31.7778654 C28.7751533,31.6949459 28.8522867,31.6858291 28.89302,31.7995721 C29.1482533,31.3762921 29.3588533,31.0710963 29.5577533,30.6834153 C29.7063867,30.3934142 29.8684533,29.9827241 29.9754867,29.6527827 C30.20472,28.9525257 30.3888867,28.2661609 30.7745533,27.615395 C31.0128867,26.6698526 31.6286533,25.3800425 31.5744867,24.6919411 C31.5714533,24.6359379 31.56842,24.5786323 31.57102,24.5169854 C31.7326533,24.3112062 31.8821533,24.1866099 32.0151867,24.1879123 C32.14562,23.9039891 32.2751867,23.623539 32.4025867,23.3456937 L32.5945533,22.9297939 C32.61622,22.8816051 32.6153533,22.887683 32.6153533,22.887683 L32.6244533,22.8863806 L32.6374533,22.8846441 C32.67342,22.8855123 32.66302,22.9132969 32.6508867,22.7860958 C32.6465533,22.7105566 32.6868533,22.724883 32.7158867,22.7361705 C32.7977867,22.7596137 32.8809867,22.7839251 32.9628867,22.8082366 C33.1132533,22.8468745 33.2618867,22.8763955 33.4083533,22.8863806 C33.90452,22.9198089 34.7022867,23.4034334 35.3310533,23.4637779 C35.69072,23.4972062 36.35632,23.6205001 36.6210867,23.9730163 C36.7792533,23.8948723 36.8429533,23.8640489 36.93742,23.8171625 C37.0084867,23.884019 37.0617867,23.9335102 37.1159533,23.9843038 L37.1718533,24.059843 C38.4371867,24.4353683 38.4267867,24.5955635 39.57382,24.9754302 C39.71942,25.0231849 39.9317533,25.1269427 39.9889533,25.1312841 C40.2129867,25.1499518 40.6259533,25.2641289 41.0215867,25.3830814 C41.2278533,25.4434259 41.43802,25.5042046 41.63302,25.5597737 C41.8431867,25.6374835 42.0026533,25.6123038 42.15172,25.5654174 C42.1755533,25.5619443 42.1876867,25.5597737 42.20502,25.5580371 L42.20372,25.5549982 C42.51182,25.459923 42.9286867,25.2719433 43.1873867,24.9363582 C43.40492,24.5226291 43.63502,24.0832862 43.84952,23.6760691 C43.90282,23.5749161 43.9539533,23.4763678 44.0046533,23.3799902 C44.05882,23.2771006 44.0544867,23.2597353 44.0817867,23.1980883 C44.11992,23.0973694 44.15502,23.0040307 44.1853533,22.9232819 C44.2438533,22.7622185 44.28372,22.6515145 44.2945533,22.6232958 C44.3972533,22.2490729 44.4964867,21.8761523 44.6143533,21.4889054 C44.7365533,21.0873321 45.0749867,20.4335273 44.8448867,20.4487219 C44.8223533,20.4513267 44.9176867,20.1092297 44.9891867,19.9177769 C45.1594867,19.4905897 45.3349867,19.0525491 45.5169867,18.5980115 C45.51092,18.4742835 45.5503533,18.3470825 45.53692,18.2255251 C45.5360533,18.2211838 45.5737533,18.2346419 45.5737533,18.2346419 L45.92042,17.4254174 C45.97112,17.306899 46.16352,17.4089203 46.3268867,17.2339646 C46.63282,16.9057598 46.9651867,16.1968201 47.09302,15.5755753 C47.2637533,14.7463806 47.6606867,13.8386078 47.98352,12.976419 C48.12262,12.5995913 48.2534867,12.2505481 48.3258533,11.9392745 C48.3457867,11.8476723 48.3652867,11.7565043 48.38522,11.667507 C48.42162,11.6761897 48.4445867,11.7226419 48.4484867,11.8298729 C48.7474867,11.1018313 48.9355533,11.2863379 49.2189533,10.6707369 C49.5131867,10.0299561 49.82562,9.38570219 50.08952,8.73884352 C50.27542,8.28256939 50.52242,7.59229739 50.5141867,7.40779072 C50.4972867,7.01793899 50.73822,6.42838592 50.9050533,5.88354859 C50.9336533,5.78847339 50.9626867,5.69383232 50.9912867,5.59615232 C51.0276867,5.45158592 51.06582,5.30354645 51.1043867,5.15116565 C51.1992867,4.93496725 51.2915867,4.72180779 51.38172,4.51602859 C51.4449867,4.45524992 51.51692,4.38622272 51.6100867,4.29592299 C51.60922,4.23774912 51.6304533,4.15005419 51.65862,4.04716459 C51.67422,3.99550272 51.6893867,3.94080192 51.7062867,3.88393045 C51.7023867,3.83096619 51.7006533,3.77800192 51.6906867,3.72199872 C51.6915533,3.47541099 51.45062,3.31044032 51.5489867,2.98657685 C51.5489867,2.98657685 51.7257867,3.25747605 51.7777867,3.57048619 C51.8648867,3.86005312 51.6850533,4.18174592 51.7023867,4.18218005 C52.0087533,3.75325632 51.95112,3.56050112 51.87312,3.28178752 L51.87312,3.28178752 Z" id="Fill-1" fill="#000000" mask="url(#mask-6)"></path>
-                    </g>
-                    <path d="M7.98566756,52.5664803 C7.87646126,52.8268757 7.5732071,52.9514689 7.30954566,52.8428271 L2.410925,50.8247626 C2.14726357,50.7165519 2.02239421,50.4152003 2.1320356,50.1543737 L10.9703498,29.0946787 C11.0799912,28.8342833 11.3923822,28.6864097 11.6656155,28.7644421 L20.7171213,31.3826232 C20.9903546,31.461949 21.2997,31.3119198 21.4058607,31.0506622 L28.2989104,13.9904511 C28.404201,13.7283312 28.7126761,13.5839066 28.9841691,13.6679747 L38.4181145,16.6241524 C38.6887373,16.7090827 39.0019984,16.5668137 39.1146854,16.3081428 L45.2245824,2.19203816 C45.3372694,1.93336722 45.642699,1.81179187 45.9037499,1.92388261 L50.779311,3.99411241 C51.040362,4.10577204 51.1630559,4.40841705 51.0503689,4.66708799 L42.6789008,24.0139502 C42.5666489,24.2730523 42.2533878,24.4153213 41.9823299,24.3299599 L32.6815204,21.4147384 C32.4108976,21.3298081 32.1024224,21.4742327 31.9966968,21.7354903 L25.1528117,38.6792995 C25.0475211,38.9414194 24.7377407,39.0901552 24.4649425,39.0112605 L15.3381669,36.3723858 C15.0653687,36.2926289 14.7529778,36.4413647 14.6433364,36.7017601 L7.98566756,52.5664803 Z" id="Fill-4" fill="#FC6EB3"></path>
-                    <path d="M14.3946286,28.8933098 C14.1543744,28.8562898 13.9150183,28.8210119 13.6711715,28.7835564 C13.4138525,28.739568 12.9863347,28.5853906 13.0137282,28.7208402 C13.0159736,28.7352127 12.798173,28.7029835 12.6751269,28.6733675 C12.5264837,28.6380896 12.3755951,28.6006341 12.2229101,28.5631786 C12.1048039,28.5383534 11.9871467,28.5130927 11.8676932,28.4873965 C11.7473415,28.4586515 11.6292352,28.4333908 11.5106799,28.4521186 C11.4590365,28.4708464 11.4024532,28.4830412 11.3476663,28.495236 C11.2942266,28.5148348 11.2434813,28.5466285 11.2021665,28.5771155 C11.2021665,28.5771155 11.1886943,28.5579522 11.1846527,28.5579522 C11.1846527,28.5579522 11.1343565,28.5740668 11.0598103,28.5954078 C10.984366,28.6180553 10.9053291,28.6899176 10.8168617,28.7413101 C10.6466629,28.8584675 10.5528066,29.051407 10.5317001,29.0309371 C10.4769132,29.1419971 10.383955,29.03747 10.2330664,29.2243121 C10.1984877,29.2683006 10.1603165,29.3183864 10.1212471,29.3754408 L10.0184094,29.5322313 C9.97170573,29.6058358 9.9267984,29.6903285 9.88548366,29.779612 C9.80150695,29.958179 9.73190059,30.158958 9.69462751,30.3466712 C9.59448416,30.8470944 9.35378088,31.3958613 9.15978122,31.9171899 C9.07490637,32.1449718 8.99631854,32.3553324 8.95365658,32.5434811 C8.9415316,32.5987933 8.92985569,32.6541056 8.91817979,32.7072401 C8.89572612,32.7024493 8.88135578,32.6745754 8.87866134,32.6096816 C8.69678665,33.0508728 8.57868038,32.9406839 8.40713438,33.3126259 C8.22840321,33.7011181 8.03844521,34.0904813 7.87902419,34.4811511 C7.76540865,34.7568412 7.61676539,35.1749493 7.62350149,35.2851382 C7.63652461,35.5198885 7.49102487,35.8761515 7.39088152,36.2049762 C7.3576501,36.3169072 7.32441867,36.4284027 7.28804374,36.5494799 C7.23864568,36.6283107 7.19149298,36.7049638 7.14434029,36.7794394 C7.11021071,36.7911986 7.07069227,36.8047001 7.01949791,36.8212502 C7.02398864,36.8743847 6.98177575,36.9562643 6.95438228,37.0481609 C6.90228978,37.1300405 6.96650726,37.2598282 6.77969277,37.2911863 L6.97009985,36.8478175 C6.70065587,37.0695019 6.74825764,37.0886652 6.62251712,37.6008477 C6.52551729,37.7511053 6.43211004,37.8935234 6.3319667,38.0472652 C6.27628161,38.2166861 6.22149467,38.3804452 6.17119846,38.5320094 C5.99381451,39.1243293 5.75984733,39.7188268 5.46929691,40.323777 C5.43696363,40.3921551 5.40687572,40.4814386 5.38576928,40.5524299 L5.05704763,41.6403822 C4.98205239,41.7279236 4.90436271,41.8180781 4.82622395,41.9095393 C4.58237716,42.1878425 4.64569649,42.4526444 4.46921069,42.7836467 C4.37804881,42.7104777 4.26128975,42.825893 4.07133175,43.3907745 C3.95187825,43.7439888 3.76102211,44.1385784 3.6249529,44.5066007 C3.57735113,44.6324687 3.56971688,44.7457063 3.55040673,44.8855112 C3.48798554,44.9342905 3.43948563,44.9390813 3.41613382,44.8711387 C3.25312021,45.1233102 3.12064359,45.305797 2.9926577,45.5370631 C2.89835231,45.7095327 2.79416731,45.9556068 2.72501002,46.1533371 C2.57681584,46.5736229 2.45646419,46.9847626 2.2108211,47.3732547 C2.05499267,47.9407494 1.66070632,48.7116363 1.68989608,49.1262603 C1.6912433,49.1602315 1.69259052,49.1946384 1.68989608,49.2312228 C1.58795645,49.3540421 1.49410013,49.4276466 1.41147064,49.42634 C1.32569765,49.6036004 1.24935519,49.7486317 1.15909145,49.9459265 L0.977665844,50.4341548 L0.886054893,50.6802289 L0.841596637,50.8034837 L0.833064245,50.9228187 C0.817795753,51.201122 0.897281725,51.513832 1.06209162,51.743356 C1.13753594,51.8622555 1.23184133,51.9606851 1.32839209,52.0334185 C1.41820674,52.1135559 1.5601139,52.1383811 1.65486837,52.1771432 C1.78509962,52.2172119 1.9216179,52.2725241 2.06442321,52.3369825 C2.13582586,52.3700827 2.20902481,52.404054 2.2831219,52.4393319 C2.32488572,52.4563175 2.3688949,52.4746097 2.41245501,52.4920309 C2.58714452,52.5625867 2.76991735,52.6374977 2.95089389,52.664936 C3.25626373,52.7115377 3.72329995,53.043411 4.10995205,53.1126602 C4.33134519,53.1518578 4.7364093,53.2607402 4.8810109,53.4867799 C4.98384868,53.4480178 5.02516342,53.4327743 5.08578832,53.4096912 C5.12665399,53.4528086 5.1567419,53.4859088 5.18682981,53.5190091 L5.21736679,53.5673528 C5.59099577,53.7093354 5.77781026,53.8055874 5.9520507,53.8996617 C6.04096721,53.9466989 6.12808743,53.9933005 6.22823077,54.0468706 C6.28616122,54.074309 6.34813334,54.1039249 6.41549433,54.1361541 C6.54168393,54.1897242 6.67865128,54.2485207 6.83492879,54.3138501 C6.84840099,54.3177698 6.87983612,54.3251738 6.91216939,54.3334489 C7.07787744,54.3730821 7.33789087,54.4654143 7.39492318,54.4418957 C7.55030254,54.4279588 7.79100582,54.4192482 8.03081096,54.3447727 C8.26612537,54.2659419 8.49515275,54.1317988 8.60876829,53.9793636 C8.62089327,53.9684753 8.625384,53.96412 8.63346732,53.9580226 L7.33968717,52.5316641 C7.30959926,52.5390681 7.27097895,52.5408102 7.23235865,52.529922 C7.18385873,52.5190337 7.15781248,52.492902 7.12907179,52.4794006 C6.99434981,52.4236528 6.84705377,52.3626787 6.65529947,52.2842834 C6.54707281,52.2385528 5.24341304,51.6096485 5.15225116,51.5865654 C4.91738583,51.5247203 4.68341865,51.4628751 4.44585888,51.4005944 C4.19572505,51.3300387 3.78751743,51.1301307 3.79874426,51.268629 C3.80054056,51.2821304 3.58812889,51.2268182 3.46867539,51.1850074 C3.33440248,51.1349215 3.20012956,51.0857067 3.06316221,51.0356208 L2.89161621,50.9702914 L2.82066263,50.9459018 C2.77710252,50.964194 2.74297295,50.9585321 2.68773694,50.9755178 L2.7052508,50.9576611 C2.7052508,50.9576611 2.65450552,50.9376267 2.62172317,50.896687 C2.58894081,50.8566183 2.57995935,50.8052258 2.57995935,50.8052258 C2.76003774,50.7268305 2.72950076,50.7407675 2.79237102,50.6998277 C2.85434313,50.666292 2.8952088,50.6479997 2.91002822,50.6262233 L2.9154171,50.6175127 L2.94325964,50.5508767 L2.99490307,50.4075875 C3.02768542,50.3117711 3.05462982,50.214648 3.07393997,50.1205737 C3.17363424,49.6210216 3.41343938,49.0722546 3.60788811,48.550926 C3.69321204,48.3231442 3.77224894,48.112348 3.81446183,47.9237638 C3.82658681,47.8688871 3.83826271,47.8131393 3.84948954,47.7608758 C3.87194321,47.7647956 3.8872117,47.793105 3.88945707,47.8575633 C4.0704336,47.4168076 4.18853988,47.5274321 4.3614331,47.1541835 C4.53971519,46.7669979 4.7296732,46.3776347 4.88864514,45.9869649 C5.00181161,45.7104037 5.15045487,45.2931666 5.14416784,45.1821067 C5.13069565,44.9473564 5.27619539,44.5919644 5.37633874,44.2622687 C5.41001923,44.1503377 5.44280158,44.0384067 5.47917652,43.9173295 C5.52812551,43.8393698 5.57572728,43.7627166 5.62287997,43.68737 C5.65700954,43.6760463 5.69652799,43.6629804 5.74772235,43.6459947 C5.74323162,43.5937312 5.78634265,43.5118517 5.8141852,43.419955 C5.86493048,43.3372044 5.95070348,43.2675197 5.98932378,43.1764941 L5.79846763,43.6202985 C5.92016649,43.338511 6.01941169,43.3790153 6.14605036,42.8659617 C6.24349926,42.7170107 6.33600836,42.5737215 6.43525356,42.4212863 C6.49183679,42.2505588 6.54572559,42.0867997 6.59647087,41.9356711 C6.77295667,41.3429156 7.00737293,40.7484181 7.2970252,40.1439034 C7.3307057,40.0755253 7.36034454,39.9858063 7.38234913,39.9161216 L7.71017263,38.8272982 C7.7847188,38.7397569 7.8637557,38.6487312 7.9409963,38.5577056 C8.18574125,38.2798379 8.12242191,38.0150361 8.2975605,37.6849048 C8.38917145,37.7580737 8.50637958,37.6409164 8.69678665,37.0764704 C8.81489293,36.7241271 9.0070963,36.3286665 9.14316551,35.9610797 C9.18986913,35.8352118 9.19795245,35.7215386 9.21771167,35.5817337 C9.27923471,35.5333899 9.32683648,35.5277281 9.35153551,35.5974128 C9.51410004,35.3439347 9.64792389,35.1618834 9.77501163,34.9310529 C9.86976609,34.7568412 9.97305295,34.5120737 10.0426593,34.3139078 C10.1908535,33.8940576 10.3112051,33.4833534 10.5563992,33.0939902 C10.7126767,32.5264955 11.1060649,31.7556086 11.0782223,31.3405491 C11.076426,31.3065778 11.0746297,31.2726065 11.0773242,31.2355865 C11.1792638,31.1136383 11.2735692,31.0395983 11.3561987,31.041776 C11.4397263,30.871484 11.5223558,30.7033697 11.6045362,30.537433 L11.7275823,30.2883103 L11.7572211,30.2264651 C11.7693461,30.2003333 11.7769804,30.187703 11.7756331,30.1942359 L11.7841655,30.1929293 C11.8061701,30.1907517 11.8016794,30.2116571 11.7949433,30.135875 C11.7944942,30.0892733 11.8200914,30.0958063 11.8380543,30.1027748 C11.9081098,30.121067 11.9786143,30.1402303 12.050466,30.1593936 C12.1429751,30.18117 12.2372805,30.1964136 12.3279933,30.2007689 C12.6374048,30.2142703 13.1848251,30.3444935 13.576417,30.3728029 C13.8000555,30.3880465 14.2158974,30.4529403 14.385198,30.6624299 C14.4821979,30.6123441 14.5212672,30.5927453 14.5800958,30.5631293 C14.6259013,30.6027624 14.6586837,30.6315074 14.6923642,30.6615589 L14.7287391,30.7059829 C15.0067155,30.7800229 15.1809559,30.8575471 15.3210668,30.9363779 L15.831214,29.2421688 C15.3875296,29.1289312 14.4678275,28.9037625 14.3946286,28.8933098" id="Fill-6" fill="#000000"></path>
-                    <path d="M36.9434618,15.006852 C36.7071984,14.9659508 36.4722648,14.9259018 36.2324552,14.8850006 C35.9802341,14.8364305 35.561343,14.6762343 35.5852796,14.8095891 C35.5870527,14.8232228 35.3733961,14.7870082 35.2523832,14.7563324 C34.9806581,14.6800688 34.7036137,14.6033791 34.4159309,14.523281 C34.3405748,14.5335063 34.2603428,14.5181683 34.1876463,14.5326542 C34.1849867,14.5335063 34.1907492,14.5113515 34.1885329,14.5100733 L33.6761116,14.3554158 C33.6007556,14.3311307 33.652175,14.2126878 33.5351515,14.1266249 C33.3157324,13.9660027 32.8640393,13.8121973 32.4783935,13.7734264 C31.9624261,13.7214478 31.3844008,13.5412271 30.8396208,13.4023336 C30.6006978,13.34226 30.3803921,13.2860209 30.1857961,13.2613098 C30.1237382,13.2544929 30.0590207,13.246824 29.9987358,13.239155 C29.9903137,13.215296 30.0550312,13.2054968 30.1126564,13.1952715 C29.7850792,13.1130431 29.5780717,13.0303887 29.4255865,12.9554032 C29.2646791,12.8953296 29.1006689,12.8433511 28.7589069,12.9528469 C28.5718466,13.0180331 28.3985277,13.1245465 28.2562377,13.2570493 C28.1112881,13.3835872 28.0226339,13.5672164 27.9180219,13.7363597 C27.818286,13.9723935 27.7203231,14.2050188 27.6228035,14.43594 C27.5150886,14.7064841 27.3741285,15.1176259 27.3816641,15.2262697 C27.3976218,15.4546345 27.2593213,15.8048506 27.1644613,16.1277994 C27.1338756,16.2377212 27.1019601,16.3480692 27.0682715,16.4665121 C27.0208415,16.5432018 26.9742981,16.6198914 26.9295277,16.6935987 C26.8953959,16.7051022 26.8568313,16.7187359 26.8062984,16.735352 C26.8116176,16.7869045 26.7708367,16.8678547 26.745127,16.9577521 C26.6954807,17.0395544 26.7597549,17.1648142 26.5757975,17.1984724 L26.7575386,16.7609152 C26.4955655,16.9828892 26.5421089,17.0003574 26.4250854,17.5026748 C26.3306687,17.6509415 26.2406847,17.7915392 26.1449381,17.9432144 C26.0917456,18.1102274 26.0398829,18.2712757 25.9924529,18.4195424 C25.825783,19.0011058 25.6028178,19.5865036 25.3240003,20.1812747 C25.2925281,20.2481651 25.2637155,20.3363582 25.2437683,20.405805 L24.9343652,21.4743478 C24.8616687,21.5599846 24.7863127,21.6498819 24.7096268,21.7406313 C24.4729201,22.015436 24.5389675,22.2731985 24.3709678,22.5987036 C24.2787674,22.5292568 24.1648468,22.6438653 23.9848788,23.1985873 C23.8727312,23.5449689 23.689217,23.93353 23.5597819,24.2961017 C23.5154548,24.4196573 23.5083625,24.5308573 23.4910749,24.6671945 C23.4312333,24.7166167 23.3824735,24.7217294 23.3585369,24.6539868 C23.2011757,24.9040804 23.0721839,25.083449 22.9502844,25.3109617 C22.8594138,25.4826614 22.7592346,25.7229557 22.6936305,25.9180883 C22.5531136,26.3305083 22.4400795,26.7344072 22.2029295,27.1174296 C22.0570934,27.6747079 21.6789833,28.4339356 21.7117853,28.8395388 C21.7140017,28.8723449 21.7153315,28.9051511 21.7140017,28.9426438 C21.614709,29.063217 21.5238384,29.1364982 21.4418333,29.1356461 C21.2813692,29.4718025 21.124008,29.7956034 20.9693065,30.1202563 C20.9453698,30.1701046 20.9475862,30.1607314 20.9475862,30.1607314 L20.9396073,30.1607314 C20.9369477,30.1615835 20.9356179,30.1615835 20.9356179,30.1641399 C20.9365044,30.1684004 20.9444833,30.1820341 20.9551218,30.2199529 C20.9675334,30.2796004 20.9302986,30.2663928 20.9094649,30.2578717 C20.8939504,30.2544633 20.9125678,30.2612801 20.8655811,30.2536111 C20.7915548,30.2386993 20.7188584,30.228474 20.6470485,30.2250655 C20.3416348,30.2122839 19.8469444,29.9374793 19.4595256,29.9102118 C19.2374469,29.8952999 18.8283078,29.8318179 18.6611946,29.6277382 C18.5650048,29.6763083 18.525997,29.6954807 18.4679285,29.7240263 C18.4240447,29.6856815 18.3907993,29.6571359 18.3571107,29.6285903 L18.3212058,29.5842807 C17.5401624,29.380201 17.5441518,29.285617 16.8353616,29.0772768 C16.7453775,29.0500093 16.6137261,28.9924921 16.5782644,28.9907879 C16.3920906,28.9818407 16.0888933,28.7811694 15.8783396,28.7402683 C15.8699174,28.7368598 15.8663712,28.7355817 15.8606087,28.7325993 L15.35395,30.403156 C15.4692005,30.4610993 15.6066145,30.5211729 15.7719545,30.5859331 C16.1740013,30.7418687 16.4882804,30.815576 17.0547807,30.981737 C17.166485,31.0145431 18.5149152,31.4908712 18.6075588,31.5040789 C18.8442655,31.5385892 19.0805289,31.5748038 19.3212251,31.6105923 C19.574776,31.6536237 19.99677,31.8048728 19.9701737,31.671944 C19.9675141,31.6578843 20.1829438,31.6898383 20.3044,31.71881 C20.4546689,31.7567287 20.6044945,31.7950736 20.7649586,31.8364008 C21.0349106,31.8909357 21.3199338,31.9258721 21.5952051,31.8227671 C21.6851891,31.7597111 21.7942337,31.6987854 21.8562916,31.6140007 C21.8580647,31.6105923 21.8735792,31.6297647 21.8757956,31.6272084 C21.8757956,31.6272084 22.0522174,31.5168605 22.1639217,31.3511256 C22.2250931,31.2735838 22.2574519,31.1696267 22.2938001,31.1031623 C22.3274887,31.0332895 22.3496522,30.9872757 22.3496522,30.9872757 C22.5336097,30.9587301 22.5216414,30.9327408 22.6462005,30.7814917 C22.8288281,30.5838028 23.0220943,30.1624356 23.0912445,29.7947513 C23.1834449,29.3039374 23.4139458,28.7637012 23.5983465,28.2511586 C23.6781353,28.0279064 23.7534913,27.8208443 23.7929424,27.636363 C23.803581,27.5822542 23.8155493,27.5272933 23.8253012,27.4761668 C23.8487946,27.4800013 23.862536,27.5064166 23.8669687,27.5707507 C24.0389578,27.1374541 24.1573112,27.2426894 24.322208,26.8762831 C24.4937538,26.4953911 24.6759382,26.1115167 24.8275369,25.7272162 C24.9343652,25.4553939 25.0762119,25.0455302 25.068233,24.9368865 C25.0522752,24.7080957 25.1905758,24.3578795 25.2854357,24.0349307 C25.316908,23.9245828 25.3483802,23.815087 25.3820688,23.6966441 C25.4290555,23.6195283 25.475599,23.5432647 25.5203694,23.4695574 C25.5540579,23.4576279 25.5935091,23.4448463 25.6435987,23.4273781 C25.6382794,23.3762517 25.6795036,23.2953014 25.7052133,23.2054041 C25.755303,23.1236018 25.8381946,23.0554332 25.8754294,22.9651098 L25.6936883,23.402667 C25.809382,23.1240278 25.9077882,23.1627987 26.025255,22.6604814 C26.1196717,22.5117886 26.2087691,22.3716169 26.3058455,22.2199418 C26.3585947,22.0525027 26.4100142,21.8914544 26.4578874,21.7436137 C26.6254438,21.1620504 26.8470793,20.5762265 27.1267833,19.9818815 C27.157369,19.9137129 27.1852951,19.8267979 27.2061288,19.7569251 L27.5159752,18.6892345 C27.5882284,18.6023195 27.6635844,18.5124222 27.7393838,18.4229509 C27.9765337,18.146868 27.9113729,17.8895316 28.0793726,17.5640265 C28.1720162,17.6338993 28.2859368,17.5188648 28.464575,16.9641429 C28.5771659,16.6181872 28.76068,16.2292002 28.8905584,15.8666284 C28.9344422,15.7426468 28.9410913,15.6318728 28.9583789,15.4955356 C29.019107,15.4473915 29.066537,15.4418528 29.0918034,15.5087433 C29.2491646,15.2590758 29.3781565,15.0792811 29.4996127,14.8521945 C29.5585677,14.7328994 29.5403936,14.7870082 29.5465994,14.7763569 C29.5465994,14.7763569 29.5439398,14.7742266 29.5390638,14.7674098 C29.5288686,14.7524979 29.5288686,14.7260826 29.5408369,14.721396 C29.5767419,14.7239523 29.4694703,14.6971109 29.7664618,14.8232228 C30.3560122,14.9220673 31.1711875,15.2283999 31.589192,15.1666221 C31.6228806,15.1610834 31.6583423,15.157675 31.6969068,15.1568229 C31.8290016,15.2424597 31.9123365,15.3246881 31.9172125,15.403508 C32.2771485,15.5321762 32.6255595,15.6578621 32.9739705,15.7826958 C33.2771678,15.8926177 33.6136104,16.0097825 33.8410084,16.0097825 C34.1269182,16.0097825 34.5161101,16.2185488 34.8747163,16.2411297 C35.1796867,16.2615802 35.7169311,16.4004738 36.1030201,16.4362623 C36.3242123,16.4562868 36.7315783,16.5282899 36.8942588,16.7362041 C36.9908918,16.6901903 37.0307862,16.67187 37.089298,16.6441765 C37.1327385,16.6842256 37.1659839,16.7131972 37.1978994,16.7425949 L37.2324745,16.7873306 C37.5055294,16.8648723 37.6748589,16.9449704 37.8113864,17.0250685 L38.35395,15.3779448 C37.9186579,15.2590758 37.015715,15.0192075 36.9434618,15.006852" id="Fill-8" fill="#000000"></path>
-                    <g id="Group-12" transform="translate(37.063355, 0.797862)">
-                        <mask id="mask-8" fill="white">
-                            <use xlink:href="#path-7"></use>
-                        </mask>
-                        <g id="Clip-11"></g>
-                        <path d="M11.4526714,12.1706051 C11.5156714,11.9435026 11.5791,11.7168359 11.6425286,11.4875538 C11.7145286,11.244759 11.9155286,10.8511436 11.7801,10.8607333 C11.7659571,10.8616051 11.8225286,10.6562974 11.8645286,10.5407846 C11.9665286,10.2818615 12.0698143,10.0190154 12.1773857,9.74527179 C12.1748143,9.67073333 12.1975286,9.59445128 12.1898143,9.52165641 C12.1898143,9.52165641 12.2116714,9.52688718 12.2125286,9.52427179 L12.4173857,9.03824615 C12.4469571,8.96763077 12.5613857,9.02909231 12.6582429,8.92360513 C12.8399571,8.72570769 13.0371,8.2989641 13.1125286,7.9249641 C13.2141,7.42542564 13.4498143,6.87706667 13.6405286,6.35922051 C13.7245286,6.13168205 13.8012429,5.92157949 13.8441,5.73327179 C13.8561,5.67922051 13.8685286,5.62298974 13.8796714,5.57024615 C13.9015286,5.57591282 13.9148143,5.60381026 13.9169571,5.66832308 C14.0952429,5.22937436 14.2066714,5.3409641 14.3742429,4.96914359 C14.4629571,4.77342564 14.5521,4.5759641 14.6416714,4.37981026 L14.8336714,3.83798974 L14.9262429,3.56773333 C14.9356714,3.47924615 14.9455286,3.39293846 14.9335286,3.30488718 C14.9215286,3.05468205 14.8041,2.74345128 14.6198143,2.54816923 C14.4561,2.33937436 14.2015286,2.27660513 14.1171,2.25001538 C14.0202429,2.22778462 13.9143857,2.19465641 13.8029571,2.15411795 L13.6306714,2.08829744 C13.5728143,2.06475897 13.5501,2.06345128 13.5055286,2.04819487 C13.3473857,1.99719487 13.1828143,1.94357949 13.0203857,1.88952821 C12.9106714,1.8568359 12.8009571,1.82327179 12.6818143,1.78578462 C12.6055286,1.7378359 12.5301,1.69032308 12.4568143,1.64498974 C12.4461,1.61055385 12.4336714,1.57219487 12.4173857,1.52250256 C12.3655286,1.52642564 12.2853857,1.48457949 12.1953857,1.45711795 C12.1148143,1.40611795 11.9858143,1.46627179 11.9575286,1.28406667 L12.3929571,1.47411795 C12.1756714,1.2108359 12.1568143,1.25660513 11.6545286,1.12888718 C11.5075286,1.03255385 11.3691,0.940579487 11.2186714,0.842938462 C11.0515286,0.785835897 10.8908143,0.731348718 10.7433857,0.681220513 C10.4519571,0.591861538 10.1613857,0.488553846 9.8691,0.372169231 C9.77095714,0.325964103 9.45424286,0.220476923 9.20867143,0.129810256 C8.94895714,0.0108102564 8.6931,-0.0192666667 8.42738571,0.0535282051 C8.30824286,0.0827333333 8.17067143,0.154220513 8.08024286,0.230502564 C7.97224286,0.309835897 7.88695714,0.412271795 7.81238571,0.518194872 C7.75152857,0.640246154 7.69067143,0.761861538 7.61438571,0.873015385 L7.52781429,1.13411795 L7.48538571,1.26227179 L7.46138571,1.3468359 L7.37867143,1.65457949 C7.30624286,1.74088718 7.23081429,1.83024615 7.15538571,1.92134872 C6.91881429,2.19814359 6.9771,2.46273333 6.80567143,2.7914 C6.71824286,2.71729744 6.60552857,2.83237436 6.4191,3.39511795 C6.30167143,3.74775897 6.11481429,4.14093846 5.98067143,4.5084 C5.93481429,4.63350256 5.92538571,4.74770769 5.90524286,4.88588718 C5.84567143,4.93470769 5.79938571,4.93863077 5.77752857,4.86932308 C5.61938571,5.12170769 5.49038571,5.30173333 5.36695714,5.53145128 C5.27438571,5.70406667 5.17152857,5.94860513 5.10381429,6.14606667 C4.95767143,6.5649641 4.8381,6.97557949 4.60024286,7.36134872 C4.4451,7.92801538 4.06067143,8.69475897 4.08338571,9.11016923 C4.08424286,9.14460513 4.08595714,9.17860513 4.08338571,9.21609231 C3.98395714,9.3368359 3.8931,9.40963077 3.8151,9.40745128 C3.65138571,9.74657949 3.49281429,10.0748103 3.33338571,10.403041 C3.19495714,10.6889897 3.04538571,11.006759 3.02395714,11.2286308 C2.99695714,11.5076051 2.75095714,11.8680923 2.69395714,12.2172462 C2.64381429,12.5132205 2.31295714,12.9630667 2.24095714,13.3370667 C2.19895714,13.5519641 2.08795714,13.9442718 1.8651,14.0815795 C1.90195714,14.1818359 1.91567143,14.2210667 1.93795714,14.2816564 C1.8951,14.3208872 1.86252857,14.3487846 1.82952857,14.3784256 L1.78152857,14.4071949 C1.74295714,14.4996051 1.70995714,14.5793744 1.6791,14.6517333 C1.66152857,14.6900923 1.66324286,14.6796308 1.65424286,14.6927077 C1.64138571,14.7062205 1.6281,14.7114513 1.61352857,14.7123231 C1.5831,14.7114513 1.55267143,14.6940154 1.52952857,14.6822462 C1.52181429,14.6783231 1.51667143,14.6552205 1.51452857,14.661759 C1.54967143,14.6953231 1.39667143,14.6286308 1.28181429,14.5693487 C1.16095714,14.508759 1.03881429,14.4442462 0.937242857,14.4202718 C0.929528571,14.4167846 0.9261,14.415041 0.920528571,14.4137333 L0.393385714,16.1102462 C0.503528571,16.1725795 0.634671429,16.2375282 0.793242857,16.3064 C0.916671429,16.3778872 1.33752857,16.4877333 1.66881429,16.5744769 C2.00738571,16.5958359 2.42995714,16.5051692 2.78567143,16.1442462 C2.80195714,16.1255026 2.84095714,16.0823487 2.89624286,16.0178359 C2.9451,15.9467846 2.99524286,15.8378103 3.06124286,15.7205538 C3.12252857,15.6046051 3.19238571,15.4742718 3.26481429,15.3356564 C3.30467143,15.2554513 3.34667143,15.1704513 3.38867143,15.0854513 C3.55495714,14.7471949 3.71952857,14.4102462 3.73152857,14.3662205 C3.79538571,14.1391179 3.85795714,13.9128872 3.92138571,13.6827333 C3.99467143,13.4403744 4.19481429,13.0476308 4.05852857,13.0559128 C4.04481429,13.0572205 4.10181429,12.8514769 4.14424286,12.7364 C4.24581429,12.4766051 4.34995714,12.2155026 4.45752857,11.941759 C4.4541,11.8667846 4.47767143,11.7905026 4.46952857,11.7168359 L4.49352857,11.7211949 L4.69752857,11.2351692 C4.86852857,11.2247077 4.84152857,11.2247077 4.93967143,11.1196564 C5.12052857,10.9226308 5.31767143,10.4945795 5.3931,10.1205795 C5.49424286,9.62147692 5.72952857,9.07398974 5.92067143,8.55527179 C6.00338571,8.32860513 6.08138571,8.11806667 6.12424286,7.92975897 C6.13624286,7.87527179 6.14781429,7.81904103 6.15938571,7.76629744 C6.18167143,7.77109231 6.19452857,7.79942564 6.19667143,7.86481026 C6.37495714,7.42498974 6.48595714,7.53701538 6.65481429,7.16606667 C6.82924286,6.77942564 7.01481429,6.39191282 7.17124286,6.00222051 C7.28181429,5.72716923 7.42795714,5.31175897 7.42324286,5.20016923 C7.41338571,4.96522051 7.5561,4.6104 7.6551,4.28216923 C7.68767143,4.17057949 7.7211,4.05855385 7.7571,3.93824615 C7.80381429,3.86065641 7.85095714,3.78393846 7.89595714,3.7094 C7.92895714,3.69893846 7.9671,3.68586154 8.01638571,3.66973333 C8.01252857,3.61698974 8.0541,3.53460513 8.08195714,3.44393846 C8.13167143,3.36198974 8.21352857,3.29311795 8.25167143,3.20157949 L8.06524286,3.64488718 C8.18352857,3.36329744 8.27867143,3.40514359 8.40424286,2.89470769 C8.49852857,2.74475897 8.58852857,2.6039641 8.68538571,2.45009231 C8.74067143,2.2809641 8.7951,2.11793846 8.84438571,1.96668205 L8.86752857,1.88778462 L8.86667143,1.86947692 L8.86667143,1.83198974 C8.86624286,1.77314359 8.88638571,1.69337436 8.95238571,1.68160513 C9.02352857,1.67157949 9.05352857,1.71037436 9.14524286,1.75657949 C9.21252857,1.78970769 9.30038571,1.81978462 9.36938571,1.84070769 L10.4369571,2.17155385 C10.5222429,2.24522051 10.6109571,2.32150256 10.6996714,2.39822051 C10.9709571,2.6384 11.2306714,2.57998974 11.5551,2.75391282 C11.4826714,2.8419641 11.5953857,2.95704103 12.1486714,3.14752821 C12.3213857,3.20724615 12.5043857,3.28352821 12.6903857,3.36416923 L12.9676714,3.48186154 C13.0332429,3.51019487 13.0015286,3.49537436 13.0225286,3.50234872 L13.0499571,3.50845128 C13.0739571,3.51368205 13.1219571,3.48970769 13.1832429,3.4879641 C13.1626714,3.52370769 13.1215286,3.54768205 13.0688143,3.57252821 C13.0482429,3.63442564 12.9749571,3.66145128 12.9496714,3.66014359 C12.9398143,3.66101538 12.9359571,3.65927179 12.9359571,3.65927179 C12.9111,3.71593846 12.8532429,3.8628359 12.8236714,3.95045128 C12.6779571,4.36934872 12.5583857,4.7799641 12.3201,5.16616923 C12.1653857,5.7324 11.7809571,6.50001538 11.8028143,6.91455385 C11.8045286,6.94855385 11.8058143,6.98342564 11.8036714,7.02047692 C11.7051,7.14165641 11.6142429,7.21532308 11.5353857,7.2114 C11.3716714,7.5509641 11.2126714,7.87963077 11.0541,8.20786154 C10.9156714,8.49381026 10.7665286,8.81070769 10.7455286,9.03345128 C10.7172429,9.31242564 10.4716714,9.67334872 10.4138143,10.0216308 C10.3653857,10.318041 10.1738143,10.8289128 10.1026714,11.2029128 C10.0611,11.4178103 9.94967143,11.8105538 9.72681429,11.9474256 C9.76367143,12.0476821 9.77781429,12.0877846 9.8001,12.1479385 C9.75595714,12.1867333 9.72381429,12.2155026 9.69081429,12.2442718 L9.64324286,12.273041 C9.5391,12.5324 9.44352857,12.6901949 9.34967143,12.8161692 L10.9465286,13.5136051 C11.1072429,13.0990667 11.4333857,12.2399128 11.4526714,12.1706051" id="Fill-10" fill="#000000" mask="url(#mask-8)"></path>
-                    </g>
-                    <path d="M28.9399052,31.5750251 C28.9981283,31.3455133 29.0554888,31.1160015 29.1150058,30.8825402 C29.1814233,30.6376691 29.3746378,30.2356943 29.2370587,30.2492983 C29.2236889,30.2497371 29.2758741,30.0417283 29.3159834,29.9245588 C29.411728,29.6621343 29.5091979,29.3948825 29.6114118,29.1166598 C29.6058051,29.0416186 29.6282318,28.9643833 29.6183123,28.8906587 C29.6170184,28.8884645 29.6398764,28.8959247 29.6411703,28.8932917 L29.8352473,28.3996 C29.8632807,28.326753 29.9792956,28.385996 30.0754716,28.2771644 C30.2531599,28.073544 30.4407677,27.6390953 30.5084791,27.2603789 C30.5981858,26.7557163 30.82159,26.1992708 31.0010035,25.6713498 C31.0794969,25.4413992 31.1523836,25.2281244 31.191199,25.0381079 C31.2015498,24.9823756 31.2127631,24.9257656 31.2226826,24.8726663 C31.244678,24.8766159 31.2589103,24.9051403 31.2632232,24.9700882 C31.4301294,24.5242297 31.5461444,24.6326225 31.7052876,24.2552226 C31.8721938,23.8624634 32.0494509,23.4670712 32.1973807,23.071679 C32.3021823,22.7917009 32.4388988,22.3695396 32.431567,22.2576362 C32.423804,22.1400278 32.4535624,21.9903844 32.497122,21.82977 L32.5316245,21.7064568 C32.5406815,21.6726663 32.5367999,21.670911 32.5411128,21.652041 L32.5549138,21.5511085 C32.5609517,21.5032752 32.5730276,21.4510536 32.6062364,21.4067311 C32.643758,21.4001485 32.6817108,21.4001485 32.7175072,21.4102418 C32.733896,21.4378885 32.7537349,21.4694848 32.7731427,21.514685 C32.7791806,21.4870383 32.8080765,21.495815 32.8330909,21.4944985 C32.8524986,21.5160015 32.9064089,21.4212127 32.8995084,21.5827047 C32.8995084,21.5827047 32.7929816,21.5467201 32.7916878,21.5519862 C32.8412853,21.6428254 32.8412853,21.6752994 32.8568114,21.6752994 C32.8641432,21.676177 32.8719063,21.6687168 32.8878638,21.6590624 C32.9133094,21.6524798 33.0487321,21.6752994 33.1660409,21.6915363 C33.3221651,21.77316 33.4705262,21.851273 33.6301007,21.9342132 C33.8021823,21.9745863 33.9690886,22.0132039 34.1230564,22.0487497 C34.7216763,22.1681134 35.3280593,22.3440871 35.9482433,22.5740377 C36.0189736,22.5999291 36.1099742,22.6209933 36.1807045,22.6345972 L37.2817683,22.858843 C37.3740627,22.9251074 37.4693761,22.9918106 37.5672772,23.0598304 C37.8627056,23.2739829 38.1171622,23.187532 38.4583065,23.330154 C38.3944768,23.4266982 38.5191174,23.529386 39.091429,23.664109 C39.4485308,23.7492434 39.8556613,23.9006422 40.2304457,24.0002582 C40.3581053,24.0344875 40.4715325,24.033171 40.6099742,24.0393147 C40.6638845,24.0959247 40.6720788,24.1424414 40.6065239,24.1718435 C40.873919,24.3087607 41.0503134,24.4193476 41.3090829,24.5264239 C41.4893589,24.5808397 41.7058626,24.6400827 41.9245228,24.695815 C42.1440455,24.7572522 42.3592554,24.7133685 42.5438442,24.6558808 C42.9307045,24.5286181 43.2688298,24.2692654 43.4327171,23.8879159 C43.5219926,23.7075539 43.6091116,23.5302637 43.6996809,23.3459521 C43.7466907,23.246775 43.7988758,23.1480366 43.8588241,23.0510536 C44.0153796,22.4810043 44.4018086,21.7077733 44.3798132,21.2900004 C44.378088,21.2557711 44.3767942,21.2206642 44.3798132,21.1842407 C44.4785768,21.0618051 44.57044,20.9880805 44.6489333,20.9911524 C44.814977,20.6501759 44.9741202,20.3197316 45.1332634,19.9888485 C45.2729989,19.7000937 45.4230852,19.3810591 45.4450806,19.157691 C45.4722513,18.8763965 45.7193761,18.513917 45.7775992,18.1619697 C45.8263341,17.8644382 46.1610092,17.4115583 46.2334647,17.0341584 C46.2744365,16.8182506 46.3865699,16.423736 46.6116993,16.2850635 C46.5741777,16.1850086 46.5595141,16.1446356 46.5370875,16.0836373 C46.5810783,16.0450196 46.6138557,16.0160564 46.6462019,15.9862154 L46.6949368,15.9568134 C46.9920903,15.2138622 47.0861099,15.2296603 47.3793819,14.5595561 C47.4160409,14.473544 47.4902214,14.3511085 47.4958281,14.3177569 C47.5281743,14.1356395 47.7640857,13.8626828 47.8305032,13.6608177 C47.834816,13.652041 47.8365412,13.649408 47.8395601,13.6445808 L46.2205262,12.9384919 C46.1493646,13.0446905 46.0725964,13.1719532 45.988065,13.3268627 C45.7836372,13.7016296 45.6727976,14.0009165 45.4394739,14.5376142 C45.3941892,14.643374 44.7563226,15.9102966 44.7330334,15.9989417 C44.6692036,16.227137 44.6053738,16.4553323 44.541544,16.6870383 C44.4686573,16.9305928 44.2663859,17.3273016 44.4031024,17.3176471 C44.4173347,17.3172083 44.3599742,17.5239006 44.3177085,17.6401924 C44.2150633,17.899984 44.1111243,18.1641639 44.0028724,18.4397536 C44.0071852,18.5152335 43.9817395,18.5924689 43.9899339,18.6653158 C43.9899339,18.6688265 43.9675072,18.6600498 43.9666447,18.662244 L43.7596291,19.1511085 C43.58841,19.1616406 43.6160121,19.1616406 43.518111,19.2678391 C43.3356786,19.4666323 43.13772,19.8966927 43.0605205,20.2732149 C42.9591691,20.7761222 42.7223951,21.3264239 42.5309057,21.8503954 C42.4459431,22.0781518 42.3683123,22.2896713 42.3247528,22.4788101 C42.3135394,22.5349812 42.3010322,22.5907135 42.2902502,22.6429351 C42.2682548,22.6381079 42.2544538,22.6100224 42.2522973,22.5446356 C42.2298707,22.6003679 42.2087378,22.6464458 42.1884676,22.6868188 C42.1651783,22.7333356 42.1660409,22.7162209 42.1535337,22.7302637 C42.134126,22.7425512 42.1134244,22.7451842 42.0935854,22.7443065 C42.0526136,22.7425512 42.02113,22.729386 41.9939592,22.7465007 C41.9642007,22.7649318 41.9236602,22.7627377 41.8951956,22.7447453 L41.8520673,22.7249977 L41.5825159,22.6394244 C41.3013198,22.5538512 40.8778005,22.4458973 40.7682548,22.4621343 C40.5375187,22.4959247 40.1752416,22.3853378 39.8422916,22.3160015 C39.7284331,22.2944985 39.6154371,22.271679 39.4929529,22.2471041 C39.4118718,22.2067311 39.3325159,22.1667969 39.2540225,22.1277404 C39.2397902,22.0952665 39.2234014,22.0579653 39.2022686,22.0092544 C39.150946,22.0189088 39.0668459,21.9842407 38.9745515,21.9653707 C38.8878638,21.9228035 38.8123893,21.846007 38.7188011,21.8161661 L39.173804,21.9622988 C38.8848448,21.8692654 38.9163284,21.7687717 38.400946,21.6910975 C38.2439592,21.6094738 38.0960294,21.5322385 37.9355923,21.4488594 C37.7635107,21.4089253 37.5966044,21.3703076 37.4439305,21.334323 C36.844448,21.2145204 36.2372025,21.0394244 35.617881,20.8103515 C35.5471507,20.7840213 35.4561501,20.7625182 35.3854198,20.7475978 L34.2847873,20.5237909 C34.1920616,20.4597207 34.0945918,20.3912621 33.9988471,20.3236812 C33.8509172,20.2166049 33.7133382,20.1850086 33.5697211,20.1617503 C33.4938155,20.1494628 33.4144595,20.1358589 33.3351036,20.1222549 C33.2057188,20.0985577 33.07159,20.0678391 32.9223663,20.0213224 C32.9521248,19.9730503 32.9068402,19.9186345 32.7196636,19.8462264 C32.5462881,19.796199 32.184011,19.7795232 31.7704112,20.0941694 C31.6431829,20.19203 31.5306182,20.3131491 31.4430679,20.458843 C31.3684561,20.6212127 31.2934129,20.7870931 31.2170759,20.9538512 C31.1230564,21.1526444 31.1062364,21.2105709 31.0669897,21.3136976 C31.0316245,21.4093641 30.9975532,21.5041529 30.9639132,21.5976252 C30.9212163,21.7253268 30.9138845,21.8394244 30.8970644,21.9789746 C30.83841,22.0298797 30.7926941,22.0355846 30.7685423,21.9662484 C30.6154371,22.2238457 30.4899339,22.4081573 30.3709,22.6429351 C30.2816245,22.8193476 30.1854486,23.0672906 30.1216188,23.2674003 C29.9853336,23.6930723 29.8749253,24.1090898 29.6441892,24.5040432 C29.5022973,25.0780421 29.1339822,25.8600498 29.1658971,26.2773838 C29.1680535,26.3111743 29.1702099,26.3458424 29.1684848,26.3827047 C29.0731714,26.5068956 28.983896,26.5832533 28.9041087,26.5823756 C28.7479845,26.9277404 28.5948793,27.2625731 28.4439305,27.5965281 C28.3110955,27.8883548 28.1687723,28.2104612 28.1523836,28.4355846 C28.131682,28.717318 27.8927516,29.0855023 27.8431542,29.4374497 C27.8008885,29.7380531 27.6210437,30.2567585 27.5576452,30.6359137 C27.5214175,30.8526993 27.4196349,31.2498468 27.1979558,31.3937854 C27.2372025,31.4934014 27.2527286,31.5328967 27.2768804,31.5934563 C27.2337522,31.6333904 27.2031312,31.6627925 27.1694911,31.6935111 L27.1220501,31.7242297 C27.0237177,31.9870931 26.930992,32.1494628 26.8395601,32.2780421 L28.4637695,32.9384919 C28.6147183,32.5185248 28.9222226,31.6456779 28.9399052,31.5750251" id="Fill-13" fill="#000000"></path>
-                    <path d="M9.25875054,51.6818507 C9.31985542,51.452102 9.38226969,51.2219132 9.44424749,50.9895237 C9.51495456,50.7439302 9.7148548,50.3442907 9.57693236,50.355294 C9.56252907,50.3570546 9.61795992,50.1475519 9.65986041,50.0313572 C9.76068345,49.7694788 9.86412528,49.5027591 9.97018588,49.225036 C9.96582125,49.1493334 9.98895381,49.0723104 9.97978808,48.9979281 C9.97935162,48.9952873 10.0024842,49.0032097 10.0024842,49.0032097 L10.2058761,48.5085017 C10.2359921,48.4363202 10.3529643,48.4970583 10.4507321,48.3896662 C10.6336103,48.1885261 10.8295823,47.7541162 10.9024717,47.3769234 C11.0002395,46.8703319 11.233311,46.315766 11.4227361,45.7884883 C11.5047912,45.5591798 11.5816088,45.3457159 11.6226363,45.1555791 C11.6339844,45.1001225 11.6466418,45.0446659 11.6571169,44.9909698 C11.679813,44.994931 11.6937798,45.0230994 11.6963986,45.0891192 C11.8722934,44.6441461 11.9875197,44.7546192 12.1542487,44.3783066 C12.3279612,43.9857092 12.5130217,43.5926717 12.6679662,43.1983138 C12.777082,42.9188302 12.9215514,42.4971841 12.9158774,42.3849505 C12.9027835,42.1472794 13.0437611,41.788132 13.1410925,41.4558327 C13.1733908,41.343159 13.206562,41.229605 13.2410426,41.1076886 C13.2890536,41.0284649 13.3353187,40.9501214 13.3807109,40.8744188 C13.4143186,40.8629754 13.4527273,40.8497714 13.5033571,40.8326063 C13.4981195,40.7793504 13.5391471,40.6966056 13.5648984,40.6037378 C13.6164011,40.520553 13.5539869,40.3898339 13.7355556,40.3577043 L13.5500587,40.8070787 C13.8119367,40.5812911 13.7656716,40.5623655 13.8874449,40.0452108 C13.9825939,39.8929253 14.0729418,39.7490022 14.1698367,39.5940759 C14.2252676,39.4219844 14.2776432,39.256495 14.3265271,39.1037693 C14.4984937,38.5060705 14.7254546,37.9035304 15.0087194,37.2935079 C15.0248685,37.2582974 15.0397083,37.2186856 15.0541116,37.1790737 L15.0720066,37.1200961 L15.0720066,37.1046915 C15.0562939,37.0078625 15.0986308,36.8278487 15.2435367,36.8146447 C15.2740891,36.8454539 15.299404,36.8806645 15.3194813,36.9114737 L15.3404316,36.9506454 C15.3570172,36.9700112 15.3356305,36.9735322 15.3818956,36.9942184 C15.418122,37.0113836 15.454785,37.0254678 15.4910114,37.0369112 C15.5630279,37.0593579 15.6341714,37.0716816 15.7070608,37.0818046 C15.8524031,37.1016105 16.0042924,37.1126138 16.1775684,37.1795138 C16.1155905,37.2776632 16.2434743,37.3780132 16.82528,37.4999297 C17.1901634,37.5773928 17.6039307,37.7195553 17.9853998,37.8115428 C18.1159023,37.8432323 18.2298193,37.838831 18.3707969,37.8410317 C18.4262278,37.8978086 18.4362664,37.9422619 18.3694875,37.9739514 C18.6396584,38.1042304 18.8343211,38.2142633 19.079177,38.3124126 C19.2616187,38.3850344 19.5173863,38.4598567 19.7216512,38.5056304 C20.1554958,38.6028995 20.5784288,38.674641 20.9921961,38.8696193 C21.5735654,38.958966 22.383205,39.2569351 22.7934806,39.1838732 C22.8275247,39.1785917 22.8611324,39.1724298 22.8986682,39.1706693 C23.0309166,39.256495 23.1147176,39.34012 23.122574,39.4206641 C23.2997781,39.4831627 23.4761093,39.5452213 23.6506947,39.6063996 C23.6773189,39.6191634 23.772468,39.6424904 23.8571419,39.6640568 L24.1120365,39.7300766 C24.2822572,39.7705687 24.457279,39.8343878 24.6209528,39.8181029 C25.2245817,39.80842 25.7906747,39.3352785 25.8731663,38.9171535 C25.888879,38.8784219 25.9015364,38.8423311 25.9159397,38.80536 C25.9486745,38.6852041 26.0049783,38.5267567 26.0455693,38.4167238 C26.0743759,38.3414613 26.1062378,38.263558 26.1367902,38.1825738 C26.2013868,38.0219258 26.2668563,37.8551159 26.2895524,37.6909468 C26.3314529,37.3898968 26.658364,36.9286388 26.7225241,36.547925 C26.7596235,36.3304999 26.8630653,35.932621 27.0874075,35.7878177 C27.0476893,35.6879078 27.0315402,35.6482959 27.0075347,35.5879979 C27.051181,35.5479459 27.0830428,35.5175768 27.1153411,35.4872078 L27.164225,35.4568387 C27.4461804,34.7042136 27.5430753,34.7182978 27.8224118,34.0382945 C27.8573289,33.9529089 27.9289089,33.8274714 27.9345829,33.7931412 C27.9625166,33.6091661 28.1947151,33.3301227 28.2566929,33.1259016 C28.261494,33.1184194 28.2632399,33.1140181 28.2658587,33.1096167 L26.6112259,32.441497 C26.5409553,32.5510897 26.4663201,32.6796082 26.3851379,32.8371753 C26.1878564,33.2178891 26.0822323,33.5206997 25.8596359,34.0651425 C25.8155531,34.1725346 25.2014491,35.4585992 25.1800624,35.5475058 C25.1207034,35.7785749 25.0617808,36.0087637 25.0032948,36.2420335 C24.93477,36.4880671 24.7405438,36.8912276 24.8784662,36.8780237 C24.892433,36.8771434 24.8400574,37.0857658 24.7994663,37.203281 C24.7165383,37.4299487 24.6331738,37.6588172 24.5454446,37.8995692 L24.5502457,37.9092521 C24.5637761,37.9449027 24.5620303,37.9757119 24.5799253,38.0219258 C24.5781794,38.0206054 24.5607209,38.0078416 24.5607209,38.0078416 C24.5607209,38.0078416 24.5406435,38.0571363 24.5004889,38.089706 C24.4625166,38.1249166 24.4123233,38.1390008 24.4123233,38.1390008 C24.3254671,37.9757119 24.3411798,38.0034402 24.2966605,37.949304 C24.2595611,37.8951679 24.2390473,37.8568764 24.2163512,37.8449929 C24.04002,37.7868955 23.8248436,37.7389211 23.6362914,37.7248369 C23.1273751,37.6825843 22.5547351,37.5100527 22.0152663,37.3775731 C21.7791396,37.3212362 21.5613444,37.2675402 21.3684276,37.246854 C21.3116873,37.2411323 21.2562565,37.2358507 21.2016985,37.2314494 C21.2043173,37.2076823 21.2300687,37.1905171 21.2946652,37.1817145 C20.8359422,37.0527559 20.93371,36.925998 20.5439482,36.7992401 C20.1389102,36.6689612 19.7303804,36.5272388 19.324033,36.4145651 C19.0368401,36.3357815 18.6056142,36.2380723 18.4956255,36.2565578 C18.2634269,36.2944092 17.8919966,36.1931789 17.5550468,36.1320006 C17.439384,36.1113144 17.3245942,36.0915085 17.2002021,36.069942 C17.1177105,36.0307703 17.0347825,35.992919 16.9566555,35.9563881 C16.9405064,35.9238183 16.9234843,35.8868473 16.9012247,35.8384328 C16.8492855,35.8485558 16.7628658,35.815546 16.6694626,35.7997012 C16.5804241,35.7583288 16.50317,35.6830663 16.4071481,35.655338 L16.8702358,35.7913387 C16.5769324,35.7046328 16.6061754,35.6038426 16.0828558,35.5378229 C16.0073476,35.5008518 15.9335853,35.4647611 15.8602595,35.4286703 C15.835381,35.414586 15.7633646,35.3868578 15.6887293,35.3569288 C15.6171493,35.3296406 15.5451329,35.3001518 15.471807,35.2715433 L15.4176856,35.2561387 C15.0955756,35.1879183 14.7948523,35.2226887 14.5473776,35.3384433 C14.3055768,35.4458354 14.0917098,35.6258492 13.9415664,35.8415137 C13.8691134,35.9533071 13.8259036,36.0941493 13.7656716,36.2173861 L13.6805612,36.4088434 C13.6500088,36.4757434 13.6225116,36.5378019 13.6142188,36.5655302 C13.5003019,36.8665803 13.373291,37.1693908 13.2314404,37.4752823 C13.1995786,37.544383 13.1698991,37.6346099 13.1498217,37.7063514 L12.830767,38.80536 C12.7574412,38.8938265 12.6828059,38.9862541 12.6068613,39.0778015 C12.3694252,39.3594858 12.4305301,39.6262055 12.2598729,39.9598253 C12.1703979,39.8867634 12.0569174,40.0047187 11.8722934,40.574249 C11.7575035,40.9303155 11.5711336,41.3295149 11.4384488,41.7031866 C11.393493,41.8299445 11.3852002,41.9448189 11.3659958,42.0847808 C11.3057639,42.1349558 11.2594988,42.1393571 11.2354933,42.0706965 C11.07793,42.3259729 10.9483004,42.5095078 10.8252177,42.7432177 C10.7318145,42.9188302 10.6318644,43.1670644 10.5637761,43.366444 C10.4201796,43.7902908 10.3036439,44.2070954 10.0653349,44.5992527 C9.91344564,45.1736245 9.53066724,45.9522173 9.55816444,46.3712226 C9.55947383,46.4055529 9.56078322,46.4403233 9.5586009,46.4777345 C9.45996017,46.6009713 9.36830286,46.6753536 9.28755713,46.6740332 C9.12519274,47.0182161 8.96632007,47.3518359 8.80919324,47.6850155 C8.67083434,47.9750622 8.52243679,48.2967984 8.50279594,48.5217057 C8.47879045,48.8042702 8.2313157,49.1704597 8.17675778,49.5238854 C8.13005619,49.8227348 7.941504,50.3420901 7.87166986,50.719723 C7.83238815,50.9375882 7.72370877,51.3341468 7.49762073,51.475429 C7.53646597,51.5762191 7.55174219,51.6162711 7.57443829,51.6765692 C7.52991902,51.7166211 7.49849365,51.7456698 7.46532244,51.776479 L7.41643853,51.8055277 C7.3500961,51.973658 7.3583889,51.9388876 7.33089171,51.9780593 C7.30994147,51.9991856 7.28768183,52.0093087 7.26585866,52.0115093 L8.51414398,53.441497 C8.60842008,53.2473989 8.72757459,53.0000449 8.85458544,52.7372864 C8.88208263,52.679189 8.92703836,52.5911627 8.94056873,52.5546317 L8.98115982,52.4459192 C9.00822055,52.3737376 9.03440836,52.3006758 9.06103262,52.231135 C9.16054628,51.9516514 9.24522018,51.7183817 9.25875054,51.6818507" id="Fill-15" fill="#000000"></path>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/public/img/zigs-top-right.svg b/public/img/zigs-top-right.svg
deleted file mode 100644
index b190b2891..000000000
--- a/public/img/zigs-top-right.svg
+++ /dev/null
@@ -1,78 +0,0 @@
-<svg width="283px" height="380px" viewBox="0 0 283 380" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <defs>
-        <polygon id="path-1" points="0.300386667 0.0423062033 51.935 0.0423062033 51.935 54.2665845 0.300386667 54.2665845"></polygon>
-        <polygon id="path-3" points="0.393385714 0.0143846154 14.9390687 0.0143846154 14.9390687 16.5774063 0.393385714 16.5774063"></polygon>
-        <polygon id="path-5" points="0.31194 0.044372859 53.9325 0.044372859 53.9325 56.9175042 0.31194 56.9175042"></polygon>
-        <polygon id="path-7" points="0.419611429 0.0152307692 15.9350066 0.0152307692 15.9350066 17.5525479 0.419611429 17.5525479"></polygon>
-        <polygon id="path-9" points="0.159067797 0.0322363636 29.9144068 0.0322363636 29.9144068 17.999935 0.159067797 17.999935"></polygon>
-        <polygon id="path-11" points="0 0.0712567146 25.9125226 0.0712567146 25.9125226 15.9319747 0 15.9319747"></polygon>
-    </defs>
-    <g id="Docs" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="Desktop-HD-Copy-4" transform="translate(-1126.000000, 0.000000)">
-            <g id="Group-8" transform="translate(1126.000000, -17.000000)">
-                <g id="Group-17-Copy-2" transform="translate(254.500000, 194.000000) rotate(87.000000) translate(-254.500000, -194.000000) translate(226.000000, 166.000000)">
-                    <g id="Group-3" transform="translate(4.560620, 0.590771)">
-                        <mask id="mask-2" fill="white">
-                            <use xlink:href="#path-1"></use>
-                        </mask>
-                        <g id="Clip-2"></g>
-                        <path d="M27.1384533,15.2482387 L27.1384533,15.2482387 L26.94692,15.1713971 L27.1384533,15.2482387 Z M51.87312,3.28178752 C51.82762,3.14720619 51.73922,3.00133739 51.6031533,2.84548352 C51.5008867,2.67660565 51.1927867,2.58674005 50.8556533,2.43045205 C50.4643533,2.16215765 50.0747867,1.89473152 49.67612,1.61992512 C49.3931533,1.52181099 49.1201533,1.42586752 48.8744533,1.35206485 C48.3843533,1.20315712 47.8942533,1.03210859 47.40112,0.83848512 L47.0314867,0.688274987 L46.9378867,0.650071253 L46.7779867,0.599277653 L46.45992,0.495519787 C46.0326533,0.352255787 45.6001867,0.207255253 45.16122,0.06095232 C44.97012,0.00668565333 44.74392,0.0813565867 44.5627867,0.15081792 C44.3361533,0.25240512 44.12382,0.39306432 43.9942533,0.580175787 L43.66622,1.28607659 L43.35292,1.97200725 C43.30482,2.08010645 43.24372,2.20600512 43.2090533,2.29804139 L43.13972,2.52248832 C43.0179533,2.66792299 42.89012,2.81726485 42.76402,2.96617259 C42.3657867,3.42548565 42.46242,3.86526272 42.1746867,4.41096832 C42.02822,4.28810859 41.83842,4.47956139 41.52252,5.41338219 C41.3244867,5.99729152 41.01032,6.65022805 40.78412,7.26018539 C40.70612,7.46856939 40.69052,7.65698325 40.6562867,7.88707392 C40.5561867,7.96782272 40.4794867,7.97650539 40.4413533,7.86059179 C40.1748533,8.27735979 39.95732,8.57734592 39.74932,8.95981739 C39.5937533,9.24547712 39.4212867,9.65226005 39.3055867,9.98003072 C39.06032,10.6746441 38.85882,11.3562334 38.4575533,11.9974483 C38.3262533,12.4667465 38.1000533,13.0198323 37.9093867,13.5425289 C37.8144867,13.803443 37.72912,14.0565427 37.6701867,14.2875017 C37.64592,14.3643433 37.66022,14.3582654 37.66672,14.3717235 L37.6892533,14.4129662 C37.7100533,14.4494334 37.7286867,14.4837299 37.7490533,14.5193289 C37.76422,14.5462451 37.7780867,14.5757662 37.7867533,14.604419 C37.7061533,14.6096286 37.6311867,14.5436403 37.54842,14.4177417 C37.5193867,14.4255561 37.4842867,14.4003763 37.46652,14.3760649 C37.4569867,14.3643433 37.4487533,14.3534899 37.4426867,14.343939 C37.4205867,14.3278761 37.4968533,14.3448073 37.2940533,14.2714387 C36.7987533,14.0856297 36.25102,13.8867966 35.8813867,13.8876649 C35.41512,13.8867966 34.78202,13.5325438 34.19572,13.4934718 C33.6995533,13.4587411 32.90222,12.9755507 32.2734533,12.9147721 C31.9137867,12.8813438 31.2477533,12.7584841 30.9842867,12.4059678 C30.8252533,12.4828094 30.7615533,12.5158035 30.66622,12.5618217 C30.59602,12.4958334 30.5422867,12.4454739 30.4889867,12.3955486 L30.4326533,12.3182729 C30.27492,12.2696499 30.1375533,12.2271049 30.0131867,12.1880329 C29.9789533,12.1767454 29.9611867,12.1684969 29.91482,12.1563411 C29.8623867,12.1437513 29.8125533,12.1324638 29.7631533,12.1203081 C29.6643533,12.0968649 29.57162,12.0742899 29.4827867,12.0525833 C29.1291867,11.9644542 28.84232,11.8850078 28.5558867,11.8059955 C28.4124533,11.7664894 28.27032,11.7278515 28.12212,11.687043 C27.9886533,11.6970281 27.84132,11.7048425 27.6805533,11.7556361 C27.5193533,11.7986153 27.3455867,11.8715497 27.1735533,11.9822537 C26.99762,12.0903529 26.84292,12.2266707 26.7059867,12.4624051 C26.5941867,12.6291123 26.4225867,12.8496521 26.3454533,12.9560147 C26.3064533,13.0515241 26.2886867,13.0962398 26.2808867,13.1231561 C26.24232,13.2677225 26.17862,13.4305225 26.1001867,13.6085171 C26.0598867,13.6953438 26.0165533,13.7878142 25.9723533,13.8837577 C25.9437533,13.9328147 25.91472,13.9844766 25.88482,14.0365726 C25.7708533,14.2310643 25.6486533,14.4298974 25.5966533,14.5974729 C25.58972,14.6078921 25.5866867,14.6152723 25.5823533,14.6248233 L25.5853867,14.6256915 C25.3314533,15.3203049 24.8170867,16.7581545 24.78762,16.8745022 C24.6935867,17.2517641 24.6021533,17.6264211 24.4942533,18.0158387 C24.3824533,18.4208851 24.0604867,19.0829385 24.2892867,19.0612318 C24.3126867,19.0594953 24.2251533,19.4028947 24.15842,19.5960841 C23.9980867,20.0276126 23.8338533,20.4695603 23.6626867,20.9280051 C23.67222,21.0526014 23.6353867,21.1802366 23.6522867,21.3009257 C23.6522867,21.3009257 23.6145867,21.2931113 23.61372,21.2965843 L23.28872,22.1110185 C23.24062,22.2304051 23.0460533,22.1327251 22.8861533,22.3120222 C22.5884533,22.6471731 22.27342,23.3643614 22.1611867,23.988211 C22.0103867,24.8208787 21.6359867,25.7386366 21.3343867,26.6090739 C21.2039533,26.9885065 21.08262,27.3410227 21.01762,27.6540329 C20.9998533,27.7469374 20.9820867,27.8381054 20.9647533,27.9271027 C20.9270533,27.9188542 20.9036533,27.8737043 20.8984533,27.765171 C20.6154867,28.5018953 20.4226533,28.3221641 20.1552867,28.9434089 L20.0499867,29.1873918 C20.0265867,29.2420926 20.0261533,29.2403561 20.02182,29.2451315 L20.0109867,29.2624969 L19.9676533,29.3271827 C19.9494533,29.3701619 19.9065533,29.4096681 19.85672,29.4044585 C19.8233533,29.4005513 19.7843533,29.4014195 19.7392867,29.4122729 C19.7158867,29.4166142 19.7184867,29.4318089 19.5789533,29.4070633 C19.4788533,29.3936051 19.40042,29.3896979 19.35492,29.3970782 C18.9705533,29.4608958 18.35782,29.2933203 17.7979533,29.1930355 C17.6072867,29.1596073 17.4170533,29.126179 17.21252,29.0905801 C17.0738533,29.0267625 16.93822,28.9638131 16.80692,28.9030345 C16.7826533,28.8496361 16.75362,28.7892915 16.7167867,28.7102793 C16.6305533,28.7263422 16.4875533,28.6738121 16.33242,28.6468958 C16.18682,28.579171 15.9844533,28.7050697 15.8990867,28.4107273 L16.66522,28.6351742 C16.2509533,28.2453225 16.22712,28.3247689 15.3608867,28.2171038 C15.1017533,28.0899027 14.8417533,27.9627017 14.57612,27.8337641 C14.28362,27.7699465 14.00022,27.7078654 13.7475867,27.6640179 C13.4949533,27.6201705 13.24232,27.5693769 12.98882,27.5151102 L12.60662,27.4278494 L11.96702,27.3119358 C11.7477533,27.2698249 11.5284867,27.2281481 11.30792,27.1864713 L10.9759867,27.1200489 C10.8689533,27.1087614 10.77362,27.1339411 10.6661533,27.1534771 C10.45772,27.2016659 10.2475533,27.2889267 10.0659867,27.4122206 C9.97455333,27.4699603 9.89048667,27.5420265 9.81638667,27.6123561 C9.73622,27.6766078 9.69895333,27.8046771 9.63698667,27.8988841 C9.53602,28.0846931 9.42378667,28.3278078 9.34058667,28.5157875 C9.24005333,28.748483 9.11308667,29.0215529 9.04158667,29.2117033 L8.90942,29.6640702 L8.64552,30.5675017 C8.52375333,30.7142387 8.39895333,30.8640147 8.27415333,31.014659 C7.88155333,31.4778793 7.98295333,31.9163539 7.70128667,32.4659667 C7.55352,32.3452777 7.36502,32.538467 7.05952,33.4757609 C6.86842,34.0614067 6.56162,34.7173822 6.34148667,35.3303785 C6.26652,35.5387625 6.25308667,35.7284787 6.22145333,35.9594377 C6.12135333,36.0401865 6.04465333,36.0488691 6.00565333,35.9338238 C5.74435333,36.354499 5.52942,36.6566558 5.32532,37.0404297 C5.17322,37.3295625 5.00552,37.7367795 4.89372,38.0662867 C4.65582,38.7630707 4.46168667,39.4468307 4.06778667,40.0928211 C3.81732,41.0357587 3.18335333,42.3160179 3.22798667,43.0054217 C3.23102,43.0614249 3.23362,43.1187305 3.22972,43.1795091 C3.06592,43.3822494 2.91425333,43.5059774 2.78122,43.5029385 C2.51168667,44.0681801 2.24952,44.6173587 1.98865333,45.1648009 C1.76028667,45.6414793 1.51415333,46.1706878 1.48165333,46.5405694 C1.44135333,47.0050921 1.03315333,47.6063667 0.94302,48.1881054 C0.930886667,48.2653811 0.85722,48.5610259 0.775753333,48.8189011 C0.687353333,49.085459 0.589853333,49.3793673 0.490186667,49.6810899 L0.33592,50.1408371 L0.300386667,50.2558825 L0.305586667,50.3592062 C0.306453333,50.4264969 0.324653333,50.5011678 0.334186667,50.5706291 C0.397886667,50.8562889 0.54522,51.1276222 0.723753333,51.2925929 C0.802186667,51.3967849 1.00715333,51.4584318 1.19088667,51.5465609 C1.37895333,51.6320851 1.57525333,51.7271603 1.76505333,51.8304841 C1.95442,51.9329395 2.13858667,52.0436435 2.30368667,52.1630302 C2.38732,52.2220723 2.46532,52.2841534 2.53768667,52.3484051 C2.61005333,52.4126569 2.62348667,52.439139 2.65945333,52.4921033 C2.82412,52.4282857 2.88998667,52.4026718 2.98922,52.3649022 C3.05378667,52.4374025 3.10232,52.491235 3.15128667,52.5463699 L3.20112,52.6266846 C3.81472,52.868931 4.11545333,53.0295603 4.40102,53.1897555 C4.54575333,53.2692019 4.68615333,53.3464777 4.85645333,53.4398163 C5.05578667,53.5405353 5.12945333,53.5839486 5.75865333,53.8513747 C5.92375333,53.9208361 6.13868667,54.0245939 6.28515333,54.093187 C6.41082,54.1196691 6.49575333,54.1361662 6.53302,54.1370345 C6.65825333,54.1392051 6.81078667,54.1635166 6.98065333,54.1995497 C7.06558667,54.2190857 7.15572,54.2394899 7.24888667,54.2607625 C7.33902,54.2703134 7.42092,54.2672745 7.51668667,54.2577235 C7.89412,54.2316755 8.30318667,54.054115 8.50078667,53.8648329 C8.51812,53.8526771 8.44315333,53.8465993 8.45528667,53.8379166 L7.42785333,52.3662046 L7.42785333,52.3653363 L8.45355333,53.8340094 C8.61475333,53.5305502 8.86262,53.1446057 9.08015333,52.7339155 C9.28598667,52.3392883 9.59452,51.8261427 9.62225333,51.6746302 C9.79342,51.2161854 9.94465333,50.8289385 9.95938667,50.7716329 C10.05992,50.3948051 10.1604533,50.0218846 10.27312,49.6337694 C10.3909867,49.2300254 10.72422,48.5727475 10.49542,48.5909811 C10.47202,48.5931518 10.5647533,48.2506206 10.6340867,48.0582995 C10.80092,47.6298099 10.9720867,47.1895987 11.1484533,46.7333246 C11.14152,46.6091625 11.1796533,46.4815273 11.16492,46.3604041 C11.1640533,46.3560627 11.2017533,46.3690867 11.2034867,46.3651795 L11.53932,45.5550867 C11.58872,45.4365683 11.7819867,45.536419 11.9440533,45.3592926 C12.2460867,45.0280489 12.57152,44.3156361 12.6919867,43.6930889 C12.8531867,42.8621577 13.23972,41.9496094 13.5525867,41.0839475 C13.6890867,40.7058174 13.8151867,40.3559059 13.8840867,40.0437641 C13.9035867,39.9512937 13.9217867,39.8596915 13.9408533,39.7711283 C13.9776867,39.7789427 14.0010867,39.8249609 14.00542,39.9334942 C14.2970533,39.2006771 14.48772,39.3834473 14.7628867,38.7648073 C14.9015533,38.4600457 15.04022,38.1531134 15.17802,37.8479177 C15.2083533,37.8045043 15.2265533,37.7641299 15.2464867,37.7146387 C15.2750867,37.6490846 15.3504867,37.6490846 15.4011867,37.6143539 C15.4180867,37.6043689 15.4310867,37.5904766 15.4414867,37.5752819 C15.46532,37.5379465 15.4947867,37.513635 15.5376867,37.4988745 C15.65772,37.5075571 15.7881533,37.5253566 15.9233533,37.5492339 C16.1950533,37.6026323 16.4875533,37.6582014 16.76792,37.7129022 C16.9585867,37.7463305 17.1483867,37.7793246 17.35422,37.8144894 C17.4915867,37.8778729 17.6276533,37.9421246 17.75852,38.0024691 C17.7836533,38.0558675 17.8126867,38.1162121 17.84952,38.1956585 C17.93532,38.1791614 18.07832,38.2312574 18.2338867,38.2581737 C18.3794867,38.3263326 18.58142,38.2013022 18.66722,38.4947763 L17.9006533,38.2707635 C18.3153533,38.6606153 18.3378867,38.5811689 19.20412,38.6888339 C19.4649867,38.816035 19.7249867,38.9432361 19.9901867,39.0721737 C20.2822533,39.1355571 20.5656533,39.1972041 20.8191533,39.2419198 C21.3222533,39.3296147 21.83012,39.4403187 22.34232,39.5731635 L22.53472,39.6243913 L22.63092,39.6508734 L22.6798867,39.6643315 L22.7613533,39.6799603 C22.98192,39.7238078 23.2037867,39.7689577 23.4260867,39.8128051 C23.64882,39.8605598 23.8732867,39.9074462 24.0981867,39.955635 C24.3334867,40.0298718 24.53282,40.0059945 24.7490533,39.9408745 C24.9457867,39.8870419 25.1676533,39.7485534 25.3058867,39.6165769 C25.37392,39.5553641 25.4280867,39.4889417 25.48312,39.4246899 L25.6135533,39.1802729 C25.6984867,39.0196435 25.78342,38.8577118 25.8878533,38.7131454 L26.04602,38.2138921 C26.0932533,38.0610771 26.1625867,37.8531273 26.1751533,37.7854025 L26.3250867,37.2014931 C26.4442533,37.0538878 26.5677533,36.9006387 26.6903867,36.7486921 C27.0773533,36.2806963 26.96902,35.8430899 27.2437533,35.2908723 C27.3936867,35.4098249 27.57872,35.2144649 27.8716533,34.2728297 C28.0540867,33.6841449 28.35352,33.0229598 28.5645533,32.408227 C28.6373533,32.1985406 28.6477533,32.0088243 28.6754867,31.7778654 C28.7751533,31.6949459 28.8522867,31.6858291 28.89302,31.7995721 C29.1482533,31.3762921 29.3588533,31.0710963 29.5577533,30.6834153 C29.7063867,30.3934142 29.8684533,29.9827241 29.9754867,29.6527827 C30.20472,28.9525257 30.3888867,28.2661609 30.7745533,27.615395 C31.0128867,26.6698526 31.6286533,25.3800425 31.5744867,24.6919411 C31.5714533,24.6359379 31.56842,24.5786323 31.57102,24.5169854 C31.7326533,24.3112062 31.8821533,24.1866099 32.0151867,24.1879123 C32.14562,23.9039891 32.2751867,23.623539 32.4025867,23.3456937 L32.5945533,22.9297939 C32.61622,22.8816051 32.6153533,22.887683 32.6153533,22.887683 L32.6244533,22.8863806 L32.6374533,22.8846441 C32.67342,22.8855123 32.66302,22.9132969 32.6508867,22.7860958 C32.6465533,22.7105566 32.6868533,22.724883 32.7158867,22.7361705 C32.7977867,22.7596137 32.8809867,22.7839251 32.9628867,22.8082366 C33.1132533,22.8468745 33.2618867,22.8763955 33.4083533,22.8863806 C33.90452,22.9198089 34.7022867,23.4034334 35.3310533,23.4637779 C35.69072,23.4972062 36.35632,23.6205001 36.6210867,23.9730163 C36.7792533,23.8948723 36.8429533,23.8640489 36.93742,23.8171625 C37.0084867,23.884019 37.0617867,23.9335102 37.1159533,23.9843038 L37.1718533,24.059843 C38.4371867,24.4353683 38.4267867,24.5955635 39.57382,24.9754302 C39.71942,25.0231849 39.9317533,25.1269427 39.9889533,25.1312841 C40.2129867,25.1499518 40.6259533,25.2641289 41.0215867,25.3830814 C41.2278533,25.4434259 41.43802,25.5042046 41.63302,25.5597737 C41.8431867,25.6374835 42.0026533,25.6123038 42.15172,25.5654174 C42.1755533,25.5619443 42.1876867,25.5597737 42.20502,25.5580371 L42.20372,25.5549982 C42.51182,25.459923 42.9286867,25.2719433 43.1873867,24.9363582 C43.40492,24.5226291 43.63502,24.0832862 43.84952,23.6760691 C43.90282,23.5749161 43.9539533,23.4763678 44.0046533,23.3799902 C44.05882,23.2771006 44.0544867,23.2597353 44.0817867,23.1980883 C44.11992,23.0973694 44.15502,23.0040307 44.1853533,22.9232819 C44.2438533,22.7622185 44.28372,22.6515145 44.2945533,22.6232958 C44.3972533,22.2490729 44.4964867,21.8761523 44.6143533,21.4889054 C44.7365533,21.0873321 45.0749867,20.4335273 44.8448867,20.4487219 C44.8223533,20.4513267 44.9176867,20.1092297 44.9891867,19.9177769 C45.1594867,19.4905897 45.3349867,19.0525491 45.5169867,18.5980115 C45.51092,18.4742835 45.5503533,18.3470825 45.53692,18.2255251 C45.5360533,18.2211838 45.5737533,18.2346419 45.5737533,18.2346419 L45.92042,17.4254174 C45.97112,17.306899 46.16352,17.4089203 46.3268867,17.2339646 C46.63282,16.9057598 46.9651867,16.1968201 47.09302,15.5755753 C47.2637533,14.7463806 47.6606867,13.8386078 47.98352,12.976419 C48.12262,12.5995913 48.2534867,12.2505481 48.3258533,11.9392745 C48.3457867,11.8476723 48.3652867,11.7565043 48.38522,11.667507 C48.42162,11.6761897 48.4445867,11.7226419 48.4484867,11.8298729 C48.7474867,11.1018313 48.9355533,11.2863379 49.2189533,10.6707369 C49.5131867,10.0299561 49.82562,9.38570219 50.08952,8.73884352 C50.27542,8.28256939 50.52242,7.59229739 50.5141867,7.40779072 C50.4972867,7.01793899 50.73822,6.42838592 50.9050533,5.88354859 C50.9336533,5.78847339 50.9626867,5.69383232 50.9912867,5.59615232 C51.0276867,5.45158592 51.06582,5.30354645 51.1043867,5.15116565 C51.1992867,4.93496725 51.2915867,4.72180779 51.38172,4.51602859 C51.4449867,4.45524992 51.51692,4.38622272 51.6100867,4.29592299 C51.60922,4.23774912 51.6304533,4.15005419 51.65862,4.04716459 C51.67422,3.99550272 51.6893867,3.94080192 51.7062867,3.88393045 C51.7023867,3.83096619 51.7006533,3.77800192 51.6906867,3.72199872 C51.6915533,3.47541099 51.45062,3.31044032 51.5489867,2.98657685 C51.5489867,2.98657685 51.7257867,3.25747605 51.7777867,3.57048619 C51.8648867,3.86005312 51.6850533,4.18174592 51.7023867,4.18218005 C52.0087533,3.75325632 51.95112,3.56050112 51.87312,3.28178752 L51.87312,3.28178752 Z" id="Fill-1" fill="#000000" mask="url(#mask-2)"></path>
-                    </g>
-                    <path d="M7.98566756,52.5664803 C7.87646126,52.8268757 7.5732071,52.9514689 7.30954566,52.8428271 L2.410925,50.8247626 C2.14726357,50.7165519 2.02239421,50.4152003 2.1320356,50.1543737 L10.9703498,29.0946787 C11.0799912,28.8342833 11.3923822,28.6864097 11.6656155,28.7644421 L20.7171213,31.3826232 C20.9903546,31.461949 21.2997,31.3119198 21.4058607,31.0506622 L28.2989104,13.9904511 C28.404201,13.7283312 28.7126761,13.5839066 28.9841691,13.6679747 L38.4181145,16.6241524 C38.6887373,16.7090827 39.0019984,16.5668137 39.1146854,16.3081428 L45.2245824,2.19203816 C45.3372694,1.93336722 45.642699,1.81179187 45.9037499,1.92388261 L50.779311,3.99411241 C51.040362,4.10577204 51.1630559,4.40841705 51.0503689,4.66708799 L42.6789008,24.0139502 C42.5666489,24.2730523 42.2533878,24.4153213 41.9823299,24.3299599 L32.6815204,21.4147384 C32.4108976,21.3298081 32.1024224,21.4742327 31.9966968,21.7354903 L25.1528117,38.6792995 C25.0475211,38.9414194 24.7377407,39.0901552 24.4649425,39.0112605 L15.3381669,36.3723858 C15.0653687,36.2926289 14.7529778,36.4413647 14.6433364,36.7017601 L7.98566756,52.5664803 Z" id="Fill-4" fill="#01D7B0"></path>
-                    <path d="M14.3946286,28.8933098 C14.1543744,28.8562898 13.9150183,28.8210119 13.6711715,28.7835564 C13.4138525,28.739568 12.9863347,28.5853906 13.0137282,28.7208402 C13.0159736,28.7352127 12.798173,28.7029835 12.6751269,28.6733675 C12.5264837,28.6380896 12.3755951,28.6006341 12.2229101,28.5631786 C12.1048039,28.5383534 11.9871467,28.5130927 11.8676932,28.4873965 C11.7473415,28.4586515 11.6292352,28.4333908 11.5106799,28.4521186 C11.4590365,28.4708464 11.4024532,28.4830412 11.3476663,28.495236 C11.2942266,28.5148348 11.2434813,28.5466285 11.2021665,28.5771155 C11.2021665,28.5771155 11.1886943,28.5579522 11.1846527,28.5579522 C11.1846527,28.5579522 11.1343565,28.5740668 11.0598103,28.5954078 C10.984366,28.6180553 10.9053291,28.6899176 10.8168617,28.7413101 C10.6466629,28.8584675 10.5528066,29.051407 10.5317001,29.0309371 C10.4769132,29.1419971 10.383955,29.03747 10.2330664,29.2243121 C10.1984877,29.2683006 10.1603165,29.3183864 10.1212471,29.3754408 L10.0184094,29.5322313 C9.97170573,29.6058358 9.9267984,29.6903285 9.88548366,29.779612 C9.80150695,29.958179 9.73190059,30.158958 9.69462751,30.3466712 C9.59448416,30.8470944 9.35378088,31.3958613 9.15978122,31.9171899 C9.07490637,32.1449718 8.99631854,32.3553324 8.95365658,32.5434811 C8.9415316,32.5987933 8.92985569,32.6541056 8.91817979,32.7072401 C8.89572612,32.7024493 8.88135578,32.6745754 8.87866134,32.6096816 C8.69678665,33.0508728 8.57868038,32.9406839 8.40713438,33.3126259 C8.22840321,33.7011181 8.03844521,34.0904813 7.87902419,34.4811511 C7.76540865,34.7568412 7.61676539,35.1749493 7.62350149,35.2851382 C7.63652461,35.5198885 7.49102487,35.8761515 7.39088152,36.2049762 C7.3576501,36.3169072 7.32441867,36.4284027 7.28804374,36.5494799 C7.23864568,36.6283107 7.19149298,36.7049638 7.14434029,36.7794394 C7.11021071,36.7911986 7.07069227,36.8047001 7.01949791,36.8212502 C7.02398864,36.8743847 6.98177575,36.9562643 6.95438228,37.0481609 C6.90228978,37.1300405 6.96650726,37.2598282 6.77969277,37.2911863 L6.97009985,36.8478175 C6.70065587,37.0695019 6.74825764,37.0886652 6.62251712,37.6008477 C6.52551729,37.7511053 6.43211004,37.8935234 6.3319667,38.0472652 C6.27628161,38.2166861 6.22149467,38.3804452 6.17119846,38.5320094 C5.99381451,39.1243293 5.75984733,39.7188268 5.46929691,40.323777 C5.43696363,40.3921551 5.40687572,40.4814386 5.38576928,40.5524299 L5.05704763,41.6403822 C4.98205239,41.7279236 4.90436271,41.8180781 4.82622395,41.9095393 C4.58237716,42.1878425 4.64569649,42.4526444 4.46921069,42.7836467 C4.37804881,42.7104777 4.26128975,42.825893 4.07133175,43.3907745 C3.95187825,43.7439888 3.76102211,44.1385784 3.6249529,44.5066007 C3.57735113,44.6324687 3.56971688,44.7457063 3.55040673,44.8855112 C3.48798554,44.9342905 3.43948563,44.9390813 3.41613382,44.8711387 C3.25312021,45.1233102 3.12064359,45.305797 2.9926577,45.5370631 C2.89835231,45.7095327 2.79416731,45.9556068 2.72501002,46.1533371 C2.57681584,46.5736229 2.45646419,46.9847626 2.2108211,47.3732547 C2.05499267,47.9407494 1.66070632,48.7116363 1.68989608,49.1262603 C1.6912433,49.1602315 1.69259052,49.1946384 1.68989608,49.2312228 C1.58795645,49.3540421 1.49410013,49.4276466 1.41147064,49.42634 C1.32569765,49.6036004 1.24935519,49.7486317 1.15909145,49.9459265 L0.977665844,50.4341548 L0.886054893,50.6802289 L0.841596637,50.8034837 L0.833064245,50.9228187 C0.817795753,51.201122 0.897281725,51.513832 1.06209162,51.743356 C1.13753594,51.8622555 1.23184133,51.9606851 1.32839209,52.0334185 C1.41820674,52.1135559 1.5601139,52.1383811 1.65486837,52.1771432 C1.78509962,52.2172119 1.9216179,52.2725241 2.06442321,52.3369825 C2.13582586,52.3700827 2.20902481,52.404054 2.2831219,52.4393319 C2.32488572,52.4563175 2.3688949,52.4746097 2.41245501,52.4920309 C2.58714452,52.5625867 2.76991735,52.6374977 2.95089389,52.664936 C3.25626373,52.7115377 3.72329995,53.043411 4.10995205,53.1126602 C4.33134519,53.1518578 4.7364093,53.2607402 4.8810109,53.4867799 C4.98384868,53.4480178 5.02516342,53.4327743 5.08578832,53.4096912 C5.12665399,53.4528086 5.1567419,53.4859088 5.18682981,53.5190091 L5.21736679,53.5673528 C5.59099577,53.7093354 5.77781026,53.8055874 5.9520507,53.8996617 C6.04096721,53.9466989 6.12808743,53.9933005 6.22823077,54.0468706 C6.28616122,54.074309 6.34813334,54.1039249 6.41549433,54.1361541 C6.54168393,54.1897242 6.67865128,54.2485207 6.83492879,54.3138501 C6.84840099,54.3177698 6.87983612,54.3251738 6.91216939,54.3334489 C7.07787744,54.3730821 7.33789087,54.4654143 7.39492318,54.4418957 C7.55030254,54.4279588 7.79100582,54.4192482 8.03081096,54.3447727 C8.26612537,54.2659419 8.49515275,54.1317988 8.60876829,53.9793636 C8.62089327,53.9684753 8.625384,53.96412 8.63346732,53.9580226 L7.33968717,52.5316641 C7.30959926,52.5390681 7.27097895,52.5408102 7.23235865,52.529922 C7.18385873,52.5190337 7.15781248,52.492902 7.12907179,52.4794006 C6.99434981,52.4236528 6.84705377,52.3626787 6.65529947,52.2842834 C6.54707281,52.2385528 5.24341304,51.6096485 5.15225116,51.5865654 C4.91738583,51.5247203 4.68341865,51.4628751 4.44585888,51.4005944 C4.19572505,51.3300387 3.78751743,51.1301307 3.79874426,51.268629 C3.80054056,51.2821304 3.58812889,51.2268182 3.46867539,51.1850074 C3.33440248,51.1349215 3.20012956,51.0857067 3.06316221,51.0356208 L2.89161621,50.9702914 L2.82066263,50.9459018 C2.77710252,50.964194 2.74297295,50.9585321 2.68773694,50.9755178 L2.7052508,50.9576611 C2.7052508,50.9576611 2.65450552,50.9376267 2.62172317,50.896687 C2.58894081,50.8566183 2.57995935,50.8052258 2.57995935,50.8052258 C2.76003774,50.7268305 2.72950076,50.7407675 2.79237102,50.6998277 C2.85434313,50.666292 2.8952088,50.6479997 2.91002822,50.6262233 L2.9154171,50.6175127 L2.94325964,50.5508767 L2.99490307,50.4075875 C3.02768542,50.3117711 3.05462982,50.214648 3.07393997,50.1205737 C3.17363424,49.6210216 3.41343938,49.0722546 3.60788811,48.550926 C3.69321204,48.3231442 3.77224894,48.112348 3.81446183,47.9237638 C3.82658681,47.8688871 3.83826271,47.8131393 3.84948954,47.7608758 C3.87194321,47.7647956 3.8872117,47.793105 3.88945707,47.8575633 C4.0704336,47.4168076 4.18853988,47.5274321 4.3614331,47.1541835 C4.53971519,46.7669979 4.7296732,46.3776347 4.88864514,45.9869649 C5.00181161,45.7104037 5.15045487,45.2931666 5.14416784,45.1821067 C5.13069565,44.9473564 5.27619539,44.5919644 5.37633874,44.2622687 C5.41001923,44.1503377 5.44280158,44.0384067 5.47917652,43.9173295 C5.52812551,43.8393698 5.57572728,43.7627166 5.62287997,43.68737 C5.65700954,43.6760463 5.69652799,43.6629804 5.74772235,43.6459947 C5.74323162,43.5937312 5.78634265,43.5118517 5.8141852,43.419955 C5.86493048,43.3372044 5.95070348,43.2675197 5.98932378,43.1764941 L5.79846763,43.6202985 C5.92016649,43.338511 6.01941169,43.3790153 6.14605036,42.8659617 C6.24349926,42.7170107 6.33600836,42.5737215 6.43525356,42.4212863 C6.49183679,42.2505588 6.54572559,42.0867997 6.59647087,41.9356711 C6.77295667,41.3429156 7.00737293,40.7484181 7.2970252,40.1439034 C7.3307057,40.0755253 7.36034454,39.9858063 7.38234913,39.9161216 L7.71017263,38.8272982 C7.7847188,38.7397569 7.8637557,38.6487312 7.9409963,38.5577056 C8.18574125,38.2798379 8.12242191,38.0150361 8.2975605,37.6849048 C8.38917145,37.7580737 8.50637958,37.6409164 8.69678665,37.0764704 C8.81489293,36.7241271 9.0070963,36.3286665 9.14316551,35.9610797 C9.18986913,35.8352118 9.19795245,35.7215386 9.21771167,35.5817337 C9.27923471,35.5333899 9.32683648,35.5277281 9.35153551,35.5974128 C9.51410004,35.3439347 9.64792389,35.1618834 9.77501163,34.9310529 C9.86976609,34.7568412 9.97305295,34.5120737 10.0426593,34.3139078 C10.1908535,33.8940576 10.3112051,33.4833534 10.5563992,33.0939902 C10.7126767,32.5264955 11.1060649,31.7556086 11.0782223,31.3405491 C11.076426,31.3065778 11.0746297,31.2726065 11.0773242,31.2355865 C11.1792638,31.1136383 11.2735692,31.0395983 11.3561987,31.041776 C11.4397263,30.871484 11.5223558,30.7033697 11.6045362,30.537433 L11.7275823,30.2883103 L11.7572211,30.2264651 C11.7693461,30.2003333 11.7769804,30.187703 11.7756331,30.1942359 L11.7841655,30.1929293 C11.8061701,30.1907517 11.8016794,30.2116571 11.7949433,30.135875 C11.7944942,30.0892733 11.8200914,30.0958063 11.8380543,30.1027748 C11.9081098,30.121067 11.9786143,30.1402303 12.050466,30.1593936 C12.1429751,30.18117 12.2372805,30.1964136 12.3279933,30.2007689 C12.6374048,30.2142703 13.1848251,30.3444935 13.576417,30.3728029 C13.8000555,30.3880465 14.2158974,30.4529403 14.385198,30.6624299 C14.4821979,30.6123441 14.5212672,30.5927453 14.5800958,30.5631293 C14.6259013,30.6027624 14.6586837,30.6315074 14.6923642,30.6615589 L14.7287391,30.7059829 C15.0067155,30.7800229 15.1809559,30.8575471 15.3210668,30.9363779 L15.831214,29.2421688 C15.3875296,29.1289312 14.4678275,28.9037625 14.3946286,28.8933098" id="Fill-6" fill="#000000"></path>
-                    <path d="M36.9434618,15.006852 C36.7071984,14.9659508 36.4722648,14.9259018 36.2324552,14.8850006 C35.9802341,14.8364305 35.561343,14.6762343 35.5852796,14.8095891 C35.5870527,14.8232228 35.3733961,14.7870082 35.2523832,14.7563324 C34.9806581,14.6800688 34.7036137,14.6033791 34.4159309,14.523281 C34.3405748,14.5335063 34.2603428,14.5181683 34.1876463,14.5326542 C34.1849867,14.5335063 34.1907492,14.5113515 34.1885329,14.5100733 L33.6761116,14.3554158 C33.6007556,14.3311307 33.652175,14.2126878 33.5351515,14.1266249 C33.3157324,13.9660027 32.8640393,13.8121973 32.4783935,13.7734264 C31.9624261,13.7214478 31.3844008,13.5412271 30.8396208,13.4023336 C30.6006978,13.34226 30.3803921,13.2860209 30.1857961,13.2613098 C30.1237382,13.2544929 30.0590207,13.246824 29.9987358,13.239155 C29.9903137,13.215296 30.0550312,13.2054968 30.1126564,13.1952715 C29.7850792,13.1130431 29.5780717,13.0303887 29.4255865,12.9554032 C29.2646791,12.8953296 29.1006689,12.8433511 28.7589069,12.9528469 C28.5718466,13.0180331 28.3985277,13.1245465 28.2562377,13.2570493 C28.1112881,13.3835872 28.0226339,13.5672164 27.9180219,13.7363597 C27.818286,13.9723935 27.7203231,14.2050188 27.6228035,14.43594 C27.5150886,14.7064841 27.3741285,15.1176259 27.3816641,15.2262697 C27.3976218,15.4546345 27.2593213,15.8048506 27.1644613,16.1277994 C27.1338756,16.2377212 27.1019601,16.3480692 27.0682715,16.4665121 C27.0208415,16.5432018 26.9742981,16.6198914 26.9295277,16.6935987 C26.8953959,16.7051022 26.8568313,16.7187359 26.8062984,16.735352 C26.8116176,16.7869045 26.7708367,16.8678547 26.745127,16.9577521 C26.6954807,17.0395544 26.7597549,17.1648142 26.5757975,17.1984724 L26.7575386,16.7609152 C26.4955655,16.9828892 26.5421089,17.0003574 26.4250854,17.5026748 C26.3306687,17.6509415 26.2406847,17.7915392 26.1449381,17.9432144 C26.0917456,18.1102274 26.0398829,18.2712757 25.9924529,18.4195424 C25.825783,19.0011058 25.6028178,19.5865036 25.3240003,20.1812747 C25.2925281,20.2481651 25.2637155,20.3363582 25.2437683,20.405805 L24.9343652,21.4743478 C24.8616687,21.5599846 24.7863127,21.6498819 24.7096268,21.7406313 C24.4729201,22.015436 24.5389675,22.2731985 24.3709678,22.5987036 C24.2787674,22.5292568 24.1648468,22.6438653 23.9848788,23.1985873 C23.8727312,23.5449689 23.689217,23.93353 23.5597819,24.2961017 C23.5154548,24.4196573 23.5083625,24.5308573 23.4910749,24.6671945 C23.4312333,24.7166167 23.3824735,24.7217294 23.3585369,24.6539868 C23.2011757,24.9040804 23.0721839,25.083449 22.9502844,25.3109617 C22.8594138,25.4826614 22.7592346,25.7229557 22.6936305,25.9180883 C22.5531136,26.3305083 22.4400795,26.7344072 22.2029295,27.1174296 C22.0570934,27.6747079 21.6789833,28.4339356 21.7117853,28.8395388 C21.7140017,28.8723449 21.7153315,28.9051511 21.7140017,28.9426438 C21.614709,29.063217 21.5238384,29.1364982 21.4418333,29.1356461 C21.2813692,29.4718025 21.124008,29.7956034 20.9693065,30.1202563 C20.9453698,30.1701046 20.9475862,30.1607314 20.9475862,30.1607314 L20.9396073,30.1607314 C20.9369477,30.1615835 20.9356179,30.1615835 20.9356179,30.1641399 C20.9365044,30.1684004 20.9444833,30.1820341 20.9551218,30.2199529 C20.9675334,30.2796004 20.9302986,30.2663928 20.9094649,30.2578717 C20.8939504,30.2544633 20.9125678,30.2612801 20.8655811,30.2536111 C20.7915548,30.2386993 20.7188584,30.228474 20.6470485,30.2250655 C20.3416348,30.2122839 19.8469444,29.9374793 19.4595256,29.9102118 C19.2374469,29.8952999 18.8283078,29.8318179 18.6611946,29.6277382 C18.5650048,29.6763083 18.525997,29.6954807 18.4679285,29.7240263 C18.4240447,29.6856815 18.3907993,29.6571359 18.3571107,29.6285903 L18.3212058,29.5842807 C17.5401624,29.380201 17.5441518,29.285617 16.8353616,29.0772768 C16.7453775,29.0500093 16.6137261,28.9924921 16.5782644,28.9907879 C16.3920906,28.9818407 16.0888933,28.7811694 15.8783396,28.7402683 C15.8699174,28.7368598 15.8663712,28.7355817 15.8606087,28.7325993 L15.35395,30.403156 C15.4692005,30.4610993 15.6066145,30.5211729 15.7719545,30.5859331 C16.1740013,30.7418687 16.4882804,30.815576 17.0547807,30.981737 C17.166485,31.0145431 18.5149152,31.4908712 18.6075588,31.5040789 C18.8442655,31.5385892 19.0805289,31.5748038 19.3212251,31.6105923 C19.574776,31.6536237 19.99677,31.8048728 19.9701737,31.671944 C19.9675141,31.6578843 20.1829438,31.6898383 20.3044,31.71881 C20.4546689,31.7567287 20.6044945,31.7950736 20.7649586,31.8364008 C21.0349106,31.8909357 21.3199338,31.9258721 21.5952051,31.8227671 C21.6851891,31.7597111 21.7942337,31.6987854 21.8562916,31.6140007 C21.8580647,31.6105923 21.8735792,31.6297647 21.8757956,31.6272084 C21.8757956,31.6272084 22.0522174,31.5168605 22.1639217,31.3511256 C22.2250931,31.2735838 22.2574519,31.1696267 22.2938001,31.1031623 C22.3274887,31.0332895 22.3496522,30.9872757 22.3496522,30.9872757 C22.5336097,30.9587301 22.5216414,30.9327408 22.6462005,30.7814917 C22.8288281,30.5838028 23.0220943,30.1624356 23.0912445,29.7947513 C23.1834449,29.3039374 23.4139458,28.7637012 23.5983465,28.2511586 C23.6781353,28.0279064 23.7534913,27.8208443 23.7929424,27.636363 C23.803581,27.5822542 23.8155493,27.5272933 23.8253012,27.4761668 C23.8487946,27.4800013 23.862536,27.5064166 23.8669687,27.5707507 C24.0389578,27.1374541 24.1573112,27.2426894 24.322208,26.8762831 C24.4937538,26.4953911 24.6759382,26.1115167 24.8275369,25.7272162 C24.9343652,25.4553939 25.0762119,25.0455302 25.068233,24.9368865 C25.0522752,24.7080957 25.1905758,24.3578795 25.2854357,24.0349307 C25.316908,23.9245828 25.3483802,23.815087 25.3820688,23.6966441 C25.4290555,23.6195283 25.475599,23.5432647 25.5203694,23.4695574 C25.5540579,23.4576279 25.5935091,23.4448463 25.6435987,23.4273781 C25.6382794,23.3762517 25.6795036,23.2953014 25.7052133,23.2054041 C25.755303,23.1236018 25.8381946,23.0554332 25.8754294,22.9651098 L25.6936883,23.402667 C25.809382,23.1240278 25.9077882,23.1627987 26.025255,22.6604814 C26.1196717,22.5117886 26.2087691,22.3716169 26.3058455,22.2199418 C26.3585947,22.0525027 26.4100142,21.8914544 26.4578874,21.7436137 C26.6254438,21.1620504 26.8470793,20.5762265 27.1267833,19.9818815 C27.157369,19.9137129 27.1852951,19.8267979 27.2061288,19.7569251 L27.5159752,18.6892345 C27.5882284,18.6023195 27.6635844,18.5124222 27.7393838,18.4229509 C27.9765337,18.146868 27.9113729,17.8895316 28.0793726,17.5640265 C28.1720162,17.6338993 28.2859368,17.5188648 28.464575,16.9641429 C28.5771659,16.6181872 28.76068,16.2292002 28.8905584,15.8666284 C28.9344422,15.7426468 28.9410913,15.6318728 28.9583789,15.4955356 C29.019107,15.4473915 29.066537,15.4418528 29.0918034,15.5087433 C29.2491646,15.2590758 29.3781565,15.0792811 29.4996127,14.8521945 C29.5585677,14.7328994 29.5403936,14.7870082 29.5465994,14.7763569 C29.5465994,14.7763569 29.5439398,14.7742266 29.5390638,14.7674098 C29.5288686,14.7524979 29.5288686,14.7260826 29.5408369,14.721396 C29.5767419,14.7239523 29.4694703,14.6971109 29.7664618,14.8232228 C30.3560122,14.9220673 31.1711875,15.2283999 31.589192,15.1666221 C31.6228806,15.1610834 31.6583423,15.157675 31.6969068,15.1568229 C31.8290016,15.2424597 31.9123365,15.3246881 31.9172125,15.403508 C32.2771485,15.5321762 32.6255595,15.6578621 32.9739705,15.7826958 C33.2771678,15.8926177 33.6136104,16.0097825 33.8410084,16.0097825 C34.1269182,16.0097825 34.5161101,16.2185488 34.8747163,16.2411297 C35.1796867,16.2615802 35.7169311,16.4004738 36.1030201,16.4362623 C36.3242123,16.4562868 36.7315783,16.5282899 36.8942588,16.7362041 C36.9908918,16.6901903 37.0307862,16.67187 37.089298,16.6441765 C37.1327385,16.6842256 37.1659839,16.7131972 37.1978994,16.7425949 L37.2324745,16.7873306 C37.5055294,16.8648723 37.6748589,16.9449704 37.8113864,17.0250685 L38.35395,15.3779448 C37.9186579,15.2590758 37.015715,15.0192075 36.9434618,15.006852" id="Fill-8" fill="#000000"></path>
-                    <g id="Group-12" transform="translate(37.063355, 0.797862)">
-                        <mask id="mask-4" fill="white">
-                            <use xlink:href="#path-3"></use>
-                        </mask>
-                        <g id="Clip-11"></g>
-                        <path d="M11.4526714,12.1706051 C11.5156714,11.9435026 11.5791,11.7168359 11.6425286,11.4875538 C11.7145286,11.244759 11.9155286,10.8511436 11.7801,10.8607333 C11.7659571,10.8616051 11.8225286,10.6562974 11.8645286,10.5407846 C11.9665286,10.2818615 12.0698143,10.0190154 12.1773857,9.74527179 C12.1748143,9.67073333 12.1975286,9.59445128 12.1898143,9.52165641 C12.1898143,9.52165641 12.2116714,9.52688718 12.2125286,9.52427179 L12.4173857,9.03824615 C12.4469571,8.96763077 12.5613857,9.02909231 12.6582429,8.92360513 C12.8399571,8.72570769 13.0371,8.2989641 13.1125286,7.9249641 C13.2141,7.42542564 13.4498143,6.87706667 13.6405286,6.35922051 C13.7245286,6.13168205 13.8012429,5.92157949 13.8441,5.73327179 C13.8561,5.67922051 13.8685286,5.62298974 13.8796714,5.57024615 C13.9015286,5.57591282 13.9148143,5.60381026 13.9169571,5.66832308 C14.0952429,5.22937436 14.2066714,5.3409641 14.3742429,4.96914359 C14.4629571,4.77342564 14.5521,4.5759641 14.6416714,4.37981026 L14.8336714,3.83798974 L14.9262429,3.56773333 C14.9356714,3.47924615 14.9455286,3.39293846 14.9335286,3.30488718 C14.9215286,3.05468205 14.8041,2.74345128 14.6198143,2.54816923 C14.4561,2.33937436 14.2015286,2.27660513 14.1171,2.25001538 C14.0202429,2.22778462 13.9143857,2.19465641 13.8029571,2.15411795 L13.6306714,2.08829744 C13.5728143,2.06475897 13.5501,2.06345128 13.5055286,2.04819487 C13.3473857,1.99719487 13.1828143,1.94357949 13.0203857,1.88952821 C12.9106714,1.8568359 12.8009571,1.82327179 12.6818143,1.78578462 C12.6055286,1.7378359 12.5301,1.69032308 12.4568143,1.64498974 C12.4461,1.61055385 12.4336714,1.57219487 12.4173857,1.52250256 C12.3655286,1.52642564 12.2853857,1.48457949 12.1953857,1.45711795 C12.1148143,1.40611795 11.9858143,1.46627179 11.9575286,1.28406667 L12.3929571,1.47411795 C12.1756714,1.2108359 12.1568143,1.25660513 11.6545286,1.12888718 C11.5075286,1.03255385 11.3691,0.940579487 11.2186714,0.842938462 C11.0515286,0.785835897 10.8908143,0.731348718 10.7433857,0.681220513 C10.4519571,0.591861538 10.1613857,0.488553846 9.8691,0.372169231 C9.77095714,0.325964103 9.45424286,0.220476923 9.20867143,0.129810256 C8.94895714,0.0108102564 8.6931,-0.0192666667 8.42738571,0.0535282051 C8.30824286,0.0827333333 8.17067143,0.154220513 8.08024286,0.230502564 C7.97224286,0.309835897 7.88695714,0.412271795 7.81238571,0.518194872 C7.75152857,0.640246154 7.69067143,0.761861538 7.61438571,0.873015385 L7.52781429,1.13411795 L7.48538571,1.26227179 L7.46138571,1.3468359 L7.37867143,1.65457949 C7.30624286,1.74088718 7.23081429,1.83024615 7.15538571,1.92134872 C6.91881429,2.19814359 6.9771,2.46273333 6.80567143,2.7914 C6.71824286,2.71729744 6.60552857,2.83237436 6.4191,3.39511795 C6.30167143,3.74775897 6.11481429,4.14093846 5.98067143,4.5084 C5.93481429,4.63350256 5.92538571,4.74770769 5.90524286,4.88588718 C5.84567143,4.93470769 5.79938571,4.93863077 5.77752857,4.86932308 C5.61938571,5.12170769 5.49038571,5.30173333 5.36695714,5.53145128 C5.27438571,5.70406667 5.17152857,5.94860513 5.10381429,6.14606667 C4.95767143,6.5649641 4.8381,6.97557949 4.60024286,7.36134872 C4.4451,7.92801538 4.06067143,8.69475897 4.08338571,9.11016923 C4.08424286,9.14460513 4.08595714,9.17860513 4.08338571,9.21609231 C3.98395714,9.3368359 3.8931,9.40963077 3.8151,9.40745128 C3.65138571,9.74657949 3.49281429,10.0748103 3.33338571,10.403041 C3.19495714,10.6889897 3.04538571,11.006759 3.02395714,11.2286308 C2.99695714,11.5076051 2.75095714,11.8680923 2.69395714,12.2172462 C2.64381429,12.5132205 2.31295714,12.9630667 2.24095714,13.3370667 C2.19895714,13.5519641 2.08795714,13.9442718 1.8651,14.0815795 C1.90195714,14.1818359 1.91567143,14.2210667 1.93795714,14.2816564 C1.8951,14.3208872 1.86252857,14.3487846 1.82952857,14.3784256 L1.78152857,14.4071949 C1.74295714,14.4996051 1.70995714,14.5793744 1.6791,14.6517333 C1.66152857,14.6900923 1.66324286,14.6796308 1.65424286,14.6927077 C1.64138571,14.7062205 1.6281,14.7114513 1.61352857,14.7123231 C1.5831,14.7114513 1.55267143,14.6940154 1.52952857,14.6822462 C1.52181429,14.6783231 1.51667143,14.6552205 1.51452857,14.661759 C1.54967143,14.6953231 1.39667143,14.6286308 1.28181429,14.5693487 C1.16095714,14.508759 1.03881429,14.4442462 0.937242857,14.4202718 C0.929528571,14.4167846 0.9261,14.415041 0.920528571,14.4137333 L0.393385714,16.1102462 C0.503528571,16.1725795 0.634671429,16.2375282 0.793242857,16.3064 C0.916671429,16.3778872 1.33752857,16.4877333 1.66881429,16.5744769 C2.00738571,16.5958359 2.42995714,16.5051692 2.78567143,16.1442462 C2.80195714,16.1255026 2.84095714,16.0823487 2.89624286,16.0178359 C2.9451,15.9467846 2.99524286,15.8378103 3.06124286,15.7205538 C3.12252857,15.6046051 3.19238571,15.4742718 3.26481429,15.3356564 C3.30467143,15.2554513 3.34667143,15.1704513 3.38867143,15.0854513 C3.55495714,14.7471949 3.71952857,14.4102462 3.73152857,14.3662205 C3.79538571,14.1391179 3.85795714,13.9128872 3.92138571,13.6827333 C3.99467143,13.4403744 4.19481429,13.0476308 4.05852857,13.0559128 C4.04481429,13.0572205 4.10181429,12.8514769 4.14424286,12.7364 C4.24581429,12.4766051 4.34995714,12.2155026 4.45752857,11.941759 C4.4541,11.8667846 4.47767143,11.7905026 4.46952857,11.7168359 L4.49352857,11.7211949 L4.69752857,11.2351692 C4.86852857,11.2247077 4.84152857,11.2247077 4.93967143,11.1196564 C5.12052857,10.9226308 5.31767143,10.4945795 5.3931,10.1205795 C5.49424286,9.62147692 5.72952857,9.07398974 5.92067143,8.55527179 C6.00338571,8.32860513 6.08138571,8.11806667 6.12424286,7.92975897 C6.13624286,7.87527179 6.14781429,7.81904103 6.15938571,7.76629744 C6.18167143,7.77109231 6.19452857,7.79942564 6.19667143,7.86481026 C6.37495714,7.42498974 6.48595714,7.53701538 6.65481429,7.16606667 C6.82924286,6.77942564 7.01481429,6.39191282 7.17124286,6.00222051 C7.28181429,5.72716923 7.42795714,5.31175897 7.42324286,5.20016923 C7.41338571,4.96522051 7.5561,4.6104 7.6551,4.28216923 C7.68767143,4.17057949 7.7211,4.05855385 7.7571,3.93824615 C7.80381429,3.86065641 7.85095714,3.78393846 7.89595714,3.7094 C7.92895714,3.69893846 7.9671,3.68586154 8.01638571,3.66973333 C8.01252857,3.61698974 8.0541,3.53460513 8.08195714,3.44393846 C8.13167143,3.36198974 8.21352857,3.29311795 8.25167143,3.20157949 L8.06524286,3.64488718 C8.18352857,3.36329744 8.27867143,3.40514359 8.40424286,2.89470769 C8.49852857,2.74475897 8.58852857,2.6039641 8.68538571,2.45009231 C8.74067143,2.2809641 8.7951,2.11793846 8.84438571,1.96668205 L8.86752857,1.88778462 L8.86667143,1.86947692 L8.86667143,1.83198974 C8.86624286,1.77314359 8.88638571,1.69337436 8.95238571,1.68160513 C9.02352857,1.67157949 9.05352857,1.71037436 9.14524286,1.75657949 C9.21252857,1.78970769 9.30038571,1.81978462 9.36938571,1.84070769 L10.4369571,2.17155385 C10.5222429,2.24522051 10.6109571,2.32150256 10.6996714,2.39822051 C10.9709571,2.6384 11.2306714,2.57998974 11.5551,2.75391282 C11.4826714,2.8419641 11.5953857,2.95704103 12.1486714,3.14752821 C12.3213857,3.20724615 12.5043857,3.28352821 12.6903857,3.36416923 L12.9676714,3.48186154 C13.0332429,3.51019487 13.0015286,3.49537436 13.0225286,3.50234872 L13.0499571,3.50845128 C13.0739571,3.51368205 13.1219571,3.48970769 13.1832429,3.4879641 C13.1626714,3.52370769 13.1215286,3.54768205 13.0688143,3.57252821 C13.0482429,3.63442564 12.9749571,3.66145128 12.9496714,3.66014359 C12.9398143,3.66101538 12.9359571,3.65927179 12.9359571,3.65927179 C12.9111,3.71593846 12.8532429,3.8628359 12.8236714,3.95045128 C12.6779571,4.36934872 12.5583857,4.7799641 12.3201,5.16616923 C12.1653857,5.7324 11.7809571,6.50001538 11.8028143,6.91455385 C11.8045286,6.94855385 11.8058143,6.98342564 11.8036714,7.02047692 C11.7051,7.14165641 11.6142429,7.21532308 11.5353857,7.2114 C11.3716714,7.5509641 11.2126714,7.87963077 11.0541,8.20786154 C10.9156714,8.49381026 10.7665286,8.81070769 10.7455286,9.03345128 C10.7172429,9.31242564 10.4716714,9.67334872 10.4138143,10.0216308 C10.3653857,10.318041 10.1738143,10.8289128 10.1026714,11.2029128 C10.0611,11.4178103 9.94967143,11.8105538 9.72681429,11.9474256 C9.76367143,12.0476821 9.77781429,12.0877846 9.8001,12.1479385 C9.75595714,12.1867333 9.72381429,12.2155026 9.69081429,12.2442718 L9.64324286,12.273041 C9.5391,12.5324 9.44352857,12.6901949 9.34967143,12.8161692 L10.9465286,13.5136051 C11.1072429,13.0990667 11.4333857,12.2399128 11.4526714,12.1706051" id="Fill-10" fill="#000000" mask="url(#mask-4)"></path>
-                    </g>
-                    <path d="M28.9399052,31.5750251 C28.9981283,31.3455133 29.0554888,31.1160015 29.1150058,30.8825402 C29.1814233,30.6376691 29.3746378,30.2356943 29.2370587,30.2492983 C29.2236889,30.2497371 29.2758741,30.0417283 29.3159834,29.9245588 C29.411728,29.6621343 29.5091979,29.3948825 29.6114118,29.1166598 C29.6058051,29.0416186 29.6282318,28.9643833 29.6183123,28.8906587 C29.6170184,28.8884645 29.6398764,28.8959247 29.6411703,28.8932917 L29.8352473,28.3996 C29.8632807,28.326753 29.9792956,28.385996 30.0754716,28.2771644 C30.2531599,28.073544 30.4407677,27.6390953 30.5084791,27.2603789 C30.5981858,26.7557163 30.82159,26.1992708 31.0010035,25.6713498 C31.0794969,25.4413992 31.1523836,25.2281244 31.191199,25.0381079 C31.2015498,24.9823756 31.2127631,24.9257656 31.2226826,24.8726663 C31.244678,24.8766159 31.2589103,24.9051403 31.2632232,24.9700882 C31.4301294,24.5242297 31.5461444,24.6326225 31.7052876,24.2552226 C31.8721938,23.8624634 32.0494509,23.4670712 32.1973807,23.071679 C32.3021823,22.7917009 32.4388988,22.3695396 32.431567,22.2576362 C32.423804,22.1400278 32.4535624,21.9903844 32.497122,21.82977 L32.5316245,21.7064568 C32.5406815,21.6726663 32.5367999,21.670911 32.5411128,21.652041 L32.5549138,21.5511085 C32.5609517,21.5032752 32.5730276,21.4510536 32.6062364,21.4067311 C32.643758,21.4001485 32.6817108,21.4001485 32.7175072,21.4102418 C32.733896,21.4378885 32.7537349,21.4694848 32.7731427,21.514685 C32.7791806,21.4870383 32.8080765,21.495815 32.8330909,21.4944985 C32.8524986,21.5160015 32.9064089,21.4212127 32.8995084,21.5827047 C32.8995084,21.5827047 32.7929816,21.5467201 32.7916878,21.5519862 C32.8412853,21.6428254 32.8412853,21.6752994 32.8568114,21.6752994 C32.8641432,21.676177 32.8719063,21.6687168 32.8878638,21.6590624 C32.9133094,21.6524798 33.0487321,21.6752994 33.1660409,21.6915363 C33.3221651,21.77316 33.4705262,21.851273 33.6301007,21.9342132 C33.8021823,21.9745863 33.9690886,22.0132039 34.1230564,22.0487497 C34.7216763,22.1681134 35.3280593,22.3440871 35.9482433,22.5740377 C36.0189736,22.5999291 36.1099742,22.6209933 36.1807045,22.6345972 L37.2817683,22.858843 C37.3740627,22.9251074 37.4693761,22.9918106 37.5672772,23.0598304 C37.8627056,23.2739829 38.1171622,23.187532 38.4583065,23.330154 C38.3944768,23.4266982 38.5191174,23.529386 39.091429,23.664109 C39.4485308,23.7492434 39.8556613,23.9006422 40.2304457,24.0002582 C40.3581053,24.0344875 40.4715325,24.033171 40.6099742,24.0393147 C40.6638845,24.0959247 40.6720788,24.1424414 40.6065239,24.1718435 C40.873919,24.3087607 41.0503134,24.4193476 41.3090829,24.5264239 C41.4893589,24.5808397 41.7058626,24.6400827 41.9245228,24.695815 C42.1440455,24.7572522 42.3592554,24.7133685 42.5438442,24.6558808 C42.9307045,24.5286181 43.2688298,24.2692654 43.4327171,23.8879159 C43.5219926,23.7075539 43.6091116,23.5302637 43.6996809,23.3459521 C43.7466907,23.246775 43.7988758,23.1480366 43.8588241,23.0510536 C44.0153796,22.4810043 44.4018086,21.7077733 44.3798132,21.2900004 C44.378088,21.2557711 44.3767942,21.2206642 44.3798132,21.1842407 C44.4785768,21.0618051 44.57044,20.9880805 44.6489333,20.9911524 C44.814977,20.6501759 44.9741202,20.3197316 45.1332634,19.9888485 C45.2729989,19.7000937 45.4230852,19.3810591 45.4450806,19.157691 C45.4722513,18.8763965 45.7193761,18.513917 45.7775992,18.1619697 C45.8263341,17.8644382 46.1610092,17.4115583 46.2334647,17.0341584 C46.2744365,16.8182506 46.3865699,16.423736 46.6116993,16.2850635 C46.5741777,16.1850086 46.5595141,16.1446356 46.5370875,16.0836373 C46.5810783,16.0450196 46.6138557,16.0160564 46.6462019,15.9862154 L46.6949368,15.9568134 C46.9920903,15.2138622 47.0861099,15.2296603 47.3793819,14.5595561 C47.4160409,14.473544 47.4902214,14.3511085 47.4958281,14.3177569 C47.5281743,14.1356395 47.7640857,13.8626828 47.8305032,13.6608177 C47.834816,13.652041 47.8365412,13.649408 47.8395601,13.6445808 L46.2205262,12.9384919 C46.1493646,13.0446905 46.0725964,13.1719532 45.988065,13.3268627 C45.7836372,13.7016296 45.6727976,14.0009165 45.4394739,14.5376142 C45.3941892,14.643374 44.7563226,15.9102966 44.7330334,15.9989417 C44.6692036,16.227137 44.6053738,16.4553323 44.541544,16.6870383 C44.4686573,16.9305928 44.2663859,17.3273016 44.4031024,17.3176471 C44.4173347,17.3172083 44.3599742,17.5239006 44.3177085,17.6401924 C44.2150633,17.899984 44.1111243,18.1641639 44.0028724,18.4397536 C44.0071852,18.5152335 43.9817395,18.5924689 43.9899339,18.6653158 C43.9899339,18.6688265 43.9675072,18.6600498 43.9666447,18.662244 L43.7596291,19.1511085 C43.58841,19.1616406 43.6160121,19.1616406 43.518111,19.2678391 C43.3356786,19.4666323 43.13772,19.8966927 43.0605205,20.2732149 C42.9591691,20.7761222 42.7223951,21.3264239 42.5309057,21.8503954 C42.4459431,22.0781518 42.3683123,22.2896713 42.3247528,22.4788101 C42.3135394,22.5349812 42.3010322,22.5907135 42.2902502,22.6429351 C42.2682548,22.6381079 42.2544538,22.6100224 42.2522973,22.5446356 C42.2298707,22.6003679 42.2087378,22.6464458 42.1884676,22.6868188 C42.1651783,22.7333356 42.1660409,22.7162209 42.1535337,22.7302637 C42.134126,22.7425512 42.1134244,22.7451842 42.0935854,22.7443065 C42.0526136,22.7425512 42.02113,22.729386 41.9939592,22.7465007 C41.9642007,22.7649318 41.9236602,22.7627377 41.8951956,22.7447453 L41.8520673,22.7249977 L41.5825159,22.6394244 C41.3013198,22.5538512 40.8778005,22.4458973 40.7682548,22.4621343 C40.5375187,22.4959247 40.1752416,22.3853378 39.8422916,22.3160015 C39.7284331,22.2944985 39.6154371,22.271679 39.4929529,22.2471041 C39.4118718,22.2067311 39.3325159,22.1667969 39.2540225,22.1277404 C39.2397902,22.0952665 39.2234014,22.0579653 39.2022686,22.0092544 C39.150946,22.0189088 39.0668459,21.9842407 38.9745515,21.9653707 C38.8878638,21.9228035 38.8123893,21.846007 38.7188011,21.8161661 L39.173804,21.9622988 C38.8848448,21.8692654 38.9163284,21.7687717 38.400946,21.6910975 C38.2439592,21.6094738 38.0960294,21.5322385 37.9355923,21.4488594 C37.7635107,21.4089253 37.5966044,21.3703076 37.4439305,21.334323 C36.844448,21.2145204 36.2372025,21.0394244 35.617881,20.8103515 C35.5471507,20.7840213 35.4561501,20.7625182 35.3854198,20.7475978 L34.2847873,20.5237909 C34.1920616,20.4597207 34.0945918,20.3912621 33.9988471,20.3236812 C33.8509172,20.2166049 33.7133382,20.1850086 33.5697211,20.1617503 C33.4938155,20.1494628 33.4144595,20.1358589 33.3351036,20.1222549 C33.2057188,20.0985577 33.07159,20.0678391 32.9223663,20.0213224 C32.9521248,19.9730503 32.9068402,19.9186345 32.7196636,19.8462264 C32.5462881,19.796199 32.184011,19.7795232 31.7704112,20.0941694 C31.6431829,20.19203 31.5306182,20.3131491 31.4430679,20.458843 C31.3684561,20.6212127 31.2934129,20.7870931 31.2170759,20.9538512 C31.1230564,21.1526444 31.1062364,21.2105709 31.0669897,21.3136976 C31.0316245,21.4093641 30.9975532,21.5041529 30.9639132,21.5976252 C30.9212163,21.7253268 30.9138845,21.8394244 30.8970644,21.9789746 C30.83841,22.0298797 30.7926941,22.0355846 30.7685423,21.9662484 C30.6154371,22.2238457 30.4899339,22.4081573 30.3709,22.6429351 C30.2816245,22.8193476 30.1854486,23.0672906 30.1216188,23.2674003 C29.9853336,23.6930723 29.8749253,24.1090898 29.6441892,24.5040432 C29.5022973,25.0780421 29.1339822,25.8600498 29.1658971,26.2773838 C29.1680535,26.3111743 29.1702099,26.3458424 29.1684848,26.3827047 C29.0731714,26.5068956 28.983896,26.5832533 28.9041087,26.5823756 C28.7479845,26.9277404 28.5948793,27.2625731 28.4439305,27.5965281 C28.3110955,27.8883548 28.1687723,28.2104612 28.1523836,28.4355846 C28.131682,28.717318 27.8927516,29.0855023 27.8431542,29.4374497 C27.8008885,29.7380531 27.6210437,30.2567585 27.5576452,30.6359137 C27.5214175,30.8526993 27.4196349,31.2498468 27.1979558,31.3937854 C27.2372025,31.4934014 27.2527286,31.5328967 27.2768804,31.5934563 C27.2337522,31.6333904 27.2031312,31.6627925 27.1694911,31.6935111 L27.1220501,31.7242297 C27.0237177,31.9870931 26.930992,32.1494628 26.8395601,32.2780421 L28.4637695,32.9384919 C28.6147183,32.5185248 28.9222226,31.6456779 28.9399052,31.5750251" id="Fill-13" fill="#000000"></path>
-                    <path d="M9.25875054,51.6818507 C9.31985542,51.452102 9.38226969,51.2219132 9.44424749,50.9895237 C9.51495456,50.7439302 9.7148548,50.3442907 9.57693236,50.355294 C9.56252907,50.3570546 9.61795992,50.1475519 9.65986041,50.0313572 C9.76068345,49.7694788 9.86412528,49.5027591 9.97018588,49.225036 C9.96582125,49.1493334 9.98895381,49.0723104 9.97978808,48.9979281 C9.97935162,48.9952873 10.0024842,49.0032097 10.0024842,49.0032097 L10.2058761,48.5085017 C10.2359921,48.4363202 10.3529643,48.4970583 10.4507321,48.3896662 C10.6336103,48.1885261 10.8295823,47.7541162 10.9024717,47.3769234 C11.0002395,46.8703319 11.233311,46.315766 11.4227361,45.7884883 C11.5047912,45.5591798 11.5816088,45.3457159 11.6226363,45.1555791 C11.6339844,45.1001225 11.6466418,45.0446659 11.6571169,44.9909698 C11.679813,44.994931 11.6937798,45.0230994 11.6963986,45.0891192 C11.8722934,44.6441461 11.9875197,44.7546192 12.1542487,44.3783066 C12.3279612,43.9857092 12.5130217,43.5926717 12.6679662,43.1983138 C12.777082,42.9188302 12.9215514,42.4971841 12.9158774,42.3849505 C12.9027835,42.1472794 13.0437611,41.788132 13.1410925,41.4558327 C13.1733908,41.343159 13.206562,41.229605 13.2410426,41.1076886 C13.2890536,41.0284649 13.3353187,40.9501214 13.3807109,40.8744188 C13.4143186,40.8629754 13.4527273,40.8497714 13.5033571,40.8326063 C13.4981195,40.7793504 13.5391471,40.6966056 13.5648984,40.6037378 C13.6164011,40.520553 13.5539869,40.3898339 13.7355556,40.3577043 L13.5500587,40.8070787 C13.8119367,40.5812911 13.7656716,40.5623655 13.8874449,40.0452108 C13.9825939,39.8929253 14.0729418,39.7490022 14.1698367,39.5940759 C14.2252676,39.4219844 14.2776432,39.256495 14.3265271,39.1037693 C14.4984937,38.5060705 14.7254546,37.9035304 15.0087194,37.2935079 C15.0248685,37.2582974 15.0397083,37.2186856 15.0541116,37.1790737 L15.0720066,37.1200961 L15.0720066,37.1046915 C15.0562939,37.0078625 15.0986308,36.8278487 15.2435367,36.8146447 C15.2740891,36.8454539 15.299404,36.8806645 15.3194813,36.9114737 L15.3404316,36.9506454 C15.3570172,36.9700112 15.3356305,36.9735322 15.3818956,36.9942184 C15.418122,37.0113836 15.454785,37.0254678 15.4910114,37.0369112 C15.5630279,37.0593579 15.6341714,37.0716816 15.7070608,37.0818046 C15.8524031,37.1016105 16.0042924,37.1126138 16.1775684,37.1795138 C16.1155905,37.2776632 16.2434743,37.3780132 16.82528,37.4999297 C17.1901634,37.5773928 17.6039307,37.7195553 17.9853998,37.8115428 C18.1159023,37.8432323 18.2298193,37.838831 18.3707969,37.8410317 C18.4262278,37.8978086 18.4362664,37.9422619 18.3694875,37.9739514 C18.6396584,38.1042304 18.8343211,38.2142633 19.079177,38.3124126 C19.2616187,38.3850344 19.5173863,38.4598567 19.7216512,38.5056304 C20.1554958,38.6028995 20.5784288,38.674641 20.9921961,38.8696193 C21.5735654,38.958966 22.383205,39.2569351 22.7934806,39.1838732 C22.8275247,39.1785917 22.8611324,39.1724298 22.8986682,39.1706693 C23.0309166,39.256495 23.1147176,39.34012 23.122574,39.4206641 C23.2997781,39.4831627 23.4761093,39.5452213 23.6506947,39.6063996 C23.6773189,39.6191634 23.772468,39.6424904 23.8571419,39.6640568 L24.1120365,39.7300766 C24.2822572,39.7705687 24.457279,39.8343878 24.6209528,39.8181029 C25.2245817,39.80842 25.7906747,39.3352785 25.8731663,38.9171535 C25.888879,38.8784219 25.9015364,38.8423311 25.9159397,38.80536 C25.9486745,38.6852041 26.0049783,38.5267567 26.0455693,38.4167238 C26.0743759,38.3414613 26.1062378,38.263558 26.1367902,38.1825738 C26.2013868,38.0219258 26.2668563,37.8551159 26.2895524,37.6909468 C26.3314529,37.3898968 26.658364,36.9286388 26.7225241,36.547925 C26.7596235,36.3304999 26.8630653,35.932621 27.0874075,35.7878177 C27.0476893,35.6879078 27.0315402,35.6482959 27.0075347,35.5879979 C27.051181,35.5479459 27.0830428,35.5175768 27.1153411,35.4872078 L27.164225,35.4568387 C27.4461804,34.7042136 27.5430753,34.7182978 27.8224118,34.0382945 C27.8573289,33.9529089 27.9289089,33.8274714 27.9345829,33.7931412 C27.9625166,33.6091661 28.1947151,33.3301227 28.2566929,33.1259016 C28.261494,33.1184194 28.2632399,33.1140181 28.2658587,33.1096167 L26.6112259,32.441497 C26.5409553,32.5510897 26.4663201,32.6796082 26.3851379,32.8371753 C26.1878564,33.2178891 26.0822323,33.5206997 25.8596359,34.0651425 C25.8155531,34.1725346 25.2014491,35.4585992 25.1800624,35.5475058 C25.1207034,35.7785749 25.0617808,36.0087637 25.0032948,36.2420335 C24.93477,36.4880671 24.7405438,36.8912276 24.8784662,36.8780237 C24.892433,36.8771434 24.8400574,37.0857658 24.7994663,37.203281 C24.7165383,37.4299487 24.6331738,37.6588172 24.5454446,37.8995692 L24.5502457,37.9092521 C24.5637761,37.9449027 24.5620303,37.9757119 24.5799253,38.0219258 C24.5781794,38.0206054 24.5607209,38.0078416 24.5607209,38.0078416 C24.5607209,38.0078416 24.5406435,38.0571363 24.5004889,38.089706 C24.4625166,38.1249166 24.4123233,38.1390008 24.4123233,38.1390008 C24.3254671,37.9757119 24.3411798,38.0034402 24.2966605,37.949304 C24.2595611,37.8951679 24.2390473,37.8568764 24.2163512,37.8449929 C24.04002,37.7868955 23.8248436,37.7389211 23.6362914,37.7248369 C23.1273751,37.6825843 22.5547351,37.5100527 22.0152663,37.3775731 C21.7791396,37.3212362 21.5613444,37.2675402 21.3684276,37.246854 C21.3116873,37.2411323 21.2562565,37.2358507 21.2016985,37.2314494 C21.2043173,37.2076823 21.2300687,37.1905171 21.2946652,37.1817145 C20.8359422,37.0527559 20.93371,36.925998 20.5439482,36.7992401 C20.1389102,36.6689612 19.7303804,36.5272388 19.324033,36.4145651 C19.0368401,36.3357815 18.6056142,36.2380723 18.4956255,36.2565578 C18.2634269,36.2944092 17.8919966,36.1931789 17.5550468,36.1320006 C17.439384,36.1113144 17.3245942,36.0915085 17.2002021,36.069942 C17.1177105,36.0307703 17.0347825,35.992919 16.9566555,35.9563881 C16.9405064,35.9238183 16.9234843,35.8868473 16.9012247,35.8384328 C16.8492855,35.8485558 16.7628658,35.815546 16.6694626,35.7997012 C16.5804241,35.7583288 16.50317,35.6830663 16.4071481,35.655338 L16.8702358,35.7913387 C16.5769324,35.7046328 16.6061754,35.6038426 16.0828558,35.5378229 C16.0073476,35.5008518 15.9335853,35.4647611 15.8602595,35.4286703 C15.835381,35.414586 15.7633646,35.3868578 15.6887293,35.3569288 C15.6171493,35.3296406 15.5451329,35.3001518 15.471807,35.2715433 L15.4176856,35.2561387 C15.0955756,35.1879183 14.7948523,35.2226887 14.5473776,35.3384433 C14.3055768,35.4458354 14.0917098,35.6258492 13.9415664,35.8415137 C13.8691134,35.9533071 13.8259036,36.0941493 13.7656716,36.2173861 L13.6805612,36.4088434 C13.6500088,36.4757434 13.6225116,36.5378019 13.6142188,36.5655302 C13.5003019,36.8665803 13.373291,37.1693908 13.2314404,37.4752823 C13.1995786,37.544383 13.1698991,37.6346099 13.1498217,37.7063514 L12.830767,38.80536 C12.7574412,38.8938265 12.6828059,38.9862541 12.6068613,39.0778015 C12.3694252,39.3594858 12.4305301,39.6262055 12.2598729,39.9598253 C12.1703979,39.8867634 12.0569174,40.0047187 11.8722934,40.574249 C11.7575035,40.9303155 11.5711336,41.3295149 11.4384488,41.7031866 C11.393493,41.8299445 11.3852002,41.9448189 11.3659958,42.0847808 C11.3057639,42.1349558 11.2594988,42.1393571 11.2354933,42.0706965 C11.07793,42.3259729 10.9483004,42.5095078 10.8252177,42.7432177 C10.7318145,42.9188302 10.6318644,43.1670644 10.5637761,43.366444 C10.4201796,43.7902908 10.3036439,44.2070954 10.0653349,44.5992527 C9.91344564,45.1736245 9.53066724,45.9522173 9.55816444,46.3712226 C9.55947383,46.4055529 9.56078322,46.4403233 9.5586009,46.4777345 C9.45996017,46.6009713 9.36830286,46.6753536 9.28755713,46.6740332 C9.12519274,47.0182161 8.96632007,47.3518359 8.80919324,47.6850155 C8.67083434,47.9750622 8.52243679,48.2967984 8.50279594,48.5217057 C8.47879045,48.8042702 8.2313157,49.1704597 8.17675778,49.5238854 C8.13005619,49.8227348 7.941504,50.3420901 7.87166986,50.719723 C7.83238815,50.9375882 7.72370877,51.3341468 7.49762073,51.475429 C7.53646597,51.5762191 7.55174219,51.6162711 7.57443829,51.6765692 C7.52991902,51.7166211 7.49849365,51.7456698 7.46532244,51.776479 L7.41643853,51.8055277 C7.3500961,51.973658 7.3583889,51.9388876 7.33089171,51.9780593 C7.30994147,51.9991856 7.28768183,52.0093087 7.26585866,52.0115093 L8.51414398,53.441497 C8.60842008,53.2473989 8.72757459,53.0000449 8.85458544,52.7372864 C8.88208263,52.679189 8.92703836,52.5911627 8.94056873,52.5546317 L8.98115982,52.4459192 C9.00822055,52.3737376 9.03440836,52.3006758 9.06103262,52.231135 C9.16054628,51.9516514 9.24522018,51.7183817 9.25875054,51.6818507" id="Fill-15" fill="#000000"></path>
-                </g>
-                <g id="Group-17">
-                    <g id="Group-3" transform="translate(4.000000, 0.000000)">
-                        <mask id="mask-6" fill="white">
-                            <use xlink:href="#path-5"></use>
-                        </mask>
-                        <g id="Clip-2"></g>
-                        <path d="M28.18224,15.9931143 L28.18224,15.9931143 L27.98334,15.912519 L28.18224,15.9931143 Z M53.86824,3.44210266 C53.82099,3.30094704 53.72919,3.14795255 53.58789,2.98448523 C53.48169,2.80735769 53.16174,2.71310216 52.81164,2.5491795 C52.40529,2.26777894 52.00074,1.98728905 51.58674,1.69905837 C51.29289,1.59615137 51.00939,1.49552107 50.75424,1.41811315 C50.24529,1.26193128 49.73634,1.08252703 49.22424,0.879445072 L48.84039,0.721897182 L48.74319,0.681827198 L48.57714,0.628552334 L48.24684,0.519725901 C47.80314,0.369463463 47.35404,0.217379661 46.89819,0.0639298375 C46.69974,0.00701224713 46.46484,0.0853308515 46.27674,0.158185367 C46.04139,0.264735096 45.82089,0.412265491 45.68634,0.608517342 L45.34569,1.34890136 L45.02034,2.0683397 C44.97039,2.18171954 44.90694,2.31376835 44.87094,2.41030058 L44.79894,2.64571174 C44.67249,2.79825088 44.53974,2.95488809 44.40879,3.11106996 C43.99524,3.59282044 44.09559,4.05408059 43.79679,4.62644388 C43.64469,4.49758246 43.44759,4.69838772 43.11954,5.67782561 C42.91389,6.29025888 42.58764,6.97509133 42.35274,7.61484505 C42.27174,7.83340859 42.25554,8.03102647 42.21999,8.27235705 C42.11604,8.35705042 42.03639,8.36615724 41.99679,8.24458126 C41.72004,8.68170836 41.49414,8.9963488 41.27814,9.39750398 C41.11659,9.69711817 40.93749,10.1237724 40.81734,10.4675547 C40.56264,11.1960998 40.35339,11.9109848 39.93669,12.583523 C39.80034,13.0757463 39.56544,13.6558504 39.36744,14.2040806 C39.26889,14.4777404 39.18024,14.7432041 39.11904,14.9854453 C39.09384,15.0660406 39.10869,15.0596659 39.11544,15.0737814 L39.13884,15.1170388 C39.16044,15.1552874 39.17979,15.1912593 39.20094,15.2285973 C39.21669,15.2568284 39.23109,15.2877916 39.24009,15.3178441 C39.15639,15.3233081 39.07854,15.2540964 38.99259,15.1220475 C38.96244,15.1302437 38.92599,15.1038339 38.90754,15.0783348 C38.89764,15.0660406 38.88909,15.0546571 38.88279,15.0446396 C38.85984,15.027792 38.93904,15.0455503 38.72844,14.9685977 C38.21409,14.7737119 37.64529,14.5651658 37.26144,14.5660765 C36.77724,14.5651658 36.11979,14.1936078 35.51094,14.1526271 C34.99569,14.1161999 34.16769,13.6094057 33.51474,13.545658 C33.14124,13.5105967 32.44959,13.3817353 32.17599,13.0119986 C32.01084,13.0925939 31.94469,13.1271998 31.84569,13.175466 C31.77279,13.1062542 31.71699,13.0534346 31.66164,13.0010705 L31.60314,12.9200198 C31.43934,12.8690216 31.29669,12.8243983 31.16754,12.7834176 C31.13199,12.7715787 31.11354,12.7629273 31.06539,12.7501777 C31.01094,12.7369728 30.95919,12.725134 30.90789,12.7123844 C30.80529,12.687796 30.70899,12.6641183 30.61674,12.6413513 C30.24954,12.5489171 29.95164,12.4655898 29.65419,12.3827178 C29.50524,12.3412817 29.35764,12.3007564 29.20374,12.2579544 C29.06514,12.2684272 28.91214,12.2766234 28.74519,12.3298982 C28.57779,12.374977 28.39734,12.4514742 28.21869,12.5675861 C28.03599,12.6809659 27.87534,12.8239429 27.73314,13.0711929 C27.61704,13.2460438 27.43884,13.4773569 27.35874,13.5889153 C27.31824,13.6890903 27.29979,13.7359904 27.29169,13.7642215 C27.25164,13.91585 27.18549,14.0866027 27.10404,14.2732924 C27.06219,14.3643606 27.01719,14.4613482 26.97129,14.5619785 C26.94159,14.613432 26.91144,14.6676175 26.88039,14.7222584 C26.76204,14.926251 26.63514,15.1347971 26.58114,15.3105586 C26.57394,15.3214868 26.57079,15.3292276 26.56629,15.3392451 L26.56944,15.3401557 C26.30574,16.0687009 25.77159,17.5767894 25.74099,17.6988207 C25.64334,18.0945118 25.54839,18.4874708 25.43634,18.8959115 C25.32024,19.3207443 24.98589,20.015139 25.22349,19.9923719 C25.24779,19.9905506 25.15689,20.3507251 25.08759,20.5533517 C24.92109,21.0059604 24.75054,21.4694972 24.57279,21.950337 C24.58269,22.0810198 24.54444,22.21489 24.56199,22.3414747 C24.56199,22.3414747 24.52284,22.3332786 24.52194,22.3369213 L24.18444,23.1911405 C24.13449,23.3163592 23.93244,23.2139075 23.76639,23.4019632 C23.45724,23.7534863 23.13009,24.5057092 23.01354,25.1600338 C22.85694,26.0333773 22.46814,26.9959676 22.15494,27.9089257 C22.01949,28.3068935 21.89349,28.6766302 21.82599,29.0049308 C21.80754,29.1023738 21.78909,29.1979953 21.77109,29.2913402 C21.73194,29.2826887 21.70764,29.2353332 21.70224,29.1214981 C21.40839,29.8942113 21.20814,29.7057002 20.93049,30.3572928 L20.82114,30.6131943 C20.79684,30.6705672 20.79639,30.6687458 20.79189,30.6737546 L20.78064,30.6919682 L20.73564,30.759814 C20.71674,30.8048927 20.67219,30.8463287 20.62044,30.8408646 C20.58579,30.8367666 20.54529,30.8376773 20.49849,30.8490608 C20.47419,30.8536142 20.47689,30.8695511 20.33199,30.8435967 C20.22804,30.8294811 20.14659,30.8253831 20.09934,30.8331238 C19.70019,30.9000589 19.06389,30.7242974 18.48249,30.6191137 C18.28449,30.5840525 18.08694,30.5489912 17.87454,30.5116533 C17.73054,30.4447182 17.58969,30.3786938 17.45334,30.3149461 C17.42814,30.2589392 17.39799,30.1956468 17.35974,30.1127748 C17.27019,30.1296224 17.12169,30.0745262 16.96059,30.0462951 C16.80939,29.9752619 16.59924,30.1073107 16.51059,29.7985897 L17.30619,30.0340009 C16.87599,29.6251049 16.85124,29.7084323 15.95169,29.5955078 C15.68259,29.4620929 15.41259,29.3286781 15.13674,29.1934419 C14.83299,29.1265068 14.53869,29.0613931 14.27634,29.0154037 C14.01399,28.9694143 13.75164,28.9161394 13.48839,28.8592218 L13.09149,28.7676983 L12.42729,28.6461224 C12.19959,28.6019543 11.97189,28.5582416 11.74284,28.5145289 L11.39814,28.4448618 C11.28699,28.4330229 11.18799,28.4594327 11.07639,28.479923 C10.85994,28.5304658 10.64169,28.6219893 10.45314,28.7513061 C10.35819,28.8118664 10.27089,28.8874529 10.19394,28.9612181 C10.11069,29.0286086 10.07199,29.1629341 10.00764,29.261743 C9.90279,29.4566288 9.78624,29.7116196 9.69984,29.9087822 C9.59544,30.1528448 9.46359,30.4392541 9.38934,30.6386934 L9.25209,31.1131584 L8.97804,32.0607224 C8.85159,32.2146276 8.72199,32.3717201 8.59239,32.5297234 C8.18469,33.0155719 8.28999,33.4754661 7.99749,34.0519274 C7.84404,33.9253427 7.64829,34.1279693 7.33104,35.1110499 C7.13259,35.7253046 6.81399,36.4133244 6.58539,37.0562655 C6.50754,37.2748291 6.49359,37.4738129 6.46074,37.7160542 C6.35679,37.8007476 6.27714,37.8098544 6.23664,37.6891891 C5.96529,38.1304143 5.74209,38.4473314 5.53014,38.8498526 C5.37219,39.1531095 5.19804,39.5802191 5.08194,39.9258227 C4.83489,40.6566446 4.63329,41.3738062 4.22424,42.0513532 C3.96414,43.0403533 3.30579,44.3831531 3.35214,45.1062341 C3.35529,45.1649731 3.35799,45.2250781 3.35394,45.2888258 C3.18384,45.5014699 3.02634,45.631242 2.88819,45.6280546 C2.60829,46.2209082 2.33604,46.7969143 2.06514,47.3710989 C1.82799,47.871063 1.57239,48.4261234 1.53864,48.8140737 C1.49679,49.3012882 1.07289,49.9319351 0.97929,50.5420917 C0.96669,50.6231423 0.89019,50.9332294 0.80559,51.2037018 C0.71379,51.483281 0.61254,51.7915466 0.50904,52.1080084 L0.34884,52.5902143 L0.31194,52.7108796 L0.31734,52.8192507 C0.31824,52.8898285 0.33714,52.9681471 0.34704,53.0410016 C0.41319,53.3406158 0.56619,53.6252037 0.75159,53.7982332 C0.83304,53.907515 1.04589,53.9721734 1.23669,54.0646075 C1.43199,54.1543097 1.63584,54.2540293 1.83294,54.3624004 C2.02959,54.4698608 2.22084,54.5859727 2.39229,54.7111914 C2.47914,54.7731177 2.56014,54.8382314 2.63529,54.9056218 C2.71044,54.9730123 2.72439,55.0007881 2.76174,55.0563396 C2.93274,54.9894045 3.00114,54.9625394 3.10419,54.9229248 C3.17124,54.9989667 3.22164,55.0554289 3.27249,55.1132572 L3.32424,55.1974952 C3.96144,55.4515754 4.27374,55.6200514 4.57029,55.7880722 C4.72059,55.8713995 4.86639,55.9524502 5.04324,56.0503484 C5.25024,56.1559875 5.32674,56.2015215 5.98014,56.4820114 C6.15159,56.5548659 6.37479,56.6636924 6.52689,56.7356362 C6.65739,56.763412 6.74559,56.7807149 6.78429,56.7816256 C6.91434,56.7839023 7.07274,56.8094014 7.24914,56.8471947 C7.33734,56.867685 7.43094,56.889086 7.52769,56.9113977 C7.62129,56.9214152 7.70634,56.9182278 7.80579,56.9082103 C8.19774,56.8808899 8.62254,56.6946555 8.82774,56.496127 C8.84574,56.4833774 8.76789,56.4770027 8.78049,56.4678959 L7.71354,54.9242908 L7.71354,54.9233801 L8.77869,56.4637978 C8.94609,56.1455146 9.20349,55.7407167 9.42939,55.3099644 C9.64314,54.8960597 9.96354,54.357847 9.99234,54.198933 C10.17009,53.7180932 10.32714,53.3119293 10.34244,53.2518243 C10.44684,52.8565886 10.55124,52.4654509 10.66824,52.0583763 C10.79064,51.6349094 11.13669,50.9455236 10.89909,50.9646479 C10.87479,50.9669246 10.97109,50.6076608 11.04309,50.4059448 C11.21634,49.9565235 11.39409,49.494808 11.57724,49.0162449 C11.57004,48.8860175 11.60964,48.7521473 11.59434,48.6251073 C11.59344,48.6205538 11.63259,48.6342141 11.63439,48.630116 L11.98314,47.7804502 C12.03444,47.6561422 12.23514,47.7608706 12.40344,47.5750915 C12.71709,47.2276666 13.05504,46.4804524 13.18014,45.8274939 C13.34754,44.9559717 13.74894,43.9988455 14.07384,43.0908961 C14.21559,42.6942943 14.34654,42.3272897 14.41809,41.9998997 C14.43834,41.9029122 14.45724,41.8068353 14.47704,41.7139458 C14.51529,41.7221419 14.53959,41.770408 14.54409,41.8842432 C14.84694,41.1156281 15.04494,41.3073265 15.33069,40.658466 C15.47469,40.3388168 15.61869,40.0168909 15.76179,39.6967864 C15.79329,39.6512523 15.81219,39.6089056 15.83289,39.5569968 C15.86259,39.4882403 15.94089,39.4882403 15.99354,39.451813 C16.01109,39.4413402 16.02459,39.4267693 16.03539,39.4108324 C16.06014,39.3716731 16.09074,39.346174 16.13529,39.3306924 C16.25994,39.3397992 16.39539,39.3584682 16.53579,39.3835119 C16.81794,39.4395188 17.12169,39.4978025 17.41284,39.5551754 C17.61084,39.5902366 17.80794,39.6248425 18.02169,39.6617251 C18.16434,39.7282049 18.30564,39.7955953 18.44154,39.8588877 C18.46764,39.9148946 18.49779,39.9781869 18.53604,40.0615143 C18.62514,40.0442113 18.77364,40.0988522 18.93519,40.1270833 C19.08639,40.1985718 19.29609,40.0674337 19.38519,40.375244 L18.58914,40.1402882 C19.01979,40.5491842 19.04319,40.4658568 19.94274,40.5787813 C20.21364,40.7121962 20.48364,40.845611 20.75904,40.9808472 C21.06234,41.0473269 21.35664,41.1119853 21.61989,41.1588854 C22.14234,41.2508642 22.66974,41.3669761 23.20164,41.5063104 L23.40144,41.5600406 L23.50134,41.5878164 L23.55219,41.6019319 L23.63679,41.6183242 C23.86584,41.6643136 24.09624,41.7116691 24.32709,41.7576585 C24.55839,41.8077459 24.79149,41.8569227 25.02504,41.9074656 C25.26939,41.9853288 25.47639,41.9602851 25.70094,41.891984 C25.90524,41.8355217 26.13564,41.690268 26.27919,41.5518445 C26.34984,41.4876414 26.40609,41.4179743 26.46324,41.3505839 L26.59869,41.094227 C26.68689,40.925751 26.77509,40.7559089 26.88354,40.6042804 L27.04779,40.0806386 C27.09684,39.9203587 27.16884,39.7022504 27.18189,39.6312173 L27.33759,39.018784 C27.46134,38.8639682 27.58959,38.7032329 27.71694,38.5438636 C28.11879,38.0530063 28.00629,37.5940229 28.29159,37.0148295 C28.44729,37.1395929 28.63944,36.9346895 28.94364,35.9470555 C29.13309,35.3296135 29.44404,34.6361296 29.66319,33.9913671 C29.73879,33.7714375 29.74959,33.5724536 29.77839,33.3302124 C29.88189,33.2432423 29.96199,33.2336801 30.00429,33.3529794 C30.26934,32.9090222 30.48804,32.5889177 30.69459,32.1822984 C30.84894,31.8781308 31.01724,31.4473785 31.12839,31.1013195 C31.36644,30.3668549 31.55769,29.6469613 31.95819,28.9644055 C32.20569,27.9726734 32.84514,26.6198561 32.78889,25.8981411 C32.78574,25.8394021 32.78259,25.7792972 32.78529,25.7146388 C32.95314,25.4988073 33.10839,25.3681245 33.24654,25.3694905 C33.38199,25.0716977 33.51654,24.7775476 33.64884,24.4861295 L33.84819,24.0499131 C33.87069,23.9993703 33.86979,24.005745 33.86979,24.005745 L33.87924,24.004379 L33.89274,24.0025577 C33.93009,24.0034683 33.91929,24.0326101 33.90669,23.8991953 C33.90219,23.819966 33.94404,23.8349923 33.97419,23.8468311 C34.05924,23.8714195 34.14564,23.8969186 34.23069,23.9224177 C34.38684,23.962943 34.54119,23.9939062 34.69329,24.004379 C35.20854,24.0394403 36.03699,24.5466898 36.68994,24.6099822 C37.06344,24.6450434 37.75464,24.7743602 38.02959,25.1440969 C38.19384,25.0621355 38.25999,25.0298063 38.35809,24.9806295 C38.43189,25.050752 38.48724,25.1026608 38.54349,25.1559357 L38.60154,25.235165 C39.91554,25.6290347 39.90474,25.7970555 41.09589,26.1954786 C41.24709,26.2455661 41.46759,26.3543925 41.52699,26.3589459 C41.75964,26.3785256 42.18849,26.4982802 42.59934,26.6230435 C42.81354,26.6863359 43.03179,26.7500836 43.23429,26.8083672 C43.45254,26.8898732 43.61814,26.8634634 43.77294,26.8142866 C43.79769,26.8106439 43.81029,26.8083672 43.82829,26.8065458 L43.82694,26.8033584 C44.14689,26.7036388 44.57979,26.5064763 44.84844,26.1544979 C45.07434,25.7205582 45.31329,25.2597534 45.53604,24.8326438 C45.59139,24.7265494 45.64449,24.6231871 45.69714,24.5221014 C45.75339,24.4141857 45.74889,24.395972 45.77724,24.3313137 C45.81684,24.2256746 45.85329,24.1277764 45.88479,24.043083 C45.94554,23.8741516 45.98694,23.7580397 45.99819,23.7284425 C46.10484,23.3359388 46.20789,22.9448012 46.33029,22.5386372 C46.45719,22.1174471 46.80864,21.4317039 46.56969,21.4476409 C46.54629,21.4503729 46.64529,21.0915644 46.71954,20.8907592 C46.89639,20.4427039 47.07864,19.9832651 47.26764,19.5065234 C47.26134,19.3767513 47.30229,19.2433364 47.28834,19.115841 C47.28744,19.1112876 47.32659,19.1254032 47.32659,19.1254032 L47.68659,18.2766481 C47.73924,18.1523401 47.93904,18.2593451 48.10869,18.0758428 C48.42639,17.7316052 48.77154,16.9880338 48.90429,16.3364413 C49.08159,15.4667405 49.49379,14.514623 49.82904,13.6103163 C49.97349,13.2150806 50.10939,12.8489867 50.18454,12.5225074 C50.20524,12.4264305 50.22549,12.3308089 50.24619,12.2374641 C50.28399,12.2465709 50.30784,12.2952923 50.31189,12.4077615 C50.62239,11.6441551 50.81769,11.8376749 51.11199,11.1920018 C51.41754,10.5199189 51.74199,9.84419322 52.01604,9.16573555 C52.20909,8.68717245 52.46559,7.9631807 52.45704,7.76966089 C52.43949,7.36076492 52.68969,6.74241222 52.86294,6.17095961 C52.89264,6.07123999 52.92279,5.97197572 52.95249,5.86952405 C52.99029,5.71789559 53.02989,5.56262441 53.06994,5.40279981 C53.16849,5.17604013 53.26434,4.95246784 53.35794,4.73663634 C53.42364,4.67288863 53.49834,4.60048946 53.59509,4.50577859 C53.59419,4.44476293 53.61624,4.35278411 53.64549,4.24486836 C53.66169,4.19068281 53.67744,4.13330988 53.69499,4.07366024 C53.69094,4.01810868 53.68914,3.96255711 53.67879,3.90381815 C53.67969,3.64518462 53.42949,3.47215515 53.53164,3.13247097 C53.53164,3.13247097 53.71524,3.41660358 53.76924,3.74490424 C53.85969,4.0486165 53.67294,4.38602398 53.69094,4.38647932 C54.00909,3.93660269 53.94924,3.7344314 53.86824,3.44210266 L53.86824,3.44210266 Z" id="Fill-1" fill="#000000" mask="url(#mask-6)"></path>
-                    </g>
-                    <path d="M7.13394415,53.6658017 C7.02028045,53.9415145 6.70464857,54.0734367 6.43022544,53.9584042 L1.33166108,51.82163 C1.05723795,51.707054 0.927271884,51.3879758 1.04138843,51.1118065 L10.2404502,28.8133059 C10.3545667,28.5375931 10.6797083,28.3810211 10.964094,28.4636436 L20.3850491,31.2358354 C20.6694348,31.3198274 20.9914064,31.160973 21.1019002,30.8843472 L28.276299,12.8205943 C28.3858871,12.5430556 28.7069531,12.3901354 28.9895274,12.4791486 L38.8085318,15.6092192 C39.0902004,15.6991454 39.4162477,15.5485077 39.5335342,15.2746208 L45.8928147,0.328157065 C46.0101011,0.0542701818 46.3279972,-0.0744566534 46.5997033,0.0442276627 L51.674267,2.23623569 C51.945973,2.35446352 52.0736749,2.67491118 51.9563884,2.94879806 L43.2432277,23.433711 C43.1263941,23.7080544 42.8003468,23.8586922 42.5182253,23.7683095 L32.837791,20.6816043 C32.5561224,20.5916781 32.2350564,20.7445983 32.1250154,21.0212241 L25.001788,38.9617279 C24.8921999,39.2392666 24.5697754,39.3967515 24.2858425,39.313216 L14.7865455,36.5191134 C14.5026127,36.4346649 14.1774711,36.5921499 14.0633546,36.8678627 L7.13394415,53.6658017 Z" id="Fill-4" fill="#FC6EB3"></path>
-                    <path d="M13.5634145,29.4648507 C13.3231603,29.4264068 13.0838043,29.3897721 12.8399575,29.350876 C12.5826385,29.3051957 12.1551207,29.1450884 12.1825142,29.2857476 C12.1847595,29.3006729 11.966959,29.2672041 11.8439129,29.236449 C11.6952696,29.1998143 11.544381,29.1609182 11.3916961,29.1220221 C11.2735898,29.0962421 11.1559326,29.0700098 11.0364791,29.0433253 C10.9161275,29.0134748 10.7980212,28.9872425 10.6794659,29.0066906 C10.6278224,29.0261386 10.5712392,29.0388025 10.5164523,29.0514663 C10.4630125,29.071819 10.4122673,29.1048354 10.3709525,29.1364951 C10.3709525,29.1364951 10.3574803,29.1165947 10.3534387,29.1165947 C10.3534387,29.1165947 10.3031424,29.1333291 10.2285963,29.1554908 C10.153152,29.1790094 10.0741151,29.2536357 9.98564763,29.3070048 C9.81544885,29.4286682 9.72159253,29.6290285 9.70048609,29.6077713 C9.64569914,29.7231028 9.55274097,29.6145555 9.40185235,29.8085838 C9.3672737,29.8542641 9.32910247,29.9062764 9.2900331,29.9655251 L9.18719531,30.1283461 C9.14049169,30.2047815 9.09558436,30.2925239 9.05426962,30.3852414 C8.97029291,30.5706764 8.90068655,30.7791777 8.86341347,30.9741106 C8.76327013,31.4937808 8.52256684,32.0636542 8.32856718,32.6050339 C8.24369233,32.8415766 8.1651045,33.060028 8.12244254,33.2554132 C8.11031756,33.3128528 8.09864165,33.3702924 8.08696575,33.4254706 C8.06451208,33.4204955 8.05014174,33.3915496 8.0474473,33.3241598 C7.86557262,33.7823199 7.74746634,33.6678929 7.57592034,34.0541405 C7.39718917,34.4575746 7.20723117,34.8619134 7.04781015,35.2676089 C6.93419461,35.5539024 6.78555135,35.9880917 6.79228745,36.1025186 C6.80531057,36.3462978 6.65981083,36.7162632 6.55966748,37.057735 C6.52643606,37.173971 6.49320464,37.2897548 6.4568297,37.4154888 C6.40743164,37.4973516 6.36027894,37.5769529 6.31312625,37.6542929 C6.27899668,37.6665045 6.23947823,37.6805252 6.18828387,37.6977118 C6.1927746,37.75289 6.15056172,37.8379188 6.12316824,37.9333499 C6.07107574,38.0183787 6.13529322,38.1531582 5.94847873,38.1857224 L6.13888581,37.7253009 C5.86944183,37.9555117 5.9170436,37.975412 5.79130308,38.5072938 C5.69430325,38.6633306 5.60089601,38.8112263 5.50075266,38.9708813 C5.44506757,39.1468184 5.39028063,39.3168758 5.33998442,39.4742694 C5.16260047,40.0893709 4.92863329,40.7067337 4.63808287,41.3349512 C4.60574959,41.4059593 4.57566168,41.4986768 4.55455524,41.5723985 L4.22583359,42.7021951 C4.15083835,42.7931034 4.07314867,42.8867255 3.99500992,42.9817044 C3.75116312,43.2707116 3.81448245,43.5456981 3.63799665,43.8894312 C3.54683477,43.8134481 3.43007571,43.9333025 3.24011771,44.5199102 C3.12066422,44.8867097 2.92980807,45.2964757 2.79373886,45.6786527 C2.74613709,45.8093618 2.73850285,45.9269547 2.71919269,46.0721367 C2.65677151,46.1227921 2.60827159,46.1277672 2.58491978,46.0572115 C2.42190617,46.3190819 2.28942955,46.5085874 2.16144367,46.7487483 C2.06713827,46.9278513 1.96295327,47.1833898 1.89379598,47.3887251 C1.7456018,47.8251758 1.62525016,48.2521285 1.37960707,48.6555627 C1.22377863,49.2448841 0.829492283,50.0454205 0.858682047,50.4759915 C0.860029267,50.5112694 0.861376487,50.5469996 0.858682047,50.5849911 C0.75674241,50.7125342 0.662886092,50.7889696 0.580256606,50.7876128 C0.494483607,50.9716909 0.418141148,51.1223003 0.327877416,51.3271833 L0.146451806,51.8341897 L0.0548408547,52.0897282 L0.0103825989,52.2177236 L0.00185020633,52.3416484 C-0.0134182856,52.6306556 0.066067687,52.955393 0.230877585,53.1937448 C0.306321898,53.3172173 0.400627289,53.4194327 0.497178047,53.4949636 C0.586992705,53.5781832 0.728899865,53.6039632 0.82365433,53.6442161 C0.953885585,53.6858259 1.09040387,53.7432655 1.23320917,53.810203 C1.30461183,53.8445764 1.37781077,53.8798542 1.45190786,53.9164889 C1.49367168,53.9341279 1.53768086,53.9531237 1.58124097,53.9712149 C1.75593048,54.0444843 1.93870331,54.1222766 2.11967985,54.1507702 C2.42504969,54.1991642 2.89208591,54.5438019 3.27873802,54.6157145 C3.50013115,54.6564198 3.90519526,54.7694899 4.04979686,55.0042234 C4.15263464,54.9639705 4.19394938,54.9481407 4.25457428,54.9241698 C4.29543995,54.9689456 4.32552786,55.0033189 4.35561577,55.0376922 L4.38615275,55.0878953 C4.75978173,55.2353388 4.94659622,55.3352927 5.12083666,55.4329853 C5.20975317,55.4818316 5.29687339,55.5302256 5.39701673,55.5858561 C5.45494719,55.6143498 5.5169193,55.6451048 5.58428029,55.6785736 C5.71046989,55.7342041 5.84743724,55.795262 6.00371475,55.863104 C6.01718695,55.8671746 6.04862208,55.8748633 6.08095536,55.8834566 C6.2466634,55.9246142 6.50667684,56.0204976 6.56370914,55.9960745 C6.7190885,55.9816015 6.95979179,55.9725559 7.19959692,55.8952159 C7.43491133,55.8133532 7.66393871,55.6740508 7.77755425,55.5157526 C7.78967923,55.5044456 7.79416996,55.4999228 7.80225328,55.4935909 L6.50847313,54.0123724 C6.47838522,54.0200612 6.43976492,54.0218703 6.40114461,54.0105633 C6.3526447,53.9992563 6.32659845,53.9721194 6.29785775,53.9580988 C6.16313577,53.9002069 6.01583973,53.8368876 5.82408543,53.7554771 C5.71585877,53.7079877 4.412199,53.0548947 4.32103713,53.0309238 C4.08617179,52.9667 3.85220461,52.9024762 3.61464484,52.8378001 C3.36451101,52.7645306 2.95630339,52.5569339 2.96753022,52.7007591 C2.96932652,52.7147798 2.75691485,52.6573402 2.63746135,52.6139212 C2.50318844,52.561909 2.36891553,52.5108013 2.23194817,52.458789 L2.06040218,52.390947 L1.9894486,52.3656193 C1.94588849,52.384615 1.91175892,52.3787354 1.8565229,52.3963743 L1.87403676,52.3778308 C1.87403676,52.3778308 1.82329148,52.3570259 1.79050913,52.3145116 C1.75772678,52.2729018 1.74874531,52.2195327 1.74874531,52.2195327 C1.9288237,52.1381222 1.89828672,52.1525952 1.96115698,52.1100808 C2.02312909,52.0752552 2.06399476,52.0562594 2.07881418,52.0336454 L2.08420306,52.0245998 L2.1120456,51.9554009 L2.16368903,51.8066006 C2.19647138,51.7070989 2.22341578,51.6062404 2.24272593,51.5085478 C2.3424202,50.9897821 2.58222534,50.4199087 2.77667408,49.878529 C2.861998,49.6419864 2.9410349,49.4230826 2.98324779,49.2272452 C2.99537277,49.1702578 3.00704867,49.1123659 3.01827551,49.0580923 C3.04072917,49.0621628 3.05599766,49.091561 3.05824303,49.1584986 C3.23921957,48.7007907 3.35732584,48.81567 3.53021906,48.4280656 C3.70850116,48.0259883 3.89845916,47.6216496 4.0574311,47.215954 C4.17059757,46.9287559 4.31924083,46.4954712 4.31295381,46.3801397 C4.29948161,46.1363606 4.44498135,45.7672997 4.5451247,45.4249234 C4.57880519,45.3086873 4.61158754,45.1924512 4.64796248,45.0667173 C4.69691147,44.9857591 4.74451324,44.9061577 4.79166593,44.8279132 C4.8257955,44.8161539 4.86531395,44.8025855 4.91650831,44.7849465 C4.91201758,44.7306729 4.95512861,44.6456442 4.98297116,44.550213 C5.03371644,44.4642797 5.11948944,44.3919148 5.15810974,44.2973882 L4.96725359,44.758262 C5.08895245,44.4656365 5.18819765,44.5076986 5.31483632,43.9749123 C5.41228522,43.8202323 5.50479432,43.6714321 5.60403952,43.5131339 C5.66062275,43.33584 5.71451155,43.1657825 5.76525683,43.0088412 C5.94174263,42.3932875 6.17615889,41.7759247 6.46581117,41.1481594 C6.49949166,41.0771514 6.5291305,40.9839816 6.55113509,40.9116167 L6.87895859,39.7809156 C6.95350476,39.6900072 7.03254166,39.5954806 7.10978227,39.500954 C7.35452721,39.2123991 7.29120788,38.9374125 7.46634646,38.594584 C7.55795741,38.6705671 7.67516554,38.5489036 7.86557262,37.9627482 C7.98367889,37.5968533 8.17588226,37.1861826 8.31195147,36.8044579 C8.35865509,36.6737489 8.36673841,36.5557037 8.38649763,36.4105216 C8.44802068,36.3603185 8.49562244,36.3544389 8.52032148,36.4268037 C8.68288601,36.1635765 8.81670985,35.9745233 8.94379759,35.7348146 C9.03855205,35.5539024 9.14183891,35.2997208 9.21144527,35.0939332 C9.35963946,34.6579349 9.4799911,34.2314344 9.72518512,33.8270957 C9.88146262,33.2377742 10.2748508,32.4372378 10.2470083,32.0062146 C10.245212,31.9709367 10.2434157,31.9356588 10.2461101,31.897215 C10.3480498,31.7705764 10.4423552,31.6936888 10.5249846,31.6959502 C10.6085123,31.5191085 10.6911418,31.3445282 10.7733222,31.1722094 L10.8963683,30.913505 L10.9260071,30.8492812 C10.9381321,30.8221443 10.9457663,30.8090282 10.9444191,30.8158124 L10.9529515,30.8144556 C10.9749561,30.8121942 10.9704654,30.8339036 10.9637293,30.7552068 C10.9632802,30.7068128 10.9888774,30.713597 11.0068403,30.7208335 C11.0768957,30.7398293 11.1474002,30.7597296 11.219252,30.77963 C11.3117611,30.802244 11.4060664,30.8180738 11.4967793,30.8225966 C11.8061907,30.8366173 12.3536111,30.9718492 12.745203,31.0012474 C12.9688415,31.0170772 13.3846834,31.084467 13.553984,31.3020139 C13.6509838,31.2500016 13.6900532,31.229649 13.7488818,31.1988939 C13.7946873,31.2400515 13.8274696,31.269902 13.8611501,31.3011093 L13.8975251,31.3472419 C14.1755014,31.4241296 14.3497419,31.5046355 14.4898527,31.5864983 L15,29.8271273 C14.5563156,29.7095344 13.6366135,29.4757054 13.5634145,29.4648507" id="Fill-6" fill="#000000"></path>
-                    <path d="M36.5281863,14.2293554 C36.2816505,14.1863015 36.0365024,14.1441446 35.7862663,14.1010908 C35.523079,14.0499643 35.0859753,13.8813367 35.1109526,14.0217102 C35.1128028,14.0360615 34.8898568,13.9979409 34.7635824,13.9656505 C34.4800432,13.885373 34.1909534,13.8046471 33.8907626,13.7203333 C33.8121302,13.7310967 33.7284098,13.7149515 33.6525527,13.7301998 C33.6497774,13.7310967 33.6557905,13.7077759 33.6534777,13.7064305 L33.1187773,13.5436331 C33.0401449,13.5180699 33.0938,13.3933931 32.9716885,13.3028006 C32.7427294,13.1337245 32.2713975,12.9718241 31.8689845,12.9310127 C31.3305838,12.8762984 30.7274269,12.6865924 30.1589608,12.5403886 C29.9096498,12.4771533 29.6797656,12.4179543 29.476709,12.3919426 C29.4119529,12.3847669 29.3444215,12.3766943 29.2815156,12.3686217 C29.2727273,12.343507 29.3402586,12.333192 29.4003893,12.3224285 C29.0585696,12.2358723 28.8425617,12.1488677 28.6834467,12.0699356 C28.5155434,12.0067003 28.3444023,11.951986 27.9877811,12.0672448 C27.7925877,12.1358618 27.6117332,12.2479812 27.4632567,12.3874578 C27.3120049,12.5206556 27.2194962,12.7139495 27.1103359,12.8919951 C27.0062636,13.1404517 26.9040415,13.3853205 26.8022819,13.6283954 C26.6898838,13.9131786 26.5427949,14.3459596 26.5506582,14.4603213 C26.5673097,14.7007054 26.4229961,15.069354 26.3240118,15.4093 C26.2920963,15.5250072 26.2587931,15.6411629 26.2236398,15.7658397 C26.1741477,15.8465657 26.1255806,15.9272917 26.0788637,16.0048783 C26.0432478,16.0169872 26.0030065,16.0313385 25.9502766,16.0488291 C25.9558271,16.1030949 25.9132731,16.1883056 25.8864455,16.2829344 C25.8346407,16.3690421 25.9017095,16.5008945 25.7097539,16.5363243 L25.8993968,16.0757377 C25.6260335,16.3093946 25.6746006,16.3277822 25.5524891,16.8565373 C25.4539673,17.0126075 25.3600709,17.1606051 25.2601615,17.3202631 C25.2046563,17.4960664 25.1505387,17.6655909 25.1010465,17.8216611 C24.9271301,18.4338331 24.6944707,19.0500413 24.4035307,19.6761161 C24.3706902,19.7465271 24.3406248,19.8393619 24.3198104,19.9124638 L23.9969549,21.0372457 C23.9210978,21.1273897 23.8424654,21.2220185 23.7624453,21.3175442 C23.515447,21.6068123 23.584366,21.8781412 23.409062,22.2207781 C23.3128529,22.1476763 23.1939792,22.2683167 23.0061865,22.8522346 C22.889163,23.2168469 22.6976699,23.6258585 22.5626072,24.007513 C22.5163528,24.1375715 22.5089521,24.2546241 22.4909129,24.398137 C22.4284696,24.4501604 22.3775898,24.4555421 22.3526124,24.3842342 C22.1884094,24.6474905 22.0538092,24.8362996 21.9266097,25.0757867 C21.8317883,25.2565231 21.7272535,25.5094645 21.658797,25.7148673 C21.5121707,26.1489936 21.3942221,26.5741504 21.1467612,26.9773318 C20.9945844,27.5639405 20.6000347,28.3631276 20.6342629,28.7900783 C20.6365756,28.8246111 20.6379633,28.8591439 20.6365756,28.8986099 C20.5329659,29.0255291 20.4381444,29.1026672 20.3525739,29.1017703 C20.1851331,29.4556191 20.0209301,29.7964621 19.8595024,30.1382021 C19.834525,30.1906739 19.8368377,30.1808074 19.8368377,30.1808074 L19.828512,30.1808074 C19.8257367,30.1817044 19.8243491,30.1817044 19.8243491,30.1843953 C19.8252742,30.18888 19.8335999,30.2032313 19.844701,30.2431458 C19.8576522,30.3059327 19.8187985,30.2920299 19.797059,30.2830603 C19.78087,30.2794725 19.8002968,30.2866482 19.7512672,30.2785756 C19.6740224,30.2628788 19.5981652,30.2521154 19.5232332,30.2485276 C19.2045406,30.2350732 18.688342,29.9458052 18.2840789,29.9171026 C18.0523445,29.9014059 17.6254168,29.8345827 17.4510378,29.6197619 C17.3506659,29.6708884 17.309962,29.6910699 17.2493688,29.7211179 C17.203577,29.6807549 17.1688862,29.6507069 17.1337329,29.6206589 L17.0962669,29.5740172 C16.2812651,29.3591964 16.2854279,29.2596344 15.5458207,29.0403288 C15.4519244,29.0116263 15.3145489,28.9510818 15.2775454,28.9492879 C15.0832771,28.9398699 14.7668973,28.7286369 14.5471891,28.685583 C14.5384008,28.6819952 14.5347004,28.6806498 14.5286873,28.6775104 L14,30.4359912 C14.1202613,30.4969842 14.2636499,30.5602195 14.4361786,30.6283881 C14.8557057,30.7925309 15.1836491,30.8701175 15.7747798,31.0450238 C15.8913408,31.0795566 17.2983984,31.5809546 17.3950701,31.5948574 C17.6420683,31.6311841 17.8886041,31.6693047 18.1397653,31.7069768 C18.4043402,31.752273 18.8446817,31.9114826 18.8169291,31.7715576 C18.8141538,31.7567578 19.03895,31.7903936 19.165687,31.8208901 C19.3224893,31.8608046 19.478829,31.9011676 19.6462698,31.9446699 C19.9279588,32.0020751 20.2253744,32.0388502 20.5126139,31.9303186 C20.6065103,31.8639439 20.720296,31.7998116 20.7850521,31.7105646 C20.7869023,31.7069768 20.8030913,31.7271583 20.8054041,31.7244674 C20.8054041,31.7244674 20.9894964,31.6083117 21.1060574,31.4338539 C21.1698884,31.352231 21.2036541,31.2428024 21.2415827,31.1728399 C21.276736,31.0992896 21.2998632,31.050854 21.2998632,31.050854 C21.4918188,31.020806 21.4793301,30.9934489 21.6093048,30.8342393 C21.7998728,30.6261457 22.0015418,30.1826013 22.0736986,29.7955652 C22.1699077,29.2789189 22.4104304,28.7102493 22.6028485,28.1707307 C22.6861063,27.9357285 22.7647388,27.7177683 22.8059051,27.5235775 C22.8170062,27.4666209 22.8294949,27.4087673 22.8396708,27.3549499 C22.8641856,27.3589862 22.8785245,27.3867918 22.8831499,27.454512 C23.0626168,26.9984102 23.186116,27.1091842 23.3581822,26.7234934 C23.5371866,26.3225544 23.727292,25.9184761 23.8854819,25.5139493 C23.9969549,25.2278206 24.1449689,24.7963851 24.1366431,24.6820233 C24.1199915,24.4411908 24.2643051,24.0725422 24.3632895,23.7325962 C24.3961301,23.6164405 24.4289706,23.5011817 24.464124,23.376505 C24.5131536,23.2953305 24.5617207,23.215053 24.6084376,23.1374664 C24.6435909,23.124909 24.6847573,23.1114547 24.7370247,23.0930671 C24.7314742,23.0392498 24.7744907,22.954039 24.8013182,22.8594103 C24.8535857,22.7733025 24.9400813,22.7015461 24.978935,22.6064689 L24.7892921,23.0670554 C24.910016,22.773751 25.0127007,22.8145625 25.1352747,22.2858074 C25.2337965,22.1292887 25.3267678,21.9817395 25.4280648,21.8220815 C25.4831075,21.6458298 25.5367626,21.4763053 25.5867173,21.3206835 C25.7615588,20.7085116 25.9928306,20.0918548 26.2846956,19.4662286 C26.3166111,19.3944721 26.3457513,19.3029827 26.3674909,19.2294324 L26.6908089,18.1055475 C26.7662035,18.014058 26.8448359,17.9194292 26.9239308,17.8252489 C27.1713917,17.5346354 27.1033978,17.263755 27.2787018,16.9211181 C27.3753734,16.9946684 27.4942471,16.8735794 27.6806522,16.2896616 C27.7981383,15.9254977 27.9896313,15.5160377 28.1251566,15.1343832 C28.1709484,15.0038762 28.1778866,14.887272 28.1959258,14.7437592 C28.2592942,14.6930812 28.3087864,14.687251 28.3351514,14.757662 C28.4993544,14.4948541 28.6339546,14.3055966 28.7606915,14.066558 C28.8222098,13.9409843 28.8032455,13.9979409 28.8097211,13.986729 C28.8097211,13.986729 28.8069459,13.9844866 28.8018579,13.9773109 C28.7912194,13.9616142 28.7912194,13.9338086 28.8037081,13.9288754 C28.8411741,13.9315662 28.7292385,13.9033121 29.0391428,14.0360615 C29.6543257,14.1401083 30.5049434,14.4625637 30.9411221,14.3975345 C30.9762754,14.3917043 31.0132789,14.3881165 31.0535201,14.3872195 C31.1913581,14.4773635 31.2783163,14.5639197 31.2834043,14.646888 C31.6589897,14.7823283 32.022549,14.9146292 32.3861083,15.0460331 C32.7024881,15.1617403 33.0535587,15.2850717 33.2908436,15.2850717 C33.5891842,15.2850717 33.9952975,15.5048257 34.3694952,15.528595 C34.6877252,15.550122 35.2483281,15.6963257 35.6512036,15.7339978 C35.8820128,15.7550762 36.3070904,15.830869 36.4768439,16.049726 C36.5776784,16.0012905 36.6193073,15.9820059 36.6803631,15.9528549 C36.7256924,15.9950118 36.7603831,16.0255082 36.7936863,16.0564532 L36.8297647,16.1035434 C37.1146915,16.1851663 37.2913832,16.2694801 37.4338466,16.3537939 L38,14.6199794 C37.5457822,14.4948541 36.6035809,14.2423612 36.5281863,14.2293554" id="Fill-8" fill="#000000"></path>
-                    <g id="Group-12" transform="translate(37.000000, 0.000000)">
-                        <mask id="mask-8" fill="white">
-                            <use xlink:href="#path-7"></use>
-                        </mask>
-                        <g id="Clip-11"></g>
-                        <path d="M12.2161829,12.8865231 C12.2833829,12.6460615 12.35104,12.4060615 12.4186971,12.1632923 C12.4954971,11.9062154 12.7098971,11.4894462 12.56544,11.4996 C12.5503543,11.5005231 12.6106971,11.2831385 12.6554971,11.1608308 C12.7642971,10.8866769 12.8744686,10.6083692 12.9892114,10.3185231 C12.9864686,10.2396 13.0106971,10.1588308 13.0024686,10.0817538 C13.0024686,10.0817538 13.0257829,10.0872923 13.0266971,10.0845231 L13.2452114,9.56990769 C13.2767543,9.49513846 13.3988114,9.56021538 13.5021257,9.44852308 C13.6959543,9.23898462 13.90624,8.78713846 13.9866971,8.39113846 C14.09504,7.86221538 14.3464686,7.2816 14.5498971,6.73329231 C14.6394971,6.49236923 14.7213257,6.26990769 14.76704,6.07052308 C14.77984,6.01329231 14.7930971,5.95375385 14.8049829,5.89790769 C14.8282971,5.90390769 14.8424686,5.93344615 14.8447543,6.00175385 C15.0349257,5.53698462 15.1537829,5.65513846 15.3325257,5.26144615 C15.4271543,5.05421538 15.52224,4.84513846 15.6177829,4.63744615 L15.8225829,4.06375385 L15.9213257,3.7776 C15.9313829,3.68390769 15.9418971,3.59252308 15.9290971,3.49929231 C15.9162971,3.23436923 15.79104,2.90483077 15.5944686,2.69806154 C15.41984,2.47698462 15.1482971,2.41052308 15.05824,2.38236923 C14.9549257,2.35883077 14.8420114,2.32375385 14.7231543,2.28083077 L14.5393829,2.21113846 C14.4776686,2.18621538 14.45344,2.18483077 14.4058971,2.16867692 C14.2372114,2.11467692 14.0616686,2.05790769 13.8884114,2.00067692 C13.7713829,1.96606154 13.6543543,1.93052308 13.5272686,1.89083077 C13.4458971,1.84006154 13.36544,1.78975385 13.2872686,1.74175385 C13.27584,1.70529231 13.2625829,1.66467692 13.2452114,1.61206154 C13.1898971,1.61621538 13.1044114,1.57190769 13.0084114,1.54283077 C12.9224686,1.48883077 12.7848686,1.55252308 12.7546971,1.3596 L13.2191543,1.56083077 C12.9873829,1.28206154 12.9672686,1.33052308 12.4314971,1.19529231 C12.2746971,1.09329231 12.12704,0.995907692 11.9665829,0.892523077 C11.7882971,0.832061538 11.6168686,0.774369231 11.4596114,0.721292308 C11.1487543,0.626676923 10.8388114,0.517292308 10.52704,0.394061538 C10.4223543,0.345138462 10.0845257,0.233446154 9.82258286,0.137446154 C9.54555429,0.0114461538 9.27264,-0.0204 8.98921143,0.0566769231 C8.86212571,0.0876 8.71538286,0.163292308 8.61892571,0.244061538 C8.50372571,0.328061538 8.41275429,0.436523077 8.33321143,0.548676923 C8.26829714,0.677907692 8.20338286,0.806676923 8.12201143,0.924369231 L8.02966857,1.20083077 L7.98441143,1.33652308 L7.95881143,1.42606154 L7.87058286,1.75190769 C7.79332571,1.84329231 7.71286857,1.93790769 7.63241143,2.03436923 C7.38006857,2.32744615 7.44224,2.6076 7.25938286,2.9556 C7.16612571,2.87713846 7.04589714,2.99898462 6.84704,3.59483077 C6.72178286,3.96821538 6.52246857,4.38452308 6.37938286,4.7736 C6.33046857,4.90606154 6.32041143,5.02698462 6.29892571,5.17329231 C6.23538286,5.22498462 6.18601143,5.22913846 6.16269714,5.15575385 C5.99401143,5.42298462 5.85641143,5.6136 5.72475429,5.85683077 C5.62601143,6.0396 5.51629714,6.29852308 5.44406857,6.5076 C5.28818286,6.95113846 5.16064,7.38590769 4.90692571,7.79436923 C4.74144,8.39436923 4.33138286,9.20621538 4.35561143,9.64606154 C4.35652571,9.68252308 4.35835429,9.71852308 4.35561143,9.75821538 C4.24955429,9.88606154 4.15264,9.96313846 4.06944,9.96083077 C3.89481143,10.3199077 3.72566857,10.6674462 3.55561143,11.0149846 C3.40795429,11.3177538 3.24841143,11.6542154 3.22555429,11.8891385 C3.19675429,12.1845231 2.93435429,12.5662154 2.87355429,12.9359077 C2.82006857,13.2492923 2.46715429,13.7256 2.39035429,14.1216 C2.34555429,14.3491385 2.22715429,14.7645231 1.98944,14.9099077 C2.02875429,15.0160615 2.04338286,15.0576 2.06715429,15.1217538 C2.02144,15.1632923 1.98669714,15.1928308 1.95149714,15.2242154 L1.90029714,15.2546769 C1.85915429,15.3525231 1.82395429,15.4369846 1.79104,15.5136 C1.77229714,15.5542154 1.77412571,15.5431385 1.76452571,15.5569846 C1.75081143,15.5712923 1.73664,15.5768308 1.72109714,15.5777538 C1.68864,15.5768308 1.65618286,15.5583692 1.63149714,15.5459077 C1.62326857,15.5417538 1.61778286,15.5172923 1.61549714,15.5242154 C1.65298286,15.5597538 1.48978286,15.4891385 1.36726857,15.4263692 C1.23835429,15.3622154 1.10806857,15.2939077 0.999725714,15.2685231 C0.991497143,15.2648308 0.98784,15.2629846 0.981897143,15.2616 L0.419611429,17.0579077 C0.537097143,17.1239077 0.676982857,17.1926769 0.846125714,17.2656 C0.977782857,17.3412923 1.42669714,17.4576 1.78006857,17.5494462 C2.14121143,17.5720615 2.59195429,17.4760615 2.97138286,17.0939077 C2.98875429,17.0740615 3.03035429,17.0283692 3.08932571,16.9600615 C3.14144,16.8848308 3.19492571,16.7694462 3.26532571,16.6452923 C3.33069714,16.5225231 3.40521143,16.3845231 3.48246857,16.2377538 C3.52498286,16.1528308 3.56978286,16.0628308 3.61458286,15.9728308 C3.79195429,15.6146769 3.96749714,15.2579077 3.98029714,15.2112923 C4.04841143,14.9708308 4.11515429,14.7312923 4.18281143,14.4876 C4.26098286,14.2309846 4.47446857,13.8151385 4.32909714,13.8239077 C4.31446857,13.8252923 4.37526857,13.6074462 4.42052571,13.4856 C4.52886857,13.2105231 4.63995429,12.9340615 4.75469714,12.6442154 C4.75104,12.5648308 4.77618286,12.4840615 4.76749714,12.4060615 L4.79309714,12.4106769 L5.01069714,11.8960615 C5.19309714,11.8849846 5.16429714,11.8849846 5.26898286,11.7737538 C5.46189714,11.5651385 5.67218286,11.1119077 5.75264,10.7159077 C5.86052571,10.1874462 6.11149714,9.60775385 6.31538286,9.05852308 C6.40361143,8.81852308 6.48681143,8.5956 6.53252571,8.39621538 C6.54532571,8.33852308 6.55766857,8.27898462 6.57001143,8.22313846 C6.59378286,8.22821538 6.60749714,8.25821538 6.60978286,8.32744615 C6.79995429,7.86175385 6.91835429,7.98036923 7.09846857,7.5876 C7.28452571,7.17821538 7.48246857,6.76790769 7.64932571,6.35529231 C7.76726857,6.06406154 7.92315429,5.62421538 7.91812571,5.50606154 C7.90761143,5.25729231 8.05984,4.8816 8.16544,4.53406154 C8.20018286,4.41590769 8.23584,4.29729231 8.27424,4.16990769 C8.32406857,4.08775385 8.37435429,4.00652308 8.42235429,3.9276 C8.45755429,3.91652308 8.49824,3.90267692 8.55081143,3.8856 C8.54669714,3.82975385 8.59104,3.74252308 8.62075429,3.64652308 C8.67378286,3.55975385 8.76109714,3.48683077 8.80178286,3.38990769 L8.60292571,3.85929231 C8.72909714,3.56113846 8.83058286,3.60544615 8.96452571,3.06498462 C9.06509714,2.90621538 9.16109714,2.75713846 9.26441143,2.59421538 C9.32338286,2.41513846 9.38144,2.24252308 9.43401143,2.08236923 L9.45869714,1.99883077 L9.45778286,1.97944615 L9.45778286,1.93975385 C9.45732571,1.87744615 9.47881143,1.79298462 9.54921143,1.78052308 C9.62509714,1.76990769 9.65709714,1.81098462 9.75492571,1.85990769 C9.82669714,1.89498462 9.92041143,1.92683077 9.99401143,1.94898462 L11.1327543,2.29929231 C11.2237257,2.37729231 11.3183543,2.45806154 11.4129829,2.53929231 C11.7023543,2.7936 11.9793829,2.73175385 12.32544,2.91590769 C12.2481829,3.00913846 12.3684114,3.13098462 12.9585829,3.33267692 C13.1428114,3.39590769 13.3380114,3.47667692 13.5364114,3.56206154 L13.8321829,3.68667692 C13.9021257,3.71667692 13.8682971,3.70098462 13.8906971,3.70836923 L13.9199543,3.71483077 C13.9455543,3.72036923 13.9967543,3.69498462 14.0621257,3.69313846 C14.0401829,3.73098462 13.9962971,3.75636923 13.9400686,3.78267692 C13.9181257,3.84821538 13.8399543,3.87683077 13.8129829,3.87544615 C13.8024686,3.87636923 13.7983543,3.87452308 13.7983543,3.87452308 C13.77184,3.93452308 13.7101257,4.09006154 13.6785829,4.18283077 C13.5231543,4.62636923 13.3956114,5.06113846 13.14144,5.47006154 C12.9764114,6.0696 12.5663543,6.88236923 12.5896686,7.32129231 C12.5914971,7.35729231 12.5928686,7.39421538 12.5905829,7.43344615 C12.48544,7.56175385 12.3885257,7.63975385 12.3044114,7.6356 C12.1297829,7.99513846 11.9601829,8.34313846 11.79104,8.69067692 C11.6433829,8.99344615 11.4842971,9.32898462 11.4618971,9.56483077 C11.4317257,9.86021538 11.1697829,10.2423692 11.1080686,10.6111385 C11.0564114,10.9249846 10.8520686,11.4659077 10.7761829,11.8619077 C10.73184,12.0894462 10.6129829,12.5052923 10.3752686,12.6502154 C10.4145829,12.7563692 10.4296686,12.7988308 10.45344,12.8625231 C10.4063543,12.9036 10.3720686,12.9340615 10.3368686,12.9645231 L10.2861257,12.9949846 C10.17504,13.2696 10.0730971,13.4366769 9.97298286,13.5700615 L11.6762971,14.3085231 C11.8477257,13.8696 12.1956114,12.9599077 12.2161829,12.8865231" id="Fill-10" fill="#000000" mask="url(#mask-8)"></path>
-                    </g>
-                    <path d="M29.2003615,32.5683598 C29.2613571,32.3273725 29.3214491,32.0863851 29.3838002,31.8412507 C29.4533804,31.584136 29.6557956,31.1620625 29.5116652,31.1763467 C29.4976588,31.1768075 29.5523289,30.9583982 29.5943481,30.8353703 C29.6946521,30.5598245 29.7967633,30.2792101 29.9038446,29.9870762 C29.8979709,29.908283 29.9214655,29.827186 29.9110737,29.7497751 C29.9097182,29.7474712 29.9336647,29.7553044 29.9350201,29.7525398 L30.1383389,29.2341635 C30.1677072,29.1576742 30.2892467,29.2198793 30.3900025,29.1056061 C30.5761521,28.8918047 30.7726937,28.4356336 30.8436293,28.0379813 C30.9376078,27.5080856 31.1716504,26.9238179 31.3596073,26.3695008 C31.4418385,26.1280527 31.518196,25.9041141 31.5588598,25.7045968 C31.5697034,25.6460779 31.5814508,25.5866374 31.5918426,25.5308832 C31.6148854,25.5350302 31.6297954,25.5649808 31.6343136,25.6331761 C31.8091678,25.1650247 31.9307073,25.2788371 32.0974287,24.8825672 C32.2722829,24.47017 32.4579808,24.0550082 32.6129549,23.6398464 C32.7227471,23.3458694 32.8659739,22.9026001 32.8582929,22.7851015 C32.8501602,22.6616127 32.8813357,22.5044871 32.9269695,22.335842 L32.9631151,22.2063631 C32.9726033,22.1708832 32.9685369,22.16904 32.9730551,22.1492265 L32.9875133,22.0432474 C32.9938388,21.9930225 33.0064898,21.9381898 33.0412799,21.8916511 C33.0805882,21.8847394 33.1203483,21.8847394 33.1578493,21.8953374 C33.1750185,21.9243664 33.1958022,21.9575425 33.2161341,22.0050027 C33.2224595,21.9759737 33.2527315,21.9851892 33.278937,21.9838069 C33.2992689,22.0063851 33.3557463,21.9068568 33.3485172,22.0764235 C33.3485172,22.0764235 33.2369178,22.0386396 33.2355623,22.044169 C33.2875216,22.1395502 33.2875216,22.1736478 33.3037871,22.1736478 C33.311468,22.1745694 33.3196008,22.1667361 33.3363181,22.156599 C33.3629754,22.1496873 33.5048468,22.1736478 33.6277417,22.1906967 C33.7913004,22.2764015 33.9467264,22.3584202 34.1138996,22.4455074 C34.2941756,22.4878991 34.4690298,22.5284476 34.6303294,22.5657707 C35.257455,22.6911026 35.8927134,22.8758749 36.54243,23.1173231 C36.6165284,23.1445091 36.7118623,23.1666264 36.7859607,23.1809106 L37.9394562,23.4163686 C38.0361456,23.4859462 38.1359977,23.5559846 38.2385607,23.6274054 C38.5480572,23.8522655 38.8146307,23.761492 39.17202,23.9112452 C39.1051507,24.0126166 39.2357266,24.1204388 39.8352912,24.261898 C40.2093978,24.3512891 40.6359156,24.5102578 41.0285468,24.6148546 C41.1622854,24.6507954 41.2811139,24.6494131 41.426148,24.655864 C41.4826255,24.7153044 41.4912101,24.764147 41.4225335,24.7950192 C41.7026616,24.9387822 41.8874558,25.0548985 42.1585476,25.1673286 C42.3474082,25.2244652 42.5742216,25.2866703 42.8032942,25.3451892 C43.0332704,25.4096983 43.2587283,25.3636204 43.4521071,25.3032584 C43.8573893,25.1696325 44.2116159,24.8973121 44.3833073,24.4968952 C44.476834,24.3075151 44.5681015,24.1213604 44.6629837,23.9278332 C44.712232,23.8236972 44.7669022,23.7200219 44.8297051,23.6181898 C44.9937156,23.019638 45.398546,22.2077455 45.3755032,21.7690839 C45.3736959,21.7331432 45.3723404,21.6962809 45.3755032,21.6580362 C45.4789699,21.5294789 45.5752074,21.452068 45.6574386,21.4552935 C45.8313891,21.0972682 45.9981106,20.7503017 46.164832,20.4028744 C46.3112216,20.0996818 46.4684548,19.7646956 46.4914976,19.5301591 C46.5199622,19.2347998 46.7788548,18.8541964 46.8398505,18.4846517 C46.8909061,18.1722436 47.2415181,17.6967197 47.3174238,17.3004498 C47.3603467,17.0737466 47.4778198,16.6595063 47.7136696,16.5139002 C47.6743613,16.4088426 47.6589994,16.3664509 47.6355048,16.3024026 C47.6815904,16.2618541 47.7159287,16.2314427 47.7498152,16.2001097 L47.8008708,16.1692375 C48.1121745,15.3891388 48.2106712,15.4057268 48.5179085,14.7021174 C48.5563132,14.6118047 48.6340261,14.4832474 48.6398998,14.4482282 C48.6737862,14.2570049 48.9209316,13.9704004 48.9905118,13.7584421 C48.99503,13.7492265 48.9968373,13.7464619 49,13.7413933 L47.3038692,13 C47.229319,13.1115085 47.1488951,13.2451344 47.0603385,13.4077894 C46.846176,13.8012946 46.7300583,14.1155458 46.4856239,14.6790784 C46.4381829,14.7901262 45.7699417,16.120395 45.7455434,16.2134723 C45.6786741,16.4530773 45.6118048,16.6926824 45.5449355,16.9359737 C45.468578,17.191706 45.2566746,17.6082501 45.3999014,17.598113 C45.4148115,17.5976522 45.3547195,17.8146791 45.3104411,17.9367855 C45.2029081,18.2095666 45.0940196,18.4869556 44.9806128,18.7763247 C44.985131,18.8555787 44.9584737,18.9366758 44.9670582,19.0131651 C44.9670582,19.0168513 44.9435636,19.0076358 44.94266,19.0099397 L44.7257866,19.5232474 C44.5464142,19.5343061 44.5753306,19.5343061 44.4727676,19.6458146 C44.2816479,19.8545474 44.0742627,20.3061108 43.993387,20.7014591 C43.8872094,21.2295118 43.6391604,21.8073286 43.4385525,22.3574986 C43.3495441,22.5966429 43.2682165,22.8187383 43.2225828,23.0173341 C43.2108355,23.0763138 43.1977327,23.1348327 43.1864372,23.1896654 C43.1633944,23.1845968 43.1489362,23.155107 43.1466771,23.0864509 C43.1231825,23.1449698 43.1010433,23.1933516 43.0798078,23.2357433 C43.0554095,23.2845858 43.0563132,23.2666155 43.0432104,23.2813604 C43.0228785,23.2942622 43.0011912,23.2970269 42.9804075,23.2961053 C42.9374846,23.2942622 42.9045018,23.2804388 42.8760371,23.2984092 C42.8448616,23.3177619 42.8023905,23.315458 42.7725704,23.2965661 L42.7273885,23.275831 L42.4450012,23.1859792 C42.1504149,23.0961273 41.706728,22.9827756 41.5919658,22.9998245 C41.3502423,23.0353044 40.9707139,22.9191882 40.6219091,22.8463851 C40.5026288,22.8238069 40.384252,22.7998464 40.2559353,22.7740428 C40.1709932,22.7316511 40.0878584,22.6897202 40.0056272,22.6487109 C39.9907172,22.6146133 39.973548,22.5754471 39.9514089,22.5243006 C39.8976423,22.5344377 39.8095375,22.4980362 39.7128481,22.4782227 C39.6220324,22.4335272 39.5429639,22.3528908 39.4449191,22.3215579 L39.9215888,22.4749973 C39.6188696,22.3773121 39.6518525,22.2717937 39.111928,22.1902359 C38.9474657,22.104531 38.7924916,22.0234339 38.6244147,21.9358859 C38.4441387,21.893955 38.2692845,21.8534065 38.1093403,21.8156226 C37.4813111,21.68983 36.8451491,21.5059792 36.1963362,21.2654526 C36.1222377,21.2378058 36.0269038,21.2152276 35.9528054,21.1995612 L34.7997618,20.9645639 C34.7026206,20.8972902 34.6005093,20.8254087 34.5002054,20.7544487 C34.3452312,20.6420187 34.2011008,20.6088426 34.0506449,20.5844213 C33.9711246,20.5715195 33.8879898,20.5572353 33.804855,20.5429512 C33.6693091,20.5180691 33.5287932,20.4858146 33.3724636,20.436972 C33.4036392,20.3862863 33.3561981,20.3291498 33.1601084,20.2531212 C32.978477,20.2005924 32.5989485,20.1830828 32.1656535,20.5134613 C32.0323667,20.616215 31.9144418,20.74339 31.8227224,20.8963686 C31.7445576,21.0668568 31.665941,21.2410313 31.5859689,21.4161273 C31.4874723,21.6248601 31.4698513,21.6856829 31.4287357,21.793966 C31.3916865,21.8944158 31.3559928,21.993944 31.3207508,22.09209 C31.2760207,22.2261766 31.2683398,22.3459792 31.2507188,22.4925069 C31.1892713,22.5459572 31.1413785,22.5519473 31.1160766,22.4791443 C30.9556806,22.7496215 30.8242011,22.9431487 30.6994989,23.1896654 C30.6059722,23.3748985 30.5052165,23.6352386 30.4383472,23.8453538 C30.2955722,24.2923094 30.1799064,24.7291278 29.9381829,25.1438289 C29.7895342,25.7465277 29.4036803,26.5676358 29.4371149,27.0058365 C29.439374,27.0413165 29.4416331,27.077718 29.4398258,27.1164235 C29.3399737,27.2468239 29.2464471,27.3269995 29.1628604,27.3260779 C28.9993017,27.6887109 28.8389058,28.0402852 28.6807689,28.390938 C28.5416085,28.697356 28.392508,29.0355677 28.3753389,29.2719473 C28.3536515,29.5677674 28.1033435,29.9543609 28.0513842,30.3239057 C28.0071059,30.6395392 27.8186971,31.1841799 27.7522796,31.5822929 C27.7143268,31.8099177 27.6076974,32.2269227 27.3754621,32.3780581 C27.4165777,32.482655 27.4328432,32.5241251 27.4581451,32.5877126 C27.4129631,32.6296434 27.3808839,32.6605156 27.345642,32.6927702 L27.2959418,32.7250247 C27.192927,33.0010313 27.0957858,33.1715195 27,33.3065277 L28.7015526,34 C28.8596895,33.5590346 29.1818369,32.6425453 29.2003615,32.5683598" id="Fill-13" fill="#000000"></path>
-                    <path d="M8.0877915,52.2403538 C8.15180613,52.0106051 8.2171925,51.7804162 8.28212163,51.5480267 C8.3561957,51.3024333 8.565615,50.9027938 8.42112483,50.9137971 C8.40603567,50.9155576 8.46410608,50.706055 8.50800183,50.5898602 C8.61362597,50.3279819 8.7219936,50.0612621 8.83310471,49.7835391 C8.82853224,49.7078364 8.85276635,49.6308134 8.84316415,49.5564312 C8.8427069,49.5537904 8.86694102,49.5617127 8.86694102,49.5617127 L9.08001829,49.0670048 C9.11156836,48.9948232 9.23411065,49.0555614 9.33653406,48.9481693 C9.52812071,48.7470291 9.73342478,48.3126192 9.80978509,47.9354264 C9.9122085,47.4288349 10.1563786,46.8742691 10.354824,46.3469914 C10.4407865,46.1176828 10.521262,45.904219 10.5642433,45.7140821 C10.5761317,45.6586255 10.5893919,45.6031689 10.6003658,45.5494729 C10.6241427,45.5534341 10.6387746,45.5816025 10.6415181,45.6476222 C10.8257888,45.2026492 10.9465021,45.3131222 11.1211706,44.9368097 C11.303155,44.5442123 11.4970279,44.1511747 11.6593507,43.7568168 C11.7736626,43.4773332 11.9250114,43.0556871 11.9190672,42.9434536 C11.9053498,42.7057825 12.0530407,42.3466351 12.1550069,42.0143357 C12.1888432,41.901662 12.223594,41.7881081 12.2597165,41.6661916 C12.3100137,41.5869679 12.3584819,41.5086245 12.4060357,41.4329218 C12.4412437,41.4214784 12.4814815,41.4082745 12.5345222,41.3911093 C12.5290352,41.3378534 12.5720165,41.2551087 12.5989941,41.1622409 C12.6529492,41.079056 12.5875629,40.9483369 12.7777778,40.9162073 L12.5834476,41.3655817 C12.8577961,41.1397942 12.8093278,41.1208685 12.9368999,40.6037139 C13.0365798,40.4514283 13.13123,40.3075053 13.2327389,40.152579 C13.2908093,39.9804875 13.345679,39.814998 13.3968907,39.6622723 C13.5770462,39.0645736 13.8148148,38.4620334 14.1115684,37.852011 C14.1284865,37.8168005 14.1440329,37.7771886 14.1591221,37.7375768 L14.1778692,37.6785991 L14.1778692,37.6631945 C14.1614083,37.5663656 14.2057613,37.3863517 14.3575674,37.3731478 C14.3895748,37.403957 14.4160951,37.4391675 14.4371285,37.4699767 L14.4590764,37.5091485 C14.4764518,37.5285142 14.4540466,37.5320353 14.5025149,37.5527215 C14.5404664,37.5698866 14.5788752,37.5839708 14.6168267,37.5954142 C14.6922725,37.617861 14.7668038,37.6301846 14.8431642,37.6403077 C14.9954275,37.6601136 15.1545496,37.6711169 15.3360768,37.7380169 C15.2711477,37.8361662 15.4051212,37.9365163 16.0146319,38.0584327 C16.3968907,38.1358959 16.8303612,38.2780584 17.2299954,38.3700459 C17.3667124,38.4017354 17.486054,38.3973341 17.6337449,38.3995347 C17.6918153,38.4563117 17.702332,38.500765 17.6323731,38.5324545 C17.9154092,38.6627334 18.1193416,38.7727663 18.3758573,38.8709157 C18.5669867,38.9435374 18.8349337,39.0183598 19.0489255,39.0641335 C19.5034294,39.1614026 19.9465021,39.233144 20.3799726,39.4281223 C20.9890261,39.517469 21.8372199,39.8154381 22.2670325,39.7423763 C22.3026978,39.7370947 22.3379058,39.7309329 22.3772291,39.7291723 C22.515775,39.814998 22.6035665,39.898623 22.611797,39.9791671 C22.7974394,40.0416658 22.9821674,40.1037244 23.1650663,40.1649026 C23.1929584,40.1776665 23.2926383,40.2009934 23.3813443,40.2225599 L23.6483768,40.2885796 C23.8267032,40.3290717 24.0100594,40.3928908 24.1815272,40.376606 C24.8139003,40.3669231 25.4069502,39.8937816 25.4933699,39.4756565 C25.5098308,39.4369249 25.523091,39.4008342 25.5381802,39.3638631 C25.5724737,39.2437072 25.6314586,39.0852598 25.6739826,38.9752269 C25.704161,38.8999644 25.73754,38.8220611 25.7695473,38.7410769 C25.8372199,38.5804288 25.905807,38.4136189 25.9295839,38.2494498 C25.9734797,37.9483998 26.3159579,37.4871419 26.3831733,37.106428 C26.4220393,36.889003 26.530407,36.491124 26.7654321,36.3463207 C26.7238226,36.2464108 26.7069044,36.206799 26.6817558,36.146501 C26.7274806,36.106449 26.7608596,36.0760799 26.7946959,36.0457108 L26.8459076,36.0153417 C27.1412894,35.2627167 27.2427984,35.2768009 27.5354367,34.5967975 C27.5720165,34.511412 27.647005,34.3859745 27.6529492,34.3516442 C27.6822131,34.1676692 27.9254687,33.8886257 27.9903978,33.6844047 C27.9954275,33.6769224 27.9972565,33.6725211 28,33.6681198 L26.2665752,33 C26.1929584,33.1095928 26.1147691,33.2381112 26.0297211,33.3956783 C25.8230453,33.7763922 25.7123914,34.0792027 25.4791952,34.6236455 C25.4330133,34.7310377 24.7896662,36.0171023 24.7672611,36.1060088 C24.7050754,36.3370779 24.6433471,36.5672668 24.5820759,36.8005365 C24.5102881,37.0465701 24.306813,37.4497307 24.4513032,37.4365267 C24.4659351,37.4356465 24.4110654,37.6442689 24.3685414,37.761784 C24.2816644,37.9884518 24.1943301,38.2173202 24.1024234,38.4580722 L24.1074531,38.4677551 C24.1216278,38.5034058 24.1197988,38.534215 24.138546,38.5804288 C24.136717,38.5791084 24.1184271,38.5663446 24.1184271,38.5663446 C24.1184271,38.5663446 24.0973937,38.6156393 24.0553269,38.6482091 C24.0155464,38.6834196 23.962963,38.6975038 23.962963,38.6975038 C23.8719707,38.534215 23.8884316,38.5619433 23.8417924,38.5078071 C23.8029264,38.4536709 23.7814358,38.4153795 23.7576589,38.4034959 C23.572931,38.3453985 23.347508,38.2974242 23.1499771,38.28334 C22.6168267,38.2410873 22.0169182,38.0685557 21.4517604,37.9360761 C21.2043896,37.8797393 20.9762231,37.8260432 20.7741198,37.805357 C20.7146776,37.7996353 20.6566072,37.7943537 20.5994513,37.7899524 C20.6021948,37.7661853 20.6291724,37.7490202 20.696845,37.7402176 C20.216278,37.611259 20.3187014,37.4845011 19.9103795,37.3577432 C19.486054,37.2274642 19.0580704,37.0857418 18.6323731,36.9730681 C18.3315043,36.8942846 17.8797439,36.7965754 17.7645176,36.8150609 C17.521262,36.8529122 17.1321445,36.7516819 16.7791495,36.6905036 C16.657979,36.6698175 16.5377229,36.6500115 16.4074074,36.6284451 C16.3209877,36.5892734 16.2341107,36.551422 16.1522634,36.5148911 C16.1353452,36.4823214 16.1175126,36.4453503 16.094193,36.3969358 C16.0397805,36.4070589 15.9492455,36.374049 15.8513946,36.3582043 C15.7581161,36.3168319 15.6771834,36.2415694 15.5765889,36.2138411 L16.0617284,36.3498418 C15.7544582,36.2631358 15.7850937,36.1623457 15.2368541,36.0963259 C15.1577503,36.0593549 15.0804755,36.0232641 15.003658,35.9871733 C14.9775949,35.9730891 14.9021491,35.9453608 14.8239598,35.9154319 C14.7489712,35.8881437 14.6735254,35.8586549 14.5967078,35.8300463 L14.5400091,35.8146417 C14.2025606,35.7464213 13.8875171,35.7811917 13.6282579,35.8969463 C13.3749428,36.0043384 13.1508916,36.1843523 12.9935985,36.4000168 C12.9176955,36.5118102 12.872428,36.6526523 12.8093278,36.7758892 L12.7201646,36.9673464 C12.6881573,37.0342464 12.6593507,37.096305 12.650663,37.1240333 C12.5313214,37.4250833 12.3982625,37.7278939 12.2496571,38.0337853 C12.216278,38.102886 12.1851852,38.193113 12.1641518,38.2648544 L11.829904,39.3638631 C11.7530864,39.4523296 11.6748971,39.5447572 11.5953361,39.6363046 C11.3465935,39.9179888 11.4106081,40.1847086 11.2318244,40.5183283 C11.1380887,40.4452665 11.0192044,40.5632218 10.8257888,41.1327521 C10.7055327,41.4888186 10.5102881,41.8880179 10.3712849,42.2616897 C10.3241884,42.3884476 10.3155007,42.5033219 10.2953818,42.6432838 C10.2322817,42.6934588 10.1838134,42.6978601 10.1586648,42.6291996 C9.99359854,42.8844759 9.85779607,43.0680108 9.72885231,43.3017207 C9.63100137,43.4773332 9.52629172,43.7255675 9.45496113,43.9249471 C9.30452675,44.3487938 9.1824417,44.7655985 8.93278464,45.1577557 C8.77366255,45.7321275 8.37265661,46.5107203 8.40146319,46.9297257 C8.40283493,46.9640559 8.40420668,46.9988263 8.40192044,47.0362375 C8.29858253,47.1594744 8.20256059,47.2338566 8.11796982,47.2325362 C7.9478738,47.5767191 7.78143576,47.9103389 7.6168267,48.2435185 C7.47187929,48.5335653 7.31641518,48.8553015 7.29583905,49.0802087 C7.27069044,49.3627732 7.01143118,49.7289628 6.95427526,50.0823884 C6.90534979,50.3812378 6.70781893,50.9005931 6.63465935,51.2782261 C6.59350709,51.4960912 6.47965249,51.8926498 6.24279835,52.0339321 C6.28349337,52.1347222 6.29949703,52.1747742 6.32327389,52.2350722 C6.27663466,52.2751242 6.24371285,52.3041729 6.20896205,52.3349821 L6.15775034,52.3640308 C6.08824874,52.532161 6.09693644,52.4973906 6.06812986,52.5365624 C6.04618198,52.5576887 6.02286237,52.5678117 6,52.5700124 L7.30772748,54 C7.40649291,53.805902 7.53132144,53.558548 7.66438043,53.2957894 C7.69318701,53.237692 7.74028349,53.1496657 7.75445816,53.1131348 L7.79698217,53.0044223 C7.8253315,52.9322407 7.85276635,52.8591788 7.88065844,52.789638 C7.98491084,52.5101545 8.07361683,52.2768847 8.0877915,52.2403538" id="Fill-15" fill="#000000"></path>
-                </g>
-                <g id="Group-15" transform="translate(203.000000, 378.000000)">
-                    <path d="M5.26116369,18.2052576 C5.35661925,18.6158699 5.73048684,18.7905257 6.09225676,18.5936099 L32.6232664,4.11909639 C32.9843734,3.92200931 33.1075044,3.46499331 32.8975354,3.10318185 L32.4214176,2.28675162 C32.2109514,1.92459769 31.7046724,1.65028535 31.2968319,1.67631249 L2.58741384,3.52988993 C2.17940763,3.55625953 1.92436232,3.91344775 2.02014932,4.32388887 L5.26116369,18.2052576 Z" id="Fill-1" fill="#000000"></path>
-                    <g id="Group-5" transform="translate(4.000000, 0.674603)">
-                        <mask id="mask-10" fill="white">
-                            <use xlink:href="#path-9"></use>
-                        </mask>
-                        <g id="Clip-4"></g>
-                        <path d="M24.3817797,2.03458909 C24.6482203,1.99024364 24.9117797,1.94573455 25.1858475,1.89909818 C25.4731356,1.85557091 25.9836441,1.85557091 25.9036441,1.74364364 C25.895678,1.73235273 26.1366949,1.69095273 26.2780508,1.67720727 C26.5960169,1.65200727 26.9221186,1.62549818 27.2605932,1.59833455 C27.3341525,1.56282545 27.4434746,1.54809818 27.4488983,1.51880727 C27.4499153,1.51766182 27.4504237,1.54008 27.4514407,1.54008 C27.4482203,1.53828 27.5099153,1.53860727 27.5941525,1.56429818 C27.6355085,1.57460727 27.6765254,1.59080727 27.7073729,1.60668 C27.7390678,1.61911636 27.7590678,1.62877091 27.7590678,1.62958909 C27.8007627,1.65904364 27.7417797,1.75788 27.765678,1.83773455 C27.7660169,1.85344364 27.7904237,1.87929818 27.7768644,1.88273455 C27.7673729,1.88797091 27.7599153,1.88731636 27.7575424,1.88224364 C27.7821186,1.92429818 27.8083898,1.96717091 27.8344915,2.01069818 L27.8372034,2.01478909 L27.8378814,2.01609818 L27.8382203,2.01642545 L27.8387288,2.01642545 C27.7607627,1.90237091 27.8172034,1.98500727 27.7994068,1.95997091 L27.8007627,1.96193455 L27.8051695,1.97060727 L27.8148305,1.98828 L27.8341525,2.02378909 L27.8744915,2.09480727 C27.9304237,2.18955273 27.9931356,2.28544364 28.0594068,2.37773455 C28.0877119,2.41618909 28.1370339,2.48524364 28.1514407,2.49637091 L28.1873729,2.50946182 C28.2665254,2.53057091 28.3202542,2.62728 28.2787288,2.70451636 C28.2609322,2.74280727 28.2248305,2.77078909 28.1855085,2.79369818 L28.1565254,2.81218909 L28.0639831,2.86406182 L27.8538136,2.97958909 C27.6136441,3.11491636 27.3905932,3.24009818 27.2124576,3.36757091 C27.1605932,3.40471636 27.1094068,3.44186182 27.0595763,3.47835273 C27.044661,3.46231636 27.054322,3.43204364 27.1022881,3.37853455 C26.6217797,3.63037091 26.6122881,3.47622545 26.1917797,3.67995273 C25.7536441,3.89120727 25.3055085,4.09755273 24.8809322,4.32173455 C24.5804237,4.48046182 24.1444915,4.73164364 24.064322,4.82426182 C23.8948305,5.01964364 23.5075424,5.22353455 23.1770339,5.43168 C23.064661,5.50286182 22.9527966,5.57420727 22.8316102,5.64997091 C22.7331356,5.68580727 22.6366949,5.72082545 22.5424576,5.75502545 C22.5065254,5.74553455 22.465339,5.73358909 22.4114407,5.71918909 C22.375,5.76369818 22.2790678,5.80591636 22.1873729,5.86368 C22.0829661,5.90115273 22.034322,6.04040727 21.8622881,5.96235273 L22.3531356,5.71166182 C21.9702542,5.74095273 21.9934746,5.78218909 21.5021186,6.12320727 C21.3127966,6.18768 21.124661,6.25231636 20.9316102,6.31858909 C20.7548305,6.42233455 20.5821186,6.52362545 20.4334746,6.61804364 C19.8399153,6.99391636 19.1997458,7.34066182 18.5082203,7.66286182 C18.4295763,7.69918909 18.3373729,7.75449818 18.2672034,7.79917091 L17.174661,8.48775273 C17.0478814,8.51638909 16.9165254,8.54617091 16.7861864,8.57529818 C16.3804237,8.66284364 16.2283898,8.90993455 15.8366949,9.07668 C15.8199153,8.96737091 15.6388983,8.99584364 15.0572034,9.34193455 C14.6933051,9.55826182 14.2397458,9.76869818 13.8500847,9.98813455 C13.7173729,10.06308 13.6229661,10.1493164 13.5016102,10.2499527 C13.4148305,10.2543709 13.3731356,10.2319527 13.4066949,10.1635527 C13.0848305,10.2758073 12.8407627,10.3473164 12.5633051,10.4621891 C12.3563559,10.5482618 12.085678,10.6873527 11.8794068,10.8068073 C11.4414407,11.0614255 11.0311017,11.3235709 10.5407627,11.4986618 C9.98262712,11.8661891 9.08177966,12.2652982 8.78686441,12.6123709 C8.76228814,12.6408436 8.7370339,12.6693164 8.70720339,12.6971345 C8.5329661,12.7390255 8.40228814,12.7460618 8.33838983,12.6987709 C7.94533898,12.8777891 7.56432203,13.0518982 7.18398305,13.2258436 C6.85127119,13.3770436 6.48754237,13.5473891 6.30161017,13.71348 C6.06737288,13.92408 5.58991525,14.0728255 5.27805085,14.3217164 C5.01313559,14.5328073 4.39601695,14.7054436 4.05279661,14.9661164 C3.85686441,15.1146982 3.46754237,15.3675164 3.17669492,15.3506618 C3.13127119,15.4524436 3.11364407,15.4922073 3.08669492,15.5540618 C3.02144068,15.56028 2.97228814,15.5648618 2.92313559,15.5697709 L2.86059322,15.5653527 C2.49415254,15.7597527 2.28076271,15.8513891 2.08330508,15.9312436 C1.98466102,15.9701891 1.89025424,16.0079891 1.78245763,16.0511891 C1.755,16.0621527 1.72771186,16.0737709 1.69838983,16.08588 C1.67550847,16.0952073 1.62364407,16.1194255 1.63313559,16.1127164 C1.62584746,16.1117345 1.61923729,16.11108 1.61313559,16.1117345 C1.61025424,16.1109164 1.60567797,16.1117345 1.60076271,16.1136982 C1.5929661,16.1166436 1.58601695,16.0965164 1.58313559,16.1050255 C1.57245763,16.1310436 1.56279661,16.1079709 1.57127119,16.08228 C1.57788136,16.0557709 1.59771186,16.03548 1.59110169,16.0423527 L1.59245763,16.04088 L0.159067797,17.2463891 C0.246186441,17.4535527 0.407711864,17.6775709 0.695508475,17.8443164 C0.901949153,17.9516618 1.12161017,17.999935 1.33872881,17.999935 C1.44771186,17.9901164 1.55533898,17.98848 1.67076271,17.9482255 C1.78618644,17.9086255 1.905,17.8673891 2.03042373,17.8236982 C2.24686441,17.7142255 2.5109322,17.5805345 2.83686441,17.4157527 C2.95398305,17.3579891 4.43347458,16.7055709 4.52025424,16.6484618 C4.74364407,16.5021709 4.96567797,16.3571891 5.19601695,16.2059891 C5.4390678,16.0526618 5.90483051,15.8502436 5.78415254,15.7797164 C5.77110169,15.7725164 5.97432203,15.6391527 6.09720339,15.5704255 C6.37669492,15.4211891 6.66262712,15.2683527 6.95957627,15.1091345 C7.01279661,15.0471164 7.09059322,14.9991709 7.13957627,14.9353527 C7.14127119,14.9330618 7.15347458,14.9526982 7.15550847,14.95188 L7.69483051,14.6771345 C7.84415254,14.7669709 7.82144068,14.7512618 7.98279661,14.72148 C8.28364407,14.6668255 8.77110169,14.4351164 9.11686441,14.1767345 C9.57923729,13.8321164 10.1888983,13.5252982 10.7416102,13.2156982 C10.9824576,13.0813527 11.2058475,12.9566618 11.3836441,12.8290255 C11.435678,12.7910618 11.4866949,12.7539164 11.5365254,12.7172618 C11.5507627,12.7341164 11.5412712,12.7635709 11.4938136,12.8177345 C11.9739831,12.5654073 11.9833051,12.7192255 12.4038136,12.5163164 C12.8421186,12.3053891 13.2900847,12.0982255 13.714661,11.8740436 C14.014661,11.7156436 14.4519492,11.4644618 14.5321186,11.3711891 C14.7012712,11.1764618 15.0882203,10.9719164 15.4194068,10.7647527 C15.5317797,10.6929164 15.6434746,10.6220618 15.7638136,10.5458073 C15.8621186,10.5102982 15.9594068,10.4754436 16.0533051,10.4407527 C16.0895763,10.4508982 16.1307627,10.4621891 16.184322,10.4772436 C16.2207627,10.43208 16.3173729,10.3908436 16.4090678,10.3327527 C16.5129661,10.2949527 16.6331356,10.2867709 16.7338136,10.2348982 L16.2433051,10.4852618 C16.555,10.3260436 16.6027966,10.4142436 17.0948305,10.07388 C17.2829661,10.0087527 17.4707627,9.94444364 17.6639831,9.87768 C17.8414407,9.77344364 18.0136441,9.67280727 18.1626271,9.57822545 C18.7561864,9.20251636 19.3960169,8.85560727 20.0875424,8.53308 C20.1668644,8.49691636 20.2582203,8.44128 20.3290678,8.39726182 L21.4211017,7.70835273 C21.5480508,7.67922545 21.6795763,7.64993455 21.8092373,7.62031636 C22.215678,7.53277091 22.3677119,7.28649818 22.7590678,7.11877091 C22.7758475,7.22808 22.9572034,7.19977091 23.5388983,6.85417091 C23.9022881,6.63751636 24.3558475,6.42691636 24.745339,6.20797091 C24.8787288,6.13269818 24.9722881,6.04646182 25.0938136,5.94615273 C25.1809322,5.94140727 25.2222881,5.96349818 25.1888983,6.03223411 C25.5109322,5.92046182 25.755339,5.84878909 26.0319492,5.73358909 C26.2397458,5.64768 26.5099153,5.50891636 26.7160169,5.38913455 C27.1544915,5.13468 27.564661,4.87237091 28.0551695,4.69711636 C28.1944915,4.60531636 28.3555085,4.51155273 28.5227966,4.41729818 C28.6070339,4.36968 28.6922881,4.32271636 28.7773729,4.27411636 L28.9048305,4.20342545 L29.1361864,4.06613455 C29.7970339,3.73248 29.9944915,3.05175273 29.8866949,2.70451636 C29.8739831,2.64626182 29.8627966,2.58768 29.8373729,2.52451636 C29.8509322,2.24682545 29.7999153,2.04866182 29.8366949,1.97257091 C29.6117797,1.54711636 29.5558475,1.45777091 29.445339,1.25911636 L29.3692373,1.12444364 L29.3504237,1.09040727 L29.3411017,1.07371636 L29.2877119,0.99468 L29.2439831,0.931025455 C29.2261864,0.906152727 29.2224576,0.896170909 29.1929661,0.859189091 L29.0768644,0.728770909 L28.9522881,0.604407273 L28.8507627,0.521443636 C28.6116102,0.328516364 28.3416102,0.184025455 28.0478814,0.103843636 C27.9080508,0.0591709091 27.7465254,0.0405163636 27.6039831,0.032234114 C27.4504237,0.0308618182 27.285678,0.0457527273 27.2544915,0.0660436364 C26.9514407,0.163898182 26.4526271,0.11088 26.0624576,0.21348 C25.7314407,0.300698182 25.104322,0.360589091 24.6809322,0.461225455 C24.4387288,0.520298182 23.9761864,0.595734545 23.7183898,0.464661818 C23.6344915,0.539116364 23.6009322,0.569552727 23.5499153,0.614552727 C23.4870339,0.594261818 23.4412712,0.579370909 23.3939831,0.563825455 L23.3390678,0.536007273 C23.0172034,0.560552727 22.804661,0.54648 22.6263559,0.521116364 L22.7344915,2.18677091 C23.244661,2.14422545 24.3004237,2.04866182 24.3817797,2.03458909" id="Fill-3" fill="#000000" mask="url(#mask-10)"></path>
-                    </g>
-                    <path d="M5.64716869,16.3863544 C5.55595186,16.1378771 5.46540946,15.8915576 5.3713263,15.635611 C5.27724313,15.3653898 5.18939846,14.8734147 5.08958263,14.970847 C5.07929755,14.9804741 4.99583668,14.7545705 4.95756271,14.6209538 C4.87679956,14.3181998 4.79401313,14.0086406 4.70819175,13.6871305 C4.65895826,13.6209031 4.63012633,13.5350896 4.57836373,13.4733437 C4.57667765,13.4713519 4.59809084,13.4637167 4.59758502,13.4613929 L4.45595445,12.8821105 C4.43521569,12.7971269 4.56167155,12.7795326 4.57178802,12.6191926 C4.59050349,12.3197583 4.47888511,11.799234 4.30589349,11.406683 C4.07490078,10.8818431 3.91893855,10.2262082 3.7452725,9.62435201 C3.66923037,9.36243002 3.59959534,9.11876622 3.51613447,8.91825813 C3.49118051,8.85949997 3.46656377,8.80157172 3.44262146,8.74513733 C3.46201136,8.73551028 3.49033748,8.75260659 3.53215221,8.8108668 C3.39777178,8.29183635 3.55390262,8.32138141 3.4542554,7.87173207 C3.3507302,7.40332659 3.25411792,6.92628997 3.13474359,6.46651563 C3.04942803,6.14218384 2.90560556,5.66498124 2.8331042,5.56588908 C2.75655625,5.46115348 2.69113642,5.30380111 2.62858292,5.12719465 C2.61340821,5.08304303 2.59789629,5.03839347 2.58221577,4.99225005 C2.56754689,4.94726852 2.5656922,4.95357589 2.55608155,4.9313341 L2.50735389,4.82991817 C2.48644653,4.78111902 2.4687427,4.72451864 2.47599284,4.66293876 C2.50684807,4.63289574 2.54427901,4.61181583 2.58305881,4.59969904 C2.61340821,4.61596542 2.64662395,4.63472156 2.68590957,4.66227482 C2.68051412,4.63488754 2.71356126,4.62808222 2.73969547,4.6151355 C2.76650411,4.62160886 2.77206817,4.56998799 2.80899328,4.59870314 C2.82113304,4.60949206 2.8352961,4.63073795 2.84979637,4.66841621 L2.82905761,4.66941211 C2.79348136,4.67306375 2.75503878,4.67007605 2.72232886,4.68700637 C2.83242977,4.75389772 2.83361002,4.77995713 2.85451739,4.75837928 C2.8610931,4.75074404 2.86935488,4.74078502 2.87947135,4.72933216 C2.92836762,4.71422766 3.04200929,4.69314776 3.15160437,4.67007605 C3.35039299,4.68650841 3.54783274,4.70227685 3.75151099,4.71837725 C3.95603227,4.69331374 4.15482089,4.66941211 4.33034163,4.64219082 C5.02770356,4.53330563 5.75474047,4.47039788 6.51836528,4.45097781 C6.60570413,4.44882002 6.71226427,4.43437946 6.7948821,4.42176471 L8.07680735,4.22441031 C8.20376903,4.24930784 8.33511452,4.27437135 8.46679723,4.29960084 C8.87179321,4.38226063 9.11408264,4.21461728 9.5401546,4.21760498 C9.50879355,4.32599222 9.68532593,4.3724676 10.3590828,4.28599019 C10.7802651,4.23204555 11.2810303,4.22009474 11.7273352,4.1741173 C11.8797567,4.15884682 12.0014915,4.11635504 12.1542502,4.07236941 C12.2348448,4.10307636 12.262665,4.14075462 12.2034837,4.19054967 C12.5428912,4.21611113 12.7951285,4.24797997 13.0944074,4.25345742 C13.3200047,4.25744103 13.6240046,4.23802096 13.8614044,4.20980376 C14.3665534,4.15104559 14.8492776,4.07286736 15.3684211,4.10855381 C16.0302067,3.99319527 17.0153822,3.98638995 17.4311691,3.78471998 C17.4650593,3.76778966 17.4996239,3.75185524 17.5389095,3.73824459 C17.714093,3.77011343 17.8358279,3.81592488 17.8739332,3.88563795 C18.3057379,3.87767075 18.7254027,3.87036747 19.1440559,3.86256625 C19.5090919,3.85576092 19.9118959,3.84530396 20.1509818,3.76563187 C20.452284,3.6657098 20.9481596,3.72015239 21.3364634,3.61541679 C21.6657545,3.52744553 22.2990454,3.61558277 22.7202278,3.51300496 C22.9615055,3.45408081 23.4216363,3.37723045 23.6779202,3.50918734 C23.7620555,3.43349886 23.7947654,3.40345584 23.8455163,3.35764439 C23.9077326,3.37855832 23.9535939,3.39349683 24.0002983,3.40909928 L24.0559389,3.43798041 C24.9650722,3.36710545 24.9974449,3.45574065 25.831885,3.41341485 C25.9370963,3.40777141 26.1003087,3.41756444 26.1377396,3.40843535 C26.3393946,3.35532062 26.7386579,3.43847836 26.9792612,3.40743945 C26.9880288,3.40777141 26.9935929,3.40843535 27,3.40843535 L26.8915852,1.70677235 C26.7464138,1.69199982 26.577806,1.68104491 26.3761511,1.67656335 C25.8898861,1.66577442 25.5273793,1.70146088 24.859861,1.73615143 C24.7293585,1.74312274 23.1117351,1.75042601 23.0083785,1.76934814 C22.7441701,1.8139977 22.4811419,1.85881325 22.2088402,1.90611855 C21.9225442,1.94977222 21.414866,1.94977222 21.4951233,2.06363691 C21.5030479,2.07525575 21.2622759,2.1170836 21.1223315,2.13086023 C20.8055174,2.15658768 20.4814531,2.18297906 20.1449119,2.21053232 C20.0695442,2.24704869 19.9790018,2.26032737 19.9081866,2.29900153 C19.905826,2.29999743 19.9022853,2.27709171 19.8999248,2.27758966 L19.2956344,2.31476997 C19.1971674,2.17136021 19.2113304,2.1945979 19.0530077,2.15658768 C18.7569324,2.08704058 18.2162071,2.10546475 17.7933387,2.20488888 C17.2283339,2.33750971 16.5453036,2.37568592 15.9136987,2.44008752 C15.6375191,2.46764078 15.3820783,2.49320225 15.1667661,2.5390137 C15.1038754,2.55378623 15.0416591,2.56772884 14.9812975,2.58150548 C14.975059,2.55942967 14.996135,2.53569402 15.0623979,2.50531904 C14.5196493,2.54548705 14.576976,2.39975353 14.1090893,2.41784573 C13.6221499,2.43743178 13.128972,2.44739079 12.6481025,2.48473709 C12.3093694,2.51063051 11.8067495,2.56739688 11.6951311,2.6205116 C11.4589116,2.73271646 11.0212057,2.76607914 10.6327333,2.82483731 C10.5007133,2.84591721 10.3697051,2.8661672 10.2277373,2.88857498 C10.123369,2.88243359 10.0203497,2.87562826 9.92087105,2.86915491 C9.89254494,2.84558525 9.86000363,2.81836395 9.81734585,2.78300946 C9.76507743,2.80923486 9.66037197,2.80923486 9.55229436,2.82633116 C9.44269928,2.81902789 9.32956344,2.77869389 9.21676481,2.78583118 L9.76710072,2.75130661 C9.4172395,2.77288447 9.4106638,2.67279641 8.82121086,2.78998077 C8.62242225,2.77421234 8.42447667,2.75811194 8.22130425,2.74184555 C8.01644575,2.76674308 7.81782574,2.79081069 7.64247361,2.81836395 C6.94561749,2.9275811 6.21841197,2.99048886 5.45428134,3.01007491 C5.36727971,3.01206671 5.261394,3.02567736 5.17810174,3.03895604 L3.89583928,3.23680839 C3.76870898,3.21191087 3.63635185,3.18668137 3.50652383,3.16194983 C3.32796815,3.12559944 3.18127934,3.13738427 3.0357708,3.16211581 C2.96444969,3.17572646 2.89093668,3.18933711 2.8159062,3.20344571 C2.72924178,3.21855021 2.56198283,3.23680839 2.4254105,3.24693339 C2.35122306,3.26021207 2.27214599,3.27149895 2.18801069,3.28162394 C2.19273171,3.25440265 2.17772561,3.23299077 2.13287593,3.22103996 C2.086846,3.20676538 2.01164691,3.20410964 1.91199969,3.23498257 C1.80695702,3.25606248 1.67426267,3.31498663 1.5240331,3.42719149 C1.37161163,3.53508077 1.2048585,3.71633477 1.10470546,3.98340224 C1.03389017,4.14722797 1.00303494,4.33097173 1,4.51803515 C1.00691292,4.70875021 1.06929781,4.91539968 1.10116469,5.11673769 C1.14466551,5.36089944 1.16540427,5.41484408 1.19558507,5.53916573 C1.22593448,5.65037469 1.25527224,5.75975782 1.28494721,5.86665121 C1.32642474,6.01188678 1.38931545,6.1224318 1.46080517,6.26318583 C1.44343856,6.34617758 1.41106586,6.3802042 1.35070426,6.33123907 C1.38341418,6.66486593 1.39555394,6.91450514 1.44242691,7.20630416 C1.47766595,7.42473847 1.54966149,7.71686945 1.61845348,7.94161113 C1.76547949,8.42146947 1.92683718,8.87626431 1.9812975,9.38516976 C2.211953,10.0064461 2.38899121,10.9615152 2.66348473,11.3291687 C2.68590957,11.3590457 2.70765998,11.3897527 2.72856735,11.4257711 C2.7273871,11.6008837 2.70192732,11.7276951 2.63920521,11.7759963 C2.72199165,12.1931129 2.80208036,12.5984446 2.88301211,13.0034444 C2.95230993,13.3563254 3.03290446,13.7443948 3.15362766,13.9624972 C3.30588052,14.2381958 3.33808462,14.7280131 3.50922155,15.0865375 C3.65489871,15.3902874 3.82316931,15.9841764 3.99953309,16.3749016 C4.10052917,16.5984814 4.25699722,17.0313664 4.16864673,17.3027494 C4.25902052,17.3708027 4.29493398,17.398024 4.34939431,17.4388559 C4.33995227,17.5029255 4.33270213,17.5500649 4.32511478,17.598698 L4.30589349,17.6569582 C4.32663225,17.7392861 4.34517911,17.8148086 4.36271433,17.8855175 C4.39137766,17.9909171 4.41666883,18.0875195 4.44212861,18.1793084 C4.48680968,18.3620562 4.52036264,18.5215664 4.54953179,18.6746032 L5.96634329,17.4601018 C5.96398278,17.4617616 5.95943036,17.4625915 5.95352909,17.4612637 C5.91205157,17.3145343 5.86838214,17.1590077 5.82808487,17.014768 C5.73838552,16.6940879 5.66133174,16.4246966 5.64716869,16.3863544" id="Fill-6" fill="#000000"></path>
-                    <path d="M3.2836888,16.2345207 C3.38051784,16.6267275 3.7536435,16.7871162 4.1129126,16.5906851 L30.7559214,2.01874403 C31.1155244,1.82231297 31.0726191,1.66733066 30.6612627,1.6748668 L0.592843412,2.22615164 C0.181153082,2.23368778 -0.0761116376,2.56101827 0.0202165539,2.95355274 L3.2836888,16.2345207 Z" id="Fill-8" fill="#FC6EB3"></path>
-                    <path d="M23.5967703,3.15816928 C23.9103584,3.12202552 24.2212875,3.08588176 24.5440157,3.04870532 C24.8727264,3.01428269 25.2323473,3.03992755 25.5055528,2.91204748 C25.5334716,2.89913899 25.8281148,2.86540482 25.9700354,2.85679916 C26.2746496,2.84475124 26.5860773,2.83167064 26.9101349,2.81859004 C27.073327,2.7827905 27.1803491,2.77280794 27.3523489,2.7330498 C27.3476958,2.73494305 27.2956804,2.7552524 27.2933538,2.75662931 L27.8414267,2.74578618 C27.9216932,2.74440927 27.5223545,2.88209979 27.5133806,2.93115204 C27.5049053,2.97693414 27.6062771,3.00171843 27.7860876,3.00430013 C27.8763252,3.00533281 27.9856738,3.00068575 28.1116409,2.99070319 C28.1852601,2.98192542 28.2209895,2.96677946 28.3095653,2.95731324 C28.4184154,2.95559211 28.4428444,2.9647141 28.456139,2.97418033 C28.3820212,3.03321514 28.2881276,3.09810179 28.1859248,3.16574226 C27.9675599,3.30446546 27.7458712,3.44542613 27.5309961,3.58191185 C27.34969,3.69998147 27.1798505,3.81013389 27.1098873,3.88947805 L27.0545483,3.95711852 C26.9839203,3.97209236 26.9320711,3.9751904 26.9033214,3.95987233 C26.4958397,4.20375666 26.111956,4.25590694 25.7210927,4.4700157 C25.3121153,4.69324645 24.8748868,4.92181271 24.5250708,5.13265132 C24.2777899,5.28084074 23.9622076,5.49408893 24.0015931,5.52592987 C24.0850171,5.59339822 23.7561402,5.79115623 23.5434254,5.95552429 C23.4718004,6.01163317 23.4000092,6.0682584 23.3230663,6.12867011 C23.2062393,6.1808204 23.0914066,6.23124955 22.9795652,6.28064602 C22.8921527,6.30147171 22.7916117,6.32522333 22.6609916,6.35517102 C22.6804351,6.37169388 22.5822207,6.42160669 22.5242227,6.4675609 C22.4024102,6.52160443 22.5783985,6.54070899 22.1072685,6.63571545 L22.5370188,6.38752829 C21.8754427,6.5932035 22.0067276,6.57375471 21.7483124,6.81884384 C21.5249619,6.91419452 21.3036056,7.00902887 21.0751034,7.10592857 C20.9479731,7.19456684 20.822837,7.28027919 20.7262845,7.35600898 C20.3428994,7.65514163 19.810614,7.98422197 19.1565161,8.32948094 C19.0822321,8.36872274 19.0160911,8.41639808 18.967067,8.45288607 L18.2074427,9.03204682 C18.0425888,9.08849993 17.8719184,9.14770685 17.7027437,9.20622532 C17.1752776,9.38315764 17.2841278,9.50036669 16.8930982,9.6915844 C16.7154482,9.66903758 16.4726542,9.74098088 16.0354257,10.0457933 C15.7598936,10.2378715 15.3396158,10.4586927 15.0260278,10.661442 C14.9185071,10.7309757 14.8822791,10.7931086 14.8201265,10.8702152 C14.6984803,10.8980976 14.6125635,10.9008514 14.5826505,10.8638471 C14.2441349,11.0034308 13.9759149,11.1023959 13.7111847,11.2270058 C13.5129279,11.3209796 13.2840934,11.4536788 13.123394,11.561938 C12.7825519,11.7913648 12.4777715,12.0242339 11.9901894,12.2264669 C11.5850343,12.5486627 10.7675782,12.9563987 10.6530778,13.2322961 C10.6429406,13.2544987 10.6321387,13.2773897 10.6146895,13.3016577 C10.4283979,13.3582829 10.2731826,13.384272 10.1640001,13.3625857 C9.81385167,13.5422719 9.47417281,13.7167946 9.13499249,13.8914895 C8.84018315,14.0420885 8.52310522,14.208694 8.39996333,14.356195 C8.24142436,14.5439704 7.78741132,14.706101 7.55558548,14.9360442 C7.35267555,15.1329416 6.76970419,15.3188238 6.49998854,15.565634 C6.34477325,15.7077995 6.01174172,15.9573636 5.72623864,15.9465204 C5.70230823,16.0439365 5.69333433,16.0823177 5.67887637,16.1411804 C5.6165576,16.1482371 5.57002625,16.1539168 5.52332871,16.1590802 L5.46300414,16.1556379 C5.11534847,16.3649275 4.92357283,16.4530494 4.73927544,16.5337705 C4.64720984,16.5743892 4.55730462,16.6146637 4.44945159,16.6625111 C4.40807193,16.6754196 4.41455308,16.6625111 4.39643909,16.6709447 C4.38896084,16.6745591 4.38214732,16.6530449 4.37882365,16.6618227 C4.36918501,16.6895329 4.35971256,16.6656092 4.36752318,16.637899 C4.3743367,16.6093282 4.39411252,16.587814 4.38713282,16.5948707 L4.38896084,16.5933217 L3,17.9082661 C3.08575063,18.1184163 3.23930409,18.3473268 3.516498,18.5166861 C3.68450942,18.6125531 3.8648184,18.6619496 4.0389786,18.6698668 C4.12655725,18.679333 4.21363735,18.6746032 4.30038509,18.6562699 C4.38663427,18.6555814 4.47670567,18.6061849 4.56910364,18.5614355 C4.7537334,18.4721088 4.9468385,18.3786513 5.15955325,18.2757277 C5.28801302,18.2161765 5.32490573,18.1884663 5.39453658,18.148364 C5.45951429,18.1094664 5.52814803,18.069364 5.60060399,18.0263357 C5.71394107,17.9605885 7.1640574,17.1958898 7.24864475,17.1297983 C7.4643508,16.9669793 7.67889356,16.8057093 7.90124695,16.637899 C8.13539936,16.4675069 8.59306843,16.2279254 8.46145118,16.1761194 C8.44782414,16.1700954 8.64159399,16.0255204 8.75975038,15.9484137 C9.03013077,15.7806034 9.30649376,15.6086623 9.59382485,15.430181 C9.64135331,15.367876 9.7154711,15.3165863 9.75685077,15.2546256 C9.75818023,15.2529045 9.77430002,15.2680504 9.77662659,15.2665014 L10.2982763,14.9573862 C10.4694452,15.0122903 10.4436868,15.0017914 10.6087069,14.9530834 C10.9171433,14.8620355 11.3975795,14.5869987 11.718812,14.3188464 C12.148396,13.9615395 12.7413384,13.6121498 13.2712973,13.2722263 C13.5024584,13.1235206 13.7171673,12.9865185 13.8805256,12.8576058 C13.928054,12.8195688 13.9747516,12.7822202 14.0202858,12.7459043 C14.040394,12.7546821 14.0374027,12.7779174 13.9980173,12.8261091 C14.4623337,12.5434993 14.5125211,12.6477998 14.9263177,12.4094231 C15.356068,12.1619244 15.7994453,11.9135651 16.2119125,11.6598704 C16.5024011,11.4803564 16.919189,11.2070407 16.9805107,11.129934 C17.1098014,10.9665986 17.4830493,10.7394093 17.7906548,10.5270216 C17.8945194,10.4547341 17.9978855,10.3826187 18.1095607,10.3046514 C18.2097693,10.2559434 18.3089808,10.2079238 18.4056995,10.160937 C18.4502367,10.1557736 18.5020859,10.1483727 18.5700549,10.1395949 C18.5959795,10.1053444 18.6920335,10.053022 18.7771194,9.99415932 C18.8833106,9.94235326 19.0207443,9.89949709 19.119291,9.84097861 L18.6411814,10.1258259 C18.9444661,9.94510707 19.0338728,9.97384997 19.4782472,9.6418437 C19.6748421,9.54735358 19.8699414,9.45183079 20.0708572,9.3551032 C20.2353787,9.24443444 20.3947486,9.1378964 20.5383311,9.04220149 C21.0862377,8.66165932 21.6979588,8.28352673 22.3847948,7.89282989 C22.4635657,7.84808047 22.5491502,7.79128313 22.6141279,7.74722216 L23.6097326,7.0696127 C23.7516532,7.00747985 23.8978946,6.94310953 24.0428066,6.87959978 C24.4991462,6.67977641 24.5603017,6.54070899 24.9568152,6.32401854 C25.0355862,6.34604902 25.2471376,6.25775497 25.7873999,5.90371823 C26.1249183,5.68358551 26.5782666,5.4230062 26.9460305,5.19134191 C27.0716652,5.11216986 27.1409636,5.05003701 27.2361867,4.97258609 C27.343375,4.92938569 27.4101807,4.91269072 27.4080204,4.94160573 C27.7533495,4.76278017 28.0232313,4.62749923 28.3108948,4.46795034 C28.5264346,4.34867593 28.7905,4.18826648 28.9827742,4.06468923 C29.3927487,3.80135612 29.7580198,3.55557854 30.2876463,3.27210819 C30.7772226,2.93786445 31.7005375,2.40878863 31.849604,2.23495435 C31.8637296,2.2198084 31.8344813,2.21034217 31.8343152,2.19330297 C31.8748639,2.14442284 31.9081006,2.09330523 31.9330281,2.0353031 C31.9587865,1.97712886 31.9705855,1.9136191 32,1.88935115 C31.9646029,1.78246888 31.9426667,1.74787414 31.9215614,1.70519008 C31.8474436,1.69004412 31.7266283,1.69778922 31.63207,1.69262582 C31.4304895,1.68866722 31.2307371,1.68470862 31.0306522,1.68092213 C30.6831628,1.67386549 30.2922994,1.66646462 29.9735596,1.6962402 C29.5738886,1.73376086 29.1740513,1.69434695 28.6902915,1.73324452 C28.2811479,1.76663448 27.6318694,1.77902662 27.1273366,1.82050589 C26.8378451,1.84356905 26.330321,1.8730004 26.2304448,1.79606582 C26.0727368,1.83393072 26.0100856,1.8494209 25.9145302,1.87179561 C25.8783022,1.85974769 25.8512143,1.84993724 25.823794,1.84064313 L25.8025225,1.82360393 C25.4786311,1.82790676 25.2949985,1.81482616 25.1544073,1.79554948 L22.0268358,3.24422586 C22.4984642,3.22219537 23.4993868,3.16952875 23.5967703,3.15816928" id="Fill-10" fill="#000000"></path>
-                    <g id="Group-14" transform="translate(0.000000, 1.674603)">
-                        <mask id="mask-12" fill="white">
-                            <use xlink:href="#path-11"></use>
-                        </mask>
-                        <g id="Clip-13"></g>
-                        <path d="M4.63714194,13.6207326 C4.54756774,13.3729853 4.45816129,13.1275958 4.36573548,12.8724379 C4.27364516,12.6031326 4.18776129,12.1120168 4.08879355,12.2091958 C4.07839355,12.2191326 3.99603226,11.9941221 3.95879355,11.8605642 C3.87911613,11.5590905 3.7986,11.2500379 3.71405806,10.9293642 C3.66574839,10.8630063 3.63706452,10.77728 3.58640645,10.71648 C3.58422581,10.7137853 3.60603226,10.7065432 3.60569677,10.7046905 L3.46697419,10.1266695 C3.44634194,10.0417853 3.57231613,10.0239326 3.5833871,9.86309053 C3.60267742,9.56481684 3.49398065,9.04557474 3.32355484,8.65365895 C3.09609677,8.13054316 2.94345161,7.47690105 2.77319355,6.87664842 C2.69871613,6.61441684 2.63010968,6.37239579 2.54841935,6.17281684 C2.52392903,6.11386947 2.49960645,6.05626947 2.4757871,5.99984842 C2.49591613,5.99041684 2.52309032,6.00692211 2.56502581,6.06553263 C2.43334839,5.54763789 2.58867742,5.57626947 2.49071613,5.12793263 C2.39023871,4.66005895 2.29647097,4.18477474 2.17854839,3.72599579 C2.09601935,3.40245895 1.95478065,2.92683789 1.88281935,2.82831158 C1.80733548,2.72372211 1.74225161,2.56725895 1.68102581,2.39075368 C1.65234194,2.30165895 1.62130968,2.20953263 1.59111613,2.11673263 C1.57266452,2.05593263 1.56813548,2.05222737 1.56025161,2.03454316 L1.53509032,1.98485895 C1.51278065,1.93888 1.48409677,1.88784842 1.46631613,1.82637474 C1.48174839,1.79083789 1.50456129,1.75917474 1.53509032,1.73728 C1.56679355,1.74738526 1.60134839,1.75917474 1.64546452,1.78039579 C1.63170968,1.75075368 1.65854839,1.73458526 1.67918065,1.71201684 C1.71105161,1.71437474 1.69897419,1.60658526 1.80129677,1.75563789 C1.79911613,1.74418526 1.677,1.78325895 1.68572258,1.79892211 C1.85564516,1.86999579 1.8049871,1.87353263 1.85715484,1.80599579 C1.86503871,1.79656421 1.87678065,1.78612211 1.89321935,1.77433263 C2.02456129,1.80346947 2.23524516,1.82199579 2.40097419,1.85130105 C2.58414839,1.83513263 2.76229032,1.82014316 2.92147742,1.80060632 C3.55470323,1.72245895 4.22147742,1.69146947 4.89714194,1.70595368 C4.97413548,1.70746947 5.07343871,1.69820632 5.15127097,1.68877474 L6.37209677,1.54595368 C6.46838065,1.57694316 6.56801935,1.60928 6.66749032,1.64111158 C6.96422581,1.74384842 7.27924516,1.58418526 7.64710323,1.60658526 C7.54410968,1.71639579 7.657,1.77231158 8.2914,1.71488 C8.69062581,1.67934316 9.12172258,1.68978526 9.5373871,1.66317474 C9.67946452,1.65458526 9.82187742,1.61669053 9.99448387,1.57862737 C10.0317226,1.61382737 10.0167935,1.65323789 9.9169871,1.70191158 C10.1719548,1.74502737 10.3428839,1.79016421 10.5799032,1.80919579 C10.7572065,1.82351158 11.0235806,1.81778526 11.2476839,1.80026947 C11.7207161,1.76321684 12.2130387,1.70544842 12.5788839,1.76709053 C13.2652839,1.67782737 14.0503161,1.71841684 14.6976323,1.52692211 L14.8574903,1.48414316 C14.9479032,1.52540632 14.9705484,1.57862737 14.8881871,1.65323789 C15.2372581,1.66620632 15.5762645,1.67782737 15.9146,1.68978526 C16.2076452,1.70090105 16.5332323,1.70915368 16.8645226,1.63740632 C17.2843806,1.54645895 17.5606516,1.62730105 18.0638774,1.53618526 C18.4966516,1.45938526 18.7980839,1.58266947 19.3333484,1.49475368 C19.6418258,1.44389053 20.1673613,1.38494316 20.0643677,1.53719579 C20.297529,1.46123789 20.3909613,1.43092211 20.5318645,1.38494316 C20.5323677,1.40970105 20.5332065,1.42822737 20.5335419,1.44709053 L20.5092194,1.47993263 C21.3548065,1.44894316 21.1702903,1.54443789 21.8830258,1.54005895 C21.9739419,1.53938526 22.0683806,1.55774316 22.1200452,1.54898526 C22.4005097,1.50334316 22.4771677,1.61045895 22.7279419,1.58923789 C22.731129,1.59125895 22.7366645,1.59075368 22.7411935,1.59159579 L25.9125226,0.166416842 C25.790071,0.153785263 25.6409484,0.143006316 25.4537484,0.134585263 C25.0016839,0.112858947 24.6202387,0.120774737 23.9502774,0.118416842 C23.8207806,0.118753684 22.2601097,0.0655326316 22.1433613,0.0717642105 C21.8498129,0.0902905263 21.5581097,0.107974737 21.2561742,0.127343158 C20.9446774,0.144690526 20.4555419,0.125658947 20.4421226,0.201953684 C20.4407806,0.205995789 20.3741871,0.212227368 20.2903161,0.218795789 C20.2061097,0.223006316 20.1052968,0.228564211 20.0309871,0.232606316 C19.7074129,0.238332632 19.3756194,0.244732632 19.0319161,0.250290526 C18.9331161,0.272522105 18.836329,0.277574737 18.7397097,0.301827368 C18.7361871,0.302669474 18.7502774,0.286501053 18.7470903,0.286501053 L18.1405355,0.290711579 C18.1477484,0.188816842 18.1442258,0.204985263 18.0172452,0.172311579 C17.7798903,0.112858947 17.2395935,0.101069474 16.762871,0.154964211 C16.1281355,0.227385263 15.4425742,0.228564211 14.7914,0.249785263 C14.5075806,0.259216842 14.2443935,0.268143158 14.0098903,0.294753684 C13.9407806,0.303343158 13.8735161,0.311090526 13.8077613,0.319343158 C13.8124581,0.302669474 13.8463419,0.285153684 13.9270258,0.263427368 C13.377,0.272522105 13.5080065,0.160690526 13.0395032,0.15328 C12.5523806,0.145701053 12.0605613,0.130206316 11.5699161,0.136774737 C11.2233613,0.141827368 10.703529,0.164227368 10.5718516,0.203806316 C10.2945742,0.286501053 9.85223871,0.294753684 9.44949032,0.326753684 C9.31244516,0.33888 9.17623871,0.350669474 9.02845806,0.363469474 C8.92848387,0.352185263 8.82951613,0.341743158 8.73306452,0.331469474 C8.71360645,0.309574737 8.68961935,0.283806316 8.65892258,0.251301053 C8.59920645,0.27168 8.49554194,0.266458947 8.38365806,0.275722105 C8.27747742,0.264437895 8.17716774,0.222501053 8.06276774,0.222669474 L8.61983871,0.220985263 C8.26640645,0.222501053 8.28905161,0.132564211 7.66907742,0.206501053 C7.47550323,0.181069474 7.28310323,0.156143158 7.08466452,0.13088 C6.87431613,0.144690526 6.67050968,0.157490526 6.48767097,0.169448421 C5.76587742,0.231427368 5.03116774,0.252985263 4.26324516,0.229069474 C4.17551613,0.226543158 4.06648387,0.233953684 3.98210968,0.241701053 L2.67791613,0.364816842 C2.55160645,0.333153684 2.42143871,0.299806316 2.29227742,0.267469474 C2.16596774,0.234627368 2.05374839,0.226037895 1.94605806,0.230248421 C1.87359355,0.235974737 1.80213548,0.240858947 1.72765806,0.246416842 C1.64043226,0.255006316 1.55119355,0.263427368 1.46010968,0.272185263 C1.26083226,0.318837895 1.04796774,0.341406316 0.828058065,0.434206316 C0.823529032,0.37728 0.7514,0.360269474 0.568896774,0.452564211 C0.48183871,0.504437895 0.36576129,0.58528 0.252367742,0.731806316 C0.146858065,0.881532632 0.0436967742,1.09357474 0.00830322581,1.36843789 C0.0116580645,1.45685895 -0.0140064516,1.53938526 0.0111548387,1.63690105 C0.0302774194,1.73239579 0.0487290323,1.82923789 0.0678516129,1.92759579 C0.0858,2.02528 0.104587097,2.12414316 0.123374194,2.22418526 C0.141658065,2.32506947 0.160612903,2.43538526 0.172522581,2.47243789 C0.227541935,2.69610105 0.281890323,2.92245895 0.342277419,3.13399579 C0.383541935,3.27917474 0.446277419,3.38915368 0.515219355,3.52928 C0.498612903,3.61248 0.466406452,3.64633263 0.406354839,3.59749053 C0.437890323,3.93096421 0.448458065,4.18005895 0.494251613,4.47109053 C0.527967742,4.68919579 0.598419355,4.97955368 0.666187097,5.20456421 C0.810109677,5.68254316 0.96896129,6.13626947 1.02029032,6.64506947 C1.24774839,7.26435368 1.42001935,8.21677474 1.69159355,8.58258526 C1.71289677,8.61290105 1.73503871,8.64321684 1.75533548,8.67892211 C1.75349032,8.85424842 1.72799355,8.97989053 1.66525806,9.02890105 C1.74644516,9.44506947 1.82427742,9.84961684 1.9026129,10.2533221 C1.97054839,10.6056589 2.04838065,10.9930274 2.16814839,11.2101221 C2.31810968,11.4843116 2.34813548,11.9734063 2.51705161,12.3309642 C2.66080645,12.6346274 2.82586452,13.2259537 2.99930968,13.6153432 C3.09894839,13.8386695 3.25293548,14.2698274 3.16436774,14.5414905 C3.25377419,14.6088589 3.28933548,14.6358063 3.34318065,14.6767326 C3.33345161,14.7403958 3.32573548,14.7875537 3.31835484,14.8358905 L3.29889677,14.8939958 C3.32355484,15.0105432 3.40088387,15.2658695 3.4418129,15.4371537 C3.4866,15.6192168 3.5198129,15.77888 3.54799355,15.9319747 L4.94109032,14.6536589 C4.93840645,14.65568 4.93404516,14.6568589 4.92850968,14.6551747 C4.93438065,14.6895326 4.90401935,14.5736589 4.88187742,14.4938274 C4.85906452,14.4101221 4.83625161,14.3270905 4.81410968,14.2474274 C4.72587742,13.9275958 4.65089677,13.6587958 4.63714194,13.6207326" id="Fill-12" fill="#000000" mask="url(#mask-12)"></path>
-                    </g>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/public/mix-manifest.json b/public/mix-manifest.json
index 201b4e360..0d5d4a41c 100644
--- a/public/mix-manifest.json
+++ b/public/mix-manifest.json
@@ -1,4 +1,3 @@
 {
-    "/js/app.js": "/js/app.js",
-    "/css/tailwind.css": "/css/tailwind.css"
+    "/js/app.js": "/js/app.js"
 }
diff --git a/resources/blueprints/collections/adverts/advert.yaml b/resources/blueprints/collections/adverts/advert.yaml
new file mode 100644
index 000000000..2eb760107
--- /dev/null
+++ b/resources/blueprints/collections/adverts/advert.yaml
@@ -0,0 +1,64 @@
+tabs:
+  main:
+    display: Main
+    sections:
+      -
+        fields:
+          -
+            handle: title
+            field:
+              type: text
+              required: true
+              display: Title
+              instructions: "Isn't used in templating, just use this to identify the advert in the CP"
+              validate:
+                - required
+          -
+            handle: image
+            field:
+              max_files: 1
+              container: main
+              type: assets
+              display: Image
+              instructions: 'Will be cropped at width x 1.35 height. Recommended dimensions at least 1000px wide.'
+              folder: adverts
+          -
+            handle: heading
+            field:
+              character_limit: 25
+              type: text
+              display: Heading
+              instructions: 'e.g. A Statamic Starter Kit'
+              replicator_preview: false
+          -
+            handle: text
+            field:
+              character_limit: 70
+              type: text
+              display: Text
+              instructions: 'e.g. Optimize your website for search engines with a complete SEO addon.'
+          -
+            handle: link_text
+            field:
+              type: text
+              display: 'Link Text'
+              width: 50
+          -
+            handle: link
+            field:
+              input_type: url
+              type: text
+              display: Link
+              width: 50
+  sidebar:
+    display: Sidebar
+    sections:
+      -
+        fields:
+          -
+            handle: slug
+            field:
+              type: slug
+              localizable: true
+              validate: 'max:200'
+title: Advert
diff --git a/resources/blueprints/collections/docs/page.yaml b/resources/blueprints/collections/docs/page.yaml
index aebb2a465..420c23faa 100644
--- a/resources/blueprints/collections/docs/page.yaml
+++ b/resources/blueprints/collections/docs/page.yaml
@@ -23,7 +23,7 @@ sections:
           localizable: true
           validate:
             - required
-            - 'unique_entry_value:{collection},{id},{site}'
+            - 'new \Statamic\Rules\UniqueEntryValue({collection}, {id}, {site})'
       -
         handle: parent
         field:
diff --git a/resources/blueprints/collections/extending-docs/page.yaml b/resources/blueprints/collections/extending-docs/page.yaml
index 3b7d58aad..f8949ca89 100644
--- a/resources/blueprints/collections/extending-docs/page.yaml
+++ b/resources/blueprints/collections/extending-docs/page.yaml
@@ -48,4 +48,4 @@ sections:
           localizable: true
           validate:
             - required
-            - 'unique_entry_value:{collection},{id},{site}'
+            - 'new \Statamic\Rules\UniqueEntryValue({collection}, {id}, {site})'
diff --git a/resources/blueprints/collections/fieldtypes/fieldtype.yaml b/resources/blueprints/collections/fieldtypes/fieldtype.yaml
index 68dd63487..af988441c 100644
--- a/resources/blueprints/collections/fieldtypes/fieldtype.yaml
+++ b/resources/blueprints/collections/fieldtypes/fieldtype.yaml
@@ -29,4 +29,4 @@ sections:
           localizable: true
           validate:
             - required
-            - 'unique_entry_value:{collection},{id},{site}'
+            - 'new \Statamic\Rules\UniqueEntryValue({collection}, {id}, {site})'
diff --git a/resources/blueprints/collections/knowledge-base/page.yaml b/resources/blueprints/collections/knowledge-base/page.yaml
index d992236ce..b1465f05b 100644
--- a/resources/blueprints/collections/knowledge-base/page.yaml
+++ b/resources/blueprints/collections/knowledge-base/page.yaml
@@ -56,7 +56,7 @@ sections:
           required: true
           localizable: true
           validate:
-            - 'unique_entry_value:{collection},{id},{site}'
+            - 'new \Statamic\Rules\UniqueEntryValue({collection}, {id}, {site})'
       -
         handle: categories
         field:
diff --git a/resources/blueprints/collections/modifiers/modifiers.yaml b/resources/blueprints/collections/modifiers/modifiers.yaml
index c041ae1c0..d42812143 100644
--- a/resources/blueprints/collections/modifiers/modifiers.yaml
+++ b/resources/blueprints/collections/modifiers/modifiers.yaml
@@ -23,7 +23,7 @@ sections:
           localizable: true
           validate:
             - required
-            - 'unique_entry_value:{collection},{id},{site}'
+            - 'new \Statamic\Rules\UniqueEntryValue({collection}, {id}, {site})'
       -
         handle: modifier_types
         field:
diff --git a/resources/blueprints/collections/sections/home.yaml b/resources/blueprints/collections/sections/home.yaml
new file mode 100644
index 000000000..acd750e50
--- /dev/null
+++ b/resources/blueprints/collections/sections/home.yaml
@@ -0,0 +1,128 @@
+title: Home
+tabs:
+  main:
+    display: Main
+    sections:
+      -
+        fields:
+          -
+            handle: title
+            field:
+              type: text
+              required: true
+              validate:
+                - required
+          -
+            handle: nav_title
+            field: page.nav_title
+          -
+            handle: breadcrumb_title
+            field: page.breadcrumb_title
+          -
+            handle: intro
+            field: page.intro
+          -
+            handle: tiles
+            field:
+              max_sets: 6
+              type: replicator
+              display: Tiles
+              sets:
+                tiles:
+                  display: Tiles
+                  sets:
+                    tile:
+                      display: Tile
+                      icon: programming-module-box-cube
+                      fields:
+                        -
+                          handle: tile_image
+                          field:
+                            max_files: 1
+                            container: main
+                            type: assets
+                            display: 'Tile Image'
+                            folder: tiles
+                        -
+                          handle: tile_title
+                          field:
+                            character_limit: 38
+                            type: text
+                            display: 'Tile Title'
+                        -
+                          handle: tile_description
+                          field:
+                            character_limit: 60
+                            type: text
+                            display: 'Tile Description'
+                        -
+                          handle: tile_link
+                          field:
+                            type: link
+                            display: 'Tile Link'
+                        -
+                          handle: advanced_options
+                          field:
+                            type: revealer
+                            display: 'Advanced Options'
+                        -
+                          handle: flush_image
+                          field:
+                            type: toggle
+                            display: 'Flush Image'
+                            instructions: 'Makes the image flush, which may be useful, e.g. a screenshot of Antlers code'
+                            width: 50
+                            if:
+                              advanced_options: 'equals true'
+                        -
+                          handle: hue_rotate
+                          field: hue_rotate.hue_rotate
+                          config:
+                            width: 50
+                            if:
+                              advanced_options: 'equals true'
+                        -
+                          handle: dark_mode
+                          field:
+                            type: section
+                            display: 'Dark Mode'
+                            if:
+                              advanced_options: 'equals true'
+                        -
+                          handle: tile_image_dark_mode
+                          field:
+                            max_files: 1
+                            container: main
+                            type: assets
+                            display: 'Tile Image Dark Mode (optional override)'
+                            folder: tiles
+                            width: 50
+                            if:
+                              advanced_options: 'equals true'
+  sidebar:
+    display: Sidebar
+    sections:
+      -
+        fields:
+          -
+            handle: slug
+            field:
+              type: slug
+              localizable: true
+              validate: 'max:200'
+          -
+            handle: parent
+            field:
+              type: entries
+              collections:
+                - docs
+              max_items: 1
+              listable: false
+              localizable: true
+          -
+            handle: template
+            field:
+              type: template
+              display: Template
+          -
+            import: advert_override
diff --git a/resources/blueprints/collections/sections/sections.yaml b/resources/blueprints/collections/sections/sections.yaml
index 21118e1f7..20a961f72 100644
--- a/resources/blueprints/collections/sections/sections.yaml
+++ b/resources/blueprints/collections/sections/sections.yaml
@@ -1,38 +1,45 @@
 title: Sections
-sections:
+tabs:
   main:
     display: Main
-    fields:
+    sections:
       -
-        handle: title
-        field:
-          type: text
-          required: true
-          validate:
-            - required
-      -
-        handle: content
-        field:
-          type: markdown
-          localizable: true
-      -
-        handle: template
-        field:
-          hide_partials: true
-          display: Template
-          type: template
-          icon: template
-          listable: hidden
+        fields:
+          -
+            handle: title
+            field:
+              type: text
+              required: true
+              validate:
+                - required
+          -
+            handle: nav_title
+            field: page.nav_title
+          -
+            handle: breadcrumb_title
+            field: page.breadcrumb_title
+          -
+            handle: intro
+            field: page.intro
+          -
+            handle: content
+            field:
+              type: markdown
+              localizable: true
+          -
+            handle: template
+            field:
+              display: Template
+              type: template
   sidebar:
     display: Sidebar
-    fields:
+    sections:
       -
-        handle: slug
-        field:
-          type: slug
-          required: true
-          localizable: true
-          validate:
-            - required
-          listable: hidden
-          generate: true
+        fields:
+          -
+            handle: slug
+            field:
+              type: slug
+              localizable: true
+              validate:
+                - required
diff --git a/resources/blueprints/collections/tags/tag-glide.yaml b/resources/blueprints/collections/tags/tag-glide.yaml
index dcf10806a..5f698b65e 100644
--- a/resources/blueprints/collections/tags/tag-glide.yaml
+++ b/resources/blueprints/collections/tags/tag-glide.yaml
@@ -135,4 +135,4 @@ sections:
           localizable: true
           validate:
             - required
-            - 'unique_entry_value:{collection},{id},{site}'
+            - 'new \Statamic\Rules\UniqueEntryValue({collection}, {id}, {site})'
diff --git a/resources/blueprints/collections/tags/tag.yaml b/resources/blueprints/collections/tags/tag.yaml
index 48d583b7f..0b1508d66 100644
--- a/resources/blueprints/collections/tags/tag.yaml
+++ b/resources/blueprints/collections/tags/tag.yaml
@@ -81,4 +81,4 @@ sections:
           localizable: true
           validate:
             - required
-            - 'unique_entry_value:{collection},{id},{site}'
+            - 'new \Statamic\Rules\UniqueEntryValue({collection}, {id}, {site})'
diff --git a/resources/blueprints/collections/variables/variables.yaml b/resources/blueprints/collections/variables/variables.yaml
index b6f2bad39..7c6726cc8 100644
--- a/resources/blueprints/collections/variables/variables.yaml
+++ b/resources/blueprints/collections/variables/variables.yaml
@@ -23,7 +23,7 @@ sections:
           localizable: true
           validate:
             - required
-            - 'unique_entry_value:{collection},{id},{site}'
+            - 'new \Statamic\Rules\UniqueEntryValue({collection}, {id}, {site})'
       -
         handle: types
         field:
diff --git a/resources/blueprints/globals/global.yaml b/resources/blueprints/globals/global.yaml
new file mode 100644
index 000000000..2dd1ad5fb
--- /dev/null
+++ b/resources/blueprints/globals/global.yaml
@@ -0,0 +1,44 @@
+tabs:
+  main:
+    display: Main
+    sections:
+      -
+        fields:
+          -
+            handle: pro_badges
+            field:
+              type: replicator
+              display: 'Pro Badges'
+              sets:
+                new_set_group:
+                  display: 'New Set Group'
+                  sets:
+                    pro_badge:
+                      display: 'Pro Badge'
+                      fields:
+                        -
+                          handle: artwork
+                          field:
+                            max_files: 1
+                            container: main
+                            folder: pro-badges/artwork
+                            type: assets
+                            display: Artwork
+                            width: 75
+                        -
+                          handle: icon
+                          field:
+                            max_files: 1
+                            container: main
+                            folder: pro-badges/icons
+                            type: assets
+                            display: Icon
+                            width: 25
+          -
+            handle: experimental_badges
+            field:
+              type: text
+          -
+            handle: powered_by
+            field:
+              type: text
diff --git a/resources/blueprints/navigation/docs.yaml b/resources/blueprints/navigation/docs.yaml
index c51e335e4..cbffdfb90 100644
--- a/resources/blueprints/navigation/docs.yaml
+++ b/resources/blueprints/navigation/docs.yaml
@@ -1,13 +1,17 @@
-sections:
+tabs:
   main:
     display: Main
-    fields:
+    sections:
       -
-        handle: title
-        field:
-          input_type: text
-          antlers: false
-          display: Title
-          type: text
-          icon: text
-          listable: hidden
+        fields:
+          -
+            handle: title
+            field:
+              display: Title
+              type: text
+          -
+            handle: navigation_image
+            field: navigation.navigation_image
+          -
+            handle: image_width_override
+            field: navigation.image_width_override
diff --git a/resources/blueprints/navigation/extending_docs.yaml b/resources/blueprints/navigation/extending_docs.yaml
new file mode 100644
index 000000000..7776dbce1
--- /dev/null
+++ b/resources/blueprints/navigation/extending_docs.yaml
@@ -0,0 +1,17 @@
+tabs:
+  main:
+    display: Main
+    sections:
+      -
+        fields:
+          -
+            handle: title
+            field:
+              type: text
+              display: Title
+          -
+            handle: navigation_image
+            field: navigation.navigation_image
+          -
+            handle: image_width_override
+            field: navigation.image_width_override
diff --git a/resources/blueprints/navigation/reference.yaml b/resources/blueprints/navigation/reference.yaml
new file mode 100644
index 000000000..ae4d34b09
--- /dev/null
+++ b/resources/blueprints/navigation/reference.yaml
@@ -0,0 +1,8 @@
+tabs:
+  main:
+    display: Main
+    sections:
+      -
+        fields:
+          -
+            import: navigation
diff --git a/resources/css/_old_content.css b/resources/css/_old_content.css
new file mode 100644
index 000000000..c990882c3
--- /dev/null
+++ b/resources/css/_old_content.css
@@ -0,0 +1,304 @@
+/* Main Content */
+/* -------------------------------------------------- */
+
+
+article, .markdown {
+    background: white;
+    @apply text-zinc-800 leading-relaxed;
+
+    h1 {
+        @apply font-sans text-black font-extrabold text-5xl lg:text-6xl mb-6;
+    }
+
+    h2 {
+        @apply font-sans text-black font-extrabold text-3xl mb-6 md:mt-16 relative;
+    }
+
+    h2:not(:first-of-type) {
+        @apply border-t border-zinc-500 border-dashed pt-14;
+    }
+
+    h3 {
+        @apply font-sans text-black font-extrabold text-2xl mb-2 mt-12 relative;
+    }
+
+    h4 {
+        @apply font-sans text-black font-bold text-lg mb-0 mt-12 relative;
+    }
+
+    h5 {
+        @apply font-sans text-black font-bold text-base mt-12 relative;
+    }
+
+    p {
+        @apply text-base md:text-lg mb-6;
+        /* line-height: 1.5em; */
+    }
+
+    ul, ol {
+        @apply mt-4 mb-6;
+    }
+
+    a {
+        @apply text-pink font-medium underline;
+
+        &:hover {
+            @apply text-purple;
+        }
+    }
+
+    a svg.external {
+        @apply inline-block;
+        vertical-align: text-top;
+        color: currentColor;
+        opacity: .6;
+    }
+
+    h2 > .anchor,
+    h3 > .anchor,
+    h4 > .anchor {
+        @apply absolute top-0 no-underline text-white opacity-0 block;
+        text-shadow: -1px -1px 0 theme('colors.pink.DEFAULT'),
+            1px -1px 0 theme('colors.pink.DEFAULT'),
+            -1px 1px 0 theme('colors.pink.DEFAULT'),
+            1px 1px 0 theme('colors.pink.DEFAULT');
+        transition: all .2s ease-in-out;
+        &:hover {
+            @apply text-pink;
+            text-shadow: none;
+        }
+    }
+
+    h2 > .anchor {
+        @apply -left-6 pr-4;
+    }
+
+    h2:not(:first-of-type) > .anchor {
+        @apply top-14;
+    }
+
+    h2:hover > .anchor {
+        @apply -left-8 opacity-100;
+    }
+
+    h3 > .anchor {
+        @apply -left-3 pr-2;
+    }
+
+    h3:hover > .anchor {
+        @apply -left-5 opacity-100;
+    }
+
+    h4 > .anchor {
+        @apply -left-2 pr-2;
+    }
+
+    h4:hover > .anchor {
+        @apply -left-4 opacity-100;
+    }
+
+    ul:not([class*="list-"]), .hint ul {
+        @apply pl-0 list-none mb-6 text-base;
+
+        li {
+            @apply relative pl-6 mb-2;
+
+            &::before {
+                @apply absolute inline-block;
+                content: url('/img/triangle-pink.svg');
+                top: 6px;
+                left: 2px;
+            }
+
+            &:nth-child(3n+0)::before {
+                content: url('/img/triangle-pink.svg');
+            }
+
+            &:nth-child(3n+1)::before {
+                content: url('/img/triangle-purple.svg');
+            }
+
+            &:nth-child(3n+2)::before {
+                content: url('/img/triangle-teal.svg');
+            }
+
+            code {
+                @apply text-sm;
+            }
+        }
+    }
+
+    ul a {
+        @apply underline text-pink font-bold;
+
+        &:hover {
+            @apply text-purple;
+        }
+    }
+
+    > ol, .hint ol {
+        @apply list-none text-base md:text-lg relative;
+        counter-reset: item;
+        z-index: 20;
+
+        >li {
+            @apply relative pl-10 mb-2;
+            z-index: 5;
+        }
+
+        >li::before {
+            @apply absolute top-0 left-0 mt-px flex items-center justify-center h-6 w-6 bg-yellow rounded-full text-lg font-bold font-display;
+            content: counter(item);
+            counter-increment: item;
+        }
+    }
+
+    ol.ninja {
+        > li::before {
+            @apply bg-ninja-green;
+            z-index: -2;
+        }
+        > li::after {
+            @apply w-6 h-1 absolute top-2 left-0 right-0;
+            content: '';
+            z-index: -1;
+        }
+        >li:nth-child(1)::after {
+            @apply bg-ninja-red;
+        }
+        >li:nth-child(2)::after {
+            @apply bg-ninja-blue;
+        }
+        >li:nth-child(3)::after {
+            @apply bg-ninja-orange;
+        }
+        >li:nth-child(4)::after {
+            @apply bg-ninja-purple;
+        }
+    }
+
+    table {
+        @apply border rounded-md border-separate overflow-hidden w-full my-6;
+        border-spacing: 0;
+
+        thead {
+            @apply bg-black text-white font-display font-bold text-lg;
+            th {
+                @apply px-3 py-2 md:px-5 text-left;
+            }
+        }
+
+        tbody {
+            tr {
+                @apply even:bg-gray-lightest;
+            }
+            tr:last-child {
+                @apply rounded-b;
+            }
+            td {
+                @apply px-3 py-2 md:px-5 md:py-3 leading-normal;
+            }
+            p {
+                @apply text-sm md:text-base leading-tight;
+            }
+            code {
+                @apply whitespace-nowrap;
+            }
+            :not(pre) > code {
+                @apply bg-transparent text-xs md:text-sm font-bold text-purple;
+            }
+        }
+    }
+
+    /* blockquote {
+        @apply font-display mt-16;
+        p {
+            @apply inline-block pb-2 italic text-2xl font-extrabold ;
+            background: url('/img/ziggy.svg') 0 90% repeat-x;
+            background-size: auto 4px;
+        }
+    } */
+
+    /* Code blocks in headers */
+    h1>code,
+    h2>code,
+    h3>code,
+    h4>code {
+        @apply text-pink bg-gray-light rounded relative;
+        font-size: 90%;
+        padding: .1em .2em;
+        bottom: .05rem;
+    }
+}
+
+header.markdown p {
+    @apply text-xl leading-normal;
+}
+
+
+/* Main Content in Tight Spaces */
+/* -------------------------------------------------- */
+
+.markdown-tight, table {
+    h1, h2, h3, h4, h5, h6 {
+        @apply m-0;
+    }
+
+    p, ul, ol {
+        font-size: inherit;
+    }
+
+    p:last-child {
+        @apply mb-0;
+    }
+}
+
+.parameter .markdown {
+    p {
+        @apply text-base;
+    }
+
+    :not(pre)>code {
+        @apply bg-transparent text-purple font-bold text-sm;
+    }
+}
+
+
+/* Multi-column list */
+/* -------------------------------------------------- */
+
+ul.list-col {
+    @apply space-y-2 mt-2;
+    column-count: 2;
+
+    li {
+        @apply pr-5;
+    }
+
+    li a {
+        @apply text-black no-underline hover:text-pink;
+    }
+}
+
+@media screen(lg) {
+    ul.list-col {
+        column-count: 3;
+    }
+}
+
+
+
+/* Dark mode */
+/* -------------------------------------------------- */
+
+.dark {
+    article, .markdown {
+        @apply bg-transparent text-gray-dark;
+        h1, h2, h3, h4 { @apply text-white }
+        table {
+            @apply bg-transparent border-zinc-800 text-gray-dark;
+            tbody tr { @apply even:bg-transparent; }
+            td, th { @apply border-b border-zinc-800; }
+        }
+    }
+}
diff --git a/resources/css/carbonads.css b/resources/css/carbonads.css
deleted file mode 100644
index b572ebdf6..000000000
--- a/resources/css/carbonads.css
+++ /dev/null
@@ -1,43 +0,0 @@
-#carbonads {
-    @apply p-2 mt-16 border shadow-mint-md relative block;
-    background-color: #F7F8FB;
-    box-sizing: content-box;
-
-    span {
-        display: block;
-    }
-
-    img {
-        display: block;
-        margin-bottom: .75em;
-    }
-
-    .carbon-text {
-        display: block;
-        font-size: .75em;
-        line-height: 1.4em;
-        @apply text-gray-dark mb-2;
-    }
-
-    .carbon-poweredby {
-        font-size: .5em;
-        text-transform: uppercase;
-        letter-spacing: 1px;
-        line-height: 1;
-        @apply text-gray;
-    }
-}
-
-@screen md {
-    #carbonads {
-        @apply block;
-        max-width: 130px;
-    }
-}
-
-
-@media only print {
-    #carbonads {
-        display: none;
-    }
-}
diff --git a/resources/css/components.css b/resources/css/components.css
index b84b7dcc4..5941c0be2 100644
--- a/resources/css/components.css
+++ b/resources/css/components.css
@@ -1,7 +1,7 @@
 /* Markdown "Hint" Blocks */
 /* -------------------------------------------------- */
 
-.hint {
+/* .hint {
     @apply bg-pink-lightest px-7 pt-7 pb-5 my-20 text-black border relative shadow-pink-md;
 
     .hint-title {
@@ -51,8 +51,12 @@
             @apply relative;
         }
 
-        p.caption {
-            @apply relative float-right -top-px bg-white right-0 bottom-0 font-mono-alt border subpixel-antialiased italic text-black text-sm font-bold rotate-0 px-3 py-1 shadow-yellow-md;
+        .caption {
+            @apply relative float-right -top-px bg-white right-0 bottom-0 font-mono-alt border subpixel-antialiased italic text-black font-bold rotate-0 px-3 py-1 shadow-yellow-md;
+
+            p {
+                @apply text-sm;
+            }
         }
     }
 
@@ -85,30 +89,7 @@
     .button {
         @apply text-black no-underline absolute -bottom-4 right-4 font-normal bg-white;
     }
-}
-
-.hint.callout {
-    display: none;
-}
-
-@screen xl {
-    .hint.callout {
-        @apply border-none block bg-transparent relative shadow-none h-0 m-0 p-0;
-        .hint-title { display: none; }
-        a {
-            @apply bg-white hover:bg-mint no-underline absolute p-3 w-64 border shadow-stack-sm -right-64 text-black font-normal;
-            p {
-                @apply text-sm;
-            }
-        }
-    }
-}
-
-@screen 2xl {
-    .hint.callout a {
-        @apply -right-80;
-    }
-}
+} */
 
 
 /* Video Embed */
@@ -128,16 +109,17 @@
 
 figure,
 .screenshot {
-    @apply bg-mint border p-3 md:p-6 my-16 shadow-stack-sm relative;
+    @apply border py-3 md:py-6 my-16 relative;
     @apply pb-6 md:pb-12;
 
     img {
-        @apply border shadow-lg mx-auto;
+        @apply shadow-lg mx-auto border-none;
+        max-width: 90%;
     }
 
 }
 
-.caption,
+/* .caption,
 figure figcaption {
     @apply bg-black px-6 py-1 text-mint text-sm inline-block antialiased absolute -right-2 -bottom-4 md:-right-4 md:bottom-2;
 
@@ -145,18 +127,18 @@ figure figcaption {
         font-size: 12px !important;
         padding: 1px 2px !important;
     }
-}
+} */
 
-.dark {
+/* .dark {
     figure, .screenshot { @apply bg-gray-darker shadow-none; }
     .caption, figure figcaption { @apply bg-mint text-black; }
-}
+} */
 
 
 /* Buttons */
 /* -------------------------------------------------- */
 
-.button {
+/* .button {
     @apply py-1 px-5 relative inline-block bg-yellow font-normal rounded border shadow-md font-display text-base whitespace-nowrap transition no-underline text-black !important;
 
     &:hover {
@@ -171,43 +153,33 @@ figure figcaption {
     &:focus {
         @apply outline-none shadow-outline;
     }
-}
+} */
 
 
 /* Table of Contents */
 /* -------------------------------------------------- */
 .toc {
-    @apply font-display py-2 space-y-2 ml-0;
-    list-style-type: none;
-    counter-reset: item;
-
-    li {
-        @apply px-2 leading-tight text-lg block;
-        counter-increment: item;
-        &:before {
-            @apply mr-2 font-medium;
-            content: counters(item, ".") ". ";
-        }
-    }
+    @apply list-none border-l space-y-2 text-sm mb-4 ml-1;
 
     li a {
-        @apply text-black no-underline hover:text-pink font-medium;
+        @apply !text-sm border-l border-transparent hover:border-black block pl-4;
     }
 
-    li ol {
-        @apply my-2 space-y-1 ml-5;
-        counter-reset: item;
-        /* list-style-type: lower-alpha; */
+    li a.active {
+        @apply text-black font-normal border-black;
+    }
 
-        li { @apply text-base; }
-        li:before {
-             content: counters(item, ".") " ";
-        }
+    ol {
+        @apply ml-8 space-y-1;
+    }
+
+    ol li a {
+        @apply !text-sm inline-block pl-0 border-none text-zinc-400;
     }
 }
 
 .dark .toc li a {
-    @apply text-gray-light;
+    /* @apply text-gray-light; */
 }
 
 /* @media screen(lg) {
@@ -220,10 +192,39 @@ figure figcaption {
 /* Little details */
 /* -------------------------------------------------- */
 
-.popout {
+/* .popout {
     @apply border px-2 inline-block shadow-stack-sm -ml-4 transform -rotate-3;
 }
 
 .badge {
     @apply text-white bg-black text-xs inline-block py-1 px-2 font-mono rounded-sm shadow-stack-sm mb-4;
 }
+
+dl {
+    @apply p-0 inline-flex border text-white bg-black shadow-stack-sm mb-2 font-mono text-xs mb-4;
+    dt {
+        @apply py-1 px-2;
+    }
+    dd {
+        @apply py-1 px-2 bg-mint text-black;
+    }
+} */
+
+.btn-filled {
+    @apply cursor-pointer bg-zinc-200 inline-flex text-center items-center justify-center text-zinc-500 font-normal text-sm px-4 py-2 h-9 rounded-md;
+    &:not([disabled]) {
+        @apply hover:bg-zinc-300 hover:text-zinc-600;
+    }
+}
+
+.doc-tabs {
+    pre {
+        @apply mt-0 rounded-tl-none;
+    }
+    .tab-content > p {
+        @apply py-3 px-4 border rounded-tr mb-0 text-base bg-yellow-200;
+    }
+    .tab-content > p + pre {
+        @apply rounded-tr-none;
+    }
+}
diff --git a/resources/css/content.css b/resources/css/content.css
index c92485197..ca0a32c3d 100644
--- a/resources/css/content.css
+++ b/resources/css/content.css
@@ -1,308 +1,9 @@
 /* Main Content */
 /* -------------------------------------------------- */
 
-::-moz-selection,
-::selection {
-    @apply bg-yellow;
-}
-
-article, .markdown {
-    background: white;
-    @apply text-gray-darkest leading-relaxed;
-
-    h1 {
-        @apply font-sans text-black font-extrabold text-5xl lg:text-6xl mb-6;
-    }
-
-    h2 {
-        @apply font-sans text-black font-extrabold text-3xl mb-6 md:mt-16 relative;
-    }
-
-    h2:not(:first-of-type) {
-        @apply border-t border-gray border-dashed pt-14;
-    }
-
-    h3 {
-        @apply font-sans text-black font-extrabold text-2xl mb-2 mt-12 relative;
-    }
-
-    h4 {
-        @apply font-sans text-black font-bold text-lg mb-0 mt-12 relative;
-    }
-
-    h5 {
-        @apply font-sans text-black font-bold text-base mt-12 relative;
-    }
-
-    p {
-        @apply text-base md:text-lg mb-6;
-        /* line-height: 1.5em; */
-    }
-
-    ul, ol {
-        @apply mt-4 mb-6;
-    }
-
-    a {
-        @apply text-pink font-medium underline;
-
-        &:hover {
-            @apply text-purple;
-        }
-    }
-
-    a svg.external {
-        @apply inline-block;
-        vertical-align: text-top;
-        color: currentColor;
-        opacity: .6;
-    }
-
-    h2 > .anchor,
-    h3 > .anchor,
-    h4 > .anchor {
-        @apply absolute top-0 no-underline text-white opacity-0 block;
-        text-shadow: -1px -1px 0 theme('colors.pink.DEFAULT'),
-            1px -1px 0 theme('colors.pink.DEFAULT'),
-            -1px 1px 0 theme('colors.pink.DEFAULT'),
-            1px 1px 0 theme('colors.pink.DEFAULT');
-        transition: all .2s ease-in-out;
-        &:hover {
-            @apply text-pink;
-            text-shadow: none;
-        }
-    }
-
-    h2 > .anchor {
-        @apply -left-6 pr-4;
-    }
-
-    h2:not(:first-of-type) > .anchor {
-        @apply top-14;
-    }
-
-    h2:hover > .anchor {
-        @apply -left-8 opacity-100;
-    }
-
-    h3 > .anchor {
-        @apply -left-3 pr-2;
-    }
-
-    h3:hover > .anchor {
-        @apply -left-5 opacity-100;
-    }
-
-    h4 > .anchor {
-        @apply -left-2 pr-2;
-    }
-
-    h4:hover > .anchor {
-        @apply -left-4 opacity-100;
-    }
-
-    ul:not([class*="list-"]), .hint ul {
-        @apply pl-0 list-none mb-6 text-base;
-
-        li {
-            @apply relative pl-6 mb-2;
-
-            &::before {
-                @apply absolute inline-block;
-                content: url('/img/triangle-pink.svg');
-                top: 6px;
-                left: 2px;
-            }
-
-            &:nth-child(3n+0)::before {
-                content: url('/img/triangle-pink.svg');
-            }
-
-            &:nth-child(3n+1)::before {
-                content: url('/img/triangle-purple.svg');
-            }
-
-            &:nth-child(3n+2)::before {
-                content: url('/img/triangle-teal.svg');
-            }
-
-            code {
-                @apply text-sm;
-            }
-        }
-    }
-
-    ul a {
-        @apply underline text-pink font-bold;
-
-        &:hover {
-            @apply text-purple;
-        }
-    }
-
-    > ol, .hint ol {
-        @apply list-none text-base md:text-lg relative;
-        counter-reset: item;
-        z-index: 20;
-
-        >li {
-            @apply relative pl-10 mb-2;
-            z-index: 5;
-        }
-
-        >li::before {
-            @apply absolute top-0 left-0 mt-px flex items-center justify-center h-6 w-6 bg-yellow rounded-full text-lg font-bold font-display;
-            content: counter(item);
-            counter-increment: item;
-        }
-    }
-
-    ol.ninja {
-        > li::before {
-            @apply bg-ninja-green;
-            z-index: -2;
-        }
-        > li::after {
-            @apply w-6 h-1 absolute top-2 left-0 right-0;
-            content: '';
-            z-index: -1;
-        }
-        >li:nth-child(1)::after {
-            @apply bg-ninja-red;
-        }
-        >li:nth-child(2)::after {
-            @apply bg-ninja-blue;
-        }
-        >li:nth-child(3)::after {
-            @apply bg-ninja-orange;
-        }
-        >li:nth-child(4)::after {
-            @apply bg-ninja-purple;
-        }
-    }
-
-    table {
-        @apply border rounded-md border-separate overflow-hidden w-full my-6;
-        border-spacing: 0;
-
-        thead {
-            @apply bg-black text-white font-display font-bold text-lg;
-            th {
-                @apply px-3 py-2 md:px-5 text-left;
-            }
-        }
-
-        tbody {
-            tr {
-                @apply even:bg-gray-lightest;
-            }
-            tr:last-child {
-                @apply rounded-b;
-            }
-            td {
-                @apply px-3 py-2 md:px-5 md:py-3 leading-normal;
-            }
-            p {
-                @apply text-sm md:text-base leading-tight;
-            }
-            code {
-                @apply whitespace-nowrap;
-            }
-            :not(pre) > code {
-                @apply bg-transparent text-xs md:text-sm font-bold text-purple;
-            }
-        }
-    }
-
-    /* blockquote {
-        @apply font-display mt-16;
-        p {
-            @apply inline-block pb-2 italic text-2xl font-extrabold ;
-            background: url('/img/ziggy.svg') 0 90% repeat-x;
-            background-size: auto 4px;
-        }
-    } */
-
-    /* Code blocks in headers */
-    h1>code,
-    h2>code,
-    h3>code,
-    h4>code {
-        @apply text-pink bg-gray-light rounded relative;
-        font-size: 90%;
-        padding: .1em .2em;
-        bottom: .05rem;
-    }
-}
-
-header.markdown p {
-    @apply text-xl leading-normal;
-}
-
-
-/* Main Content in Tight Spaces */
-/* -------------------------------------------------- */
-
-.markdown-tight, table {
-    h1, h2, h3, h4, h5, h6 {
-        @apply m-0;
-    }
-
-    p, ul, ol {
-        font-size: inherit;
-    }
-
-    p:last-child {
-        @apply mb-0;
-    }
-}
-
-.parameter .markdown {
-    p {
-        @apply text-base;
-    }
-
-    :not(pre)>code {
-        @apply bg-transparent text-purple font-bold text-sm;
-    }
-}
-
-
-/* Multi-column list */
-/* -------------------------------------------------- */
-
-ul.list-col {
-    @apply space-y-2 mt-2;
-    column-count: 2;
-
-    li {
-        @apply pr-5;
-    }
-
-    li a {
-        @apply text-black no-underline hover:text-pink;
-    }
-}
-
-@media screen(lg) {
-    ul.list-col {
-        column-count: 3;
-    }
-}
-
-
-
-/* Dark mode */
-/* -------------------------------------------------- */
-
-.dark {
-    article, .markdown {
-        @apply bg-transparent text-gray-dark;
-        h1, h2, h3, h4 { @apply text-white }
-        table {
-            @apply bg-transparent border-gray-darkest text-gray-dark;
-            tbody tr { @apply even:bg-transparent; }
-            td, th { @apply border-b border-gray-darkest; }
-        }
+article figure {
+    @apply bg-zinc-50 border px-6 py-8 rounded-lg;
+    img {
+        @apply rounded;
     }
 }
diff --git a/resources/css/layout.css b/resources/css/layout.css
index e82572de5..f3fd5c5d6 100644
--- a/resources/css/layout.css
+++ b/resources/css/layout.css
@@ -6,41 +6,47 @@ html {
 
 body {
     min-height: 100%;
-    background: url('/img/splatter-tall.jpg') repeat-y;
+    /* background: url('/img/splatter-tall.jpg') repeat-y; */
     background-position: right top;
     background-size: 200px 6500px;
 }
 
+.wrapper {
+    @apply max-w-screen-2xl mx-auto px-6;
+}
+
 /* Navs */
 /* -------------------------------------------------- */
 
 #site-nav {
     ul li a {
-        @apply py-2;
+        @apply py-2 text-zinc-600;
     }
 
     ul li a.active {
-        @apply font-bold;
-        background: url('/img/ziggy.svg') 0 90% repeat-x;
+        @apply font-medium;
         background-size: auto 4px;
     }
 }
 
+.side-nav li a {
+    @apply text-base text-zinc-500;
+}
 .side-nav li.active a {
-    @apply relative font-bold;
+    @apply relative font-normal text-black;
 
-    &:before {
-        @apply absolute bg-yellow;
+    /* &:before {
+        @apply absolute;
         z-index: -1;
         height: 9px;
         top: 10px;
         left: -5%;
         width: 110%;
         content: '';
-    }
+    } */
 }
 
 .dark .side-nav li.active a {
-    @apply text-yellow !important;
-    &:before { display: none; }
+    @apply !important;
+    /* &:before { display: none; } */
 }
diff --git a/resources/css/old/code.css b/resources/css/old/code.css
deleted file mode 100644
index 8c7d97708..000000000
--- a/resources/css/old/code.css
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Synthwave '84 Theme originally by Robb Owen [@Robb0wen] for Visual Studio Code
- * Demo: https://marc.dev/demo/prism-synthwave84
- *
- * Ported for PrismJS by Marc Backes [@themarcba]
- * Modified by Jack McDade [@jackmcdade]
- */
-
-pre[class*="language-"] {
-	@apply font-mono;
-	color: #f92aad;
-	text-shadow: 0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3;
-	background: none;
-	font-size: 1em;
-	text-align: left;
-	white-space: pre;
-	word-spacing: normal;
-	word-break: normal;
-	word-wrap: normal;
-	line-height: 1.8;
-
-	-moz-tab-size: 4;
-	-o-tab-size: 4;
-	tab-size: 4;
-
-	-webkit-hyphens: none;
-	-moz-hyphens: none;
-	-ms-hyphens: none;
-	hyphens: none;
-}
-
-/* Code blocks */
-pre[class*="language-"] {
-	@apply rounded-sm mb-6 p-2 overflow-auto;
-}
-
-/* :not(pre)>code[class*="language-"], */
-pre[class*="language-"] {
-	background-color: transparent !important;
-	background-image: linear-gradient(to bottom, #2a2139 75%, #34294f);
-}
-
-pre[class*="language-files"] {
-	@apply bg-grey-200 text-grey-600 !important;
-	background-image: none;
-	text-shadow: none;
-}
-
-/* Inline code */
-:not(pre)>code[class*="language-"] {
-	@apply text-blue-dark;
-}
-
-pre > code {
-	.token.comment,
-	.token.block-comment,
-	.token.prolog,
-	.token.doctype,
-	.token.cdata {
-		color: #8e8e8e;
-	}
-
-	.token.punctuation {
-		color: #ccc;
-	}
-
-	.token.tag,
-	.token.attr-name,
-	.token.namespace,
-	.token.number,
-	.token.unit,
-	.token.hexcode,
-	.token.deleted {
-		color: #e2777a;
-	}
-
-	.token.property,
-	.token.selector {
-		color: #72f1b8;
-		text-shadow: 0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475;
-	}
-
-	.token.function-name {
-		color: #6196cc;
-	}
-
-	.token.boolean,
-	.token.selector .token.id,
-	.token.function {
-		color: #fdfdfd;
-		text-shadow: 0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975;
-
-	}
-
-	.token.class-name {
-		color: #fff5f6;
-		text-shadow: 0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75;
-	}
-
-	.token.constant,
-	.token.symbol {
-		color: #f92aad;
-		text-shadow: 0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3;
-	}
-
-	.token.important,
-	.token.atrule,
-	.token.keyword,
-	.token.selector .token.class,
-	.token.builtin {
-		color: #f4eee4;
-		text-shadow: 0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575;
-	}
-
-	.token.string,
-	.token.char,
-	.token.attr-value,
-	.token.regex,
-	.token.variable {
-		color: #f87c32;
-	}
-
-	.token.operator,
-	.token.entity,
-	.token.url {
-		color: #67cdcc;
-	}
-
-	.token.important,
-	.token.bold {
-		font-weight: bold;
-	}
-
-	.token.italic {
-		font-style: italic;
-	}
-
-	.token.entity {
-		cursor: help;
-	}
-
-	.token.inserted {
-		color: green;
-	}
-}
-
-/* Language Badge */
-.prism-show-language {
-	@apply relative;
-
-	.prism-show-language-label {
-		@apply absolute inline-block bottom-auto left-auto right-0 top-0 w-auto h-auto;
-		@apply uppercase text-xs font-display tracking-wide px-2 py-1 select-none rounded-tr-sm;
-		background: rgba(0,0,0,.5);
-		color: rgba(255,255,255,.5);
-
-		&[data-language="Files"] {
-			background: rgba(0,0,0,.2);
-			color: rgba(255,255,255,.75);
-		}
-	}
-}
-
-/* File Tree */
-.files-part .entry-line {
-	position: relative;
-	text-indent: -99em;
-	display: inline-block;
-	vertical-align: top;
-	width: 1.2em;
-}
-.files-part .entry-line:before,
-.files-part .line-h:after {
-	content: '';
-	position: absolute;
-	top: 0;
-	left: 50%;
-	width: 50%;
-	height: 100%;
-}
-.files-part .line-h:before,
-.files-part .line-v:before {
-	border-left: 1px solid #ccc;
-}
-.files-part .line-v-last:before {
-	height: 50%;
-	border-left: 1px solid #ccc;
-	border-bottom: 1px solid #ccc;
-}
-.files-part .line-h:after {
-	height: 50%;
-	border-bottom: 1px solid #ccc;
-}
-.files-part .entry-name {
-	position: relative;
-	display: inline-block;
-	vertical-align: top;
-	padding: 0 0 0 1.5em;
-}
-.files-part .entry-name:before {
-	content: '';
-	position: absolute;
-	top: 0;
-	left: 0.25em;
-	height: 100%;
-	width: 1em;
-	background: no-repeat 50% 50% / contain;
-}
-
-.files-part .entry-name.dotfile {
-	opacity: 0.5;
-}
-
-.files-part:last-child br {
-	display: none;
-}
-
-.files-part .entry-name:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogIiAvPg0KCTwvZz4NCjwvc3ZnPg==');
-}
-.files-part .entry-name.dir:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTUzNiAyMjR2NzA0cTAgNDAgLTI4IDY4dC02OCAyOGgtNzA0cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4di05NjBxMCAtNDAgMjggLTY4dDY4IC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6TTE2NjQgOTI4di03MDRxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTEyMTZxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwIHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4NCgk8L2c+DQo8L3N2Zz4=');
-}
-.files-part .entry-name.ext-bmp:before,
-.files-part .entry-name.ext-eps:before,
-.files-part .entry-name.ext-gif:before,
-.files-part .entry-name.ext-jpe:before,
-.files-part .entry-name.ext-jpg:before,
-.files-part .entry-name.ext-jpeg:before,
-.files-part .entry-name.ext-png:before,
-.files-part .entry-name.ext-svg:before,
-.files-part .entry-name.ext-tiff:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTEyODAgMzIwdi0zMjBoLTEwMjR2MTkybDE5MiAxOTJsMTI4IC0xMjhsMzg0IDM4NHpNNDQ4IDUxMnEtODAgMCAtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ0LTU2IC0xMzZ0LTEzNiAtNTZ6IiAvPg0KCTwvZz4NCjwvc3ZnPg==');
-}
-.files-part .entry-name.ext-cfg:before,
-.files-part .entry-name.ext-conf:before,
-.files-part .entry-name.ext-config:before,
-.files-part .entry-name.ext-csv:before,
-.files-part .entry-name.ext-ini:before,
-.files-part .entry-name.ext-log:before,
-.files-part .entry-name.ext-md:before,
-.files-part .entry-name.ext-nfo:before,
-.files-part .entry-name.ext-txt:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTM4NCA3MzZxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTcwNHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHpNMTEyMCA1MTJxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDcwNHpNMTEyMCAyNTZxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0IHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg3MDR6IiAvPg0KCTwvZz4NCjwvc3ZnPg==');
-}
-.files-part .entry-name.ext-asp:before,
-.files-part .entry-name.ext-aspx:before,
-.files-part .entry-name.ext-c:before,
-.files-part .entry-name.ext-cc:before,
-.files-part .entry-name.ext-cpp:before,
-.files-part .entry-name.ext-cs:before,
-.files-part .entry-name.ext-css:before,
-.files-part .entry-name.ext-h:before,
-.files-part .entry-name.ext-hh:before,
-.files-part .entry-name.ext-htm:before,
-.files-part .entry-name.ext-html:before,
-.files-part .entry-name.ext-jav:before,
-.files-part .entry-name.ext-java:before,
-.files-part .entry-name.ext-js:before,
-.files-part .entry-name.ext-php:before,
-.files-part .entry-name.ext-rb:before,
-.files-part .entry-name.ext-xml:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTQ4MCA3NjhxOCAxMSAyMSAxMi41dDI0IC02LjVsNTEgLTM4cTExIC04IDEyLjUgLTIxdC02LjUgLTI0bC0xODIgLTI0M2wxODIgLTI0M3E4IC0xMSA2LjUgLTI0dC0xMi41IC0yMWwtNTEgLTM4cS0xMSAtOCAtMjQgLTYuNXQtMjEgMTIuNWwtMjI2IDMwMXEtMTQgMTkgMCAzOHpNMTI4MiA0NjdxMTQgLTE5IDAgLTM4bC0yMjYgLTMwMXEtOCAtMTEgLTIxIC0xMi41dC0yNCA2LjVsLTUxIDM4cS0xMSA4IC0xMi41IDIxdDYuNSAyNGwxODIgMjQzIGwtMTgyIDI0M3EtOCAxMSAtNi41IDI0dDEyLjUgMjFsNTEgMzhxMTEgOCAyNCA2LjV0MjEgLTEyLjV6TTY2MiA2cS0xMyAyIC0yMC41IDEzdC01LjUgMjRsMTM4IDgzMXEyIDEzIDEzIDIwLjV0MjQgNS41bDYzIC0xMHExMyAtMiAyMC41IC0xM3Q1LjUgLTI0bC0xMzggLTgzMXEtMiAtMTMgLTEzIC0yMC41dC0yNCAtNS41eiIgLz4NCgk8L2c+DQo8L3N2Zz4=');
-}
-.files-part .entry-name.ext-7z:before,
-.files-part .entry-name.ext-bz:before,
-.files-part .entry-name.ext-bz2:before,
-.files-part .entry-name.ext-gz:before,
-.files-part .entry-name.ext-rar:before,
-.files-part .entry-name.ext-tar:before,
-.files-part .entry-name.ext-tgz:before,
-.files-part .entry-name.ext-zip:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNNjQwIDExNTJ2MTI4aC0xMjh2LTEyOGgxMjh6TTc2OCAxMDI0djEyOGgtMTI4di0xMjhoMTI4ek02NDAgODk2djEyOGgtMTI4di0xMjhoMTI4ek03NjggNzY4djEyOGgtMTI4di0xMjhoMTI4ek0xNDY4IDExNTZxMjggLTI4IDQ4IC03NnQyMCAtODh2LTExNTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4IC0yMHQ3NiAtNDh6TTEwMjQgMTQwMCB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC0xMjh2LTEyOGgtMTI4djEyOGgtNTEydi0xNTM2aDEyODB6TTc4MSA1OTNsMTA3IC0zNDlxOCAtMjcgOCAtNTJxMCAtODMgLTcyLjUgLTEzNy41dC0xODMuNSAtNTQuNXQtMTgzLjUgNTQuNXQtNzIuNSAxMzcuNXEwIDI1IDggNTJxMjEgNjMgMTIwIDM5NnYxMjhoMTI4di0xMjhoNzkgcTIyIDAgMzkgLTEzdDIzIC0zNHpNNjQwIDEyOHE1MyAwIDkwLjUgMTl0MzcuNSA0NXQtMzcuNSA0NXQtOTAuNSAxOXQtOTAuNSAtMTl0LTM3LjUgLTQ1dDM3LjUgLTQ1dDkwLjUgLTE5eiIgLz4NCgk8L2c+DQo8L3N2Zz4=');
-}
-.files-part .entry-name.ext-aac:before,
-.files-part .entry-name.ext-au:before,
-.files-part .entry-name.ext-cda:before,
-.files-part .entry-name.ext-flac:before,
-.files-part .entry-name.ext-mp3:before,
-.files-part .entry-name.ext-oga:before,
-.files-part .entry-name.ext-ogg:before,
-.files-part .entry-name.ext-wav:before,
-.files-part .entry-name.ext-wma:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTYyMCA2ODZxMjAgLTggMjAgLTMwdi01NDRxMCAtMjIgLTIwIC0zMHEtOCAtMiAtMTIgLTJxLTEyIDAgLTIzIDlsLTE2NiAxNjdoLTEzMXEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTMxbDE2NiAxNjdxMTYgMTUgMzUgN3pNMTAzNyAtM3EzMSAwIDUwIDI0cTEyOSAxNTkgMTI5IDM2M3QtMTI5IDM2M3EtMTYgMjEgLTQzIDI0dC00NyAtMTRxLTIxIC0xNyAtMjMuNSAtNDMuNXQxNC41IC00Ny41IHExMDAgLTEyMyAxMDAgLTI4MnQtMTAwIC0yODJxLTE3IC0yMSAtMTQuNSAtNDcuNXQyMy41IC00Mi41cTE4IC0xNSA0MCAtMTV6TTgyNiAxNDVxMjcgMCA0NyAyMHE4NyA5MyA4NyAyMTl0LTg3IDIxOXEtMTggMTkgLTQ1IDIwdC00NiAtMTd0LTIwIC00NC41dDE4IC00Ni41cTUyIC01NyA1MiAtMTMxdC01MiAtMTMxcS0xOSAtMjAgLTE4IC00Ni41dDIwIC00NC41cTIwIC0xNyA0NCAtMTd6IiAvPg0KCTwvZz4NCjwvc3ZnPg==');
-}
-.files-part .entry-name.ext-avi:before,
-.files-part .entry-name.ext-flv:before,
-.files-part .entry-name.ext-mkv:before,
-.files-part .entry-name.ext-mov:before,
-.files-part .entry-name.ext-mp4:before,
-.files-part .entry-name.ext-mpeg:before,
-.files-part .entry-name.ext-mpg:before,
-.files-part .entry-name.ext-ogv:before,
-.files-part .entry-name.ext-webm:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTc2OCA3NjhxNTIgMCA5MCAtMzh0MzggLTkwdi0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0zODRxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGgzODR6TTEyNjAgNzY2cTIwIC04IDIwIC0zMHYtNTc2cTAgLTIyIC0yMCAtMzBxLTggLTIgLTEyIC0ycS0xNCAwIC0yMyA5bC0yNjUgMjY2djkwbDI2NSAyNjZxOSA5IDIzIDlxNCAwIDEyIC0yeiIgLz4NCgk8L2c+DQo8L3N2Zz4=');
-}
-.files-part .entry-name.ext-pdf:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTg5NCA0NjVxMzMgLTI2IDg0IC01NnE1OSA3IDExNyA3cTE0NyAwIDE3NyAtNDlxMTYgLTIyIDIgLTUycTAgLTEgLTEgLTJsLTIgLTJ2LTFxLTYgLTM4IC03MSAtMzhxLTQ4IDAgLTExNSAyMHQtMTMwIDUzcS0yMjEgLTI0IC0zOTIgLTgzcS0xNTMgLTI2MiAtMjQyIC0yNjJxLTE1IDAgLTI4IDdsLTI0IDEycS0xIDEgLTYgNXEtMTAgMTAgLTYgMzZxOSA0MCA1NiA5MS41dDEzMiA5Ni41cTE0IDkgMjMgLTZxMiAtMiAyIC00cTUyIDg1IDEwNyAxOTcgcTY4IDEzNiAxMDQgMjYycS0yNCA4MiAtMzAuNSAxNTkuNXQ2LjUgMTI3LjVxMTEgNDAgNDIgNDBoMjFoMXEyMyAwIDM1IC0xNXExOCAtMjEgOSAtNjhxLTIgLTYgLTQgLThxMSAtMyAxIC04di0zMHEtMiAtMTIzIC0xNCAtMTkycTU1IC0xNjQgMTQ2IC0yMzh6TTMxOCA1NHE1MiAyNCAxMzcgMTU4cS01MSAtNDAgLTg3LjUgLTg0dC00OS41IC03NHpNNzE2IDk3NHEtMTUgLTQyIC0yIC0xMzJxMSA3IDcgNDRxMCAzIDcgNDNxMSA0IDQgOCBxLTEgMSAtMSAydC0wLjUgMS41dC0wLjUgMS41cS0xIDIyIC0xMyAzNnEwIC0xIC0xIC0ydi0yek01OTIgMzEzcTEzNSA1NCAyODQgODFxLTIgMSAtMTMgOS41dC0xNiAxMy41cS03NiA2NyAtMTI3IDE3NnEtMjcgLTg2IC04MyAtMTk3cS0zMCAtNTYgLTQ1IC04M3pNMTIzOCAzMjlxLTI0IDI0IC0xNDAgMjRxNzYgLTI4IDEyNCAtMjhxMTQgMCAxOCAxcTAgMSAtMiAzeiIgLz4NCgk8L2c+DQo8L3N2Zz4=');
-}
-.files-part .entry-name.ext-xls:before,
-.files-part .entry-name.ext-xlsx:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTQyOSAxMDZ2LTEwNmgyODF2MTA2aC03NWwxMDMgMTYxcTUgNyAxMCAxNi41dDcuNSAxMy41dDMuNSA0aDJxMSAtNCA1IC0xMHEyIC00IDQuNSAtNy41dDYgLTh0Ni41IC04LjVsMTA3IC0xNjFoLTc2di0xMDZoMjkxdjEwNmgtNjhsLTE5MiAyNzNsMTk1IDI4Mmg2N3YxMDdoLTI3OXYtMTA3aDc0bC0xMDMgLTE1OXEtNCAtNyAtMTAgLTE2LjV0LTkgLTEzLjVsLTIgLTNoLTJxLTEgNCAtNSAxMHEtNiAxMSAtMTcgMjNsLTEwNiAxNTloNzZ2MTA3IGgtMjkwdi0xMDdoNjhsMTg5IC0yNzJsLTE5NCAtMjgzaC02OHoiIC8+DQoJPC9nPg0KPC9zdmc+');
-}
-.files-part .entry-name.ext-doc:before,
-.files-part .entry-name.ext-docm:before,
-.files-part .entry-name.ext-docx:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTIzMyA3Njh2LTEwN2g3MGwxNjQgLTY2MWgxNTlsMTI4IDQ4NXE3IDIwIDEwIDQ2cTIgMTYgMiAyNGg0bDMgLTI0cTEgLTMgMy41IC0yMHQ1LjUgLTI2bDEyOCAtNDg1aDE1OWwxNjQgNjYxaDcwdjEwN2gtMzAwdi0xMDdoOTBsLTk5IC00MzhxLTUgLTIwIC03IC00NmwtMiAtMjFoLTRsLTMgMjFxLTEgNSAtNCAyMXQtNSAyNWwtMTQ0IDU0NWgtMTE0bC0xNDQgLTU0NXEtMiAtOSAtNC41IC0yNC41dC0zLjUgLTIxLjVsLTQgLTIxaC00bC0yIDIxIHEtMiAyNiAtNyA0NmwtOTkgNDM4aDkwdjEwN2gtMzAweiIgLz4NCgk8L2c+DQo8L3N2Zz4=');
-}
-.files-part .entry-name.ext-pps:before,
-.files-part .entry-name.ext-ppt:before,
-.files-part .entry-name.ext-pptx:before {
-	background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTQxNiAxMDZ2LTEwNmgzMjd2MTA2aC05M3YxNjdoMTM3cTc2IDAgMTE4IDE1cTY3IDIzIDEwNi41IDg3dDM5LjUgMTQ2cTAgODEgLTM3IDE0MXQtMTAwIDg3cS00OCAxOSAtMTMwIDE5aC0zNjh2LTEwN2g5MnYtNTU1aC05MnpNNzY5IDM4NmgtMTE5djI2OGgxMjBxNTIgMCA4MyAtMThxNTYgLTMzIDU2IC0xMTVxMCAtODkgLTYyIC0xMjBxLTMxIC0xNSAtNzggLTE1eiIgLz4NCgk8L2c+DQo8L3N2Zz4=');
-}
diff --git a/resources/css/old/docs.css b/resources/css/old/docs.css
deleted file mode 100644
index aa3e30f22..000000000
--- a/resources/css/old/docs.css
+++ /dev/null
@@ -1,123 +0,0 @@
-body {
-    background-color: #fff;
-}
-@screen lg {
-    body {
-        background-image: url('/img/zigs-top-right.svg'), url('/img/zigs-bottom-left.svg');
-        background-repeat: no-repeat;
-        background-position: calc(100% - 8px) top, 80px calc(100% - 160px);
-    }
-}
-
-a, button {
-    color: inherit;
-    text-decoration: none;
-    /* cursor: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAzElEQ…LaE7j/h8fnASkxHTz0DGIBMCnBeeM7AArpUd3mz2x3C7wADglA8BcWMZhZAAAAAElFTkSuQmCC) 14 0,pointer; */
-}
-
-.button {
-    @apply h-7 bg-yellow rounded border-2 shadow-md px-4 font-display text-sm font-bold antialiased whitespace-no-wrap transition;
-
-    &:hover {
-        @apply shadow relative;
-        transform: translate(2px, 2px);
-    }
-    &:focus {
-        @apply outline-none shadow-outline;
-    }
-}
-
-header {
-    p {
-        @apply text-xl !important;
-    }
-}
-
-.t {
-    transition: all .05s ease-in !important;
-}
-
-.table-collapse {
-    border-collapse: collapse !important;
-}
-
-figure, .screenshot {
-    @apply bg-yellow px-6 py-10 mb-16 relative;
-    img {
-        @apply border shadow-md mx-auto;
-        box-sizing: content-box;
-    }
-}
-
-.caption, figure figcaption {
-    @apply px-4 py-1 italic font-display mt-6 text-sm font-bold w-full text-center;
-}
-
-@screen lg {
-    .caption, figure figcaption {
-        @apply bg-blue-lightest border shadow font-display mt-0 text-sm font-bold absolute -bottom-16 right-64 w-auto text-left;
-    }
-}
-
-.badge {
-    @apply bg-mint border inline-block shadow-md-mint text-sm font-display py-1 px-2 uppercase italic font-bold;
-}
-
-.overflow-state {
-    @apply overflow-hidden max-h-screen fixed;
-}
-
-a svg.external {
-    @apply inline-block text-grey-500;
-    vertical-align: text-top;
-}
-
-.media-embed,
-.video-embed {
-    position: relative;
-    padding-bottom: 56.25%;
-    height: 0;
-    overflow: hidden;
-    max-width: 100%;
-
-    iframe,
-    object,
-    embed {
-        position: absolute;
-        top: 0;
-        left: 0;
-        width: 100%;
-        height: 100%;
-    }
-}
-
-.rot-1 {
-    transform: rotate(1deg);
-    -webkit-transform-style: preserve-3d;
-    -webkit-backface-visibility: hidden;
-}
-.\-rot-1 {
-    transform: rotate(-1deg);
-    -webkit-transform-style: preserve-3d;
-    -webkit-backface-visibility: hidden;
-}
-.rot-2 {
-    transform: rotate(2deg);
-    -webkit-transform-style: preserve-3d;
-    -webkit-backface-visibility: hidden;
-}
-.\-rot-2 {
-    transform: rotate(-2deg);
-    -webkit-transform-style: preserve-3d;
-    -webkit-backface-visibility: hidden;
-}
-.rot-3 {
-    transform: rotate(3deg);
-    -webkit-transform-style: preserve-3d;
-    -webkit-backface-visibility: hidden;
-}
-.\-rot-3 {
-    transform: rotate(-3deg);
-    -webkit-transform-style: preserve-3d;
-    -webkit-backface-visibility: hidden;
-}
diff --git a/resources/css/old/markdown.css b/resources/css/old/markdown.css
deleted file mode 100644
index 3d6c56b27..000000000
--- a/resources/css/old/markdown.css
+++ /dev/null
@@ -1,227 +0,0 @@
-.markdown {
-    @apply bg-transparent leading-relaxed text-blue-dark;
-
-    > h1 {
-        @apply text-5xl text-blue-darkest font-display font-bold mb-6 -mt-1 leading-none;
-    }
-
-    > h2 {
-        @apply text-2xl text-blue-darkest font-bold pb-4 leading-tight mt-12 pt-4 relative;
-    }
-
-    > h3 {
-        @apply text-lg text-blue-darkest font-bold mb-4 mt-10 pt-2 leading-tight relative;
-    }
-
-    > h4 {
-        @apply text-blue-darkest font-bold mb-2 mt-12 leading-tight;
-    }
-
-    > h5 {
-        @apply font-display font-bold italic text-blue-darkest;
-    }
-
-    h2 > .anchor, h3 > .anchor {
-        @apply absolute opacity-0;
-        left: -18px;
-        width: 36px;
-        transition: all .2s ease-in-out;
-    }
-
-    h2 > .anchor { top: 23px; }
-    h3 > .anchor { top: 11px; }
-
-    h2:hover .anchor, h3:hover .anchor {
-        opacity: 1;
-        left: -24px;
-    }
-
-    > p, > blockquote > p {
-        @apply text-base mb-6;
-        strong {
-            @apply text-blue-darkest;
-        }
-    }
-
-    > blockquote {
-        @apply bg-blue-lightest border shadow-md py-4 pl-4 pr-4 font-display relative text-sm mb-8;
-        @apply pt-6;
-
-        &:before {
-            content: '';
-            background: url('/img/hot-tip.svg') no-repeat;
-            height: 35px;
-            width: 70px;
-            position: absolute;
-            top: -16px;
-            left: -12px;
-            z-index: 2;
-        }
-
-        &.mouth:before {
-            content: '';
-            background: url('/img/open-mouth.svg') no-repeat;
-            height: 50px;
-            width: 64px;
-            position: absolute;
-            top: -10px;
-            left: -32px;
-            z-index: 10;
-        }
-
-        p {
-            @apply text-sm;
-            &:last-child { @apply mb-0; }
-        }
-
-        strong {
-            @apply italic;
-        }
-
-        a {
-            @apply italic font-bold;
-        }
-    }
-
-    > hr {
-        @apply border-t-2 border-grey-300 my-16;
-    }
-
-    a {
-        @apply underline text-pink-hot font-medium;
-        &:hover {
-            @apply text-pink-bright;
-        }
-    }
-
-    ul:not(.list-none) {
-        @apply pl-0 list-none mb-6;
-        li {
-            @apply relative pl-6 mb-2;
-            &::before {
-                @apply absolute inline-block;
-                content: url('/img/triangle-pink.svg');
-                top: 10px;
-                left: 2px;
-            }
-            &:nth-child(3n+0)::before {
-                content: url('/img/triangle-pink.svg');
-            }
-            &:nth-child(3n+1)::before {
-                content: url('/img/triangle-purple.svg');
-            }
-            &:nth-child(3n+2)::before {
-                content: url('/img/triangle-teal.svg');
-            }
-            a {
-                @apply underline text-pink-hot font-medium;
-                &:hover {
-                    @apply text-pink-bright;
-                }
-            }
-        }
-    }
-
-    ol {
-        @apply list-none mb-6;
-        counter-reset: item;
-
-        > li {
-            @apply relative pl-10 mb-2;
-        }
-
-        > li::before {
-            @apply absolute top-0 left-0 mt-px flex items-center justify-center h-6 w-6 bg-yellow rounded-full text-blue-darkest text-lg font-bold italic font-display;
-            content: counter(item);
-            counter-increment: item;
-        }
-    }
-
-    /* Code blocks in headers */
-    h1 > code, h2 > code, h3 > code, h4 > code {
-        @apply text-pink-hot bg-grey-200 rounded-sm relative;
-        font-size: 90%;
-        padding: .1em .2em;
-        bottom: .05rem;
-    }
-
-    :not(pre):not(h1):not(h2):not(h3):not(h4) > code {
-        @apply bg-grey-200 leading-normal rounded-sm relative;
-        font-size: 80%;
-        padding: .2em;
-        bottom: .05rem;
-        white-space: nowrap;
-    }
-
-    > p code,
-    > ul li *:not(pre) code,
-    > ul li > code,
-    > ol li *:not(pre) code,
-    > ol li > code {
-        @apply inline-block bg-grey-200 text-sm px-1 leading-none whitespace-no-wrap text-purple font-mono align-baseline;
-        font-weight: 400;
-    }
-
-    > blockquote *:not(pre) > code {
-        @apply bg-blue-light text-white !important;
-    }
-
-  > pre, pre&, > ul li pre, > ol li pre {
-    @apply flex p-0 bg-grey-800 ;
-    @apply text-sm leading-loose;
-  }
-
-  > pre code, pre code&, > ul li pre code, > ol li pre code {
-    @apply p-4;
-  }
-
-  pre.language-markdown code {
-    white-space: pre-line !important;
-  }
-
-  li > pre, li > .prism-show-language {
-      @apply mt-4;
-  }
-
-  .column-list-3 {
-    column-count: 3;
-    column-gap: 2em;
-    a {
-        @apply font-display text-base text-pink-hot font-bold;
-        &:hover {
-            @apply italic;
-        }
-    }
-}
-
-  > table {
-    @apply w-full text-left table-collapse border shadow-lg-mint mb-8;
-    th {
-      @apply text-base font-display italic font-normal text-black p-3 bg-mint border-t-4 border-b border-black;
-    }
-    td {
-      @apply p-3 border-b border-black text-sm;
-      code {
-        @apply font-mono text-xs p-0 text-purple !important;
-        background-color: transparent !important;
-        bottom: 0 !important;
-      }
-    }
-    p {
-        @apply leading-normal;
-    }
-  }
-
-}
-
-@screen lg {
-    .markdown {
-        > blockquote {
-            @apply pl-12 pt-4;
-        }
-        > blockquote:before {
-            top: 6px;
-            left: -35px;
-        }
-    }
-}
diff --git a/resources/css/old/nav.css b/resources/css/old/nav.css
deleted file mode 100644
index 4a8227253..000000000
--- a/resources/css/old/nav.css
+++ /dev/null
@@ -1,41 +0,0 @@
-.side-nav {
-    @apply font-display;
-    padding-bottom: 180px;
-
-    h5 {
-        @apply font-display font-bold italic text-blue-darkest mb-2 uppercase;
-    }
-
-    ul, ol {
-        @apply mb-8;
-    }
-
-    li {
-        @apply mb-1 leading-tight relative;
-    }
-
-    li a {
-        @apply text-grey-800 text-sm py-1 relative z-10 inline-block;
-        &:hover {
-            @apply text-pink-hot;
-        }
-    }
-
-    li.active a {
-        @apply font-bold;
-        &:hover { @apply tracking-normal; }
-    }
-
-    li.active a:before {
-        @apply absolute bg-yellow mt-1 ml-1 w-full;
-        z-index: -1;
-        height: 50%;
-        top: 5px;
-        left: 2px;
-        content: '';
-    }
-}
-
-.toc li.active a:before {
-    @apply bg-mint;
-}
diff --git a/resources/css/old/search.css b/resources/css/old/search.css
deleted file mode 100644
index 612129991..000000000
--- a/resources/css/old/search.css
+++ /dev/null
@@ -1,78 +0,0 @@
-@screen md {
-    .algolia-autocomplete {
-        width: 460px;
-    }
-}
-
-@screen xl {
-    .algolia-autocomplete {
-        width: 672px;
-    }
-}
-
-
-
-.algolia-autocomplete .algolia-docsearch-suggestion--category-header {
-    @apply text-blue-darkest font-bold border-blue-darkest px-4 py-2  text-lg italic;
-}
-
-.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column {
-    @apply text-purple;
-}
-
-.algolia-autocomplete .algolia-docsearch-suggestion--content:before {
-    @apply bg-blue-darkest;
-}
-
-.algolia-autocomplete .ds-dropdown-menu {
-    @apply shadow-md rounded-none mt-3 w-full;
-
-    &:before {
-        @apply border-blue-darkest;
-    }
-}
-
-.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] {
-    @apply border border-blue-darkest rounded-none p-0;
-}
-
-.algolia-autocomplete .algolia-docsearch-suggestion {
-    padding: 0;
-}
-
-.algolia-autocomplete .algolia-docsearch-suggestion--highlight {
-    @apply bg-yellow text-blue-darkest;
-}
-
-.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,
-.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content {
-    @apply bg-yellow;
-}
-
-.algolia-autocomplete .algolia-docsearch-footer {
-    @apply border-t-2 border-l-2;
-    padding: 8px;
-    width: 150px;
-    height: 36px;
-}
-
-
-@media (max-width: 768px) {
-    .algolia-autocomplete .ds-dropdown-menu {
-        min-width: auto;
-        width: 80vw;
-        margin-left: -10vw;
-
-        .algolia-docsearch-suggestion--wrapper {
-            @apply border-b p-4;
-        }
-
-        .algolia-docsearch-suggestion--category-header {
-            @apply p-2;
-        }
-
-        .algolia-docsearch-suggestion--subcategory-column {
-            display: none;
-        }
-    }
-}
diff --git a/resources/css/search.css b/resources/css/search.css
deleted file mode 100644
index 14207ae56..000000000
--- a/resources/css/search.css
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Algolia DocSearch Variables */
-:root {
-    --docsearch-primary-color: theme('colors.purple') !important;
-    --docsearch-text-color: rgb(28, 30, 33);
-    --docsearch-spacing: 16px !important;
-    --docsearch-icon-stroke-width: 1.4;
-    --docsearch-highlight-color: var(--docsearch-primary-color);
-    --docsearch-muted-color: rgb(150, 159, 175);
-    --docsearch-container-background: rgba(101, 108, 133, 0.4) !important;
-    --docsearch-logo-color: theme('colors.black') !important;
-
-    /* modal */
-    --docsearch-modal-width: 760px !important;
-    --docsearch-modal-height: 600px;
-    --docsearch-modal-background: #fff !important;
-    --docsearch-modal-shadow: 4px 4px 0 theme('colors.black') !important;
-
-    /* searchbox */
-    --docsearch-searchbox-height: 56px;
-    --docsearch-searchbox-background: #fff !important;
-    --docsearch-searchbox-focus-background: #fff;
-    --docsearch-searchbox-shadow: inset 0 0 0 2px var(--docsearch-primary-color);
-
-    /* hit */
-    --docsearch-hit-height: 56px;
-    --docsearch-hit-color: rgb(68, 73, 80);
-    --docsearch-hit-active-color: #fff;
-    --docsearch-hit-background: theme('colors.gray.lightest') !important;
-    --docsearch-hit-shadow: none !important;
-
-    /* key */
-    --docsearch-key-gradient: #fff !important;
-    --docsearch-key-shadow: inset 0 -2px 0 0 rgb(205, 205, 230),
-        inset 0 0 1px 1px #fff, 0 1px 2px 1px rgba(30, 35, 90, 0.4);
-
-    /* footer */
-    --docsearch-footer-height: 56px !important;
-    --docsearch-footer-background: #fff;
-    --docsearch-footer-shadow: none !important;
-}
-
-
-/* Overrides */
-/* -------------------------------------------------- */
-
-.DocSearch-Modal {
-    @apply rounded-lg border !important;
-}
-
-.DocSearch-Hit-Container {
-    @apply h-16 !important;
-}
-
-.DocSearch-Hit-content-wrapper {
-    @apply mx-4 flex-col-reverse !important;
-}
-
-.DocSearch-Commands {
-    @apply hidden !important;
-}
-
-.DocSearch-Footer {
-    @apply border-t !important;
-}
-
-.DocSearch-Hit-path {
-    @apply text-lg font-display font-medium text-black !important;
-}
-
-.DocSearch-Hits mark {
-    color: inherit !important;
-}
-#docsearch {
-    @apply w-full !important;
-}
-
-.DocSearch-Button {
-    @apply h-5 m-0 w-full text-black antialiased font-normal cursor-text !important;
-    &:hover {
-        box-shadow: none !important;
-    }
-}
-
-.DocSearch-Button-Keys {
-    @apply hidden lg:flex !important;
-}
-.DocSearch-Button-Key {
-    @apply bg-white border shadow-md text-black pb-0 !important;
-}
-
-.DocSearch-Button-Container {
-    @apply flex-1 !important;
-}
-
-.dark {
-    .DocSearch-Button {
-        @apply bg-transparent !important;
-    }
-    .DocSearch-Button-Key  {
-        @apply bg-transparent !important;
-    }
-}
diff --git a/resources/css/site.css b/resources/css/site.css
new file mode 100644
index 000000000..12b0cbc1c
--- /dev/null
+++ b/resources/css/site.css
@@ -0,0 +1 @@
+/* _Local_ CSS is instead loaded from public/css/style.css so that we can override it locally using DevTool's "workspaces" feature. */
\ No newline at end of file
diff --git a/resources/css/tailwind.css b/resources/css/tailwind.css
deleted file mode 100644
index 70260c725..000000000
--- a/resources/css/tailwind.css
+++ /dev/null
@@ -1,13 +0,0 @@
-@import "tailwindcss/base";
-
-/* @import "code"; */
-@import "carbonads";
-@import "content";
-@import "components";
-@import "layout";
-@import "search";
-@import "torchlight";
-@import "utilities";
-
-@import "tailwindcss/components";
-@import "tailwindcss/utilities";
diff --git a/resources/css/torchlight.css b/resources/css/torchlight.css
index b5235b27d..b2a80a0ba 100644
--- a/resources/css/torchlight.css
+++ b/resources/css/torchlight.css
@@ -10,7 +10,7 @@ pre {
   Inline code
 */
 :not(pre)>code {
-    @apply text-purple rounded;
+    @apply text-purple-600 rounded;
     padding: 1px 2px;
     font-size: 15px;
     background-color: #E7ECF1;
@@ -44,7 +44,7 @@ pre code.torchlight .summary-caret {
 }
 
 pre .language-badge {
-    @apply text-white tracking-widest inline-block absolute right-0 opacity-50 top-0 p-1 uppercase select-none;
+    @apply text-white tracking-widest inline-block absolute right-1 opacity-50 top-0 p-1 uppercase select-none;
     font-size: 10px;
 }
 
@@ -196,3 +196,54 @@ pre .language-badge {
     top: 50%;
     border-left-width: 1px;
 }
+
+/* Copy button styles */
+.copy-button {
+    position: absolute;
+    top: 0.75rem;
+    right: 0.75rem;
+    background: rgba(255, 255, 255, 0.1);
+    border: 1px solid rgba(255, 255, 255, 0.2);
+    border-radius: 0.375rem;
+    color: rgba(255, 255, 255, 0.7);
+    cursor: pointer;
+    display: flex;
+    align-items: center;
+    gap: 0.5rem;
+    padding: 0.5rem 0.75rem;
+    font-size: 0.875rem;
+    font-weight: 500;
+    transition: all 0.2s ease;
+    opacity: 0;
+    backdrop-filter: blur(8px);
+    z-index: 10;
+}
+
+.copy-button:hover {
+    background: rgba(255, 255, 255, 0.15);
+    color: rgba(255, 255, 255, 0.9);
+}
+
+.copy-button.copied {
+    background: rgba(34, 197, 94, 0.2);
+    border-color: rgba(34, 197, 94, 0.3);
+    color: rgba(34, 197, 94, 0.9);
+}
+
+.copy-icon,
+.check-icon {
+    width: 16px;
+    height: 16px;
+}
+
+.check-icon {
+    display: none;
+}
+
+.copy-button.copied .copy-icon {
+    display: none;
+}
+
+.copy-button.copied .check-icon {
+    display: block;
+}
diff --git a/resources/fieldsets/advert_override.yaml b/resources/fieldsets/advert_override.yaml
new file mode 100644
index 000000000..78687ade0
--- /dev/null
+++ b/resources/fieldsets/advert_override.yaml
@@ -0,0 +1,11 @@
+title: 'Advert Override'
+fields:
+  -
+    handle: advert_override
+    field:
+      max_items: 1
+      collections:
+        - adverts
+      type: entries
+      display: 'Advert Override'
+      instructions: 'If you want a specific advert to show on this page rather than a random advert'
diff --git a/resources/fieldsets/hue_rotate.yaml b/resources/fieldsets/hue_rotate.yaml
new file mode 100644
index 000000000..ad060a629
--- /dev/null
+++ b/resources/fieldsets/hue_rotate.yaml
@@ -0,0 +1,16 @@
+title: 'Hue Rotate'
+fields:
+  -
+    handle: hue_rotate
+    field:
+      options:
+        -
+          key: hue_rotate_1
+          value: 'Hue Rotate'
+        -
+          key: hue_rotate_2
+          value: 'Hue Rotate Extra'
+      clearable: true
+      type: button_group
+      display: 'Hue Rotate'
+      instructions: 'Add extra hue rotations to make the image more stylised'
diff --git a/resources/fieldsets/navigation.yaml b/resources/fieldsets/navigation.yaml
new file mode 100644
index 000000000..a68400ebb
--- /dev/null
+++ b/resources/fieldsets/navigation.yaml
@@ -0,0 +1,49 @@
+title: Navigation
+fields:
+  -
+    handle: navigation_image
+    field:
+      max_files: 1
+      container: main
+      folder: navigation
+      type: assets
+      display: 'Navigation Image'
+      instructions: 'Used for the major sections of the sidebar'
+      width: 50
+  -
+    handle: navigation_image_dark_mode
+    field:
+      max_files: 1
+      container: main
+      folder: navigation
+      type: assets
+      display: 'Navigation Image Dark Mode (optional override)'
+      instructions: 'Used for the major sections of the sidebar'
+      width: 50
+  -
+    handle: image_width_override
+    field:
+      type: text
+      display: 'Image Width Override'
+      instructions: 'e.g. `1.9em`. This allows you to override the width for certain navigation images. You may want to do this if the image has an unusual aspect ratio, which might make the image appear smaller, such as sunglasses that are more landscape.'
+  -
+    handle: tile_image
+    field:
+      max_files: 1
+      container: main
+      folder: tiles
+      type: assets
+      display: 'Tile Image'
+      instructions: 'A "fuller" version of the image, used for the tile images on the page, e.g. `/reference`'
+      width: 50
+  -
+    handle: tile_image_dark_mode
+    field:
+      max_files: 1
+      container: main
+      folder: tiles
+      type: assets
+      display: 'Tile Image Dark Mode (Optional override)'
+      width: 50
+  -
+    import: hue_rotate
diff --git a/resources/js/anchors.js b/resources/js/anchors.js
index 16e131fef..be5f701b4 100644
--- a/resources/js/anchors.js
+++ b/resources/js/anchors.js
@@ -1,7 +1,22 @@
 // Add header anchors
-var elements = document.querySelectorAll('article h2, article h3, article h4');
+var elements = document.querySelectorAll('article :is(h2, h3, h4, h5, h6):not(.js__no-anchors)');
+
+// If fewer than 3 headings, also include h1s
+if (elements.length < 3) {
+    elements = document.querySelectorAll('article :is(h1, h2, h3, h4, h5, h6):not(.js__no-anchors)');
+}
+
 Array.prototype.forEach.call(elements, function (el, i) {
-    if (el.id) {
-        el.innerHTML += '<a href="#' + el.id + '" class="anchor">#</a>';
+    // Generate an ID if one doesn't exist
+    if (!el.id) {
+        // Create ID from heading text: lowercase, remove special chars, replace spaces with hyphens
+        el.id = el.textContent.toLowerCase()
+            .replace(/[^\w\s-]/g, '')
+            .replace(/\s+/g, '-')
+            .replace(/-+$/, ''); // Remove trailing hyphens which can be cause when an emoji is added to the end e.g. "Writing pure Antlers in Blade 🆕"
     }
-});
+    // Add scroll spy timeline track class and incrementing style
+    el.classList.add('o-scroll-spy-timeline__track');
+    el.setAttribute('style', '--ti-name: --' + (i + 1));
+    el.innerHTML += '<a href="#' + el.id + '" class="c-anchor">#</a>';
+});
\ No newline at end of file
diff --git a/resources/js/app.js b/resources/js/app.js
deleted file mode 100644
index 128b153b0..000000000
--- a/resources/js/app.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import Alpine from 'alpinejs';
-import docsearch from '@docsearch/js';
-import '@docsearch/css';
-
-require('./anchors.js')
-require('./cookies.js')
-require('./external-links.js')
-require('./language-badges.js')
-
-var dayjs = require('dayjs')
-var relativeTime = require('dayjs/plugin/relativeTime')
-dayjs.extend(relativeTime)
-
-window.dayjs = dayjs;
-
-
-docsearch({
-  container: '#docsearch',
-  appId: '90UJMUR5MX',
-  indexName: 'statamic_3',
-  apiKey: '2cea01a83bd805b6c642d3bda0b91437',
-  transformItems(items) {
-    return items.map((item) => {
-        // Transform the absolute URL into a relative URL so it works locally.
-        const a = document.createElement('a');
-        a.href = item.url;
-
-        // If the result is the h1, remove the hash
-        const hash = a.hash === '#content' ? '' : a.hash;
-
-        return {...item, url: `${a.pathname}${hash}`}
-    });
-  },
-});
-
-window.bodyData = function() {
-    let primaryKeyBind = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform) ? 'meta' : 'ctrl';
-    return {
-        showNav: false,
-        showSearch: false,
-        showEasterEgg: false,
-        nearTop: true,
-    };
-}
-
-window.htmlData = function() {
-    return {
-        themePickerOpen: false,
-        themePreference: localStorage.getItem('theme') || 'system',
-        systemTheme: window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light',
-        setSystemTheme(theme) {
-            this.systemTheme = theme
-        },
-        setThemePreference(theme) {
-            this.themePreference = theme
-            localStorage.setItem('theme', theme)
-        },
-        get darkMode() {
-            return this.themePreference === 'dark' || (this.themePreference === 'system' && this.systemTheme === 'dark')
-        },
-    }
-}
-
-Alpine.start();
-window.Alpine = Alpine;
diff --git a/resources/js/collapsible-side-menu.js b/resources/js/collapsible-side-menu.js
new file mode 100644
index 000000000..51ac7d662
--- /dev/null
+++ b/resources/js/collapsible-side-menu.js
@@ -0,0 +1,60 @@
+// Function to collapse navigation (uncheck inputs)
+function expandNavigation() {
+    document.querySelectorAll('.o-toggle-subnav').forEach(element => {
+        if (!element.matches(':has(+ ul .o-current-menu-item)')) {
+            element.querySelector('input').checked = false;
+        }
+    });
+    Array.from(document.querySelectorAll('.js__expand-collapse-nav') || []).forEach(element => {
+        element.classList.remove('js__expand-collapse-nav--collapsed');
+    });
+}
+
+// Function to expand navigation (check inputs)
+function collapseNavigation() {
+    document.querySelectorAll('.o-toggle-subnav').forEach(element => {
+        if (!element.matches(':has(+ ul .o-current-menu-item)')) {
+            element.querySelector('input').checked = true;
+        }
+    });
+    Array.from(document.querySelectorAll('.js__expand-collapse-nav') || []).forEach(element => {
+        element.classList.add('js__expand-collapse-nav--collapsed');
+    });
+}
+
+// Function to handle navigation collapse/expand
+function toggleNavigation() {
+    if (localStorage.getItem('collapse-nav') === 'yes') {
+        expandNavigation();
+        localStorage.setItem('collapse-nav', 'no');
+    } else {
+        collapseNavigation();
+        localStorage.setItem('collapse-nav', 'yes');
+    }
+}
+
+// Add click handlers
+Array.from(document.querySelectorAll('.js__expand-collapse-nav') || []).forEach(element => {
+    element.onclick = toggleNavigation;
+});
+
+// Apply saved state on page load
+window.addEventListener('DOMContentLoaded', (event) => {
+    // Add class to prevent animations during initial state application
+    Array.from(document.querySelectorAll('.o-toggle-subnav-container') || []).forEach(element => {
+        element.classList.add('u-disable-animation');
+    });
+
+    if (localStorage.getItem('collapse-nav') === 'yes') {
+        collapseNavigation();
+    } else {
+        expandNavigation();
+    }
+    
+    // Remove the class after a short delay to allow state to be applied
+    setTimeout(() => {
+        Array.from(document.querySelectorAll('.o-toggle-subnav-container') || []).forEach(element => {
+            element.classList.remove('u-disable-animation');
+        });
+    }, 500);
+});
\ No newline at end of file
diff --git a/resources/js/color-scheme-preferences.js b/resources/js/color-scheme-preferences.js
new file mode 100644
index 000000000..766b69c9b
--- /dev/null
+++ b/resources/js/color-scheme-preferences.js
@@ -0,0 +1,43 @@
+/* DARK MODE - SAVE PREFERENCES
+=================================================== */
+/* Notes...
+    - Inspiration - https://www.smashingmagazine.com/2024/03/setting-persisting-color-scheme-preferences-css-javascript/
+    - If a color scheme preference was previously stored,
+    - select the corresponding option in the color scheme preference UI
+    - unless it is already selected.
+*/
+const colorSchemeStorageItemName = "preferredColorScheme";
+const colorSchemeSelectorEl = document.querySelector("#color-scheme");
+
+function restoreColorSchemePreference() {
+    const colorScheme = localStorage.getItem(colorSchemeStorageItemName);
+
+    if (!colorScheme) {
+        return;
+    }
+
+    const option = colorSchemeSelectorEl.querySelector(`[value=${colorScheme}]`);
+
+    if (!option) {
+        localStorage.removeItem(colorSchemeStorageItemName);
+        return;
+    }
+
+    if (option.selected) {
+        return;
+    }
+
+    option.selected = true;
+}
+
+/* Store an event target's value in localStorage under colorSchemeStorageItemName */
+function storeColorSchemePreference({ target }) {
+    const colorScheme = target.querySelector(":checked").value;
+    localStorage.setItem(colorSchemeStorageItemName, colorScheme);
+}
+
+if (colorSchemeSelectorEl) {
+    restoreColorSchemePreference();
+
+    colorSchemeSelectorEl.addEventListener("input", storeColorSchemePreference);
+}
\ No newline at end of file
diff --git a/resources/js/dayjs.js b/resources/js/dayjs.js
new file mode 100644
index 000000000..71b2c19c4
--- /dev/null
+++ b/resources/js/dayjs.js
@@ -0,0 +1,5 @@
+import dayjs from 'dayjs';
+import relativeTime from 'dayjs/plugin/relativeTime';
+
+dayjs.extend(relativeTime);
+window.dayjs = dayjs;
diff --git a/resources/js/dl.js b/resources/js/dl.js
new file mode 100644
index 000000000..ca3c8b5f3
--- /dev/null
+++ b/resources/js/dl.js
@@ -0,0 +1,13 @@
+document.addEventListener('DOMContentLoaded', function() {
+    const dlElements = document.querySelectorAll('.c-entry-content dl');
+    
+    dlElements.forEach(dl => {
+        const ddElements = dl.getElementsByTagName('dd');
+        for (let dd of ddElements) {
+            if (dd.textContent.toLowerCase().trim() === 'no') {
+                dl.classList.add('c-pill--negative');
+                break;
+            }
+        }
+    });
+});
diff --git a/resources/js/docsearch.js b/resources/js/docsearch.js
new file mode 100644
index 000000000..f2710333d
--- /dev/null
+++ b/resources/js/docsearch.js
@@ -0,0 +1,18 @@
+import "meilisearch-docsearch/css";
+import { docsearch } from "meilisearch-docsearch";
+
+// This is smart enough to filter out cmd or ctrl based on OS.
+// Precedence also allows `/` to be used, but isn't shown.
+let hotKeys = [
+    "cmd+k",
+    "ctrl+k",
+    "/",
+];
+
+docsearch({
+    container: "#docsearch",
+    host: "https://search.statamic.dev",
+    apiKey: "a8b8f82076221f9595dceca971be29c36cbccd772de5dbdb7f43dfac41557f95",
+    indexUid: "default",
+    hotKeys: hotKeys,
+});
diff --git a/resources/js/font-preferences.js b/resources/js/font-preferences.js
new file mode 100644
index 000000000..156611847
--- /dev/null
+++ b/resources/js/font-preferences.js
@@ -0,0 +1,47 @@
+/* FONT PREFERENCES
+=================================================== */
+/* Notes...
+    - Inspiration - https://www.smashingmagazine.com/2024/03/setting-persisting-color-scheme-preferences-css-javascript/
+    - If a font preference was previously stored,
+    - select the corresponding option in the font preference UI
+    - unless it is already selected.
+*/
+const fontStorageItemName = "preferredFont";
+const fontSelectorEl = document.querySelector(".o-font-toggle");
+
+function restoreFontPreference() {
+    const font = localStorage.getItem(fontStorageItemName);
+
+    if (!font) {
+        return;
+    }
+
+    const option = fontSelectorEl.querySelector(`[value="${font}"]`);
+
+    if (!option) {
+        localStorage.removeItem(fontStorageItemName);
+        return;
+    }
+
+    if (option.checked) {
+        return;
+    }
+
+    option.checked = true;
+}
+
+/* Store an event target's value in localStorage under fontStorageItemName */
+function storeFontPreference({ target }) {
+    const font = target.value;
+    localStorage.setItem(fontStorageItemName, font);
+}
+
+if (fontSelectorEl) {
+    restoreFontPreference();
+
+    // Listen for changes on the radio buttons
+    const radioButtons = fontSelectorEl.querySelectorAll('input[type="radio"]');
+    radioButtons.forEach(radio => {
+        radio.addEventListener("change", storeFontPreference);
+    });
+}
\ No newline at end of file
diff --git a/resources/js/site.js b/resources/js/site.js
new file mode 100644
index 000000000..3465cb781
--- /dev/null
+++ b/resources/js/site.js
@@ -0,0 +1,24 @@
+import { Alpine } from '../../vendor/livewire/livewire/dist/livewire.esm';
+import intersect from '@alpinejs/intersect';
+import persist from '@alpinejs/persist'
+import './collapsible-side-menu.js';
+import './anchors.js';
+import './cookies.js';
+import './color-scheme-preferences.js';
+import './font-preferences.js';
+import './external-links.js';
+import './dl.js';
+import './tables.js';
+import './language-badges.js';
+import './dayjs.js';
+import './docsearch.js';
+import './torchlight.js';
+import './toc-navigation.js';
+
+// Register plugins before starting Alpine
+Alpine.plugin(intersect);
+Alpine.plugin(persist);
+
+// Start Alpine
+Alpine.start();
+window.Alpine = Alpine;
diff --git a/resources/js/tables.js b/resources/js/tables.js
new file mode 100644
index 000000000..555220148
--- /dev/null
+++ b/resources/js/tables.js
@@ -0,0 +1,10 @@
+document.addEventListener('DOMContentLoaded', function() {
+    // Wrap tables in div with c-table class
+    const tables = document.querySelectorAll('.c-entry-content table');
+    tables.forEach(table => {
+        const wrapper = document.createElement('div');
+        wrapper.className = 'c-table';
+        table.parentNode.insertBefore(wrapper, table);
+        wrapper.appendChild(table);
+    });
+});
diff --git a/resources/js/toc-navigation.js b/resources/js/toc-navigation.js
new file mode 100644
index 000000000..54440aea3
--- /dev/null
+++ b/resources/js/toc-navigation.js
@@ -0,0 +1,49 @@
+function tocNavigation() {
+    const state = {
+        activeSection: null,
+        activeLink: null
+    };
+
+    function init() {
+        // [1] Find all heading elements (h2-h3)
+        const headingElements = document.querySelectorAll('.js__scroll-spy-toc__timeline h2, .js__scroll-spy-toc__timeline h3');
+        
+        // [2] Find all TOC links
+        const tocLinks = document.querySelectorAll('.js__scroll-spy-toc a');
+
+        // Create intersection observer
+        const observer = new IntersectionObserver((entries) => {
+            entries.forEach(entry => {
+                const id = entry.target.getAttribute('id');
+                
+                if (entry.isIntersecting) {
+                    // [6] Update active section
+                    state.activeSection = id;
+                    
+                    // [4] & [5] Update active classes
+                    tocLinks.forEach(link => {
+                        link.classList.remove('js--scroll-spy-toc-active');
+                        if (link.getAttribute('href') === `#${id}`) {
+                            link.classList.add('js--scroll-spy-toc-active');
+                            // [7] Update active link
+                            state.activeLink = link;
+                        }
+                    });
+                }
+            });
+        }, { 
+            threshold: 0.75, // Sets how much of the element needs to be visible before the observer triggers. e.g. 0.1 means 10% of the element must be visible
+            rootMargin: '-10% 0px -50% 0px' // Added rootMargin
+        });
+
+        // [3] Observe each heading element
+        headingElements.forEach(heading => observer.observe(heading));
+    }
+
+    return { init };
+}
+
+// Initialize when DOM is ready
+document.addEventListener('DOMContentLoaded', () => {
+    tocNavigation().init();
+});
diff --git a/resources/js/torchlight.js b/resources/js/torchlight.js
new file mode 100644
index 000000000..955ba226f
--- /dev/null
+++ b/resources/js/torchlight.js
@@ -0,0 +1,87 @@
+// Add language badges and copy buttons to Torchlight code blocks
+Array.prototype.forEach.call(document.querySelectorAll('code.torchlight'), function (el) {
+    // Add language badge
+    if (el.dataset.lang) {
+        let badge = document.createElement('div');
+        badge.className = 'language-badge';
+        badge.innerHTML = el.dataset.lang === 'md' ? 'markdown' : el.dataset.lang;
+        el.parentElement.appendChild(badge);
+    }
+    
+    // Add copy button
+    let copyButton = document.createElement('button');
+    copyButton.className = 'copy-button';
+    copyButton.innerHTML = `
+        <svg xmlns="http://www.w3.org/2000/svg" class="copy-icon" fill="none" viewBox="0 0 14 14" id="Copy-Document--Streamline-Flex"><desc>Copy Document Streamline Icon: https://streamlinehq.com</desc><g id="copy-document"><path id="Intersect" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M13.3972 11.8956c0.0674 -1.0961 0.1028 -2.23187 0.1028 -3.3956 0 -0.47148 -0.0058 -0.93836 -0.0172 -1.39988 -0.0081 -0.32662 -0.1121 -0.64405 -0.3019 -0.90741 -0.7183 -0.99637 -1.2911 -1.61653 -2.2338 -2.35786 -0.261 -0.20524 -0.5814 -0.31656 -0.911 -0.32388C9.70816 3.5037 9.36573 3.5 9 3.5c-1.10726 0 -2.00102 0.03388 -2.92518 0.09844 -0.79274 0.05538 -1.42235 0.69819 -1.47201 1.50593C4.53542 6.20051 4.5 7.33627 4.5 8.5c0 1.16373 0.03542 2.2995 0.10281 3.3956 0.04966 0.8078 0.67927 1.4506 1.47201 1.506C6.99898 13.4661 7.89274 13.5 9 13.5c1.1073 0 2.001 -0.0339 2.9252 -0.0984 0.7927 -0.0554 1.4223 -0.6982 1.472 -1.506Z" stroke-width="1"/><path id="Intersect_2" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M5 0.5c0.03142 0 0.06267 0.000027 0.09375 0.000082 0.33071 0.000579 0.64258 0.004239 0.94234 0.010891 0.32965 0.007315 0.64999 0.118641 0.91098 0.323877 0.31142 0.24488 0.58247 0.47654 0.83172 0.71291m-7.175983 0.55661C0.652466 1.29663 1.28208 0.653823 2.07482 0.598441c0.04794 -0.003348 0.09579 -0.006614 0.14359 -0.009798M0.602808 8.89563c0.049659 0.80774 0.679272 1.45057 1.472012 1.50597 0.08403 0.0058 0.16781 0.0114 0.25153 0.0168M0.5 5.5c0 -0.31959 0.002671 -0.63708 0.007942 -0.95221V6.4522C0.502671 6.13707 0.5 5.81959 0.5 5.5Z" stroke-width="1"/></g></svg>
+
+        <svg xmlns="http://www.w3.org/2000/svg" class="check-icon" fill="none" viewBox="0 0 14 14" id="Clipboard-Check--Streamline-Flex"><desc>Clipboard Check Streamline Icon: https://streamlinehq.com</desc><g id="clipboard-check--checkmark-edit-task-edition-checklist-check-success-clipboard-form"><path id="Subtract" stroke="currentColor" d="M4.17349 2.10889c-0.25729 0.02946 -0.60252 0.06018 -0.85608 0.09067 -0.24071 0.02894 -0.47967 0.05767 -0.71681 0.08492 -0.49602 0.05701 -0.88913 0.44564 -0.92587 0.93465 -0.23427 3.11835 -0.23427 6.06189 0 9.18027 0.03674 0.489 0.43009 0.8788 0.92783 0.9188 3.02054 0.2425 5.77459 0.2425 8.79514 0 0.4977 -0.04 0.8911 -0.4298 0.9278 -0.9188 0.2343 -3.11838 0.2343 -6.06192 0 -9.18027 -0.0367 -0.48901 -0.4298 -0.87764 -0.9259 -0.93465 -0.2371 -0.02725 -0.4761 -0.05598 -0.7168 -0.08492 -0.2535 -0.03049 -0.6081 -0.06121 -0.86532 -0.09067" stroke-width="1"/><path id="Union" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M8.3045 0.54519c0.97879 0.037253 1.52665 0.52425 1.52665 1.36417 0 0.83991 -0.54786 1.3269 -1.52665 1.36416 -1.58314 0.06025 -1.02528 0.06025 -2.60842 0 -0.97879 -0.03726 -1.52665 -0.52425 -1.52665 -1.36416 0 -0.83992 0.54786 -1.326918 1.52665 -1.36417 1.58314 -0.060253 1.02528 -0.060253 2.60842 0Z" stroke-width="1"/><path id="Vector" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m4.75 9.17822 1.63636 1.68748C7.15637 8.65381 7.79765 7.6832 9.25 6.36572" stroke-width="1"/></g></svg>
+
+        <span class="copy-text">Copy</span>
+    `;
+    
+    // Position the copy button
+    copyButton.style.opacity = '0';
+    
+    // Show button on hover
+    el.parentElement.addEventListener('mouseenter', function() {
+        copyButton.style.opacity = '1';
+    });
+    
+    el.parentElement.addEventListener('mouseleave', function() {
+        copyButton.style.opacity = '0';
+    });
+    
+    // Copy functionality
+    copyButton.addEventListener('click', function() {
+        // Get the text content without line numbers and other elements
+        let textToCopy = '';
+        const lines = el.querySelectorAll('.line');
+        
+        lines.forEach(line => {
+            // Remove line numbers and other non-code elements
+            const lineContent = line.cloneNode(true);
+            const lineNumbers = lineContent.querySelectorAll('.line-number, .summary-caret, .summary-caret-start, .summary-caret-end, .summary-caret-middle, .summary-caret-empty');
+            lineNumbers.forEach(num => num.remove());
+            
+            // Get the text content and add a newline
+            textToCopy += lineContent.textContent + '\n';
+        });
+        
+        // Remove trailing newline
+        textToCopy = textToCopy.trim();
+        
+        // Copy to clipboard
+        navigator.clipboard.writeText(textToCopy).then(function() {
+            // Show success state
+            copyButton.classList.add('copied');
+            copyButton.querySelector('.copy-text').textContent = 'Copied!';
+            
+            // Reset after 2 seconds
+            setTimeout(function() {
+                copyButton.classList.remove('copied');
+                copyButton.querySelector('.copy-text').textContent = 'Copy';
+            }, 2000);
+        }).catch(function(err) {
+            console.error('Failed to copy: ', err);
+            // Fallback for older browsers
+            const textArea = document.createElement('textarea');
+            textArea.value = textToCopy;
+            document.body.appendChild(textArea);
+            textArea.select();
+            document.execCommand('copy');
+            document.body.removeChild(textArea);
+            
+            // Show success state
+            copyButton.classList.add('copied');
+            copyButton.querySelector('.copy-text').textContent = 'Copied!';
+            
+            setTimeout(function() {
+                copyButton.classList.remove('copied');
+                copyButton.querySelector('.copy-text').textContent = 'Copy';
+            }, 2000);
+        });
+    });
+    
+    // Add the copy button to the code block
+    el.parentElement.appendChild(copyButton);
+});
\ No newline at end of file
diff --git a/resources/sites.yaml b/resources/sites.yaml
new file mode 100644
index 000000000..1c40c4aa5
--- /dev/null
+++ b/resources/sites.yaml
@@ -0,0 +1,4 @@
+default:
+  name: '{{ config:app:name }}'
+  locale: en_US
+  url: /
diff --git a/resources/svg/blob-drooping-kidney.svg b/resources/svg/blob-drooping-kidney.svg
deleted file mode 100644
index fb3d66888..000000000
--- a/resources/svg/blob-drooping-kidney.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<svg width="148px" height="98px" viewBox="0 0 148 98" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g transform="translate(-60.000000, -40.000000)" fill="#EFFEFF" fill-rule="nonzero">
-            <path d="M185.982989,46.8387982 C196.766815,52.0407424 203.416841,66.0321784 206.36442,80.9205013 C209.347946,95.8088243 208.593078,111.62991 201.22413,122.930685 C193.855182,134.195585 179.836208,140.940174 168.764814,136.742744 C157.657473,132.509437 149.497711,117.369986 139.360915,111.845163 C129.188172,106.356215 117.002449,110.553645 100.143734,105.638705 C83.2490734,100.75964 61.7173675,86.839955 60.0997936,72.9920209 C58.4822197,59.1799623 76.8147239,45.4755301 94.3564142,41.4216012 C111.862158,37.4035477 128.577089,43.0718731 144.393367,44.1122619 C160.245591,45.1526508 175.163217,41.636854 185.982989,46.8387982 Z" id="Path"></path>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/resources/svg/book.svg b/resources/svg/book.svg
deleted file mode 100644
index e60a266d1..000000000
--- a/resources/svg/book.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 20 20" height="20" width="20"><title>book open bookmark (From Streamline App : https://app.streamlineicons.com)</title><g transform="matrix(0.8333333333333334,0,0,0.8333333333333334,0,0)"><path d="M 12,22.8V5.387c0,0-2.455-2.727-10.732-2.837C1.13,2.549,0.998,2.603,0.9,2.7 C0.803,2.799,0.748,2.931,0.748,3.07v16.374c-0.002,0.28,0.22,0.511,0.5,0.52C9.543,20.071,12,22.8,12,22.8 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 9,11.855 c-1.702-0.572-3.469-0.927-5.26-1.055 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 9,16.05C7.298,15.48,5.531,15.127,3.74,15 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 15,11.855c1.702-0.572,3.469-0.927,5.26-1.055 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 15,16.05c1.702-0.57,3.469-0.923,5.26-1.05 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 20.26,2.67c0.76-0.066,1.582-0.108,2.472-0.12c0.137-0.001,0.269,0.053,0.366,0.15 c0.097,0.099,0.152,0.231,0.152,0.37v16.374c0.002,0.28-0.22,0.511-0.5,0.52C14.457,20.071,12,22.8,12,22.8 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 12,22.8V5.387 c0,0,1.143-1.27,4.5-2.111 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 20.25,7.8V1.2c-1.264,0.101-2.518,0.301-3.75,0.6v6l1.875-1.5L20.25,7.8z" stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></g></svg>
\ No newline at end of file
diff --git a/resources/svg/breadcrumb-chevron.svg b/resources/svg/breadcrumb-chevron.svg
new file mode 100644
index 000000000..c205dd07f
--- /dev/null
+++ b/resources/svg/breadcrumb-chevron.svg
@@ -0,0 +1,3 @@
+<svg width="6" height="9" viewBox="0 0 6 9" fill="none" xmlns="http://www.w3.org/2000/svg">
+    <path fill-rule="evenodd" clip-rule="evenodd" d="M1.04682 8.69337C1.2694 8.91309 1.63028 8.91309 1.85288 8.69337L5.65169 4.94337C5.87368 4.72365 5.87368 4.3674 5.65169 4.14825L1.85288 0.398249C1.6303 0.178529 1.26941 0.178529 1.04682 0.398249C0.824238 0.617384 0.824238 0.973634 1.04682 1.19337L4.44265 4.54557L1.04682 7.89837C0.824238 8.1175 0.824238 8.47363 1.04682 8.69337Z"/>
+</svg>
diff --git a/resources/svg/close.svg b/resources/svg/close.svg
deleted file mode 100644
index 5d8efbe43..000000000
--- a/resources/svg/close.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" height="20" width="20"><g transform="matrix(0.8333333333333334,0,0,0.8333333333333334,0,0)"><circle cx="12" cy="12" r="11" style="fill:#FAF77D"></circle><path d="m23.5.5-23 23m23 0L.5.5" style="fill:none;stroke:#191919;stroke-linecap:round;stroke-linejoin:round"></path></g></svg>
diff --git a/resources/svg/cookbook.svg b/resources/svg/cookbook.svg
deleted file mode 100644
index 7af6d8f57..000000000
--- a/resources/svg/cookbook.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 20 20" height="20" width="20"><title>restaurant menu (From Streamline App : https://app.streamlineicons.com)</title><g transform="matrix(0.8333333333333334,0,0,0.8333333333333334,0,0)"><path d="M 4.5,0.75H21c0.828,0,1.5,0.672,1.5,1.5v19.5c0,0.828-0.672,1.5-1.5,1.5H4.5c-0.828,0-1.5-0.672-1.5-1.5V2.25 C3,1.422,3.672,0.75,4.5,0.75z " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 1.5,5.25h3 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 1.5,9.75h3 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 1.5,14.25h3 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 1.5,18.75h3 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 10.5,6c1.243,0,2.25,1.175,2.25,2.625 s-1.007,2.625-2.25,2.625s-2.25-1.175-2.25-2.625S9.257,6,10.5,6z " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 10.5,11.25v6 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 16.5,11.25v6 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 15,6v3.75 c0,0.828,0.672,1.5,1.5,1.5l0,0c0.828,0,1.5-0.672,1.5-1.5V6" stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></g></svg>
\ No newline at end of file
diff --git a/resources/svg/crane-kick.svg b/resources/svg/crane-kick.svg
new file mode 100644
index 000000000..266bd490c
--- /dev/null
+++ b/resources/svg/crane-kick.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 313.47 742.77"><path fill="currentColor" d="M88.74,41.73,91.55,35l-9.85,4-6-4.63c2.21-2.59,4.38-4.89,6.27-7.39,2.35-3.11,4.38-6.47,6.76-9.56a8.47,8.47,0,0,1,3.7-3C104.54,10.61,116.76,6.92,128.91,3a55.18,55.18,0,0,0,6.52-3c15.65,6.7,31.41,13.56,47.25,20.21,15.57,6.54,30.56,14.47,47,21.2-.3-3.13-.43-4.53-.67-7l7.28,1.48-.23-.75,13.25-2.77c.69,3.54,1.2,6.2,1.77,9.13l7.68-2c-.74,3.48-1.28,6-1.91,9l4.65,2.62c-.6,5.56-2.19,10.81-1.41,15.67s3.91,9.59,5.8,13.88l7.43,1.15,6-9.18c8.07-1.17,8.82-.84,10.94,5L298.6,76c-1.23,2.72-1.81,4.31-2.64,5.75s-2,2.94-3.93,5.66l8.54-2.13A106.3,106.3,0,0,1,303.88,97c.16.93-1.94,3-3.27,3.32a128.58,128.58,0,0,1-17.6,2.87c-2.74.21-5.61-1.28-9.12-2.18.87,3.41,1.64,6.69,2.56,9.93,2.35,8.28,4.44,16.65,7.27,24.77a129.45,129.45,0,0,0,8.58,19.65c4.71,8.55,6.28,17.8,7,27.18,1,12.18,1.5,24.42,1.66,36.64.08,6.22-.87,12.49-1.79,18.68-.19,1.34-2.91,2.19-3.38,3.62-2.28,7-4.74,14.08-6,21.32-.52,3,1.36,6.79,2.94,9.81,3.79,7.25,5.28,14-1.91,20.11-.85.73-1.18,2.35-1.31,3.6-1.58,15.39-7,29.53-13.65,43.33-1.53,3.17-1.88,6.92-2.42,9-3.38,6.08-6.35,11.07-9,16.24-2.54,5-4.17,10.53-7.16,15.21a250.72,250.72,0,0,1-15.85,22C231.17,415,219.65,427,211.6,441.64c-2.65,4.83-2.91,8.75.92,11.45,18.48,13,26.34,31.68,29.06,53.24,1.34,10.66,1.42,21.77,4.68,31.82,3.51,10.83,9.88,20.78,15.36,30.91,6.37,11.79,13.36,23.25,19.59,35.11A34.74,34.74,0,0,1,284.73,617c.34,3.82-1.28,7.5-5.74,8.82-8,2.37-15.8,3.75-24.25,1.25-3.24-1-7.75.64-11.13,2.24-8.08,3.82-16.16,5.77-25.26,4.92-10-.94-20.17-.81-30.26-.73-3.37,0-5.17-1.23-5.69-4.13s0-5.41,3.46-6.77a163.6,163.6,0,0,0,15.17-7c11.34-5.85,22.6-11.86,33.87-17.84,1.52-.8,2.93-1.83,4.18-2.62a395.32,395.32,0,0,0-34.33-77.73c-7.52-13.21-15.41-26.23-23.42-39.16-3.48-5.62-7.75-10.74-11.46-16.23a21,21,0,0,1-2.37-5.9c-1.26-4.27-2.11-8.68-3.56-12.88-1.39-4-1.06-7.39.65-11.36,5.76-13.38,11.09-26.94,16.36-40.53,1.47-3.79,2.13-7.9,3.1-11.61l-6.15-6.56,6.41-13.09c5.57-3.45,8.46-10.82,11.15-18.38,1.3-3.65,0-6-3-7.91-2.75-1.76-5.38-3.71-8.19-5.67,2.16-5.23-.33-8.41-3.75-11.15Q165.77,305.22,151,293.53a16,16,0,0,0-3.5-1.55c-3.94,17.68-13.69,31.47-24.55,44.69-7.84,9.56-17.23,18-22.09,29.79-1.69,4.12-2.47,7.85-.83,12.41,1.71,4.75,2.34,10,2.81,15.06.6,6.55-2.24,10.12-8.71,11.05a82.09,82.09,0,0,1-16.31,1.13,45.71,45.71,0,0,0-24.87,5.38c-10.09,5.35-20.7,7.59-32.16,4-3.33-1-7.36-.76-10.87-.08-7.46,1.43-8.47,1-9.88-7.42,2.25-1.55,4.59-3.37,7.12-4.88C19.9,395.52,33,388.37,45.44,380.24c8.52-5.56,15.09-13.39,20-22.43q12-21.78,24-43.51c7.84-14.18,15.6-28.4,23.56-42.52,5.52-9.8,11-19.69,17.08-29.12,6.23-9.59,12.21-11.24,22.89-6.93,17.66,7.13,35.21,14.56,52.81,21.83,1.19.49,3.1,1.47,3.63,1,4.71-4.1,9.3-1.16,14.36.56l-.33-5.77,8-5.21L221.43,236l11.62-6c-2.34-7.49-4.63-14.8-7.14-22.82-9.15,7-17.78,13.38-26.2,20-4.51,3.57-8.37,4.22-13,1.08-17.12-11.63-31.85-25.75-45.09-41.69-7.9-9.51-16.57-18.64-28.48-23.56a8.36,8.36,0,0,0-2.36-.6c-5.25-.52-10.5-1-16.59-1.53-.81,1.78-1.9,4.12-2.94,6.47-2.08,4.69-3.83,5-8.14,1.53.88-3.71,1.77-7.44,2.88-12.09-6.91,3.47-9.16,13.21-19,9.63l10.7-17.52c-6.83,1.2-11.47,8.47-20,3.51L74.56,132c11.36.71,22.57,1.28,33.74,2.25,1.94.17,4.7,1.64,5.42,3.25,4.15,9.31,12,14.2,20.44,18.77,15.59,8.43,31,17.11,46.49,25.78,2.56,1.44,4.85,3.39,7.6,5.34l28.89-18.12c1.7-9.55,11.86-14.57,17.44-24.64l-4.24-4.06c-19.5,5.08-21.68,4.61-24.67-4.64l-1,.82-11.75-14.4.8-.67-5.37-2.84c1.3-6.36,2.55-12.46,3.81-18.64l-3.87-3.43V91.46c-4.53-.09-4.06-3.16-3.81-6.24.66-8.21,1.45-16.41,1.74-24.63a9.6,9.6,0,0,0-4.72-9.13c-12.1-7.49-24-15.36-36-23-3.09-2-6.05-2.49-9.63-.13-7.5,4.94-16.27,4.94-24.89,5.58-2.74.21-5.45,2.19-7.94,3.73-1.5.94-2.5,2.65-3.8,3.93C95.42,45.38,94,45.42,88.74,41.73ZM188,78.49v9l8.73,1c.29-3.64,1.26-7,.53-10-.39-1.6-3.66-2.51-6.63-4.34.56,4.54,6.57,6.55,1.68,10.84Zm14.15,9.76,1.44,1.2c1.17-1.69,3.07-3.26,3.33-5.08.4-2.84,1.94-6.5-2.52-8.78Z"/><path d="M305.61,622.78,289.82,619c8.78-2.44,15.73,1.32,23.62,3.33v11.76c0,15.82.09,31.63,0,47.45-.11,13.12-.58,26.24-.67,39.36-.05,5.61.4,11.24.71,16.85.2,3.63-1.41,5.06-5,5-39.61-.06-79.22,0-118.83-.06-4.51,0-7.83-4.9-7.85-9.39-.05-9.75-.83-19.49-1.09-29.23-.14-5.06.27-10.13.24-15.2,0-1.57-.92-3.13-1-4.72-.27-7-.13-14-.63-21-.4-5.49-4.49-9-11.18-10,8.24,7,7.75,16.42,8.36,25.12,1.38,19.83,1.89,39.73,2.68,59.6.05,1.09-.4,3.07-.87,3.15-4.12.68-8.35,1.54-12.43,1.17-1.32-.12-3.13-3.69-3.31-5.8-.68-8.09-.84-16.24-1.1-24.36-.39-12-.42-23.93-1.17-35.86-.39-6.32-2.27-12.55-2.85-18.88-.24-2.6,1.17-5.36,1.94-8.46-5.44-1.08-4.72-6.21-4.28-11.41l18-5.38.66,1.86-7.6,3.46,0,1.07c4.8.71,9.6,2,14.4,2,25.73.18,51.38-1.15,76.75-5.76,11.6-2.11,23.07-4.93,34.66-7.1C296.46,626.79,301.28,627.48,305.61,622.78Z"/></svg>
\ No newline at end of file
diff --git a/resources/svg/external-link.svg b/resources/svg/external-link.svg
new file mode 100644
index 000000000..2bdbf0654
--- /dev/null
+++ b/resources/svg/external-link.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="external"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg>
\ No newline at end of file
diff --git a/resources/svg/footer-arrow.svg b/resources/svg/footer-arrow.svg
new file mode 100644
index 000000000..33429cd97
--- /dev/null
+++ b/resources/svg/footer-arrow.svg
@@ -0,0 +1 @@
+<svg width="14" height="10" xmlns="http://www.w3.org/2000/svg" class="c-footer-arrow"><path d="M9.749 1.394l3 3a.857.857 0 010 1.212l-3 3a.857.857 0 01-1.212-1.212l1.17-1.17a.214.214 0 00-.151-.367H1.857a.857.857 0 010-1.714h7.699a.214.214 0 00.152-.366L8.537 2.606a.857.857 0 011.212-1.212z" fill="#FFF" fill-rule="nonzero" stroke="#191A1B" stroke-width=".857" stroke-linecap="round" stroke-linejoin="round"></path></svg>
\ No newline at end of file
diff --git a/resources/svg/help-desk.svg b/resources/svg/help-desk.svg
deleted file mode 100644
index 694c6ddf2..000000000
--- a/resources/svg/help-desk.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 20 20" height="20" width="20"><title>information desk (From Streamline App : https://app.streamlineicons.com)</title><g transform="matrix(0.8333333333333334,0,0,0.8333333333333334,0,0)"><path d="M 4.5,10.125c1.45,0,2.625,1.175,2.625,2.625S5.95,15.375,4.5,15.375S1.875,14.2,1.875,12.75 S3.05,10.125,4.5,10.125z " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 8.25,20.25c0-1.657-1.343-3-3-3h-1.5c-1.657,0-3,1.343-3,3 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 17.25,0.75c3.314,0,6,2.686,6,6 s-2.686,6-6,6s-6-2.686-6-6S13.936,0.75,17.25,0.75z " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 17.25,9.75v-3 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 17.25,3.811c-0.207,0-0.375,0.168-0.375,0.375 c0,0.207,0.168,0.375,0.375,0.375s0.375-0.168,0.375-0.375l0,0C17.625,3.979,17.457,3.811,17.25,3.811 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 0.75,23.25h22.5 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 15,23.25 c0-1.657,1.343-3,3-3s3,1.343,3,3 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 18,20.25v-1.5" stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></g></svg>
\ No newline at end of file
diff --git a/resources/svg/logomark.svg b/resources/svg/logomark.svg
new file mode 100644
index 000000000..efc1ef7af
--- /dev/null
+++ b/resources/svg/logomark.svg
@@ -0,0 +1 @@
+<svg class="o-logomark" clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 93 75" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.706149 0 0 .758651 14.9298 13.9043)"><path d="m-20.624-17.021h130.663v97.553h-130.663z" fill="none"/><g fill-rule="nonzero" transform="matrix(1.41613 0 0 1.31813 -19.3517 -16.351)"><path d="m72.58 71.55c6.17-.45 8.91-3.42 9.61-10.07.55-5.17.75-7.76 1.02-12.94.32-6.18 3.46-9.74 6.5-11.39.91-.51.91-1.7 0-2.27-3.16-1.89-6.23-5.92-6.51-11.23-.27-5.08-.47-7.62-1.01-12.71-.76-7.16-3.09-9.47-9.26-9.93-18.58-1.07-36.86-1.07-55.45 0-6.17.46-8.5 2.76-9.26 9.93-.54 5.08-.74 7.62-1.01 12.71-.28 5.31-3.35 9.34-6.51 11.23-.91.51-.91 1.76 0 2.27 3.04 1.6 6.17 5.16 6.5 11.39.27 5.17.47 7.76 1.02 12.94.7 6.64 3.44 9.62 9.61 10.07 18.36 1.04 36.42 1.04 54.77 0z" fill="#191a1b"/><path d="m68.43 66.49c5.46-.4 7.89-3.03 8.51-8.91.48-4.58.66-6.87.9-11.45.28-5.47 3.06-8.62 5.75-10.08.81-.45.81-1.5 0-2.01-2.8-1.67-5.51-5.23-5.76-9.94-.24-4.5-.42-6.75-.9-11.24-.67-6.34-2.73-8.38-8.2-8.78-16.31-1.28-32.76-1.13-49.07 0-5.46.4-7.52 2.45-8.2 8.78-.48 4.5-.66 6.75-.9 11.24-.25 4.7-2.96 8.27-5.76 9.94-.81.46-.81 1.55 0 2.01 2.69 1.41 5.46 4.56 5.75 10.08.24 4.58.42 6.87.9 11.45.62 5.88 3.04 8.51 8.51 8.91 16.11 1.11 32.36 1.25 48.47 0z" fill="var(--color-green)"/><path d="m30.23 43.33c.6-.78 1.29-1.12 2.07-1.12.86 0 1.73.35 2.59.95 2.76 1.81 5.87 2.85 9.58 2.85 2.85 0 5.09-1.21 5.09-3.62 0-6.3-20.97-2.85-20.97-17 0-7.59 6.21-11.82 14.24-11.82 5.7 0 9.84 1.64 12.95 3.62.78.52 1.29 1.55 1.29 2.59 0 .6-.17 1.21-.52 1.73l-.95 1.38c-.69.95-1.47 1.38-2.42 1.38-.69 0-1.38-.26-2.16-.6-2.33-1.21-4.75-1.81-7.68-1.81s-4.83 1.64-4.83 3.37c0 6.47 20.97 2.93 20.97 16.66 0 7.68-6.21 12.43-15.71 12.43-6.04 0-10.44-1.81-14.5-5.35-.69-.6-.95-1.38-.95-2.16 0-.6.17-1.29.6-1.81l1.29-1.64z" fill="var(--color-logo-s-hole)"/></g></g></svg>
\ No newline at end of file
diff --git a/resources/svg/nav-collapsed.svg b/resources/svg/nav-collapsed.svg
new file mode 100644
index 000000000..dfedb7b25
--- /dev/null
+++ b/resources/svg/nav-collapsed.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 14" id="Flip-Vertical-Arrow-1--Streamline-Flex"><desc>Flip Vertical Arrow 1 Streamline Icon: https://streamlinehq.com</desc><g id="flip-vertical-arrow-1--arrow-design-flip-reflect-up-down"><path id="bottom-arrow" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.4697 13.5c-1.15459 -1.4093 -1.89205 -2.1657 -3.1551 -3.2118 -0.18216 -0.1509 -0.44639 -0.1509 -0.62855 0C5.423 11.3343 4.68554 12.0907 3.53092 13.5" stroke-width="1"/><path id="top-arrow" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.4697 0.5C9.31511 1.90926 8.57765 2.66574 7.3146 3.71184c-0.18216 0.15086 -0.44639 0.15086 -0.62855 0C5.423 2.66574 4.68554 1.90926 3.53092 0.5" stroke-width="1"/><path id="Vector 157" class="dash" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m0.5 7 1.04259 0" stroke-width="1"/><path id="Vector 158" class="dash" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m4.48633 7 1.04258 0" stroke-width="1"/><path id="Vector 159" class="dash" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m8.47168 7 1.04259 0" stroke-width="1"/><path id="Vector 160" class="dash" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="m12.457 7 1.0426 0" stroke-width="1"/></g></svg>
\ No newline at end of file
diff --git a/resources/svg/nav-dots.svg b/resources/svg/nav-dots.svg
new file mode 100644
index 000000000..5f88bd06d
--- /dev/null
+++ b/resources/svg/nav-dots.svg
@@ -0,0 +1 @@
+<svg fill="none" height="26" viewBox="0 0 26 26" width="26" xmlns="http://www.w3.org/2000/svg"><path d="m20.2676 14.3481c.9668 0 1.75-.7832 1.75-1.75s-.7832-1.75-1.75-1.75-1.75.7832-1.75 1.75.7832 1.75 1.75 1.75zm-7.25 0c.9668 0 1.75-.7832 1.75-1.75s-.7832-1.75-1.75-1.75-1.75.7832-1.75 1.75.7832 1.75 1.75 1.75zm-7.25002 0c.9668 0 1.75-.7832 1.75-1.75s-.7832-1.75-1.75-1.75-1.75.7832-1.75 1.75.7832 1.75 1.75 1.75z" /></svg>
\ No newline at end of file
diff --git a/resources/svg/nav-expanded.svg b/resources/svg/nav-expanded.svg
new file mode 100644
index 000000000..43a6b7103
--- /dev/null
+++ b/resources/svg/nav-expanded.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 14" id="Expand--Streamline-Flex">
+  <desc>
+    Expand Streamline Icon: https://streamlinehq.com
+  </desc>
+  <g id="expand--big-bigger-design-expand-larger-resize-size-square">
+    <path id="Intersect" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M3.58076 8.42295c0.09849 1.03852 0.94191 1.88265 1.97998 1.98595 0.47133 0.0469 0.95184 0.0816 1.43963 0.0816 0.48779 0 0.9683 -0.0347 1.43964 -0.0816 1.03806 -0.1033 1.88149 -0.94743 1.97999 -1.98595 0.0444 -0.46787 0.0768 -0.9448 0.0768 -1.42893 0 -0.48412 -0.0324 -0.96105 -0.0768 -1.42892 -0.0985 -1.03852 -0.94193 -1.8827 -1.97999 -1.98593 -0.47134 -0.04687 -0.95184 -0.08161 -1.43964 -0.08161 -0.48779 0 -0.9683 0.03474 -1.43963 0.08161 -1.03807 0.10323 -1.88149 0.94741 -1.97998 1.98593 -0.04437 0.46787 -0.07685 0.9448 -0.07685 1.42892 0 0.48413 0.03248 0.96106 0.07685 1.42893Z" stroke-width="1"></path>
+    <path id="Intersect_2" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M3.16797 1.03802c-0.09115 0.00982 -0.182 0.01989 -0.27256 0.0301 -0.95984 0.10819 -1.73116 0.87943 -1.83518 1.83973 -0.00962 0.08883 -0.01909 0.17795 -0.02832 0.26734" stroke-width="1"></path>
+    <path id="Intersect_3" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M3.17188 12.9599c-0.09115 -0.0098 -0.18201 -0.0199 -0.27256 -0.0301 -0.95984 -0.1082 -1.73117 -0.8794 -1.83518 -1.8397 -0.00962 -0.0889 -0.0191 -0.178 -0.02833 -0.2674" stroke-width="1"></path>
+    <path id="Intersect_4" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M0.762599 7.81369c-0.016799 -0.54616 -0.016799 -1.08705 0 -1.63321" stroke-width="1"></path>
+    <path id="Intersect_5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.8418 1.03534c0.0911 0.00982 0.182 0.01988 0.2726 0.03009 0.9598 0.10819 1.7311 0.87944 1.8351 1.83973 0.0097 0.08883 0.0191 0.17795 0.0284 0.26735" stroke-width="1"></path>
+    <path id="Intersect_6" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M10.8457 12.9545c0.0911 -0.0098 0.182 -0.0199 0.2726 -0.0301 0.9598 -0.1082 1.7311 -0.8794 1.8351 -1.8397 0.0097 -0.0888 0.0191 -0.1779 0.0284 -0.2673" stroke-width="1"></path>
+    <path id="Intersect_7" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M13.2374 7.81961c0.0168 -0.54616 0.0168 -1.08705 0 -1.63321" stroke-width="1"></path>
+    <path id="Intersect_8" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M7.81387 13.2374c-0.54615 0.0168 -1.08705 0.0168 -1.63321 0" stroke-width="1"></path>
+    <path id="Intersect_9" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M7.81973 0.762599C7.27358 0.7458 6.73268 0.7458 6.18652 0.762599" stroke-width="1"></path>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/resources/svg/nav-lines.svg b/resources/svg/nav-lines.svg
new file mode 100644
index 000000000..270a3edf5
--- /dev/null
+++ b/resources/svg/nav-lines.svg
@@ -0,0 +1,6 @@
+<svg height="100pt" viewBox="0 0 100 100" width="100pt" xmlns="http://www.w3.org/2000/svg">
+    <title>Navigation List</title>
+    <path d="m1.832 12.168h96.312v6.875h-96.312z" />
+    <path d="m1.832 46.562h96.312v6.875h-96.312z" />
+    <path d="m1.832 80.957h96.312v6.875h-96.312z"/>
+</svg>
\ No newline at end of file
diff --git a/resources/svg/nav-toc-chevron.svg b/resources/svg/nav-toc-chevron.svg
new file mode 100644
index 000000000..63e5859c1
--- /dev/null
+++ b/resources/svg/nav-toc-chevron.svg
@@ -0,0 +1,3 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M29.6654 11.7948L28.3191 10.4956L16.6773 22.4162L4.70932 10.7725L3.41016 12.0717L16.6774 25.0597L29.6654 11.7948Z" />
+</svg>
diff --git a/resources/svg/search.svg b/resources/svg/search.svg
index 5a69bc083..a70a351d1 100644
--- a/resources/svg/search.svg
+++ b/resources/svg/search.svg
@@ -1 +1,3 @@
-<svg viewBox="0 0 20 20" height="20" width="20" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(0.8333333333333334,0,0,0.8333333333333334,0,0)"><path d="M0.750 9.812 A9.063 9.063 0 1 0 18.876 9.812 A9.063 9.063 0 1 0 0.750 9.812 Z" fill="none" stroke="#ffffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" transform="translate(-3.056 4.62) rotate(-23.025)"></path><path d="M16.221 16.22L23.25 23.25" fill="none" stroke="#ffffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"></path></g></svg>
\ No newline at end of file
+<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg" class="c-search-form__icon">
+<path d="M18.9527 17.5263L13.8841 12.5863C15.3668 10.8504 15.8221 8.48954 15.0873 6.34748C14.3525 4.20485 12.5326 2.58529 10.2761 2.06735C8.01979 1.5493 5.64927 2.20614 4.01037 3.80333C2.37147 5.40051 1.69775 7.71087 2.22922 9.91012C2.76076 12.1092 4.42235 13.883 6.62073 14.5993C8.81834 15.3155 11.2407 14.8717 13.0219 13.4267L18.0905 18.3667C18.3296 18.5915 18.7096 18.5878 18.9449 18.3592C19.1794 18.1299 19.1832 17.7596 18.9525 17.5265L18.9527 17.5263ZM8.75241 13.7478C7.30403 13.7478 5.915 13.1874 4.89076 12.1892C3.86654 11.191 3.29085 9.83644 3.29085 8.42493C3.29085 7.01328 3.86654 5.65948 4.89076 4.66122C5.91498 3.66296 7.30397 3.10189 8.75241 3.10189C10.2008 3.10189 11.5906 3.66297 12.6146 4.66122C13.6389 5.65946 14.2138 7.01323 14.2138 8.42493C14.2123 9.83657 13.6366 11.1896 12.6124 12.1871C11.5889 13.1854 10.2008 13.7463 8.75241 13.7478Z" />
+</svg>
diff --git a/resources/svg/statamic-blob.png b/resources/svg/statamic-blob.png
deleted file mode 100644
index 78f5d1a86..000000000
Binary files a/resources/svg/statamic-blob.png and /dev/null differ
diff --git a/resources/svg/statamic-blob.svg b/resources/svg/statamic-blob.svg
deleted file mode 100644
index 798657b49..000000000
--- a/resources/svg/statamic-blob.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<svg width="181px" height="98px" viewBox="0 0 181 98" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-  <path d="M125.982989,6.83879819 C136.766815,12.0407424 143.416841,26.0321784 146.36442,40.9205013 C149.347946,55.8088243 148.593078,71.6299096 141.22413,82.9306849 C133.855182,94.1955847 119.836208,100.940174 108.764814,96.7427435 C97.6574729,92.5094373 89.4977112,77.369986 79.3609148,71.8451625 C69.1881722,66.3562145 57.0024488,70.5536453 40.1437342,65.638705 C23.2490734,60.7596401 1.71736747,46.839955 0.099793564,32.9920209 C-1.51778034,19.1799623 16.8147239,5.47553006 34.3564142,1.42160116 C51.8621584,-2.59645226 68.5770887,3.0718731 84.3933669,4.11226193 C100.245591,5.15265077 115.163217,1.63685402 125.982989,6.83879819 Z" fill="#EFFEFF"></path>
-  <g transform="translate(2.000000, 24.000000)" fill="currentColor">
-    <path d="M31.9151416,31 C34.7652925,31 35.8112194,29.7827903 35.8112194,26.8045113 L35.8112194,21.0033417 C35.8112194,18.2322473 37.1709244,16.6524645 38.4783331,15.9014202 C38.8705556,15.6683375 38.8705556,15.1244779 38.4783331,14.8654971 C37.1186281,14.0108605 35.8112194,12.2238931 35.8112194,9.84126984 L35.8112194,4.14369256 C35.8112194,0.932330827 34.9221815,0 32.0720307,0 L6.47296933,0 C3.62281847,0 2.73378059,0.932330827 2.73378059,4.14369256 L2.73378059,9.84126984 C2.73378059,12.2238931 1.42637194,14.0108605 0.066666946,14.8654971 C-0.325555649,15.0985798 -0.325555649,15.6683375 0.066666946,15.9014202 C1.3740756,16.6265664 2.73378059,18.2063492 2.73378059,21.0033417 L2.73378059,26.8045113 C2.73378059,29.7827903 3.77970751,31 6.62985836,31 L31.9151416,31 Z M19.706165,25 C16.6016874,25 14.3462977,24.112801 12.2501119,22.3637516 C11.90517,22.0595691 11.7725,21.6793409 11.7725,21.2991128 C11.7725,20.9949303 11.852102,20.6653992 12.090908,20.4119138 L12.7277239,19.626109 C13.0461318,19.2458809 13.3910738,19.0684411 13.7890837,19.0684411 C14.2401617,19.0684411 14.6647056,19.2458809 15.1157836,19.5247148 C16.5486194,20.4119138 18.1406592,20.9188847 20.051107,20.9188847 C21.5104768,20.9188847 22.6779726,20.3358682 22.6779726,19.1444867 C22.6779726,16.0519645 11.90517,17.7503169 11.90517,10.8048162 C11.90517,7.07858048 15.0892496,5 19.2285531,5 C22.1472927,5 24.2965464,5.81115336 25.8885862,6.77439797 C26.2865962,7.0278834 26.5519362,7.53485425 26.5519362,8.0418251 C26.5519362,8.3460076 26.4723342,8.62484157 26.2865962,8.878327 L25.8089842,9.56273764 C25.4640423,10.0190114 25.0660323,10.2471483 24.5618864,10.2471483 C24.2169444,10.2471483 23.8454685,10.1204056 23.4474585,9.94296578 C22.2534287,9.3599493 21.0063308,9.05576679 19.493893,9.05576679 C17.9283872,9.05576679 16.9996973,9.86692015 16.9996973,10.7034221 C16.9996973,13.8719899 27.7725,12.148289 27.7725,18.8910013 C27.7725,22.6679341 24.5884204,25 19.706165,25 L19.706165,25 Z"></path>
-    <path d="M49.5372059,21.3868066 C49.7921078,21.0554723 50.0725,20.928036 50.4038725,20.928036 C50.7352451,20.928036 51.1430882,21.0809595 51.4744608,21.3358321 C52.6215196,22.1004498 53.9215196,22.5337331 55.4764216,22.5337331 C56.6744608,22.5337331 57.617598,22.0494753 57.617598,21.0044978 C57.617598,18.3793103 48.8744608,19.8065967 48.8744608,13.9445277 C48.8744608,10.7841079 51.4744608,9 54.8136765,9 C57.1842647,9 58.917598,9.66266867 60.217598,10.5292354 C60.5489706,10.7331334 60.7528922,11.1664168 60.7528922,11.5997001 C60.7528922,11.8545727 60.7019118,12.083958 60.5489706,12.3388306 L60.1411275,12.9250375 C59.8607353,13.3328336 59.5293627,13.5112444 59.1470098,13.5112444 C58.8666176,13.5112444 58.5607353,13.3838081 58.2293627,13.2563718 C57.2607353,12.7721139 56.2411275,12.4917541 55.0430882,12.4917541 C53.7940686,12.4917541 53.0293627,13.1544228 53.0293627,13.8935532 C53.0293627,16.5697151 61.7725,15.1169415 61.7725,20.826087 C61.7725,24.011994 59.1725,26 55.2215196,26 C52.6979902,26 50.8626961,25.2353823 49.1803431,23.7826087 C48.899951,23.5277361 48.7725,23.1964018 48.7725,22.8650675 C48.7725,22.6101949 48.8234804,22.3298351 49.027402,22.1004498 L49.5372059,21.3868066 L49.5372059,21.3868066 Z M75.5882895,23.1745455 C75.7198684,23.3527273 75.7725,23.5818182 75.7725,23.7854545 C75.7725,24.2436364 75.5619737,24.7272727 75.1409211,24.9309091 C73.8777632,25.6690909 72.6146053,26 70.9567105,26 C67.1935526,26 65.7725,23.6327273 65.7725,19.4836364 L65.7725,6.34909091 C65.7725,5.61090909 66.4040789,5 67.1672368,5 L68.6672368,5 C69.4303947,5 70.0619737,5.61090909 70.0619737,6.34909091 L70.0619737,9.50545455 L74.0882895,9.50545455 C74.8514474,9.50545455 75.4830263,10.1163636 75.4830263,10.8545455 L75.4830263,12.0763636 C75.4830263,12.8145455 74.8514474,13.4254545 74.0882895,13.4254545 L70.0619737,13.4254545 L70.0619737,19.3309091 C70.0619737,21.0872727 70.6672368,22.2581818 72.0619737,22.2581818 C72.5093421,22.2581818 72.9040789,22.2072727 73.2461842,22.08 C73.5882895,21.9527273 73.8514474,21.9018182 74.0882895,21.9018182 C74.5619737,21.9018182 74.9303947,22.1054545 75.2461842,22.64 L75.5882895,23.1745455 L75.5882895,23.1745455 Z M77.7725,20.9361702 C77.7725,17.3191489 80.5087429,15.6139818 83.9356879,15.6139818 C85.4233539,15.6139818 86.9110199,16.0790274 87.7345493,16.6732523 L87.7345493,16.1823708 C87.7345493,13.7796353 86.9375854,12.4878419 84.5998245,12.4878419 C83.3246822,12.4878419 82.5011528,12.668693 81.7041888,12.9270517 C81.4916651,12.9787234 81.2525759,13.056231 81.0400522,13.056231 C80.4821774,13.056231 80.0305645,12.7978723 79.7649099,12.281155 L79.5523861,11.8419453 C79.4992552,11.6610942 79.3929934,11.4802432 79.3929934,11.2477204 C79.3929934,10.7826748 79.7383444,10.2917933 80.1899573,10.0851064 C81.6510579,9.43920973 83.3246822,9 85.0514374,9 C90.0457448,9 91.7725,11.4802432 91.7725,15.8206687 L91.7725,24.449848 C91.7725,25.1990881 91.1349288,25.8191489 90.3645304,25.8191489 L89.3816082,25.8191489 C88.6112097,25.8191489 87.9736385,25.1990881 87.9736385,24.449848 L87.9736385,23.9072948 C87.0704127,25.1474164 85.2639611,26 82.9793311,26 C79.9774336,25.9741641 77.7725,24.1139818 77.7725,20.9361702 L77.7725,20.9361702 Z M87.7444626,18.8051948 C86.9313785,18.2597403 85.9220327,18 84.6323131,18 C83.1182944,18 81.7725,18.6493506 81.7725,20.0519481 C81.7725,21.2987013 82.8659579,22 84.3239019,22 C86.2304439,22 87.2117523,21.2207792 87.7725,20.5194805 L87.7444626,18.8051948 L87.7444626,18.8051948 Z M104.588289,23.1745455 C104.719868,23.3527273 104.7725,23.5818182 104.7725,23.7854545 C104.7725,24.2436364 104.561974,24.7272727 104.140921,24.9309091 C102.877763,25.6690909 101.614605,26 99.9567105,26 C96.1935526,26 94.7725,23.6327273 94.7725,19.4836364 L94.7725,6.34909091 C94.7725,5.61090909 95.4040789,5 96.1672368,5 L97.6672368,5 C98.4303947,5 99.0619737,5.61090909 99.0619737,6.34909091 L99.0619737,9.50545455 L103.088289,9.50545455 C103.851447,9.50545455 104.483026,10.1163636 104.483026,10.8545455 L104.483026,12.0763636 C104.483026,12.8145455 103.851447,13.4254545 103.088289,13.4254545 L99.0619737,13.4254545 L99.0619737,19.3309091 C99.0619737,21.0872727 99.6672368,22.2581818 101.061974,22.2581818 C101.509342,22.2581818 101.904079,22.2072727 102.246184,22.08 C102.588289,21.9527273 102.851447,21.9018182 103.088289,21.9018182 C103.561974,21.9018182 103.930395,22.1054545 104.246184,22.64 L104.588289,23.1745455 L104.588289,23.1745455 Z M107.7725,20.9361702 C107.7725,17.3191489 110.508743,15.6139818 113.935688,15.6139818 C115.423354,15.6139818 116.91102,16.0790274 117.734549,16.6732523 L117.734549,16.1823708 C117.734549,13.7796353 116.937585,12.4878419 114.599824,12.4878419 C113.324682,12.4878419 112.501153,12.668693 111.704189,12.9270517 C111.491665,12.9787234 111.252576,13.056231 111.040052,13.056231 C110.482177,13.056231 110.030565,12.7978723 109.76491,12.281155 L109.552386,11.8419453 C109.499255,11.6610942 109.392993,11.4802432 109.392993,11.2477204 C109.392993,10.7826748 109.738344,10.2917933 110.189957,10.0851064 C111.651058,9.43920973 113.324682,9 115.051437,9 C120.045745,9 121.7725,11.4802432 121.7725,15.8206687 L121.7725,24.449848 C121.7725,25.1990881 121.134929,25.8191489 120.36453,25.8191489 L119.381608,25.8191489 C118.61121,25.8191489 117.973639,25.1990881 117.973639,24.449848 L117.973639,23.9072948 C117.070413,25.1474164 115.263961,26 112.979331,26 C110.003999,25.9741641 107.7725,24.1139818 107.7725,20.9361702 L107.7725,20.9361702 Z M117.744463,18.8051948 C116.931379,18.2597403 115.922033,18 114.632313,18 C113.118294,18 111.7725,18.6493506 111.7725,20.0519481 C111.7725,21.2987013 112.865958,22 114.323902,22 C116.230444,22 117.211752,21.2207792 117.7725,20.5194805 L117.744463,18.8051948 L117.744463,18.8051948 Z M130.068566,11.1282844 C131.233163,9.81452859 133.174156,9 135.19279,9 C137.703142,9 139.385336,10.1561051 139.980575,11.6800618 C141.145171,10.1035549 142.982645,9 145.518877,9 C148.520947,9 150.7725,10.4976816 150.7725,15.0958269 L150.7725,24.6074189 C150.7725,25.3693972 150.151382,26 149.400864,26 L147.925709,26 C147.175192,26 146.554073,25.3693972 146.554073,24.6074189 L146.554073,16.1731066 C146.554073,14.0973725 145.725916,12.9675425 143.733163,12.9675425 C142.154488,12.9675425 140.912252,13.755796 140.342893,14.885626 C140.342893,15.1483771 140.368773,15.7264297 140.368773,16.1205564 L140.368773,24.5548686 C140.368773,25.316847 139.747655,25.9474498 138.997138,25.9474498 L137.521982,25.9474498 C136.771465,25.9474498 136.150347,25.316847 136.150347,24.5548686 L136.150347,15.8840804 C136.150347,14.1236476 135.19279,12.9938176 133.432955,12.9938176 C131.9578,12.9938176 130.741444,13.6506955 129.990927,14.7805255 L129.990927,24.6074189 C129.990927,25.3693972 129.369808,26 128.619291,26 L127.144136,26 C126.393618,26 125.7725,25.3693972 125.7725,24.6074189 L125.7725,10.6553323 C125.7725,9.89335394 126.393618,9.26275116 127.144136,9.26275116 L128.619291,9.26275116 C129.369808,9.26275116 129.990927,9.89335394 129.990927,10.6553323 L129.990927,11.1282844 L130.068566,11.1282844 L130.068566,11.1282844 Z M159.7725,3.39795918 C159.7725,5.05612245 158.567372,6 157.387885,6 C155.977628,6 154.7725,5.05612245 154.7725,3.39795918 C154.7725,1.94387755 155.977628,1 157.387885,1 C158.567372,1 159.7725,1.94387755 159.7725,3.39795918 Z M158.471887,9.02511774 C159.183543,9.02511774 159.7725,9.62794349 159.7725,10.3563579 L159.7725,23.6687598 C159.7725,24.3971743 159.183543,25 158.471887,25 L157.073113,25 C156.361457,25 155.7725,24.3971743 155.7725,23.6687598 L155.7725,10.3312402 C155.7725,9.60282575 156.361457,9 157.073113,9 L158.471887,9.02511774 Z M175.492839,13.518018 C174.526737,13.0585586 173.687754,12.8798799 172.645381,12.8798799 C170.331822,12.8798799 168.145381,14.6411411 168.145381,17.4744745 C168.145381,20.3333333 170.357246,22.1201201 172.797924,22.1201201 C174.06911,22.1201201 174.984364,21.7882883 175.925042,21.1756757 C176.204703,20.996997 176.509788,20.8948949 176.789449,20.8948949 C177.221653,20.8948949 177.603008,21.0735736 177.908093,21.4309309 L178.518263,22.1966967 C178.696229,22.3753754 178.7725,22.6561562 178.7725,22.9369369 C178.7725,23.3708709 178.594534,23.8558559 178.289449,24.0855856 C176.357246,25.6426426 174.653856,26 172.645381,26 C167.306398,26 163.7725,22.6051051 163.7725,17.5 C163.7725,12.7777778 167.204703,9 172.136907,9 C174.297924,9 175.874195,9.35735736 177.450466,10.2252252 C177.857246,10.4294294 178.086059,10.9654655 178.086059,11.4249249 C178.086059,11.6291291 178.060636,11.8333333 177.933517,12.012012 L177.399619,12.9564565 C177.119958,13.4159159 176.662331,13.7222222 176.17928,13.7222222 C175.97589,13.6711712 175.721653,13.6456456 175.492839,13.518018 L175.492839,13.518018 Z"></path>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/resources/svg/tetris.svg b/resources/svg/tetris.svg
deleted file mode 100644
index 7a1977871..000000000
--- a/resources/svg/tetris.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 20 20" height="20" width="20"><title>video game tetris (From Streamline App : https://app.streamlineicons.com)</title><g transform="matrix(0.8333333333333334,0,0,0.8333333333333334,0,0)"><path d="M 0.75,10.5c0-0.414,0.336-0.75,0.75-0.75h3c0.414,0,0.75,0.336,0.75,0.75V18c0,0.414,0.336,0.75,0.75,0.75h3 c0.414,0,0.75,0.336,0.75,0.75v3.75H1.5c-0.414,0-0.75-0.336-0.75-0.75V10.5z " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 22.5,5.25c0.414,0,0.75,0.336,0.75,0.75v7.5 c0,0.414-0.336,0.75-0.75,0.75h-3c-0.414,0-0.75-0.336-0.75-0.75v-3c0-0.414-0.336-0.75-0.75-0.75h-3 c-0.414,0-0.75-0.336-0.75-0.75V1.5c0-0.414,0.336-0.75,0.75-0.75h3c0.414,0,0.75,0.336,0.75,0.75v3c0,0.414,0.336,0.75,0.75,0.75 H22.5z " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 13.5,14.25c0.414,0,0.75,0.336,0.75,0.75v3c0,0.414,0.336,0.75,0.75,0.75h3c0.414,0,0.75,0.336,0.75,0.75v3 c0,0.414-0.336,0.75-0.75,0.75H9.75V19.5c0-0.414-0.336-0.75-0.75-0.75H6c-0.414,0-0.75-0.336-0.75-0.75v-3.75H13.5z" stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></g></svg>
\ No newline at end of file
diff --git a/resources/svg/triangle.svg b/resources/svg/triangle.svg
deleted file mode 100644
index aba66e05e..000000000
--- a/resources/svg/triangle.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg width="7px" height="7px" viewBox="0 0 7 7" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <polygon transform="rotate(90)" points="1160.5 755 1164 762 1157 762" fill="#7C67CB"></polygon>
-</svg>
\ No newline at end of file
diff --git a/resources/svg/tv.svg b/resources/svg/tv.svg
deleted file mode 100644
index 61510e0c1..000000000
--- a/resources/svg/tv.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" viewBox="0 0 20 20" height="20" width="20"><title>vintage tv 1 (From Streamline App : https://app.streamlineicons.com)</title><g transform="matrix(0.8333333333333334,0,0,0.8333333333333334,0,0)"><path d="M 23.25,19.9c0.008,0.599-0.472,1.092-1.071,1.1H1.821c-0.599-0.008-1.079-0.501-1.071-1.1V5.6 C0.742,5.001,1.222,4.508,1.821,4.5h20.358c0.599,0.008,1.079,0.501,1.071,1.1V19.9z " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 3.75,21v2.25 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 20.25,21v2.25 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 6.75,0.75 L12,4.5l5.25-3.75 " stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M 19.505,15.118c-0.039,1.617-1.376,2.899-2.993,2.87l-9,0.021c-1.617,0.036-2.96-1.24-3.007-2.856l-0.011-4.772 c0.04-1.617,1.377-2.899,2.994-2.871l9-0.02c1.617-0.036,2.96,1.239,3.006,2.856L19.505,15.118z" stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></g></svg>
\ No newline at end of file
diff --git a/resources/svg/wordmark.svg b/resources/svg/wordmark.svg
new file mode 100644
index 000000000..6f1b41491
--- /dev/null
+++ b/resources/svg/wordmark.svg
@@ -0,0 +1,3 @@
+<svg class="o-wordmark" width="177" height="20" viewBox="0 0 177 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5.38025 19.5545C12.4418 19.5545 15.9859 15.2699 15.9859 10.0597C15.9859 5.16681 12.9972 0.908691 5.59183 0.908691C4.50746 0.908691 2.57677 0.961587 1.12213 0.988035C0.99353 0.987702 0.866131 1.01279 0.747255 1.06185C0.628379 1.11091 0.52037 1.18298 0.429434 1.27391C0.338499 1.36485 0.266432 1.47285 0.217372 1.59173C0.168311 1.71061 0.143226 1.83801 0.143558 1.96661V18.523C0.143558 19.052 0.593173 19.5016 1.12213 19.5016C2.84125 19.528 4.45457 19.5545 5.38025 19.5545ZM5.48604 16.513H5.14473C4.56167 16.5113 3.97875 16.4936 3.39665 16.4601V4.02954C4.1095 3.9762 4.8241 3.94974 5.53893 3.9502C9.95573 3.9502 12.5476 6.33051 12.5476 10.0597C12.5476 13.974 9.95573 16.513 5.48604 16.513ZM24.4051 19.7925C28.3471 19.7925 30.8848 17.1213 30.8848 13.5508C30.8848 9.98032 28.3459 7.30909 24.4051 7.30909C20.4644 7.30909 17.9254 9.98032 17.9254 13.5508C17.9254 17.1213 20.4644 19.7925 24.4051 19.7925ZM24.4051 16.9626C22.5538 16.9626 21.1785 15.5344 21.1785 13.5508C21.1785 11.4879 22.6067 10.1655 24.4051 10.1655C26.2565 10.1655 27.6582 11.5408 27.6582 13.5508C27.6582 15.6137 26.2829 16.9626 24.4051 16.9626ZM39.4905 19.7925C40.9716 19.7925 42.2411 19.528 43.6693 18.3908C43.9073 18.2056 44.0395 17.8618 44.0395 17.5444C44.0395 17.3593 43.9866 17.1477 43.8544 17.0155L43.4048 16.4601C43.3079 16.3353 43.1835 16.2346 43.0413 16.1658C42.8991 16.097 42.7429 16.0619 42.5849 16.0633C42.3576 16.0728 42.1377 16.1462 41.9502 16.2749C41.275 16.7414 40.4695 16.9821 39.6492 16.9626C37.8507 16.9626 36.211 15.6666 36.211 13.5508C36.211 11.4614 37.823 10.1655 39.5169 10.1655C40.3104 10.1655 40.9187 10.2977 41.6328 10.6415C41.7826 10.709 41.9446 10.745 42.1088 10.7473C42.4791 10.7473 42.7965 10.5357 43.0081 10.1919L43.4048 9.50426C43.4798 9.37623 43.5165 9.22937 43.5106 9.0811C43.5106 8.73727 43.3255 8.367 43.0345 8.20831C41.8708 7.57356 40.7071 7.30909 39.1202 7.30909C35.4969 7.30909 32.9579 10.0861 32.9579 13.5508C32.9579 17.3064 35.5498 19.7925 39.4905 19.7925ZM50.7661 19.7925C52.6175 19.7925 53.8605 18.9197 54.5746 18.0469V18.523C54.5746 19.052 55.0242 19.5016 55.5532 19.5016H56.6376C57.1665 19.5016 57.6161 19.052 57.6161 18.523V8.57859C57.6122 8.32027 57.5079 8.07362 57.3252 7.89094C57.1425 7.70826 56.8959 7.60391 56.6376 7.60001H55.5532C55.2949 7.60391 55.0482 7.70826 54.8656 7.89094C54.6829 8.07362 54.5785 8.32027 54.5746 8.57859V15.5079C53.887 16.4072 52.9084 16.9626 51.9034 16.9626C50.2372 16.9626 49.6289 15.8253 49.6289 14.2384V8.57859C49.625 8.32027 49.5206 8.07362 49.3379 7.89094C49.1553 7.70826 48.9086 7.60391 48.6503 7.60001H47.5659C47.3076 7.60391 47.061 7.70826 46.8783 7.89094C46.6956 8.07362 46.5913 8.32027 46.5874 8.57859V14.8732C46.5874 18.285 48.4387 19.7925 50.7661 19.7925ZM63.2319 19.5016C63.7609 19.5016 64.2105 19.052 64.2105 18.523V11.5143C64.7394 10.7209 65.6122 10.2448 66.6966 10.2448C67.9938 10.2448 68.6802 11.0647 68.6802 12.3077V18.523C68.6802 19.052 69.1298 19.5016 69.6588 19.5016H70.7431C71.2721 19.5016 71.7217 19.052 71.7217 18.523V12.4929L71.7192 12.3178L71.7053 11.9312C71.7002 11.8275 71.6968 11.7238 71.6952 11.6201C72.1184 10.8002 73.0176 10.2448 74.1549 10.2448C75.5831 10.2448 76.1914 11.0382 76.1914 12.5193V18.523C76.1914 19.052 76.641 19.5016 77.17 19.5016H78.2543C78.7833 19.5016 79.2329 19.052 79.2329 18.523V11.7259C79.2329 8.47279 77.5931 7.38843 75.4244 7.38843C73.573 7.38843 72.2507 8.18187 71.4043 9.29268C70.9812 8.20831 69.7645 7.38843 67.9409 7.38843C66.4586 7.38843 65.0568 7.97028 64.2105 8.92241V8.57859C64.2066 8.32027 64.1022 8.07362 63.9195 7.89094C63.7369 7.70826 63.4902 7.60391 63.2319 7.60001H62.1488C61.8903 7.60359 61.6433 7.7078 61.4604 7.89051C61.2774 8.07322 61.1729 8.32005 61.169 8.57859V18.523C61.169 19.052 61.6186 19.5016 62.1475 19.5016H63.2319ZM88.1559 19.7925C89.4783 19.7925 90.8801 19.4751 92.1483 18.6817C92.2803 18.596 92.3884 18.4783 92.4626 18.3396C92.5368 18.2008 92.5747 18.0456 92.5727 17.8883C92.5732 17.7001 92.518 17.5161 92.414 17.3593L92.1747 17.0155C91.9644 16.7245 91.6999 16.5659 91.409 16.5659C91.2239 16.5659 91.0123 16.6452 90.8007 16.751C90.1395 17.0684 89.4519 17.2535 88.4733 17.2535C86.5955 17.2535 85.1673 16.2749 84.9028 14.4765H92.6256C93.1017 14.4765 93.6306 13.974 93.6571 13.5243C93.6823 13.3128 93.6823 13.1012 93.6823 12.8367C93.6823 9.50426 91.1181 7.30909 88.0501 7.30909C84.1358 7.30909 81.7555 10.0861 81.7555 13.5508C81.7555 17.3064 84.321 19.7925 88.1559 19.7925ZM90.642 12.44H84.797C85.1144 10.8796 86.093 9.84809 87.9179 9.84809C89.637 9.84809 90.642 10.9589 90.642 12.3871V12.44ZM98.5588 19.5016C99.0877 19.5016 99.5373 19.052 99.5373 18.523V11.3821C100.251 10.668 101.098 10.2448 102.129 10.2448C103.822 10.2448 104.8 11.144 104.8 13.0483V18.523C104.8 19.052 105.25 19.5016 105.779 19.5016H106.863C107.392 19.5016 107.842 19.052 107.842 18.523V12.5193C107.842 8.79017 105.858 7.38843 102.949 7.38843C101.521 7.38843 100.251 8.02318 99.5373 8.68438C99.5373 8.04963 99.0877 7.60001 98.5588 7.60001H97.4744C97.2161 7.60391 96.9694 7.70826 96.7868 7.89094C96.6041 8.07362 96.4997 8.32027 96.4958 8.57859V18.523C96.4958 19.052 96.9454 19.5016 97.4744 19.5016H98.5588ZM114.542 19.7661C115.732 19.7661 116.633 19.5016 117.531 18.9726C117.822 18.8139 117.98 18.4701 117.98 18.1263C117.977 17.9673 117.931 17.8121 117.848 17.6767L117.584 17.2006C117.372 16.8303 117.108 16.6716 116.765 16.6716C116.579 16.6716 116.393 16.7245 116.155 16.8039C115.917 16.8832 115.626 16.9361 115.309 16.9361C114.304 16.9361 113.881 16.0898 113.881 14.7938V10.4564H116.737C117.266 10.4564 117.716 10.0068 117.716 9.47782V8.57859C117.712 8.32027 117.608 8.07362 117.425 7.89094C117.242 7.70826 116.996 7.60391 116.737 7.60001H113.881V5.2726C113.877 5.01428 113.773 4.76763 113.59 4.58495C113.407 4.40228 113.161 4.29792 112.902 4.29402H111.819C111.561 4.2976 111.314 4.40181 111.131 4.58452C110.948 4.76723 110.843 5.01406 110.839 5.2726V14.979C110.839 18.0205 111.844 19.7661 114.542 19.7661ZM123.597 19.6603C125.209 19.6603 126.48 19.0255 127.115 18.1263V18.523C127.115 19.052 127.565 19.5016 128.094 19.5016H128.781C129.31 19.5016 129.76 19.052 129.76 18.523V12.2548C129.76 9.10754 128.517 7.30909 124.999 7.30909C123.783 7.30909 122.592 7.62646 121.561 8.10252C121.244 8.26121 121.005 8.60503 121.005 8.94886C121.012 9.09553 121.048 9.23937 121.111 9.37202L121.27 9.6894C121.348 9.86035 121.476 10.0043 121.636 10.1031C121.796 10.2019 121.981 10.2512 122.169 10.2448C122.328 10.2448 122.487 10.2184 122.645 10.1655C123.301 9.94245 123.99 9.83506 124.682 9.84809C126.348 9.84809 126.903 10.8002 126.903 12.5458V12.916C126.322 12.4929 125.264 12.1491 124.206 12.1491C121.799 12.1491 119.868 13.3921 119.868 16.0105C119.868 18.3114 121.429 19.6603 123.596 19.6603H123.597ZM124.602 17.0948C123.65 17.0948 122.91 16.5923 122.91 15.6931C122.91 14.6881 123.809 14.212 124.814 14.212C125.687 14.212 126.374 14.3971 126.903 14.7938V16.0105C126.533 16.5394 125.871 17.0948 124.602 17.0948ZM136.486 19.7661C137.676 19.7661 138.576 19.5016 139.475 18.9726C139.766 18.8139 139.925 18.4701 139.925 18.1263C139.921 17.9673 139.876 17.8121 139.792 17.6767L139.528 17.2006C139.316 16.8303 139.052 16.6716 138.708 16.6716C138.523 16.6716 138.338 16.7245 138.1 16.8039C137.862 16.8832 137.571 16.9361 137.253 16.9361C136.248 16.9361 135.825 16.0898 135.825 14.7938V10.4564H138.682C139.21 10.4564 139.66 10.0068 139.66 9.47782V8.57859C139.656 8.32027 139.552 8.07362 139.369 7.89094C139.186 7.70826 138.94 7.60391 138.682 7.60001H135.825V5.2726C135.821 5.01428 135.717 4.76763 135.534 4.58495C135.352 4.40228 135.105 4.29792 134.847 4.29402H133.762C133.504 4.29792 133.257 4.40228 133.075 4.58495C132.892 4.76763 132.788 5.01428 132.784 5.2726V14.979C132.784 18.0205 133.789 19.7661 136.486 19.7661ZM144.615 5.2197C145.487 5.2197 146.36 4.53205 146.36 3.31545C146.36 2.23109 145.487 1.54344 144.615 1.54344C143.583 1.54344 142.71 2.23109 142.71 3.31545C142.71 4.53205 143.583 5.2197 144.615 5.2197ZM145.091 19.5016C145.62 19.5016 146.069 19.052 146.069 18.523V8.57859C146.065 8.32027 145.961 8.07362 145.778 7.89094C145.596 7.70826 145.349 7.60391 145.091 7.60001H144.008C143.749 7.60359 143.502 7.7078 143.319 7.89051C143.136 8.07322 143.032 8.32005 143.028 8.57859V18.523C143.028 19.052 143.477 19.5016 144.006 19.5016H145.091ZM155.812 19.7925C159.753 19.7925 162.292 17.1213 162.292 13.5508C162.292 9.98032 159.753 7.30909 155.812 7.30909C151.87 7.30909 149.332 9.98032 149.332 13.5508C149.332 17.1213 151.871 19.7925 155.812 19.7925ZM155.812 16.9626C153.961 16.9626 152.586 15.5344 152.586 13.5508C152.586 11.4879 154.014 10.1655 155.812 10.1655C157.664 10.1655 159.065 11.5408 159.065 13.5508C159.065 15.6137 157.69 16.9626 155.812 16.9626ZM167.167 19.5016C167.696 19.5016 168.146 19.052 168.146 18.523V11.3821C168.86 10.668 169.706 10.2448 170.738 10.2448C172.43 10.2448 173.409 11.144 173.409 13.0483V18.523C173.409 19.052 173.858 19.5016 174.387 19.5016H175.472C176.001 19.5016 176.45 19.052 176.45 18.523V12.5193C176.45 8.79017 174.467 7.38843 171.558 7.38843C170.129 7.38843 168.86 8.02318 168.146 8.68438C168.146 8.04963 167.696 7.60001 167.167 7.60001H166.083C165.824 7.60391 165.578 7.70826 165.395 7.89094C165.212 8.07362 165.108 8.32027 165.104 8.57859V18.523C165.104 19.052 165.554 19.5016 166.083 19.5016H167.167Z" />
+</svg>
diff --git a/resources/svg/zig-zag-lg.svg b/resources/svg/zig-zag-lg.svg
deleted file mode 100644
index 71c8c37f7..000000000
--- a/resources/svg/zig-zag-lg.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="453px" height="13px" viewBox="0 0 453 13" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <title>HR: Section</title>
-    <g id="Final-Pages" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="Design-v2:-Doc-Components" transform="translate(-494.000000, -4128.000000)" stroke-width="3">
-            <g id="Main-Content" transform="translate(361.000000, 1738.000000)">
-                <g id="Path-2" transform="translate(134.000000, 2392.000000)">
-                    <polyline stroke="#B1D8FC" points="1 9 15.516129 2 30.0322581 9 44.5483871 2 59.0645161 9 73.5806452 2 88.0967742 9 102.612903 2 117.129032 9 131.645161 2 146.16129 9 160.677419 2 175.193548 9 189.709677 2 204.225806 9 218.741935 2 233.258065 9 247.774194 2 262.290323 9 276.806452 2 291.322581 9 305.83871 2 320.354839 9 334.870968 2 349.387097 9 363.903226 2 378.419355 9 392.935484 2 407.451613 9 421.967742 2 436.483871 9 451 2"></polyline>
-                    <polyline stroke="#01D7B0" points="0 7 14.516129 0 29.0322581 7 43.5483871 0 58.0645161 7 72.5806452 0 87.0967742 7 101.612903 0 116.129032 7 130.645161 0 145.16129 7 159.677419 0 174.193548 7 188.709677 0 203.225806 7 217.741935 0 232.258065 7 246.774194 0 261.290323 7 275.806452 0 290.322581 7 304.83871 0 319.354839 7 333.870968 0 348.387097 7 362.903226 0 377.419355 7 391.935484 0 406.451613 7 420.967742 0 435.483871 7 450 0"></polyline>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/resources/svg/zig-zag.svg b/resources/svg/zig-zag.svg
deleted file mode 100644
index 719b75306..000000000
--- a/resources/svg/zig-zag.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="123" height="13" viewBox="0 0 123 13" xmlns="http://www.w3.org/2000/svg"><g stroke-width="3" fill="none" fill-rule="evenodd"><path stroke="#B1D8FC" d="M2 11l11.32-7 11.322 7 11.32-7 11.321 7 11.32-7 11.322 7 11.32-7 11.321 7 11.32-7 11.322 7L122 7.5"/><path stroke="#01D7B0" d="M1 9l11.32-7 11.322 7 11.32-7 11.321 7 11.32-7 11.322 7 11.32-7 11.321 7 11.32-7 11.322 7L121 5.5"/></g></svg>
\ No newline at end of file
diff --git a/resources/svg/zigs-top-right.svg b/resources/svg/zigs-top-right.svg
deleted file mode 100644
index b190b2891..000000000
--- a/resources/svg/zigs-top-right.svg
+++ /dev/null
@@ -1,78 +0,0 @@
-<svg width="283px" height="380px" viewBox="0 0 283 380" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <defs>
-        <polygon id="path-1" points="0.300386667 0.0423062033 51.935 0.0423062033 51.935 54.2665845 0.300386667 54.2665845"></polygon>
-        <polygon id="path-3" points="0.393385714 0.0143846154 14.9390687 0.0143846154 14.9390687 16.5774063 0.393385714 16.5774063"></polygon>
-        <polygon id="path-5" points="0.31194 0.044372859 53.9325 0.044372859 53.9325 56.9175042 0.31194 56.9175042"></polygon>
-        <polygon id="path-7" points="0.419611429 0.0152307692 15.9350066 0.0152307692 15.9350066 17.5525479 0.419611429 17.5525479"></polygon>
-        <polygon id="path-9" points="0.159067797 0.0322363636 29.9144068 0.0322363636 29.9144068 17.999935 0.159067797 17.999935"></polygon>
-        <polygon id="path-11" points="0 0.0712567146 25.9125226 0.0712567146 25.9125226 15.9319747 0 15.9319747"></polygon>
-    </defs>
-    <g id="Docs" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="Desktop-HD-Copy-4" transform="translate(-1126.000000, 0.000000)">
-            <g id="Group-8" transform="translate(1126.000000, -17.000000)">
-                <g id="Group-17-Copy-2" transform="translate(254.500000, 194.000000) rotate(87.000000) translate(-254.500000, -194.000000) translate(226.000000, 166.000000)">
-                    <g id="Group-3" transform="translate(4.560620, 0.590771)">
-                        <mask id="mask-2" fill="white">
-                            <use xlink:href="#path-1"></use>
-                        </mask>
-                        <g id="Clip-2"></g>
-                        <path d="M27.1384533,15.2482387 L27.1384533,15.2482387 L26.94692,15.1713971 L27.1384533,15.2482387 Z M51.87312,3.28178752 C51.82762,3.14720619 51.73922,3.00133739 51.6031533,2.84548352 C51.5008867,2.67660565 51.1927867,2.58674005 50.8556533,2.43045205 C50.4643533,2.16215765 50.0747867,1.89473152 49.67612,1.61992512 C49.3931533,1.52181099 49.1201533,1.42586752 48.8744533,1.35206485 C48.3843533,1.20315712 47.8942533,1.03210859 47.40112,0.83848512 L47.0314867,0.688274987 L46.9378867,0.650071253 L46.7779867,0.599277653 L46.45992,0.495519787 C46.0326533,0.352255787 45.6001867,0.207255253 45.16122,0.06095232 C44.97012,0.00668565333 44.74392,0.0813565867 44.5627867,0.15081792 C44.3361533,0.25240512 44.12382,0.39306432 43.9942533,0.580175787 L43.66622,1.28607659 L43.35292,1.97200725 C43.30482,2.08010645 43.24372,2.20600512 43.2090533,2.29804139 L43.13972,2.52248832 C43.0179533,2.66792299 42.89012,2.81726485 42.76402,2.96617259 C42.3657867,3.42548565 42.46242,3.86526272 42.1746867,4.41096832 C42.02822,4.28810859 41.83842,4.47956139 41.52252,5.41338219 C41.3244867,5.99729152 41.01032,6.65022805 40.78412,7.26018539 C40.70612,7.46856939 40.69052,7.65698325 40.6562867,7.88707392 C40.5561867,7.96782272 40.4794867,7.97650539 40.4413533,7.86059179 C40.1748533,8.27735979 39.95732,8.57734592 39.74932,8.95981739 C39.5937533,9.24547712 39.4212867,9.65226005 39.3055867,9.98003072 C39.06032,10.6746441 38.85882,11.3562334 38.4575533,11.9974483 C38.3262533,12.4667465 38.1000533,13.0198323 37.9093867,13.5425289 C37.8144867,13.803443 37.72912,14.0565427 37.6701867,14.2875017 C37.64592,14.3643433 37.66022,14.3582654 37.66672,14.3717235 L37.6892533,14.4129662 C37.7100533,14.4494334 37.7286867,14.4837299 37.7490533,14.5193289 C37.76422,14.5462451 37.7780867,14.5757662 37.7867533,14.604419 C37.7061533,14.6096286 37.6311867,14.5436403 37.54842,14.4177417 C37.5193867,14.4255561 37.4842867,14.4003763 37.46652,14.3760649 C37.4569867,14.3643433 37.4487533,14.3534899 37.4426867,14.343939 C37.4205867,14.3278761 37.4968533,14.3448073 37.2940533,14.2714387 C36.7987533,14.0856297 36.25102,13.8867966 35.8813867,13.8876649 C35.41512,13.8867966 34.78202,13.5325438 34.19572,13.4934718 C33.6995533,13.4587411 32.90222,12.9755507 32.2734533,12.9147721 C31.9137867,12.8813438 31.2477533,12.7584841 30.9842867,12.4059678 C30.8252533,12.4828094 30.7615533,12.5158035 30.66622,12.5618217 C30.59602,12.4958334 30.5422867,12.4454739 30.4889867,12.3955486 L30.4326533,12.3182729 C30.27492,12.2696499 30.1375533,12.2271049 30.0131867,12.1880329 C29.9789533,12.1767454 29.9611867,12.1684969 29.91482,12.1563411 C29.8623867,12.1437513 29.8125533,12.1324638 29.7631533,12.1203081 C29.6643533,12.0968649 29.57162,12.0742899 29.4827867,12.0525833 C29.1291867,11.9644542 28.84232,11.8850078 28.5558867,11.8059955 C28.4124533,11.7664894 28.27032,11.7278515 28.12212,11.687043 C27.9886533,11.6970281 27.84132,11.7048425 27.6805533,11.7556361 C27.5193533,11.7986153 27.3455867,11.8715497 27.1735533,11.9822537 C26.99762,12.0903529 26.84292,12.2266707 26.7059867,12.4624051 C26.5941867,12.6291123 26.4225867,12.8496521 26.3454533,12.9560147 C26.3064533,13.0515241 26.2886867,13.0962398 26.2808867,13.1231561 C26.24232,13.2677225 26.17862,13.4305225 26.1001867,13.6085171 C26.0598867,13.6953438 26.0165533,13.7878142 25.9723533,13.8837577 C25.9437533,13.9328147 25.91472,13.9844766 25.88482,14.0365726 C25.7708533,14.2310643 25.6486533,14.4298974 25.5966533,14.5974729 C25.58972,14.6078921 25.5866867,14.6152723 25.5823533,14.6248233 L25.5853867,14.6256915 C25.3314533,15.3203049 24.8170867,16.7581545 24.78762,16.8745022 C24.6935867,17.2517641 24.6021533,17.6264211 24.4942533,18.0158387 C24.3824533,18.4208851 24.0604867,19.0829385 24.2892867,19.0612318 C24.3126867,19.0594953 24.2251533,19.4028947 24.15842,19.5960841 C23.9980867,20.0276126 23.8338533,20.4695603 23.6626867,20.9280051 C23.67222,21.0526014 23.6353867,21.1802366 23.6522867,21.3009257 C23.6522867,21.3009257 23.6145867,21.2931113 23.61372,21.2965843 L23.28872,22.1110185 C23.24062,22.2304051 23.0460533,22.1327251 22.8861533,22.3120222 C22.5884533,22.6471731 22.27342,23.3643614 22.1611867,23.988211 C22.0103867,24.8208787 21.6359867,25.7386366 21.3343867,26.6090739 C21.2039533,26.9885065 21.08262,27.3410227 21.01762,27.6540329 C20.9998533,27.7469374 20.9820867,27.8381054 20.9647533,27.9271027 C20.9270533,27.9188542 20.9036533,27.8737043 20.8984533,27.765171 C20.6154867,28.5018953 20.4226533,28.3221641 20.1552867,28.9434089 L20.0499867,29.1873918 C20.0265867,29.2420926 20.0261533,29.2403561 20.02182,29.2451315 L20.0109867,29.2624969 L19.9676533,29.3271827 C19.9494533,29.3701619 19.9065533,29.4096681 19.85672,29.4044585 C19.8233533,29.4005513 19.7843533,29.4014195 19.7392867,29.4122729 C19.7158867,29.4166142 19.7184867,29.4318089 19.5789533,29.4070633 C19.4788533,29.3936051 19.40042,29.3896979 19.35492,29.3970782 C18.9705533,29.4608958 18.35782,29.2933203 17.7979533,29.1930355 C17.6072867,29.1596073 17.4170533,29.126179 17.21252,29.0905801 C17.0738533,29.0267625 16.93822,28.9638131 16.80692,28.9030345 C16.7826533,28.8496361 16.75362,28.7892915 16.7167867,28.7102793 C16.6305533,28.7263422 16.4875533,28.6738121 16.33242,28.6468958 C16.18682,28.579171 15.9844533,28.7050697 15.8990867,28.4107273 L16.66522,28.6351742 C16.2509533,28.2453225 16.22712,28.3247689 15.3608867,28.2171038 C15.1017533,28.0899027 14.8417533,27.9627017 14.57612,27.8337641 C14.28362,27.7699465 14.00022,27.7078654 13.7475867,27.6640179 C13.4949533,27.6201705 13.24232,27.5693769 12.98882,27.5151102 L12.60662,27.4278494 L11.96702,27.3119358 C11.7477533,27.2698249 11.5284867,27.2281481 11.30792,27.1864713 L10.9759867,27.1200489 C10.8689533,27.1087614 10.77362,27.1339411 10.6661533,27.1534771 C10.45772,27.2016659 10.2475533,27.2889267 10.0659867,27.4122206 C9.97455333,27.4699603 9.89048667,27.5420265 9.81638667,27.6123561 C9.73622,27.6766078 9.69895333,27.8046771 9.63698667,27.8988841 C9.53602,28.0846931 9.42378667,28.3278078 9.34058667,28.5157875 C9.24005333,28.748483 9.11308667,29.0215529 9.04158667,29.2117033 L8.90942,29.6640702 L8.64552,30.5675017 C8.52375333,30.7142387 8.39895333,30.8640147 8.27415333,31.014659 C7.88155333,31.4778793 7.98295333,31.9163539 7.70128667,32.4659667 C7.55352,32.3452777 7.36502,32.538467 7.05952,33.4757609 C6.86842,34.0614067 6.56162,34.7173822 6.34148667,35.3303785 C6.26652,35.5387625 6.25308667,35.7284787 6.22145333,35.9594377 C6.12135333,36.0401865 6.04465333,36.0488691 6.00565333,35.9338238 C5.74435333,36.354499 5.52942,36.6566558 5.32532,37.0404297 C5.17322,37.3295625 5.00552,37.7367795 4.89372,38.0662867 C4.65582,38.7630707 4.46168667,39.4468307 4.06778667,40.0928211 C3.81732,41.0357587 3.18335333,42.3160179 3.22798667,43.0054217 C3.23102,43.0614249 3.23362,43.1187305 3.22972,43.1795091 C3.06592,43.3822494 2.91425333,43.5059774 2.78122,43.5029385 C2.51168667,44.0681801 2.24952,44.6173587 1.98865333,45.1648009 C1.76028667,45.6414793 1.51415333,46.1706878 1.48165333,46.5405694 C1.44135333,47.0050921 1.03315333,47.6063667 0.94302,48.1881054 C0.930886667,48.2653811 0.85722,48.5610259 0.775753333,48.8189011 C0.687353333,49.085459 0.589853333,49.3793673 0.490186667,49.6810899 L0.33592,50.1408371 L0.300386667,50.2558825 L0.305586667,50.3592062 C0.306453333,50.4264969 0.324653333,50.5011678 0.334186667,50.5706291 C0.397886667,50.8562889 0.54522,51.1276222 0.723753333,51.2925929 C0.802186667,51.3967849 1.00715333,51.4584318 1.19088667,51.5465609 C1.37895333,51.6320851 1.57525333,51.7271603 1.76505333,51.8304841 C1.95442,51.9329395 2.13858667,52.0436435 2.30368667,52.1630302 C2.38732,52.2220723 2.46532,52.2841534 2.53768667,52.3484051 C2.61005333,52.4126569 2.62348667,52.439139 2.65945333,52.4921033 C2.82412,52.4282857 2.88998667,52.4026718 2.98922,52.3649022 C3.05378667,52.4374025 3.10232,52.491235 3.15128667,52.5463699 L3.20112,52.6266846 C3.81472,52.868931 4.11545333,53.0295603 4.40102,53.1897555 C4.54575333,53.2692019 4.68615333,53.3464777 4.85645333,53.4398163 C5.05578667,53.5405353 5.12945333,53.5839486 5.75865333,53.8513747 C5.92375333,53.9208361 6.13868667,54.0245939 6.28515333,54.093187 C6.41082,54.1196691 6.49575333,54.1361662 6.53302,54.1370345 C6.65825333,54.1392051 6.81078667,54.1635166 6.98065333,54.1995497 C7.06558667,54.2190857 7.15572,54.2394899 7.24888667,54.2607625 C7.33902,54.2703134 7.42092,54.2672745 7.51668667,54.2577235 C7.89412,54.2316755 8.30318667,54.054115 8.50078667,53.8648329 C8.51812,53.8526771 8.44315333,53.8465993 8.45528667,53.8379166 L7.42785333,52.3662046 L7.42785333,52.3653363 L8.45355333,53.8340094 C8.61475333,53.5305502 8.86262,53.1446057 9.08015333,52.7339155 C9.28598667,52.3392883 9.59452,51.8261427 9.62225333,51.6746302 C9.79342,51.2161854 9.94465333,50.8289385 9.95938667,50.7716329 C10.05992,50.3948051 10.1604533,50.0218846 10.27312,49.6337694 C10.3909867,49.2300254 10.72422,48.5727475 10.49542,48.5909811 C10.47202,48.5931518 10.5647533,48.2506206 10.6340867,48.0582995 C10.80092,47.6298099 10.9720867,47.1895987 11.1484533,46.7333246 C11.14152,46.6091625 11.1796533,46.4815273 11.16492,46.3604041 C11.1640533,46.3560627 11.2017533,46.3690867 11.2034867,46.3651795 L11.53932,45.5550867 C11.58872,45.4365683 11.7819867,45.536419 11.9440533,45.3592926 C12.2460867,45.0280489 12.57152,44.3156361 12.6919867,43.6930889 C12.8531867,42.8621577 13.23972,41.9496094 13.5525867,41.0839475 C13.6890867,40.7058174 13.8151867,40.3559059 13.8840867,40.0437641 C13.9035867,39.9512937 13.9217867,39.8596915 13.9408533,39.7711283 C13.9776867,39.7789427 14.0010867,39.8249609 14.00542,39.9334942 C14.2970533,39.2006771 14.48772,39.3834473 14.7628867,38.7648073 C14.9015533,38.4600457 15.04022,38.1531134 15.17802,37.8479177 C15.2083533,37.8045043 15.2265533,37.7641299 15.2464867,37.7146387 C15.2750867,37.6490846 15.3504867,37.6490846 15.4011867,37.6143539 C15.4180867,37.6043689 15.4310867,37.5904766 15.4414867,37.5752819 C15.46532,37.5379465 15.4947867,37.513635 15.5376867,37.4988745 C15.65772,37.5075571 15.7881533,37.5253566 15.9233533,37.5492339 C16.1950533,37.6026323 16.4875533,37.6582014 16.76792,37.7129022 C16.9585867,37.7463305 17.1483867,37.7793246 17.35422,37.8144894 C17.4915867,37.8778729 17.6276533,37.9421246 17.75852,38.0024691 C17.7836533,38.0558675 17.8126867,38.1162121 17.84952,38.1956585 C17.93532,38.1791614 18.07832,38.2312574 18.2338867,38.2581737 C18.3794867,38.3263326 18.58142,38.2013022 18.66722,38.4947763 L17.9006533,38.2707635 C18.3153533,38.6606153 18.3378867,38.5811689 19.20412,38.6888339 C19.4649867,38.816035 19.7249867,38.9432361 19.9901867,39.0721737 C20.2822533,39.1355571 20.5656533,39.1972041 20.8191533,39.2419198 C21.3222533,39.3296147 21.83012,39.4403187 22.34232,39.5731635 L22.53472,39.6243913 L22.63092,39.6508734 L22.6798867,39.6643315 L22.7613533,39.6799603 C22.98192,39.7238078 23.2037867,39.7689577 23.4260867,39.8128051 C23.64882,39.8605598 23.8732867,39.9074462 24.0981867,39.955635 C24.3334867,40.0298718 24.53282,40.0059945 24.7490533,39.9408745 C24.9457867,39.8870419 25.1676533,39.7485534 25.3058867,39.6165769 C25.37392,39.5553641 25.4280867,39.4889417 25.48312,39.4246899 L25.6135533,39.1802729 C25.6984867,39.0196435 25.78342,38.8577118 25.8878533,38.7131454 L26.04602,38.2138921 C26.0932533,38.0610771 26.1625867,37.8531273 26.1751533,37.7854025 L26.3250867,37.2014931 C26.4442533,37.0538878 26.5677533,36.9006387 26.6903867,36.7486921 C27.0773533,36.2806963 26.96902,35.8430899 27.2437533,35.2908723 C27.3936867,35.4098249 27.57872,35.2144649 27.8716533,34.2728297 C28.0540867,33.6841449 28.35352,33.0229598 28.5645533,32.408227 C28.6373533,32.1985406 28.6477533,32.0088243 28.6754867,31.7778654 C28.7751533,31.6949459 28.8522867,31.6858291 28.89302,31.7995721 C29.1482533,31.3762921 29.3588533,31.0710963 29.5577533,30.6834153 C29.7063867,30.3934142 29.8684533,29.9827241 29.9754867,29.6527827 C30.20472,28.9525257 30.3888867,28.2661609 30.7745533,27.615395 C31.0128867,26.6698526 31.6286533,25.3800425 31.5744867,24.6919411 C31.5714533,24.6359379 31.56842,24.5786323 31.57102,24.5169854 C31.7326533,24.3112062 31.8821533,24.1866099 32.0151867,24.1879123 C32.14562,23.9039891 32.2751867,23.623539 32.4025867,23.3456937 L32.5945533,22.9297939 C32.61622,22.8816051 32.6153533,22.887683 32.6153533,22.887683 L32.6244533,22.8863806 L32.6374533,22.8846441 C32.67342,22.8855123 32.66302,22.9132969 32.6508867,22.7860958 C32.6465533,22.7105566 32.6868533,22.724883 32.7158867,22.7361705 C32.7977867,22.7596137 32.8809867,22.7839251 32.9628867,22.8082366 C33.1132533,22.8468745 33.2618867,22.8763955 33.4083533,22.8863806 C33.90452,22.9198089 34.7022867,23.4034334 35.3310533,23.4637779 C35.69072,23.4972062 36.35632,23.6205001 36.6210867,23.9730163 C36.7792533,23.8948723 36.8429533,23.8640489 36.93742,23.8171625 C37.0084867,23.884019 37.0617867,23.9335102 37.1159533,23.9843038 L37.1718533,24.059843 C38.4371867,24.4353683 38.4267867,24.5955635 39.57382,24.9754302 C39.71942,25.0231849 39.9317533,25.1269427 39.9889533,25.1312841 C40.2129867,25.1499518 40.6259533,25.2641289 41.0215867,25.3830814 C41.2278533,25.4434259 41.43802,25.5042046 41.63302,25.5597737 C41.8431867,25.6374835 42.0026533,25.6123038 42.15172,25.5654174 C42.1755533,25.5619443 42.1876867,25.5597737 42.20502,25.5580371 L42.20372,25.5549982 C42.51182,25.459923 42.9286867,25.2719433 43.1873867,24.9363582 C43.40492,24.5226291 43.63502,24.0832862 43.84952,23.6760691 C43.90282,23.5749161 43.9539533,23.4763678 44.0046533,23.3799902 C44.05882,23.2771006 44.0544867,23.2597353 44.0817867,23.1980883 C44.11992,23.0973694 44.15502,23.0040307 44.1853533,22.9232819 C44.2438533,22.7622185 44.28372,22.6515145 44.2945533,22.6232958 C44.3972533,22.2490729 44.4964867,21.8761523 44.6143533,21.4889054 C44.7365533,21.0873321 45.0749867,20.4335273 44.8448867,20.4487219 C44.8223533,20.4513267 44.9176867,20.1092297 44.9891867,19.9177769 C45.1594867,19.4905897 45.3349867,19.0525491 45.5169867,18.5980115 C45.51092,18.4742835 45.5503533,18.3470825 45.53692,18.2255251 C45.5360533,18.2211838 45.5737533,18.2346419 45.5737533,18.2346419 L45.92042,17.4254174 C45.97112,17.306899 46.16352,17.4089203 46.3268867,17.2339646 C46.63282,16.9057598 46.9651867,16.1968201 47.09302,15.5755753 C47.2637533,14.7463806 47.6606867,13.8386078 47.98352,12.976419 C48.12262,12.5995913 48.2534867,12.2505481 48.3258533,11.9392745 C48.3457867,11.8476723 48.3652867,11.7565043 48.38522,11.667507 C48.42162,11.6761897 48.4445867,11.7226419 48.4484867,11.8298729 C48.7474867,11.1018313 48.9355533,11.2863379 49.2189533,10.6707369 C49.5131867,10.0299561 49.82562,9.38570219 50.08952,8.73884352 C50.27542,8.28256939 50.52242,7.59229739 50.5141867,7.40779072 C50.4972867,7.01793899 50.73822,6.42838592 50.9050533,5.88354859 C50.9336533,5.78847339 50.9626867,5.69383232 50.9912867,5.59615232 C51.0276867,5.45158592 51.06582,5.30354645 51.1043867,5.15116565 C51.1992867,4.93496725 51.2915867,4.72180779 51.38172,4.51602859 C51.4449867,4.45524992 51.51692,4.38622272 51.6100867,4.29592299 C51.60922,4.23774912 51.6304533,4.15005419 51.65862,4.04716459 C51.67422,3.99550272 51.6893867,3.94080192 51.7062867,3.88393045 C51.7023867,3.83096619 51.7006533,3.77800192 51.6906867,3.72199872 C51.6915533,3.47541099 51.45062,3.31044032 51.5489867,2.98657685 C51.5489867,2.98657685 51.7257867,3.25747605 51.7777867,3.57048619 C51.8648867,3.86005312 51.6850533,4.18174592 51.7023867,4.18218005 C52.0087533,3.75325632 51.95112,3.56050112 51.87312,3.28178752 L51.87312,3.28178752 Z" id="Fill-1" fill="#000000" mask="url(#mask-2)"></path>
-                    </g>
-                    <path d="M7.98566756,52.5664803 C7.87646126,52.8268757 7.5732071,52.9514689 7.30954566,52.8428271 L2.410925,50.8247626 C2.14726357,50.7165519 2.02239421,50.4152003 2.1320356,50.1543737 L10.9703498,29.0946787 C11.0799912,28.8342833 11.3923822,28.6864097 11.6656155,28.7644421 L20.7171213,31.3826232 C20.9903546,31.461949 21.2997,31.3119198 21.4058607,31.0506622 L28.2989104,13.9904511 C28.404201,13.7283312 28.7126761,13.5839066 28.9841691,13.6679747 L38.4181145,16.6241524 C38.6887373,16.7090827 39.0019984,16.5668137 39.1146854,16.3081428 L45.2245824,2.19203816 C45.3372694,1.93336722 45.642699,1.81179187 45.9037499,1.92388261 L50.779311,3.99411241 C51.040362,4.10577204 51.1630559,4.40841705 51.0503689,4.66708799 L42.6789008,24.0139502 C42.5666489,24.2730523 42.2533878,24.4153213 41.9823299,24.3299599 L32.6815204,21.4147384 C32.4108976,21.3298081 32.1024224,21.4742327 31.9966968,21.7354903 L25.1528117,38.6792995 C25.0475211,38.9414194 24.7377407,39.0901552 24.4649425,39.0112605 L15.3381669,36.3723858 C15.0653687,36.2926289 14.7529778,36.4413647 14.6433364,36.7017601 L7.98566756,52.5664803 Z" id="Fill-4" fill="#01D7B0"></path>
-                    <path d="M14.3946286,28.8933098 C14.1543744,28.8562898 13.9150183,28.8210119 13.6711715,28.7835564 C13.4138525,28.739568 12.9863347,28.5853906 13.0137282,28.7208402 C13.0159736,28.7352127 12.798173,28.7029835 12.6751269,28.6733675 C12.5264837,28.6380896 12.3755951,28.6006341 12.2229101,28.5631786 C12.1048039,28.5383534 11.9871467,28.5130927 11.8676932,28.4873965 C11.7473415,28.4586515 11.6292352,28.4333908 11.5106799,28.4521186 C11.4590365,28.4708464 11.4024532,28.4830412 11.3476663,28.495236 C11.2942266,28.5148348 11.2434813,28.5466285 11.2021665,28.5771155 C11.2021665,28.5771155 11.1886943,28.5579522 11.1846527,28.5579522 C11.1846527,28.5579522 11.1343565,28.5740668 11.0598103,28.5954078 C10.984366,28.6180553 10.9053291,28.6899176 10.8168617,28.7413101 C10.6466629,28.8584675 10.5528066,29.051407 10.5317001,29.0309371 C10.4769132,29.1419971 10.383955,29.03747 10.2330664,29.2243121 C10.1984877,29.2683006 10.1603165,29.3183864 10.1212471,29.3754408 L10.0184094,29.5322313 C9.97170573,29.6058358 9.9267984,29.6903285 9.88548366,29.779612 C9.80150695,29.958179 9.73190059,30.158958 9.69462751,30.3466712 C9.59448416,30.8470944 9.35378088,31.3958613 9.15978122,31.9171899 C9.07490637,32.1449718 8.99631854,32.3553324 8.95365658,32.5434811 C8.9415316,32.5987933 8.92985569,32.6541056 8.91817979,32.7072401 C8.89572612,32.7024493 8.88135578,32.6745754 8.87866134,32.6096816 C8.69678665,33.0508728 8.57868038,32.9406839 8.40713438,33.3126259 C8.22840321,33.7011181 8.03844521,34.0904813 7.87902419,34.4811511 C7.76540865,34.7568412 7.61676539,35.1749493 7.62350149,35.2851382 C7.63652461,35.5198885 7.49102487,35.8761515 7.39088152,36.2049762 C7.3576501,36.3169072 7.32441867,36.4284027 7.28804374,36.5494799 C7.23864568,36.6283107 7.19149298,36.7049638 7.14434029,36.7794394 C7.11021071,36.7911986 7.07069227,36.8047001 7.01949791,36.8212502 C7.02398864,36.8743847 6.98177575,36.9562643 6.95438228,37.0481609 C6.90228978,37.1300405 6.96650726,37.2598282 6.77969277,37.2911863 L6.97009985,36.8478175 C6.70065587,37.0695019 6.74825764,37.0886652 6.62251712,37.6008477 C6.52551729,37.7511053 6.43211004,37.8935234 6.3319667,38.0472652 C6.27628161,38.2166861 6.22149467,38.3804452 6.17119846,38.5320094 C5.99381451,39.1243293 5.75984733,39.7188268 5.46929691,40.323777 C5.43696363,40.3921551 5.40687572,40.4814386 5.38576928,40.5524299 L5.05704763,41.6403822 C4.98205239,41.7279236 4.90436271,41.8180781 4.82622395,41.9095393 C4.58237716,42.1878425 4.64569649,42.4526444 4.46921069,42.7836467 C4.37804881,42.7104777 4.26128975,42.825893 4.07133175,43.3907745 C3.95187825,43.7439888 3.76102211,44.1385784 3.6249529,44.5066007 C3.57735113,44.6324687 3.56971688,44.7457063 3.55040673,44.8855112 C3.48798554,44.9342905 3.43948563,44.9390813 3.41613382,44.8711387 C3.25312021,45.1233102 3.12064359,45.305797 2.9926577,45.5370631 C2.89835231,45.7095327 2.79416731,45.9556068 2.72501002,46.1533371 C2.57681584,46.5736229 2.45646419,46.9847626 2.2108211,47.3732547 C2.05499267,47.9407494 1.66070632,48.7116363 1.68989608,49.1262603 C1.6912433,49.1602315 1.69259052,49.1946384 1.68989608,49.2312228 C1.58795645,49.3540421 1.49410013,49.4276466 1.41147064,49.42634 C1.32569765,49.6036004 1.24935519,49.7486317 1.15909145,49.9459265 L0.977665844,50.4341548 L0.886054893,50.6802289 L0.841596637,50.8034837 L0.833064245,50.9228187 C0.817795753,51.201122 0.897281725,51.513832 1.06209162,51.743356 C1.13753594,51.8622555 1.23184133,51.9606851 1.32839209,52.0334185 C1.41820674,52.1135559 1.5601139,52.1383811 1.65486837,52.1771432 C1.78509962,52.2172119 1.9216179,52.2725241 2.06442321,52.3369825 C2.13582586,52.3700827 2.20902481,52.404054 2.2831219,52.4393319 C2.32488572,52.4563175 2.3688949,52.4746097 2.41245501,52.4920309 C2.58714452,52.5625867 2.76991735,52.6374977 2.95089389,52.664936 C3.25626373,52.7115377 3.72329995,53.043411 4.10995205,53.1126602 C4.33134519,53.1518578 4.7364093,53.2607402 4.8810109,53.4867799 C4.98384868,53.4480178 5.02516342,53.4327743 5.08578832,53.4096912 C5.12665399,53.4528086 5.1567419,53.4859088 5.18682981,53.5190091 L5.21736679,53.5673528 C5.59099577,53.7093354 5.77781026,53.8055874 5.9520507,53.8996617 C6.04096721,53.9466989 6.12808743,53.9933005 6.22823077,54.0468706 C6.28616122,54.074309 6.34813334,54.1039249 6.41549433,54.1361541 C6.54168393,54.1897242 6.67865128,54.2485207 6.83492879,54.3138501 C6.84840099,54.3177698 6.87983612,54.3251738 6.91216939,54.3334489 C7.07787744,54.3730821 7.33789087,54.4654143 7.39492318,54.4418957 C7.55030254,54.4279588 7.79100582,54.4192482 8.03081096,54.3447727 C8.26612537,54.2659419 8.49515275,54.1317988 8.60876829,53.9793636 C8.62089327,53.9684753 8.625384,53.96412 8.63346732,53.9580226 L7.33968717,52.5316641 C7.30959926,52.5390681 7.27097895,52.5408102 7.23235865,52.529922 C7.18385873,52.5190337 7.15781248,52.492902 7.12907179,52.4794006 C6.99434981,52.4236528 6.84705377,52.3626787 6.65529947,52.2842834 C6.54707281,52.2385528 5.24341304,51.6096485 5.15225116,51.5865654 C4.91738583,51.5247203 4.68341865,51.4628751 4.44585888,51.4005944 C4.19572505,51.3300387 3.78751743,51.1301307 3.79874426,51.268629 C3.80054056,51.2821304 3.58812889,51.2268182 3.46867539,51.1850074 C3.33440248,51.1349215 3.20012956,51.0857067 3.06316221,51.0356208 L2.89161621,50.9702914 L2.82066263,50.9459018 C2.77710252,50.964194 2.74297295,50.9585321 2.68773694,50.9755178 L2.7052508,50.9576611 C2.7052508,50.9576611 2.65450552,50.9376267 2.62172317,50.896687 C2.58894081,50.8566183 2.57995935,50.8052258 2.57995935,50.8052258 C2.76003774,50.7268305 2.72950076,50.7407675 2.79237102,50.6998277 C2.85434313,50.666292 2.8952088,50.6479997 2.91002822,50.6262233 L2.9154171,50.6175127 L2.94325964,50.5508767 L2.99490307,50.4075875 C3.02768542,50.3117711 3.05462982,50.214648 3.07393997,50.1205737 C3.17363424,49.6210216 3.41343938,49.0722546 3.60788811,48.550926 C3.69321204,48.3231442 3.77224894,48.112348 3.81446183,47.9237638 C3.82658681,47.8688871 3.83826271,47.8131393 3.84948954,47.7608758 C3.87194321,47.7647956 3.8872117,47.793105 3.88945707,47.8575633 C4.0704336,47.4168076 4.18853988,47.5274321 4.3614331,47.1541835 C4.53971519,46.7669979 4.7296732,46.3776347 4.88864514,45.9869649 C5.00181161,45.7104037 5.15045487,45.2931666 5.14416784,45.1821067 C5.13069565,44.9473564 5.27619539,44.5919644 5.37633874,44.2622687 C5.41001923,44.1503377 5.44280158,44.0384067 5.47917652,43.9173295 C5.52812551,43.8393698 5.57572728,43.7627166 5.62287997,43.68737 C5.65700954,43.6760463 5.69652799,43.6629804 5.74772235,43.6459947 C5.74323162,43.5937312 5.78634265,43.5118517 5.8141852,43.419955 C5.86493048,43.3372044 5.95070348,43.2675197 5.98932378,43.1764941 L5.79846763,43.6202985 C5.92016649,43.338511 6.01941169,43.3790153 6.14605036,42.8659617 C6.24349926,42.7170107 6.33600836,42.5737215 6.43525356,42.4212863 C6.49183679,42.2505588 6.54572559,42.0867997 6.59647087,41.9356711 C6.77295667,41.3429156 7.00737293,40.7484181 7.2970252,40.1439034 C7.3307057,40.0755253 7.36034454,39.9858063 7.38234913,39.9161216 L7.71017263,38.8272982 C7.7847188,38.7397569 7.8637557,38.6487312 7.9409963,38.5577056 C8.18574125,38.2798379 8.12242191,38.0150361 8.2975605,37.6849048 C8.38917145,37.7580737 8.50637958,37.6409164 8.69678665,37.0764704 C8.81489293,36.7241271 9.0070963,36.3286665 9.14316551,35.9610797 C9.18986913,35.8352118 9.19795245,35.7215386 9.21771167,35.5817337 C9.27923471,35.5333899 9.32683648,35.5277281 9.35153551,35.5974128 C9.51410004,35.3439347 9.64792389,35.1618834 9.77501163,34.9310529 C9.86976609,34.7568412 9.97305295,34.5120737 10.0426593,34.3139078 C10.1908535,33.8940576 10.3112051,33.4833534 10.5563992,33.0939902 C10.7126767,32.5264955 11.1060649,31.7556086 11.0782223,31.3405491 C11.076426,31.3065778 11.0746297,31.2726065 11.0773242,31.2355865 C11.1792638,31.1136383 11.2735692,31.0395983 11.3561987,31.041776 C11.4397263,30.871484 11.5223558,30.7033697 11.6045362,30.537433 L11.7275823,30.2883103 L11.7572211,30.2264651 C11.7693461,30.2003333 11.7769804,30.187703 11.7756331,30.1942359 L11.7841655,30.1929293 C11.8061701,30.1907517 11.8016794,30.2116571 11.7949433,30.135875 C11.7944942,30.0892733 11.8200914,30.0958063 11.8380543,30.1027748 C11.9081098,30.121067 11.9786143,30.1402303 12.050466,30.1593936 C12.1429751,30.18117 12.2372805,30.1964136 12.3279933,30.2007689 C12.6374048,30.2142703 13.1848251,30.3444935 13.576417,30.3728029 C13.8000555,30.3880465 14.2158974,30.4529403 14.385198,30.6624299 C14.4821979,30.6123441 14.5212672,30.5927453 14.5800958,30.5631293 C14.6259013,30.6027624 14.6586837,30.6315074 14.6923642,30.6615589 L14.7287391,30.7059829 C15.0067155,30.7800229 15.1809559,30.8575471 15.3210668,30.9363779 L15.831214,29.2421688 C15.3875296,29.1289312 14.4678275,28.9037625 14.3946286,28.8933098" id="Fill-6" fill="#000000"></path>
-                    <path d="M36.9434618,15.006852 C36.7071984,14.9659508 36.4722648,14.9259018 36.2324552,14.8850006 C35.9802341,14.8364305 35.561343,14.6762343 35.5852796,14.8095891 C35.5870527,14.8232228 35.3733961,14.7870082 35.2523832,14.7563324 C34.9806581,14.6800688 34.7036137,14.6033791 34.4159309,14.523281 C34.3405748,14.5335063 34.2603428,14.5181683 34.1876463,14.5326542 C34.1849867,14.5335063 34.1907492,14.5113515 34.1885329,14.5100733 L33.6761116,14.3554158 C33.6007556,14.3311307 33.652175,14.2126878 33.5351515,14.1266249 C33.3157324,13.9660027 32.8640393,13.8121973 32.4783935,13.7734264 C31.9624261,13.7214478 31.3844008,13.5412271 30.8396208,13.4023336 C30.6006978,13.34226 30.3803921,13.2860209 30.1857961,13.2613098 C30.1237382,13.2544929 30.0590207,13.246824 29.9987358,13.239155 C29.9903137,13.215296 30.0550312,13.2054968 30.1126564,13.1952715 C29.7850792,13.1130431 29.5780717,13.0303887 29.4255865,12.9554032 C29.2646791,12.8953296 29.1006689,12.8433511 28.7589069,12.9528469 C28.5718466,13.0180331 28.3985277,13.1245465 28.2562377,13.2570493 C28.1112881,13.3835872 28.0226339,13.5672164 27.9180219,13.7363597 C27.818286,13.9723935 27.7203231,14.2050188 27.6228035,14.43594 C27.5150886,14.7064841 27.3741285,15.1176259 27.3816641,15.2262697 C27.3976218,15.4546345 27.2593213,15.8048506 27.1644613,16.1277994 C27.1338756,16.2377212 27.1019601,16.3480692 27.0682715,16.4665121 C27.0208415,16.5432018 26.9742981,16.6198914 26.9295277,16.6935987 C26.8953959,16.7051022 26.8568313,16.7187359 26.8062984,16.735352 C26.8116176,16.7869045 26.7708367,16.8678547 26.745127,16.9577521 C26.6954807,17.0395544 26.7597549,17.1648142 26.5757975,17.1984724 L26.7575386,16.7609152 C26.4955655,16.9828892 26.5421089,17.0003574 26.4250854,17.5026748 C26.3306687,17.6509415 26.2406847,17.7915392 26.1449381,17.9432144 C26.0917456,18.1102274 26.0398829,18.2712757 25.9924529,18.4195424 C25.825783,19.0011058 25.6028178,19.5865036 25.3240003,20.1812747 C25.2925281,20.2481651 25.2637155,20.3363582 25.2437683,20.405805 L24.9343652,21.4743478 C24.8616687,21.5599846 24.7863127,21.6498819 24.7096268,21.7406313 C24.4729201,22.015436 24.5389675,22.2731985 24.3709678,22.5987036 C24.2787674,22.5292568 24.1648468,22.6438653 23.9848788,23.1985873 C23.8727312,23.5449689 23.689217,23.93353 23.5597819,24.2961017 C23.5154548,24.4196573 23.5083625,24.5308573 23.4910749,24.6671945 C23.4312333,24.7166167 23.3824735,24.7217294 23.3585369,24.6539868 C23.2011757,24.9040804 23.0721839,25.083449 22.9502844,25.3109617 C22.8594138,25.4826614 22.7592346,25.7229557 22.6936305,25.9180883 C22.5531136,26.3305083 22.4400795,26.7344072 22.2029295,27.1174296 C22.0570934,27.6747079 21.6789833,28.4339356 21.7117853,28.8395388 C21.7140017,28.8723449 21.7153315,28.9051511 21.7140017,28.9426438 C21.614709,29.063217 21.5238384,29.1364982 21.4418333,29.1356461 C21.2813692,29.4718025 21.124008,29.7956034 20.9693065,30.1202563 C20.9453698,30.1701046 20.9475862,30.1607314 20.9475862,30.1607314 L20.9396073,30.1607314 C20.9369477,30.1615835 20.9356179,30.1615835 20.9356179,30.1641399 C20.9365044,30.1684004 20.9444833,30.1820341 20.9551218,30.2199529 C20.9675334,30.2796004 20.9302986,30.2663928 20.9094649,30.2578717 C20.8939504,30.2544633 20.9125678,30.2612801 20.8655811,30.2536111 C20.7915548,30.2386993 20.7188584,30.228474 20.6470485,30.2250655 C20.3416348,30.2122839 19.8469444,29.9374793 19.4595256,29.9102118 C19.2374469,29.8952999 18.8283078,29.8318179 18.6611946,29.6277382 C18.5650048,29.6763083 18.525997,29.6954807 18.4679285,29.7240263 C18.4240447,29.6856815 18.3907993,29.6571359 18.3571107,29.6285903 L18.3212058,29.5842807 C17.5401624,29.380201 17.5441518,29.285617 16.8353616,29.0772768 C16.7453775,29.0500093 16.6137261,28.9924921 16.5782644,28.9907879 C16.3920906,28.9818407 16.0888933,28.7811694 15.8783396,28.7402683 C15.8699174,28.7368598 15.8663712,28.7355817 15.8606087,28.7325993 L15.35395,30.403156 C15.4692005,30.4610993 15.6066145,30.5211729 15.7719545,30.5859331 C16.1740013,30.7418687 16.4882804,30.815576 17.0547807,30.981737 C17.166485,31.0145431 18.5149152,31.4908712 18.6075588,31.5040789 C18.8442655,31.5385892 19.0805289,31.5748038 19.3212251,31.6105923 C19.574776,31.6536237 19.99677,31.8048728 19.9701737,31.671944 C19.9675141,31.6578843 20.1829438,31.6898383 20.3044,31.71881 C20.4546689,31.7567287 20.6044945,31.7950736 20.7649586,31.8364008 C21.0349106,31.8909357 21.3199338,31.9258721 21.5952051,31.8227671 C21.6851891,31.7597111 21.7942337,31.6987854 21.8562916,31.6140007 C21.8580647,31.6105923 21.8735792,31.6297647 21.8757956,31.6272084 C21.8757956,31.6272084 22.0522174,31.5168605 22.1639217,31.3511256 C22.2250931,31.2735838 22.2574519,31.1696267 22.2938001,31.1031623 C22.3274887,31.0332895 22.3496522,30.9872757 22.3496522,30.9872757 C22.5336097,30.9587301 22.5216414,30.9327408 22.6462005,30.7814917 C22.8288281,30.5838028 23.0220943,30.1624356 23.0912445,29.7947513 C23.1834449,29.3039374 23.4139458,28.7637012 23.5983465,28.2511586 C23.6781353,28.0279064 23.7534913,27.8208443 23.7929424,27.636363 C23.803581,27.5822542 23.8155493,27.5272933 23.8253012,27.4761668 C23.8487946,27.4800013 23.862536,27.5064166 23.8669687,27.5707507 C24.0389578,27.1374541 24.1573112,27.2426894 24.322208,26.8762831 C24.4937538,26.4953911 24.6759382,26.1115167 24.8275369,25.7272162 C24.9343652,25.4553939 25.0762119,25.0455302 25.068233,24.9368865 C25.0522752,24.7080957 25.1905758,24.3578795 25.2854357,24.0349307 C25.316908,23.9245828 25.3483802,23.815087 25.3820688,23.6966441 C25.4290555,23.6195283 25.475599,23.5432647 25.5203694,23.4695574 C25.5540579,23.4576279 25.5935091,23.4448463 25.6435987,23.4273781 C25.6382794,23.3762517 25.6795036,23.2953014 25.7052133,23.2054041 C25.755303,23.1236018 25.8381946,23.0554332 25.8754294,22.9651098 L25.6936883,23.402667 C25.809382,23.1240278 25.9077882,23.1627987 26.025255,22.6604814 C26.1196717,22.5117886 26.2087691,22.3716169 26.3058455,22.2199418 C26.3585947,22.0525027 26.4100142,21.8914544 26.4578874,21.7436137 C26.6254438,21.1620504 26.8470793,20.5762265 27.1267833,19.9818815 C27.157369,19.9137129 27.1852951,19.8267979 27.2061288,19.7569251 L27.5159752,18.6892345 C27.5882284,18.6023195 27.6635844,18.5124222 27.7393838,18.4229509 C27.9765337,18.146868 27.9113729,17.8895316 28.0793726,17.5640265 C28.1720162,17.6338993 28.2859368,17.5188648 28.464575,16.9641429 C28.5771659,16.6181872 28.76068,16.2292002 28.8905584,15.8666284 C28.9344422,15.7426468 28.9410913,15.6318728 28.9583789,15.4955356 C29.019107,15.4473915 29.066537,15.4418528 29.0918034,15.5087433 C29.2491646,15.2590758 29.3781565,15.0792811 29.4996127,14.8521945 C29.5585677,14.7328994 29.5403936,14.7870082 29.5465994,14.7763569 C29.5465994,14.7763569 29.5439398,14.7742266 29.5390638,14.7674098 C29.5288686,14.7524979 29.5288686,14.7260826 29.5408369,14.721396 C29.5767419,14.7239523 29.4694703,14.6971109 29.7664618,14.8232228 C30.3560122,14.9220673 31.1711875,15.2283999 31.589192,15.1666221 C31.6228806,15.1610834 31.6583423,15.157675 31.6969068,15.1568229 C31.8290016,15.2424597 31.9123365,15.3246881 31.9172125,15.403508 C32.2771485,15.5321762 32.6255595,15.6578621 32.9739705,15.7826958 C33.2771678,15.8926177 33.6136104,16.0097825 33.8410084,16.0097825 C34.1269182,16.0097825 34.5161101,16.2185488 34.8747163,16.2411297 C35.1796867,16.2615802 35.7169311,16.4004738 36.1030201,16.4362623 C36.3242123,16.4562868 36.7315783,16.5282899 36.8942588,16.7362041 C36.9908918,16.6901903 37.0307862,16.67187 37.089298,16.6441765 C37.1327385,16.6842256 37.1659839,16.7131972 37.1978994,16.7425949 L37.2324745,16.7873306 C37.5055294,16.8648723 37.6748589,16.9449704 37.8113864,17.0250685 L38.35395,15.3779448 C37.9186579,15.2590758 37.015715,15.0192075 36.9434618,15.006852" id="Fill-8" fill="#000000"></path>
-                    <g id="Group-12" transform="translate(37.063355, 0.797862)">
-                        <mask id="mask-4" fill="white">
-                            <use xlink:href="#path-3"></use>
-                        </mask>
-                        <g id="Clip-11"></g>
-                        <path d="M11.4526714,12.1706051 C11.5156714,11.9435026 11.5791,11.7168359 11.6425286,11.4875538 C11.7145286,11.244759 11.9155286,10.8511436 11.7801,10.8607333 C11.7659571,10.8616051 11.8225286,10.6562974 11.8645286,10.5407846 C11.9665286,10.2818615 12.0698143,10.0190154 12.1773857,9.74527179 C12.1748143,9.67073333 12.1975286,9.59445128 12.1898143,9.52165641 C12.1898143,9.52165641 12.2116714,9.52688718 12.2125286,9.52427179 L12.4173857,9.03824615 C12.4469571,8.96763077 12.5613857,9.02909231 12.6582429,8.92360513 C12.8399571,8.72570769 13.0371,8.2989641 13.1125286,7.9249641 C13.2141,7.42542564 13.4498143,6.87706667 13.6405286,6.35922051 C13.7245286,6.13168205 13.8012429,5.92157949 13.8441,5.73327179 C13.8561,5.67922051 13.8685286,5.62298974 13.8796714,5.57024615 C13.9015286,5.57591282 13.9148143,5.60381026 13.9169571,5.66832308 C14.0952429,5.22937436 14.2066714,5.3409641 14.3742429,4.96914359 C14.4629571,4.77342564 14.5521,4.5759641 14.6416714,4.37981026 L14.8336714,3.83798974 L14.9262429,3.56773333 C14.9356714,3.47924615 14.9455286,3.39293846 14.9335286,3.30488718 C14.9215286,3.05468205 14.8041,2.74345128 14.6198143,2.54816923 C14.4561,2.33937436 14.2015286,2.27660513 14.1171,2.25001538 C14.0202429,2.22778462 13.9143857,2.19465641 13.8029571,2.15411795 L13.6306714,2.08829744 C13.5728143,2.06475897 13.5501,2.06345128 13.5055286,2.04819487 C13.3473857,1.99719487 13.1828143,1.94357949 13.0203857,1.88952821 C12.9106714,1.8568359 12.8009571,1.82327179 12.6818143,1.78578462 C12.6055286,1.7378359 12.5301,1.69032308 12.4568143,1.64498974 C12.4461,1.61055385 12.4336714,1.57219487 12.4173857,1.52250256 C12.3655286,1.52642564 12.2853857,1.48457949 12.1953857,1.45711795 C12.1148143,1.40611795 11.9858143,1.46627179 11.9575286,1.28406667 L12.3929571,1.47411795 C12.1756714,1.2108359 12.1568143,1.25660513 11.6545286,1.12888718 C11.5075286,1.03255385 11.3691,0.940579487 11.2186714,0.842938462 C11.0515286,0.785835897 10.8908143,0.731348718 10.7433857,0.681220513 C10.4519571,0.591861538 10.1613857,0.488553846 9.8691,0.372169231 C9.77095714,0.325964103 9.45424286,0.220476923 9.20867143,0.129810256 C8.94895714,0.0108102564 8.6931,-0.0192666667 8.42738571,0.0535282051 C8.30824286,0.0827333333 8.17067143,0.154220513 8.08024286,0.230502564 C7.97224286,0.309835897 7.88695714,0.412271795 7.81238571,0.518194872 C7.75152857,0.640246154 7.69067143,0.761861538 7.61438571,0.873015385 L7.52781429,1.13411795 L7.48538571,1.26227179 L7.46138571,1.3468359 L7.37867143,1.65457949 C7.30624286,1.74088718 7.23081429,1.83024615 7.15538571,1.92134872 C6.91881429,2.19814359 6.9771,2.46273333 6.80567143,2.7914 C6.71824286,2.71729744 6.60552857,2.83237436 6.4191,3.39511795 C6.30167143,3.74775897 6.11481429,4.14093846 5.98067143,4.5084 C5.93481429,4.63350256 5.92538571,4.74770769 5.90524286,4.88588718 C5.84567143,4.93470769 5.79938571,4.93863077 5.77752857,4.86932308 C5.61938571,5.12170769 5.49038571,5.30173333 5.36695714,5.53145128 C5.27438571,5.70406667 5.17152857,5.94860513 5.10381429,6.14606667 C4.95767143,6.5649641 4.8381,6.97557949 4.60024286,7.36134872 C4.4451,7.92801538 4.06067143,8.69475897 4.08338571,9.11016923 C4.08424286,9.14460513 4.08595714,9.17860513 4.08338571,9.21609231 C3.98395714,9.3368359 3.8931,9.40963077 3.8151,9.40745128 C3.65138571,9.74657949 3.49281429,10.0748103 3.33338571,10.403041 C3.19495714,10.6889897 3.04538571,11.006759 3.02395714,11.2286308 C2.99695714,11.5076051 2.75095714,11.8680923 2.69395714,12.2172462 C2.64381429,12.5132205 2.31295714,12.9630667 2.24095714,13.3370667 C2.19895714,13.5519641 2.08795714,13.9442718 1.8651,14.0815795 C1.90195714,14.1818359 1.91567143,14.2210667 1.93795714,14.2816564 C1.8951,14.3208872 1.86252857,14.3487846 1.82952857,14.3784256 L1.78152857,14.4071949 C1.74295714,14.4996051 1.70995714,14.5793744 1.6791,14.6517333 C1.66152857,14.6900923 1.66324286,14.6796308 1.65424286,14.6927077 C1.64138571,14.7062205 1.6281,14.7114513 1.61352857,14.7123231 C1.5831,14.7114513 1.55267143,14.6940154 1.52952857,14.6822462 C1.52181429,14.6783231 1.51667143,14.6552205 1.51452857,14.661759 C1.54967143,14.6953231 1.39667143,14.6286308 1.28181429,14.5693487 C1.16095714,14.508759 1.03881429,14.4442462 0.937242857,14.4202718 C0.929528571,14.4167846 0.9261,14.415041 0.920528571,14.4137333 L0.393385714,16.1102462 C0.503528571,16.1725795 0.634671429,16.2375282 0.793242857,16.3064 C0.916671429,16.3778872 1.33752857,16.4877333 1.66881429,16.5744769 C2.00738571,16.5958359 2.42995714,16.5051692 2.78567143,16.1442462 C2.80195714,16.1255026 2.84095714,16.0823487 2.89624286,16.0178359 C2.9451,15.9467846 2.99524286,15.8378103 3.06124286,15.7205538 C3.12252857,15.6046051 3.19238571,15.4742718 3.26481429,15.3356564 C3.30467143,15.2554513 3.34667143,15.1704513 3.38867143,15.0854513 C3.55495714,14.7471949 3.71952857,14.4102462 3.73152857,14.3662205 C3.79538571,14.1391179 3.85795714,13.9128872 3.92138571,13.6827333 C3.99467143,13.4403744 4.19481429,13.0476308 4.05852857,13.0559128 C4.04481429,13.0572205 4.10181429,12.8514769 4.14424286,12.7364 C4.24581429,12.4766051 4.34995714,12.2155026 4.45752857,11.941759 C4.4541,11.8667846 4.47767143,11.7905026 4.46952857,11.7168359 L4.49352857,11.7211949 L4.69752857,11.2351692 C4.86852857,11.2247077 4.84152857,11.2247077 4.93967143,11.1196564 C5.12052857,10.9226308 5.31767143,10.4945795 5.3931,10.1205795 C5.49424286,9.62147692 5.72952857,9.07398974 5.92067143,8.55527179 C6.00338571,8.32860513 6.08138571,8.11806667 6.12424286,7.92975897 C6.13624286,7.87527179 6.14781429,7.81904103 6.15938571,7.76629744 C6.18167143,7.77109231 6.19452857,7.79942564 6.19667143,7.86481026 C6.37495714,7.42498974 6.48595714,7.53701538 6.65481429,7.16606667 C6.82924286,6.77942564 7.01481429,6.39191282 7.17124286,6.00222051 C7.28181429,5.72716923 7.42795714,5.31175897 7.42324286,5.20016923 C7.41338571,4.96522051 7.5561,4.6104 7.6551,4.28216923 C7.68767143,4.17057949 7.7211,4.05855385 7.7571,3.93824615 C7.80381429,3.86065641 7.85095714,3.78393846 7.89595714,3.7094 C7.92895714,3.69893846 7.9671,3.68586154 8.01638571,3.66973333 C8.01252857,3.61698974 8.0541,3.53460513 8.08195714,3.44393846 C8.13167143,3.36198974 8.21352857,3.29311795 8.25167143,3.20157949 L8.06524286,3.64488718 C8.18352857,3.36329744 8.27867143,3.40514359 8.40424286,2.89470769 C8.49852857,2.74475897 8.58852857,2.6039641 8.68538571,2.45009231 C8.74067143,2.2809641 8.7951,2.11793846 8.84438571,1.96668205 L8.86752857,1.88778462 L8.86667143,1.86947692 L8.86667143,1.83198974 C8.86624286,1.77314359 8.88638571,1.69337436 8.95238571,1.68160513 C9.02352857,1.67157949 9.05352857,1.71037436 9.14524286,1.75657949 C9.21252857,1.78970769 9.30038571,1.81978462 9.36938571,1.84070769 L10.4369571,2.17155385 C10.5222429,2.24522051 10.6109571,2.32150256 10.6996714,2.39822051 C10.9709571,2.6384 11.2306714,2.57998974 11.5551,2.75391282 C11.4826714,2.8419641 11.5953857,2.95704103 12.1486714,3.14752821 C12.3213857,3.20724615 12.5043857,3.28352821 12.6903857,3.36416923 L12.9676714,3.48186154 C13.0332429,3.51019487 13.0015286,3.49537436 13.0225286,3.50234872 L13.0499571,3.50845128 C13.0739571,3.51368205 13.1219571,3.48970769 13.1832429,3.4879641 C13.1626714,3.52370769 13.1215286,3.54768205 13.0688143,3.57252821 C13.0482429,3.63442564 12.9749571,3.66145128 12.9496714,3.66014359 C12.9398143,3.66101538 12.9359571,3.65927179 12.9359571,3.65927179 C12.9111,3.71593846 12.8532429,3.8628359 12.8236714,3.95045128 C12.6779571,4.36934872 12.5583857,4.7799641 12.3201,5.16616923 C12.1653857,5.7324 11.7809571,6.50001538 11.8028143,6.91455385 C11.8045286,6.94855385 11.8058143,6.98342564 11.8036714,7.02047692 C11.7051,7.14165641 11.6142429,7.21532308 11.5353857,7.2114 C11.3716714,7.5509641 11.2126714,7.87963077 11.0541,8.20786154 C10.9156714,8.49381026 10.7665286,8.81070769 10.7455286,9.03345128 C10.7172429,9.31242564 10.4716714,9.67334872 10.4138143,10.0216308 C10.3653857,10.318041 10.1738143,10.8289128 10.1026714,11.2029128 C10.0611,11.4178103 9.94967143,11.8105538 9.72681429,11.9474256 C9.76367143,12.0476821 9.77781429,12.0877846 9.8001,12.1479385 C9.75595714,12.1867333 9.72381429,12.2155026 9.69081429,12.2442718 L9.64324286,12.273041 C9.5391,12.5324 9.44352857,12.6901949 9.34967143,12.8161692 L10.9465286,13.5136051 C11.1072429,13.0990667 11.4333857,12.2399128 11.4526714,12.1706051" id="Fill-10" fill="#000000" mask="url(#mask-4)"></path>
-                    </g>
-                    <path d="M28.9399052,31.5750251 C28.9981283,31.3455133 29.0554888,31.1160015 29.1150058,30.8825402 C29.1814233,30.6376691 29.3746378,30.2356943 29.2370587,30.2492983 C29.2236889,30.2497371 29.2758741,30.0417283 29.3159834,29.9245588 C29.411728,29.6621343 29.5091979,29.3948825 29.6114118,29.1166598 C29.6058051,29.0416186 29.6282318,28.9643833 29.6183123,28.8906587 C29.6170184,28.8884645 29.6398764,28.8959247 29.6411703,28.8932917 L29.8352473,28.3996 C29.8632807,28.326753 29.9792956,28.385996 30.0754716,28.2771644 C30.2531599,28.073544 30.4407677,27.6390953 30.5084791,27.2603789 C30.5981858,26.7557163 30.82159,26.1992708 31.0010035,25.6713498 C31.0794969,25.4413992 31.1523836,25.2281244 31.191199,25.0381079 C31.2015498,24.9823756 31.2127631,24.9257656 31.2226826,24.8726663 C31.244678,24.8766159 31.2589103,24.9051403 31.2632232,24.9700882 C31.4301294,24.5242297 31.5461444,24.6326225 31.7052876,24.2552226 C31.8721938,23.8624634 32.0494509,23.4670712 32.1973807,23.071679 C32.3021823,22.7917009 32.4388988,22.3695396 32.431567,22.2576362 C32.423804,22.1400278 32.4535624,21.9903844 32.497122,21.82977 L32.5316245,21.7064568 C32.5406815,21.6726663 32.5367999,21.670911 32.5411128,21.652041 L32.5549138,21.5511085 C32.5609517,21.5032752 32.5730276,21.4510536 32.6062364,21.4067311 C32.643758,21.4001485 32.6817108,21.4001485 32.7175072,21.4102418 C32.733896,21.4378885 32.7537349,21.4694848 32.7731427,21.514685 C32.7791806,21.4870383 32.8080765,21.495815 32.8330909,21.4944985 C32.8524986,21.5160015 32.9064089,21.4212127 32.8995084,21.5827047 C32.8995084,21.5827047 32.7929816,21.5467201 32.7916878,21.5519862 C32.8412853,21.6428254 32.8412853,21.6752994 32.8568114,21.6752994 C32.8641432,21.676177 32.8719063,21.6687168 32.8878638,21.6590624 C32.9133094,21.6524798 33.0487321,21.6752994 33.1660409,21.6915363 C33.3221651,21.77316 33.4705262,21.851273 33.6301007,21.9342132 C33.8021823,21.9745863 33.9690886,22.0132039 34.1230564,22.0487497 C34.7216763,22.1681134 35.3280593,22.3440871 35.9482433,22.5740377 C36.0189736,22.5999291 36.1099742,22.6209933 36.1807045,22.6345972 L37.2817683,22.858843 C37.3740627,22.9251074 37.4693761,22.9918106 37.5672772,23.0598304 C37.8627056,23.2739829 38.1171622,23.187532 38.4583065,23.330154 C38.3944768,23.4266982 38.5191174,23.529386 39.091429,23.664109 C39.4485308,23.7492434 39.8556613,23.9006422 40.2304457,24.0002582 C40.3581053,24.0344875 40.4715325,24.033171 40.6099742,24.0393147 C40.6638845,24.0959247 40.6720788,24.1424414 40.6065239,24.1718435 C40.873919,24.3087607 41.0503134,24.4193476 41.3090829,24.5264239 C41.4893589,24.5808397 41.7058626,24.6400827 41.9245228,24.695815 C42.1440455,24.7572522 42.3592554,24.7133685 42.5438442,24.6558808 C42.9307045,24.5286181 43.2688298,24.2692654 43.4327171,23.8879159 C43.5219926,23.7075539 43.6091116,23.5302637 43.6996809,23.3459521 C43.7466907,23.246775 43.7988758,23.1480366 43.8588241,23.0510536 C44.0153796,22.4810043 44.4018086,21.7077733 44.3798132,21.2900004 C44.378088,21.2557711 44.3767942,21.2206642 44.3798132,21.1842407 C44.4785768,21.0618051 44.57044,20.9880805 44.6489333,20.9911524 C44.814977,20.6501759 44.9741202,20.3197316 45.1332634,19.9888485 C45.2729989,19.7000937 45.4230852,19.3810591 45.4450806,19.157691 C45.4722513,18.8763965 45.7193761,18.513917 45.7775992,18.1619697 C45.8263341,17.8644382 46.1610092,17.4115583 46.2334647,17.0341584 C46.2744365,16.8182506 46.3865699,16.423736 46.6116993,16.2850635 C46.5741777,16.1850086 46.5595141,16.1446356 46.5370875,16.0836373 C46.5810783,16.0450196 46.6138557,16.0160564 46.6462019,15.9862154 L46.6949368,15.9568134 C46.9920903,15.2138622 47.0861099,15.2296603 47.3793819,14.5595561 C47.4160409,14.473544 47.4902214,14.3511085 47.4958281,14.3177569 C47.5281743,14.1356395 47.7640857,13.8626828 47.8305032,13.6608177 C47.834816,13.652041 47.8365412,13.649408 47.8395601,13.6445808 L46.2205262,12.9384919 C46.1493646,13.0446905 46.0725964,13.1719532 45.988065,13.3268627 C45.7836372,13.7016296 45.6727976,14.0009165 45.4394739,14.5376142 C45.3941892,14.643374 44.7563226,15.9102966 44.7330334,15.9989417 C44.6692036,16.227137 44.6053738,16.4553323 44.541544,16.6870383 C44.4686573,16.9305928 44.2663859,17.3273016 44.4031024,17.3176471 C44.4173347,17.3172083 44.3599742,17.5239006 44.3177085,17.6401924 C44.2150633,17.899984 44.1111243,18.1641639 44.0028724,18.4397536 C44.0071852,18.5152335 43.9817395,18.5924689 43.9899339,18.6653158 C43.9899339,18.6688265 43.9675072,18.6600498 43.9666447,18.662244 L43.7596291,19.1511085 C43.58841,19.1616406 43.6160121,19.1616406 43.518111,19.2678391 C43.3356786,19.4666323 43.13772,19.8966927 43.0605205,20.2732149 C42.9591691,20.7761222 42.7223951,21.3264239 42.5309057,21.8503954 C42.4459431,22.0781518 42.3683123,22.2896713 42.3247528,22.4788101 C42.3135394,22.5349812 42.3010322,22.5907135 42.2902502,22.6429351 C42.2682548,22.6381079 42.2544538,22.6100224 42.2522973,22.5446356 C42.2298707,22.6003679 42.2087378,22.6464458 42.1884676,22.6868188 C42.1651783,22.7333356 42.1660409,22.7162209 42.1535337,22.7302637 C42.134126,22.7425512 42.1134244,22.7451842 42.0935854,22.7443065 C42.0526136,22.7425512 42.02113,22.729386 41.9939592,22.7465007 C41.9642007,22.7649318 41.9236602,22.7627377 41.8951956,22.7447453 L41.8520673,22.7249977 L41.5825159,22.6394244 C41.3013198,22.5538512 40.8778005,22.4458973 40.7682548,22.4621343 C40.5375187,22.4959247 40.1752416,22.3853378 39.8422916,22.3160015 C39.7284331,22.2944985 39.6154371,22.271679 39.4929529,22.2471041 C39.4118718,22.2067311 39.3325159,22.1667969 39.2540225,22.1277404 C39.2397902,22.0952665 39.2234014,22.0579653 39.2022686,22.0092544 C39.150946,22.0189088 39.0668459,21.9842407 38.9745515,21.9653707 C38.8878638,21.9228035 38.8123893,21.846007 38.7188011,21.8161661 L39.173804,21.9622988 C38.8848448,21.8692654 38.9163284,21.7687717 38.400946,21.6910975 C38.2439592,21.6094738 38.0960294,21.5322385 37.9355923,21.4488594 C37.7635107,21.4089253 37.5966044,21.3703076 37.4439305,21.334323 C36.844448,21.2145204 36.2372025,21.0394244 35.617881,20.8103515 C35.5471507,20.7840213 35.4561501,20.7625182 35.3854198,20.7475978 L34.2847873,20.5237909 C34.1920616,20.4597207 34.0945918,20.3912621 33.9988471,20.3236812 C33.8509172,20.2166049 33.7133382,20.1850086 33.5697211,20.1617503 C33.4938155,20.1494628 33.4144595,20.1358589 33.3351036,20.1222549 C33.2057188,20.0985577 33.07159,20.0678391 32.9223663,20.0213224 C32.9521248,19.9730503 32.9068402,19.9186345 32.7196636,19.8462264 C32.5462881,19.796199 32.184011,19.7795232 31.7704112,20.0941694 C31.6431829,20.19203 31.5306182,20.3131491 31.4430679,20.458843 C31.3684561,20.6212127 31.2934129,20.7870931 31.2170759,20.9538512 C31.1230564,21.1526444 31.1062364,21.2105709 31.0669897,21.3136976 C31.0316245,21.4093641 30.9975532,21.5041529 30.9639132,21.5976252 C30.9212163,21.7253268 30.9138845,21.8394244 30.8970644,21.9789746 C30.83841,22.0298797 30.7926941,22.0355846 30.7685423,21.9662484 C30.6154371,22.2238457 30.4899339,22.4081573 30.3709,22.6429351 C30.2816245,22.8193476 30.1854486,23.0672906 30.1216188,23.2674003 C29.9853336,23.6930723 29.8749253,24.1090898 29.6441892,24.5040432 C29.5022973,25.0780421 29.1339822,25.8600498 29.1658971,26.2773838 C29.1680535,26.3111743 29.1702099,26.3458424 29.1684848,26.3827047 C29.0731714,26.5068956 28.983896,26.5832533 28.9041087,26.5823756 C28.7479845,26.9277404 28.5948793,27.2625731 28.4439305,27.5965281 C28.3110955,27.8883548 28.1687723,28.2104612 28.1523836,28.4355846 C28.131682,28.717318 27.8927516,29.0855023 27.8431542,29.4374497 C27.8008885,29.7380531 27.6210437,30.2567585 27.5576452,30.6359137 C27.5214175,30.8526993 27.4196349,31.2498468 27.1979558,31.3937854 C27.2372025,31.4934014 27.2527286,31.5328967 27.2768804,31.5934563 C27.2337522,31.6333904 27.2031312,31.6627925 27.1694911,31.6935111 L27.1220501,31.7242297 C27.0237177,31.9870931 26.930992,32.1494628 26.8395601,32.2780421 L28.4637695,32.9384919 C28.6147183,32.5185248 28.9222226,31.6456779 28.9399052,31.5750251" id="Fill-13" fill="#000000"></path>
-                    <path d="M9.25875054,51.6818507 C9.31985542,51.452102 9.38226969,51.2219132 9.44424749,50.9895237 C9.51495456,50.7439302 9.7148548,50.3442907 9.57693236,50.355294 C9.56252907,50.3570546 9.61795992,50.1475519 9.65986041,50.0313572 C9.76068345,49.7694788 9.86412528,49.5027591 9.97018588,49.225036 C9.96582125,49.1493334 9.98895381,49.0723104 9.97978808,48.9979281 C9.97935162,48.9952873 10.0024842,49.0032097 10.0024842,49.0032097 L10.2058761,48.5085017 C10.2359921,48.4363202 10.3529643,48.4970583 10.4507321,48.3896662 C10.6336103,48.1885261 10.8295823,47.7541162 10.9024717,47.3769234 C11.0002395,46.8703319 11.233311,46.315766 11.4227361,45.7884883 C11.5047912,45.5591798 11.5816088,45.3457159 11.6226363,45.1555791 C11.6339844,45.1001225 11.6466418,45.0446659 11.6571169,44.9909698 C11.679813,44.994931 11.6937798,45.0230994 11.6963986,45.0891192 C11.8722934,44.6441461 11.9875197,44.7546192 12.1542487,44.3783066 C12.3279612,43.9857092 12.5130217,43.5926717 12.6679662,43.1983138 C12.777082,42.9188302 12.9215514,42.4971841 12.9158774,42.3849505 C12.9027835,42.1472794 13.0437611,41.788132 13.1410925,41.4558327 C13.1733908,41.343159 13.206562,41.229605 13.2410426,41.1076886 C13.2890536,41.0284649 13.3353187,40.9501214 13.3807109,40.8744188 C13.4143186,40.8629754 13.4527273,40.8497714 13.5033571,40.8326063 C13.4981195,40.7793504 13.5391471,40.6966056 13.5648984,40.6037378 C13.6164011,40.520553 13.5539869,40.3898339 13.7355556,40.3577043 L13.5500587,40.8070787 C13.8119367,40.5812911 13.7656716,40.5623655 13.8874449,40.0452108 C13.9825939,39.8929253 14.0729418,39.7490022 14.1698367,39.5940759 C14.2252676,39.4219844 14.2776432,39.256495 14.3265271,39.1037693 C14.4984937,38.5060705 14.7254546,37.9035304 15.0087194,37.2935079 C15.0248685,37.2582974 15.0397083,37.2186856 15.0541116,37.1790737 L15.0720066,37.1200961 L15.0720066,37.1046915 C15.0562939,37.0078625 15.0986308,36.8278487 15.2435367,36.8146447 C15.2740891,36.8454539 15.299404,36.8806645 15.3194813,36.9114737 L15.3404316,36.9506454 C15.3570172,36.9700112 15.3356305,36.9735322 15.3818956,36.9942184 C15.418122,37.0113836 15.454785,37.0254678 15.4910114,37.0369112 C15.5630279,37.0593579 15.6341714,37.0716816 15.7070608,37.0818046 C15.8524031,37.1016105 16.0042924,37.1126138 16.1775684,37.1795138 C16.1155905,37.2776632 16.2434743,37.3780132 16.82528,37.4999297 C17.1901634,37.5773928 17.6039307,37.7195553 17.9853998,37.8115428 C18.1159023,37.8432323 18.2298193,37.838831 18.3707969,37.8410317 C18.4262278,37.8978086 18.4362664,37.9422619 18.3694875,37.9739514 C18.6396584,38.1042304 18.8343211,38.2142633 19.079177,38.3124126 C19.2616187,38.3850344 19.5173863,38.4598567 19.7216512,38.5056304 C20.1554958,38.6028995 20.5784288,38.674641 20.9921961,38.8696193 C21.5735654,38.958966 22.383205,39.2569351 22.7934806,39.1838732 C22.8275247,39.1785917 22.8611324,39.1724298 22.8986682,39.1706693 C23.0309166,39.256495 23.1147176,39.34012 23.122574,39.4206641 C23.2997781,39.4831627 23.4761093,39.5452213 23.6506947,39.6063996 C23.6773189,39.6191634 23.772468,39.6424904 23.8571419,39.6640568 L24.1120365,39.7300766 C24.2822572,39.7705687 24.457279,39.8343878 24.6209528,39.8181029 C25.2245817,39.80842 25.7906747,39.3352785 25.8731663,38.9171535 C25.888879,38.8784219 25.9015364,38.8423311 25.9159397,38.80536 C25.9486745,38.6852041 26.0049783,38.5267567 26.0455693,38.4167238 C26.0743759,38.3414613 26.1062378,38.263558 26.1367902,38.1825738 C26.2013868,38.0219258 26.2668563,37.8551159 26.2895524,37.6909468 C26.3314529,37.3898968 26.658364,36.9286388 26.7225241,36.547925 C26.7596235,36.3304999 26.8630653,35.932621 27.0874075,35.7878177 C27.0476893,35.6879078 27.0315402,35.6482959 27.0075347,35.5879979 C27.051181,35.5479459 27.0830428,35.5175768 27.1153411,35.4872078 L27.164225,35.4568387 C27.4461804,34.7042136 27.5430753,34.7182978 27.8224118,34.0382945 C27.8573289,33.9529089 27.9289089,33.8274714 27.9345829,33.7931412 C27.9625166,33.6091661 28.1947151,33.3301227 28.2566929,33.1259016 C28.261494,33.1184194 28.2632399,33.1140181 28.2658587,33.1096167 L26.6112259,32.441497 C26.5409553,32.5510897 26.4663201,32.6796082 26.3851379,32.8371753 C26.1878564,33.2178891 26.0822323,33.5206997 25.8596359,34.0651425 C25.8155531,34.1725346 25.2014491,35.4585992 25.1800624,35.5475058 C25.1207034,35.7785749 25.0617808,36.0087637 25.0032948,36.2420335 C24.93477,36.4880671 24.7405438,36.8912276 24.8784662,36.8780237 C24.892433,36.8771434 24.8400574,37.0857658 24.7994663,37.203281 C24.7165383,37.4299487 24.6331738,37.6588172 24.5454446,37.8995692 L24.5502457,37.9092521 C24.5637761,37.9449027 24.5620303,37.9757119 24.5799253,38.0219258 C24.5781794,38.0206054 24.5607209,38.0078416 24.5607209,38.0078416 C24.5607209,38.0078416 24.5406435,38.0571363 24.5004889,38.089706 C24.4625166,38.1249166 24.4123233,38.1390008 24.4123233,38.1390008 C24.3254671,37.9757119 24.3411798,38.0034402 24.2966605,37.949304 C24.2595611,37.8951679 24.2390473,37.8568764 24.2163512,37.8449929 C24.04002,37.7868955 23.8248436,37.7389211 23.6362914,37.7248369 C23.1273751,37.6825843 22.5547351,37.5100527 22.0152663,37.3775731 C21.7791396,37.3212362 21.5613444,37.2675402 21.3684276,37.246854 C21.3116873,37.2411323 21.2562565,37.2358507 21.2016985,37.2314494 C21.2043173,37.2076823 21.2300687,37.1905171 21.2946652,37.1817145 C20.8359422,37.0527559 20.93371,36.925998 20.5439482,36.7992401 C20.1389102,36.6689612 19.7303804,36.5272388 19.324033,36.4145651 C19.0368401,36.3357815 18.6056142,36.2380723 18.4956255,36.2565578 C18.2634269,36.2944092 17.8919966,36.1931789 17.5550468,36.1320006 C17.439384,36.1113144 17.3245942,36.0915085 17.2002021,36.069942 C17.1177105,36.0307703 17.0347825,35.992919 16.9566555,35.9563881 C16.9405064,35.9238183 16.9234843,35.8868473 16.9012247,35.8384328 C16.8492855,35.8485558 16.7628658,35.815546 16.6694626,35.7997012 C16.5804241,35.7583288 16.50317,35.6830663 16.4071481,35.655338 L16.8702358,35.7913387 C16.5769324,35.7046328 16.6061754,35.6038426 16.0828558,35.5378229 C16.0073476,35.5008518 15.9335853,35.4647611 15.8602595,35.4286703 C15.835381,35.414586 15.7633646,35.3868578 15.6887293,35.3569288 C15.6171493,35.3296406 15.5451329,35.3001518 15.471807,35.2715433 L15.4176856,35.2561387 C15.0955756,35.1879183 14.7948523,35.2226887 14.5473776,35.3384433 C14.3055768,35.4458354 14.0917098,35.6258492 13.9415664,35.8415137 C13.8691134,35.9533071 13.8259036,36.0941493 13.7656716,36.2173861 L13.6805612,36.4088434 C13.6500088,36.4757434 13.6225116,36.5378019 13.6142188,36.5655302 C13.5003019,36.8665803 13.373291,37.1693908 13.2314404,37.4752823 C13.1995786,37.544383 13.1698991,37.6346099 13.1498217,37.7063514 L12.830767,38.80536 C12.7574412,38.8938265 12.6828059,38.9862541 12.6068613,39.0778015 C12.3694252,39.3594858 12.4305301,39.6262055 12.2598729,39.9598253 C12.1703979,39.8867634 12.0569174,40.0047187 11.8722934,40.574249 C11.7575035,40.9303155 11.5711336,41.3295149 11.4384488,41.7031866 C11.393493,41.8299445 11.3852002,41.9448189 11.3659958,42.0847808 C11.3057639,42.1349558 11.2594988,42.1393571 11.2354933,42.0706965 C11.07793,42.3259729 10.9483004,42.5095078 10.8252177,42.7432177 C10.7318145,42.9188302 10.6318644,43.1670644 10.5637761,43.366444 C10.4201796,43.7902908 10.3036439,44.2070954 10.0653349,44.5992527 C9.91344564,45.1736245 9.53066724,45.9522173 9.55816444,46.3712226 C9.55947383,46.4055529 9.56078322,46.4403233 9.5586009,46.4777345 C9.45996017,46.6009713 9.36830286,46.6753536 9.28755713,46.6740332 C9.12519274,47.0182161 8.96632007,47.3518359 8.80919324,47.6850155 C8.67083434,47.9750622 8.52243679,48.2967984 8.50279594,48.5217057 C8.47879045,48.8042702 8.2313157,49.1704597 8.17675778,49.5238854 C8.13005619,49.8227348 7.941504,50.3420901 7.87166986,50.719723 C7.83238815,50.9375882 7.72370877,51.3341468 7.49762073,51.475429 C7.53646597,51.5762191 7.55174219,51.6162711 7.57443829,51.6765692 C7.52991902,51.7166211 7.49849365,51.7456698 7.46532244,51.776479 L7.41643853,51.8055277 C7.3500961,51.973658 7.3583889,51.9388876 7.33089171,51.9780593 C7.30994147,51.9991856 7.28768183,52.0093087 7.26585866,52.0115093 L8.51414398,53.441497 C8.60842008,53.2473989 8.72757459,53.0000449 8.85458544,52.7372864 C8.88208263,52.679189 8.92703836,52.5911627 8.94056873,52.5546317 L8.98115982,52.4459192 C9.00822055,52.3737376 9.03440836,52.3006758 9.06103262,52.231135 C9.16054628,51.9516514 9.24522018,51.7183817 9.25875054,51.6818507" id="Fill-15" fill="#000000"></path>
-                </g>
-                <g id="Group-17">
-                    <g id="Group-3" transform="translate(4.000000, 0.000000)">
-                        <mask id="mask-6" fill="white">
-                            <use xlink:href="#path-5"></use>
-                        </mask>
-                        <g id="Clip-2"></g>
-                        <path d="M28.18224,15.9931143 L28.18224,15.9931143 L27.98334,15.912519 L28.18224,15.9931143 Z M53.86824,3.44210266 C53.82099,3.30094704 53.72919,3.14795255 53.58789,2.98448523 C53.48169,2.80735769 53.16174,2.71310216 52.81164,2.5491795 C52.40529,2.26777894 52.00074,1.98728905 51.58674,1.69905837 C51.29289,1.59615137 51.00939,1.49552107 50.75424,1.41811315 C50.24529,1.26193128 49.73634,1.08252703 49.22424,0.879445072 L48.84039,0.721897182 L48.74319,0.681827198 L48.57714,0.628552334 L48.24684,0.519725901 C47.80314,0.369463463 47.35404,0.217379661 46.89819,0.0639298375 C46.69974,0.00701224713 46.46484,0.0853308515 46.27674,0.158185367 C46.04139,0.264735096 45.82089,0.412265491 45.68634,0.608517342 L45.34569,1.34890136 L45.02034,2.0683397 C44.97039,2.18171954 44.90694,2.31376835 44.87094,2.41030058 L44.79894,2.64571174 C44.67249,2.79825088 44.53974,2.95488809 44.40879,3.11106996 C43.99524,3.59282044 44.09559,4.05408059 43.79679,4.62644388 C43.64469,4.49758246 43.44759,4.69838772 43.11954,5.67782561 C42.91389,6.29025888 42.58764,6.97509133 42.35274,7.61484505 C42.27174,7.83340859 42.25554,8.03102647 42.21999,8.27235705 C42.11604,8.35705042 42.03639,8.36615724 41.99679,8.24458126 C41.72004,8.68170836 41.49414,8.9963488 41.27814,9.39750398 C41.11659,9.69711817 40.93749,10.1237724 40.81734,10.4675547 C40.56264,11.1960998 40.35339,11.9109848 39.93669,12.583523 C39.80034,13.0757463 39.56544,13.6558504 39.36744,14.2040806 C39.26889,14.4777404 39.18024,14.7432041 39.11904,14.9854453 C39.09384,15.0660406 39.10869,15.0596659 39.11544,15.0737814 L39.13884,15.1170388 C39.16044,15.1552874 39.17979,15.1912593 39.20094,15.2285973 C39.21669,15.2568284 39.23109,15.2877916 39.24009,15.3178441 C39.15639,15.3233081 39.07854,15.2540964 38.99259,15.1220475 C38.96244,15.1302437 38.92599,15.1038339 38.90754,15.0783348 C38.89764,15.0660406 38.88909,15.0546571 38.88279,15.0446396 C38.85984,15.027792 38.93904,15.0455503 38.72844,14.9685977 C38.21409,14.7737119 37.64529,14.5651658 37.26144,14.5660765 C36.77724,14.5651658 36.11979,14.1936078 35.51094,14.1526271 C34.99569,14.1161999 34.16769,13.6094057 33.51474,13.545658 C33.14124,13.5105967 32.44959,13.3817353 32.17599,13.0119986 C32.01084,13.0925939 31.94469,13.1271998 31.84569,13.175466 C31.77279,13.1062542 31.71699,13.0534346 31.66164,13.0010705 L31.60314,12.9200198 C31.43934,12.8690216 31.29669,12.8243983 31.16754,12.7834176 C31.13199,12.7715787 31.11354,12.7629273 31.06539,12.7501777 C31.01094,12.7369728 30.95919,12.725134 30.90789,12.7123844 C30.80529,12.687796 30.70899,12.6641183 30.61674,12.6413513 C30.24954,12.5489171 29.95164,12.4655898 29.65419,12.3827178 C29.50524,12.3412817 29.35764,12.3007564 29.20374,12.2579544 C29.06514,12.2684272 28.91214,12.2766234 28.74519,12.3298982 C28.57779,12.374977 28.39734,12.4514742 28.21869,12.5675861 C28.03599,12.6809659 27.87534,12.8239429 27.73314,13.0711929 C27.61704,13.2460438 27.43884,13.4773569 27.35874,13.5889153 C27.31824,13.6890903 27.29979,13.7359904 27.29169,13.7642215 C27.25164,13.91585 27.18549,14.0866027 27.10404,14.2732924 C27.06219,14.3643606 27.01719,14.4613482 26.97129,14.5619785 C26.94159,14.613432 26.91144,14.6676175 26.88039,14.7222584 C26.76204,14.926251 26.63514,15.1347971 26.58114,15.3105586 C26.57394,15.3214868 26.57079,15.3292276 26.56629,15.3392451 L26.56944,15.3401557 C26.30574,16.0687009 25.77159,17.5767894 25.74099,17.6988207 C25.64334,18.0945118 25.54839,18.4874708 25.43634,18.8959115 C25.32024,19.3207443 24.98589,20.015139 25.22349,19.9923719 C25.24779,19.9905506 25.15689,20.3507251 25.08759,20.5533517 C24.92109,21.0059604 24.75054,21.4694972 24.57279,21.950337 C24.58269,22.0810198 24.54444,22.21489 24.56199,22.3414747 C24.56199,22.3414747 24.52284,22.3332786 24.52194,22.3369213 L24.18444,23.1911405 C24.13449,23.3163592 23.93244,23.2139075 23.76639,23.4019632 C23.45724,23.7534863 23.13009,24.5057092 23.01354,25.1600338 C22.85694,26.0333773 22.46814,26.9959676 22.15494,27.9089257 C22.01949,28.3068935 21.89349,28.6766302 21.82599,29.0049308 C21.80754,29.1023738 21.78909,29.1979953 21.77109,29.2913402 C21.73194,29.2826887 21.70764,29.2353332 21.70224,29.1214981 C21.40839,29.8942113 21.20814,29.7057002 20.93049,30.3572928 L20.82114,30.6131943 C20.79684,30.6705672 20.79639,30.6687458 20.79189,30.6737546 L20.78064,30.6919682 L20.73564,30.759814 C20.71674,30.8048927 20.67219,30.8463287 20.62044,30.8408646 C20.58579,30.8367666 20.54529,30.8376773 20.49849,30.8490608 C20.47419,30.8536142 20.47689,30.8695511 20.33199,30.8435967 C20.22804,30.8294811 20.14659,30.8253831 20.09934,30.8331238 C19.70019,30.9000589 19.06389,30.7242974 18.48249,30.6191137 C18.28449,30.5840525 18.08694,30.5489912 17.87454,30.5116533 C17.73054,30.4447182 17.58969,30.3786938 17.45334,30.3149461 C17.42814,30.2589392 17.39799,30.1956468 17.35974,30.1127748 C17.27019,30.1296224 17.12169,30.0745262 16.96059,30.0462951 C16.80939,29.9752619 16.59924,30.1073107 16.51059,29.7985897 L17.30619,30.0340009 C16.87599,29.6251049 16.85124,29.7084323 15.95169,29.5955078 C15.68259,29.4620929 15.41259,29.3286781 15.13674,29.1934419 C14.83299,29.1265068 14.53869,29.0613931 14.27634,29.0154037 C14.01399,28.9694143 13.75164,28.9161394 13.48839,28.8592218 L13.09149,28.7676983 L12.42729,28.6461224 C12.19959,28.6019543 11.97189,28.5582416 11.74284,28.5145289 L11.39814,28.4448618 C11.28699,28.4330229 11.18799,28.4594327 11.07639,28.479923 C10.85994,28.5304658 10.64169,28.6219893 10.45314,28.7513061 C10.35819,28.8118664 10.27089,28.8874529 10.19394,28.9612181 C10.11069,29.0286086 10.07199,29.1629341 10.00764,29.261743 C9.90279,29.4566288 9.78624,29.7116196 9.69984,29.9087822 C9.59544,30.1528448 9.46359,30.4392541 9.38934,30.6386934 L9.25209,31.1131584 L8.97804,32.0607224 C8.85159,32.2146276 8.72199,32.3717201 8.59239,32.5297234 C8.18469,33.0155719 8.28999,33.4754661 7.99749,34.0519274 C7.84404,33.9253427 7.64829,34.1279693 7.33104,35.1110499 C7.13259,35.7253046 6.81399,36.4133244 6.58539,37.0562655 C6.50754,37.2748291 6.49359,37.4738129 6.46074,37.7160542 C6.35679,37.8007476 6.27714,37.8098544 6.23664,37.6891891 C5.96529,38.1304143 5.74209,38.4473314 5.53014,38.8498526 C5.37219,39.1531095 5.19804,39.5802191 5.08194,39.9258227 C4.83489,40.6566446 4.63329,41.3738062 4.22424,42.0513532 C3.96414,43.0403533 3.30579,44.3831531 3.35214,45.1062341 C3.35529,45.1649731 3.35799,45.2250781 3.35394,45.2888258 C3.18384,45.5014699 3.02634,45.631242 2.88819,45.6280546 C2.60829,46.2209082 2.33604,46.7969143 2.06514,47.3710989 C1.82799,47.871063 1.57239,48.4261234 1.53864,48.8140737 C1.49679,49.3012882 1.07289,49.9319351 0.97929,50.5420917 C0.96669,50.6231423 0.89019,50.9332294 0.80559,51.2037018 C0.71379,51.483281 0.61254,51.7915466 0.50904,52.1080084 L0.34884,52.5902143 L0.31194,52.7108796 L0.31734,52.8192507 C0.31824,52.8898285 0.33714,52.9681471 0.34704,53.0410016 C0.41319,53.3406158 0.56619,53.6252037 0.75159,53.7982332 C0.83304,53.907515 1.04589,53.9721734 1.23669,54.0646075 C1.43199,54.1543097 1.63584,54.2540293 1.83294,54.3624004 C2.02959,54.4698608 2.22084,54.5859727 2.39229,54.7111914 C2.47914,54.7731177 2.56014,54.8382314 2.63529,54.9056218 C2.71044,54.9730123 2.72439,55.0007881 2.76174,55.0563396 C2.93274,54.9894045 3.00114,54.9625394 3.10419,54.9229248 C3.17124,54.9989667 3.22164,55.0554289 3.27249,55.1132572 L3.32424,55.1974952 C3.96144,55.4515754 4.27374,55.6200514 4.57029,55.7880722 C4.72059,55.8713995 4.86639,55.9524502 5.04324,56.0503484 C5.25024,56.1559875 5.32674,56.2015215 5.98014,56.4820114 C6.15159,56.5548659 6.37479,56.6636924 6.52689,56.7356362 C6.65739,56.763412 6.74559,56.7807149 6.78429,56.7816256 C6.91434,56.7839023 7.07274,56.8094014 7.24914,56.8471947 C7.33734,56.867685 7.43094,56.889086 7.52769,56.9113977 C7.62129,56.9214152 7.70634,56.9182278 7.80579,56.9082103 C8.19774,56.8808899 8.62254,56.6946555 8.82774,56.496127 C8.84574,56.4833774 8.76789,56.4770027 8.78049,56.4678959 L7.71354,54.9242908 L7.71354,54.9233801 L8.77869,56.4637978 C8.94609,56.1455146 9.20349,55.7407167 9.42939,55.3099644 C9.64314,54.8960597 9.96354,54.357847 9.99234,54.198933 C10.17009,53.7180932 10.32714,53.3119293 10.34244,53.2518243 C10.44684,52.8565886 10.55124,52.4654509 10.66824,52.0583763 C10.79064,51.6349094 11.13669,50.9455236 10.89909,50.9646479 C10.87479,50.9669246 10.97109,50.6076608 11.04309,50.4059448 C11.21634,49.9565235 11.39409,49.494808 11.57724,49.0162449 C11.57004,48.8860175 11.60964,48.7521473 11.59434,48.6251073 C11.59344,48.6205538 11.63259,48.6342141 11.63439,48.630116 L11.98314,47.7804502 C12.03444,47.6561422 12.23514,47.7608706 12.40344,47.5750915 C12.71709,47.2276666 13.05504,46.4804524 13.18014,45.8274939 C13.34754,44.9559717 13.74894,43.9988455 14.07384,43.0908961 C14.21559,42.6942943 14.34654,42.3272897 14.41809,41.9998997 C14.43834,41.9029122 14.45724,41.8068353 14.47704,41.7139458 C14.51529,41.7221419 14.53959,41.770408 14.54409,41.8842432 C14.84694,41.1156281 15.04494,41.3073265 15.33069,40.658466 C15.47469,40.3388168 15.61869,40.0168909 15.76179,39.6967864 C15.79329,39.6512523 15.81219,39.6089056 15.83289,39.5569968 C15.86259,39.4882403 15.94089,39.4882403 15.99354,39.451813 C16.01109,39.4413402 16.02459,39.4267693 16.03539,39.4108324 C16.06014,39.3716731 16.09074,39.346174 16.13529,39.3306924 C16.25994,39.3397992 16.39539,39.3584682 16.53579,39.3835119 C16.81794,39.4395188 17.12169,39.4978025 17.41284,39.5551754 C17.61084,39.5902366 17.80794,39.6248425 18.02169,39.6617251 C18.16434,39.7282049 18.30564,39.7955953 18.44154,39.8588877 C18.46764,39.9148946 18.49779,39.9781869 18.53604,40.0615143 C18.62514,40.0442113 18.77364,40.0988522 18.93519,40.1270833 C19.08639,40.1985718 19.29609,40.0674337 19.38519,40.375244 L18.58914,40.1402882 C19.01979,40.5491842 19.04319,40.4658568 19.94274,40.5787813 C20.21364,40.7121962 20.48364,40.845611 20.75904,40.9808472 C21.06234,41.0473269 21.35664,41.1119853 21.61989,41.1588854 C22.14234,41.2508642 22.66974,41.3669761 23.20164,41.5063104 L23.40144,41.5600406 L23.50134,41.5878164 L23.55219,41.6019319 L23.63679,41.6183242 C23.86584,41.6643136 24.09624,41.7116691 24.32709,41.7576585 C24.55839,41.8077459 24.79149,41.8569227 25.02504,41.9074656 C25.26939,41.9853288 25.47639,41.9602851 25.70094,41.891984 C25.90524,41.8355217 26.13564,41.690268 26.27919,41.5518445 C26.34984,41.4876414 26.40609,41.4179743 26.46324,41.3505839 L26.59869,41.094227 C26.68689,40.925751 26.77509,40.7559089 26.88354,40.6042804 L27.04779,40.0806386 C27.09684,39.9203587 27.16884,39.7022504 27.18189,39.6312173 L27.33759,39.018784 C27.46134,38.8639682 27.58959,38.7032329 27.71694,38.5438636 C28.11879,38.0530063 28.00629,37.5940229 28.29159,37.0148295 C28.44729,37.1395929 28.63944,36.9346895 28.94364,35.9470555 C29.13309,35.3296135 29.44404,34.6361296 29.66319,33.9913671 C29.73879,33.7714375 29.74959,33.5724536 29.77839,33.3302124 C29.88189,33.2432423 29.96199,33.2336801 30.00429,33.3529794 C30.26934,32.9090222 30.48804,32.5889177 30.69459,32.1822984 C30.84894,31.8781308 31.01724,31.4473785 31.12839,31.1013195 C31.36644,30.3668549 31.55769,29.6469613 31.95819,28.9644055 C32.20569,27.9726734 32.84514,26.6198561 32.78889,25.8981411 C32.78574,25.8394021 32.78259,25.7792972 32.78529,25.7146388 C32.95314,25.4988073 33.10839,25.3681245 33.24654,25.3694905 C33.38199,25.0716977 33.51654,24.7775476 33.64884,24.4861295 L33.84819,24.0499131 C33.87069,23.9993703 33.86979,24.005745 33.86979,24.005745 L33.87924,24.004379 L33.89274,24.0025577 C33.93009,24.0034683 33.91929,24.0326101 33.90669,23.8991953 C33.90219,23.819966 33.94404,23.8349923 33.97419,23.8468311 C34.05924,23.8714195 34.14564,23.8969186 34.23069,23.9224177 C34.38684,23.962943 34.54119,23.9939062 34.69329,24.004379 C35.20854,24.0394403 36.03699,24.5466898 36.68994,24.6099822 C37.06344,24.6450434 37.75464,24.7743602 38.02959,25.1440969 C38.19384,25.0621355 38.25999,25.0298063 38.35809,24.9806295 C38.43189,25.050752 38.48724,25.1026608 38.54349,25.1559357 L38.60154,25.235165 C39.91554,25.6290347 39.90474,25.7970555 41.09589,26.1954786 C41.24709,26.2455661 41.46759,26.3543925 41.52699,26.3589459 C41.75964,26.3785256 42.18849,26.4982802 42.59934,26.6230435 C42.81354,26.6863359 43.03179,26.7500836 43.23429,26.8083672 C43.45254,26.8898732 43.61814,26.8634634 43.77294,26.8142866 C43.79769,26.8106439 43.81029,26.8083672 43.82829,26.8065458 L43.82694,26.8033584 C44.14689,26.7036388 44.57979,26.5064763 44.84844,26.1544979 C45.07434,25.7205582 45.31329,25.2597534 45.53604,24.8326438 C45.59139,24.7265494 45.64449,24.6231871 45.69714,24.5221014 C45.75339,24.4141857 45.74889,24.395972 45.77724,24.3313137 C45.81684,24.2256746 45.85329,24.1277764 45.88479,24.043083 C45.94554,23.8741516 45.98694,23.7580397 45.99819,23.7284425 C46.10484,23.3359388 46.20789,22.9448012 46.33029,22.5386372 C46.45719,22.1174471 46.80864,21.4317039 46.56969,21.4476409 C46.54629,21.4503729 46.64529,21.0915644 46.71954,20.8907592 C46.89639,20.4427039 47.07864,19.9832651 47.26764,19.5065234 C47.26134,19.3767513 47.30229,19.2433364 47.28834,19.115841 C47.28744,19.1112876 47.32659,19.1254032 47.32659,19.1254032 L47.68659,18.2766481 C47.73924,18.1523401 47.93904,18.2593451 48.10869,18.0758428 C48.42639,17.7316052 48.77154,16.9880338 48.90429,16.3364413 C49.08159,15.4667405 49.49379,14.514623 49.82904,13.6103163 C49.97349,13.2150806 50.10939,12.8489867 50.18454,12.5225074 C50.20524,12.4264305 50.22549,12.3308089 50.24619,12.2374641 C50.28399,12.2465709 50.30784,12.2952923 50.31189,12.4077615 C50.62239,11.6441551 50.81769,11.8376749 51.11199,11.1920018 C51.41754,10.5199189 51.74199,9.84419322 52.01604,9.16573555 C52.20909,8.68717245 52.46559,7.9631807 52.45704,7.76966089 C52.43949,7.36076492 52.68969,6.74241222 52.86294,6.17095961 C52.89264,6.07123999 52.92279,5.97197572 52.95249,5.86952405 C52.99029,5.71789559 53.02989,5.56262441 53.06994,5.40279981 C53.16849,5.17604013 53.26434,4.95246784 53.35794,4.73663634 C53.42364,4.67288863 53.49834,4.60048946 53.59509,4.50577859 C53.59419,4.44476293 53.61624,4.35278411 53.64549,4.24486836 C53.66169,4.19068281 53.67744,4.13330988 53.69499,4.07366024 C53.69094,4.01810868 53.68914,3.96255711 53.67879,3.90381815 C53.67969,3.64518462 53.42949,3.47215515 53.53164,3.13247097 C53.53164,3.13247097 53.71524,3.41660358 53.76924,3.74490424 C53.85969,4.0486165 53.67294,4.38602398 53.69094,4.38647932 C54.00909,3.93660269 53.94924,3.7344314 53.86824,3.44210266 L53.86824,3.44210266 Z" id="Fill-1" fill="#000000" mask="url(#mask-6)"></path>
-                    </g>
-                    <path d="M7.13394415,53.6658017 C7.02028045,53.9415145 6.70464857,54.0734367 6.43022544,53.9584042 L1.33166108,51.82163 C1.05723795,51.707054 0.927271884,51.3879758 1.04138843,51.1118065 L10.2404502,28.8133059 C10.3545667,28.5375931 10.6797083,28.3810211 10.964094,28.4636436 L20.3850491,31.2358354 C20.6694348,31.3198274 20.9914064,31.160973 21.1019002,30.8843472 L28.276299,12.8205943 C28.3858871,12.5430556 28.7069531,12.3901354 28.9895274,12.4791486 L38.8085318,15.6092192 C39.0902004,15.6991454 39.4162477,15.5485077 39.5335342,15.2746208 L45.8928147,0.328157065 C46.0101011,0.0542701818 46.3279972,-0.0744566534 46.5997033,0.0442276627 L51.674267,2.23623569 C51.945973,2.35446352 52.0736749,2.67491118 51.9563884,2.94879806 L43.2432277,23.433711 C43.1263941,23.7080544 42.8003468,23.8586922 42.5182253,23.7683095 L32.837791,20.6816043 C32.5561224,20.5916781 32.2350564,20.7445983 32.1250154,21.0212241 L25.001788,38.9617279 C24.8921999,39.2392666 24.5697754,39.3967515 24.2858425,39.313216 L14.7865455,36.5191134 C14.5026127,36.4346649 14.1774711,36.5921499 14.0633546,36.8678627 L7.13394415,53.6658017 Z" id="Fill-4" fill="#FC6EB3"></path>
-                    <path d="M13.5634145,29.4648507 C13.3231603,29.4264068 13.0838043,29.3897721 12.8399575,29.350876 C12.5826385,29.3051957 12.1551207,29.1450884 12.1825142,29.2857476 C12.1847595,29.3006729 11.966959,29.2672041 11.8439129,29.236449 C11.6952696,29.1998143 11.544381,29.1609182 11.3916961,29.1220221 C11.2735898,29.0962421 11.1559326,29.0700098 11.0364791,29.0433253 C10.9161275,29.0134748 10.7980212,28.9872425 10.6794659,29.0066906 C10.6278224,29.0261386 10.5712392,29.0388025 10.5164523,29.0514663 C10.4630125,29.071819 10.4122673,29.1048354 10.3709525,29.1364951 C10.3709525,29.1364951 10.3574803,29.1165947 10.3534387,29.1165947 C10.3534387,29.1165947 10.3031424,29.1333291 10.2285963,29.1554908 C10.153152,29.1790094 10.0741151,29.2536357 9.98564763,29.3070048 C9.81544885,29.4286682 9.72159253,29.6290285 9.70048609,29.6077713 C9.64569914,29.7231028 9.55274097,29.6145555 9.40185235,29.8085838 C9.3672737,29.8542641 9.32910247,29.9062764 9.2900331,29.9655251 L9.18719531,30.1283461 C9.14049169,30.2047815 9.09558436,30.2925239 9.05426962,30.3852414 C8.97029291,30.5706764 8.90068655,30.7791777 8.86341347,30.9741106 C8.76327013,31.4937808 8.52256684,32.0636542 8.32856718,32.6050339 C8.24369233,32.8415766 8.1651045,33.060028 8.12244254,33.2554132 C8.11031756,33.3128528 8.09864165,33.3702924 8.08696575,33.4254706 C8.06451208,33.4204955 8.05014174,33.3915496 8.0474473,33.3241598 C7.86557262,33.7823199 7.74746634,33.6678929 7.57592034,34.0541405 C7.39718917,34.4575746 7.20723117,34.8619134 7.04781015,35.2676089 C6.93419461,35.5539024 6.78555135,35.9880917 6.79228745,36.1025186 C6.80531057,36.3462978 6.65981083,36.7162632 6.55966748,37.057735 C6.52643606,37.173971 6.49320464,37.2897548 6.4568297,37.4154888 C6.40743164,37.4973516 6.36027894,37.5769529 6.31312625,37.6542929 C6.27899668,37.6665045 6.23947823,37.6805252 6.18828387,37.6977118 C6.1927746,37.75289 6.15056172,37.8379188 6.12316824,37.9333499 C6.07107574,38.0183787 6.13529322,38.1531582 5.94847873,38.1857224 L6.13888581,37.7253009 C5.86944183,37.9555117 5.9170436,37.975412 5.79130308,38.5072938 C5.69430325,38.6633306 5.60089601,38.8112263 5.50075266,38.9708813 C5.44506757,39.1468184 5.39028063,39.3168758 5.33998442,39.4742694 C5.16260047,40.0893709 4.92863329,40.7067337 4.63808287,41.3349512 C4.60574959,41.4059593 4.57566168,41.4986768 4.55455524,41.5723985 L4.22583359,42.7021951 C4.15083835,42.7931034 4.07314867,42.8867255 3.99500992,42.9817044 C3.75116312,43.2707116 3.81448245,43.5456981 3.63799665,43.8894312 C3.54683477,43.8134481 3.43007571,43.9333025 3.24011771,44.5199102 C3.12066422,44.8867097 2.92980807,45.2964757 2.79373886,45.6786527 C2.74613709,45.8093618 2.73850285,45.9269547 2.71919269,46.0721367 C2.65677151,46.1227921 2.60827159,46.1277672 2.58491978,46.0572115 C2.42190617,46.3190819 2.28942955,46.5085874 2.16144367,46.7487483 C2.06713827,46.9278513 1.96295327,47.1833898 1.89379598,47.3887251 C1.7456018,47.8251758 1.62525016,48.2521285 1.37960707,48.6555627 C1.22377863,49.2448841 0.829492283,50.0454205 0.858682047,50.4759915 C0.860029267,50.5112694 0.861376487,50.5469996 0.858682047,50.5849911 C0.75674241,50.7125342 0.662886092,50.7889696 0.580256606,50.7876128 C0.494483607,50.9716909 0.418141148,51.1223003 0.327877416,51.3271833 L0.146451806,51.8341897 L0.0548408547,52.0897282 L0.0103825989,52.2177236 L0.00185020633,52.3416484 C-0.0134182856,52.6306556 0.066067687,52.955393 0.230877585,53.1937448 C0.306321898,53.3172173 0.400627289,53.4194327 0.497178047,53.4949636 C0.586992705,53.5781832 0.728899865,53.6039632 0.82365433,53.6442161 C0.953885585,53.6858259 1.09040387,53.7432655 1.23320917,53.810203 C1.30461183,53.8445764 1.37781077,53.8798542 1.45190786,53.9164889 C1.49367168,53.9341279 1.53768086,53.9531237 1.58124097,53.9712149 C1.75593048,54.0444843 1.93870331,54.1222766 2.11967985,54.1507702 C2.42504969,54.1991642 2.89208591,54.5438019 3.27873802,54.6157145 C3.50013115,54.6564198 3.90519526,54.7694899 4.04979686,55.0042234 C4.15263464,54.9639705 4.19394938,54.9481407 4.25457428,54.9241698 C4.29543995,54.9689456 4.32552786,55.0033189 4.35561577,55.0376922 L4.38615275,55.0878953 C4.75978173,55.2353388 4.94659622,55.3352927 5.12083666,55.4329853 C5.20975317,55.4818316 5.29687339,55.5302256 5.39701673,55.5858561 C5.45494719,55.6143498 5.5169193,55.6451048 5.58428029,55.6785736 C5.71046989,55.7342041 5.84743724,55.795262 6.00371475,55.863104 C6.01718695,55.8671746 6.04862208,55.8748633 6.08095536,55.8834566 C6.2466634,55.9246142 6.50667684,56.0204976 6.56370914,55.9960745 C6.7190885,55.9816015 6.95979179,55.9725559 7.19959692,55.8952159 C7.43491133,55.8133532 7.66393871,55.6740508 7.77755425,55.5157526 C7.78967923,55.5044456 7.79416996,55.4999228 7.80225328,55.4935909 L6.50847313,54.0123724 C6.47838522,54.0200612 6.43976492,54.0218703 6.40114461,54.0105633 C6.3526447,53.9992563 6.32659845,53.9721194 6.29785775,53.9580988 C6.16313577,53.9002069 6.01583973,53.8368876 5.82408543,53.7554771 C5.71585877,53.7079877 4.412199,53.0548947 4.32103713,53.0309238 C4.08617179,52.9667 3.85220461,52.9024762 3.61464484,52.8378001 C3.36451101,52.7645306 2.95630339,52.5569339 2.96753022,52.7007591 C2.96932652,52.7147798 2.75691485,52.6573402 2.63746135,52.6139212 C2.50318844,52.561909 2.36891553,52.5108013 2.23194817,52.458789 L2.06040218,52.390947 L1.9894486,52.3656193 C1.94588849,52.384615 1.91175892,52.3787354 1.8565229,52.3963743 L1.87403676,52.3778308 C1.87403676,52.3778308 1.82329148,52.3570259 1.79050913,52.3145116 C1.75772678,52.2729018 1.74874531,52.2195327 1.74874531,52.2195327 C1.9288237,52.1381222 1.89828672,52.1525952 1.96115698,52.1100808 C2.02312909,52.0752552 2.06399476,52.0562594 2.07881418,52.0336454 L2.08420306,52.0245998 L2.1120456,51.9554009 L2.16368903,51.8066006 C2.19647138,51.7070989 2.22341578,51.6062404 2.24272593,51.5085478 C2.3424202,50.9897821 2.58222534,50.4199087 2.77667408,49.878529 C2.861998,49.6419864 2.9410349,49.4230826 2.98324779,49.2272452 C2.99537277,49.1702578 3.00704867,49.1123659 3.01827551,49.0580923 C3.04072917,49.0621628 3.05599766,49.091561 3.05824303,49.1584986 C3.23921957,48.7007907 3.35732584,48.81567 3.53021906,48.4280656 C3.70850116,48.0259883 3.89845916,47.6216496 4.0574311,47.215954 C4.17059757,46.9287559 4.31924083,46.4954712 4.31295381,46.3801397 C4.29948161,46.1363606 4.44498135,45.7672997 4.5451247,45.4249234 C4.57880519,45.3086873 4.61158754,45.1924512 4.64796248,45.0667173 C4.69691147,44.9857591 4.74451324,44.9061577 4.79166593,44.8279132 C4.8257955,44.8161539 4.86531395,44.8025855 4.91650831,44.7849465 C4.91201758,44.7306729 4.95512861,44.6456442 4.98297116,44.550213 C5.03371644,44.4642797 5.11948944,44.3919148 5.15810974,44.2973882 L4.96725359,44.758262 C5.08895245,44.4656365 5.18819765,44.5076986 5.31483632,43.9749123 C5.41228522,43.8202323 5.50479432,43.6714321 5.60403952,43.5131339 C5.66062275,43.33584 5.71451155,43.1657825 5.76525683,43.0088412 C5.94174263,42.3932875 6.17615889,41.7759247 6.46581117,41.1481594 C6.49949166,41.0771514 6.5291305,40.9839816 6.55113509,40.9116167 L6.87895859,39.7809156 C6.95350476,39.6900072 7.03254166,39.5954806 7.10978227,39.500954 C7.35452721,39.2123991 7.29120788,38.9374125 7.46634646,38.594584 C7.55795741,38.6705671 7.67516554,38.5489036 7.86557262,37.9627482 C7.98367889,37.5968533 8.17588226,37.1861826 8.31195147,36.8044579 C8.35865509,36.6737489 8.36673841,36.5557037 8.38649763,36.4105216 C8.44802068,36.3603185 8.49562244,36.3544389 8.52032148,36.4268037 C8.68288601,36.1635765 8.81670985,35.9745233 8.94379759,35.7348146 C9.03855205,35.5539024 9.14183891,35.2997208 9.21144527,35.0939332 C9.35963946,34.6579349 9.4799911,34.2314344 9.72518512,33.8270957 C9.88146262,33.2377742 10.2748508,32.4372378 10.2470083,32.0062146 C10.245212,31.9709367 10.2434157,31.9356588 10.2461101,31.897215 C10.3480498,31.7705764 10.4423552,31.6936888 10.5249846,31.6959502 C10.6085123,31.5191085 10.6911418,31.3445282 10.7733222,31.1722094 L10.8963683,30.913505 L10.9260071,30.8492812 C10.9381321,30.8221443 10.9457663,30.8090282 10.9444191,30.8158124 L10.9529515,30.8144556 C10.9749561,30.8121942 10.9704654,30.8339036 10.9637293,30.7552068 C10.9632802,30.7068128 10.9888774,30.713597 11.0068403,30.7208335 C11.0768957,30.7398293 11.1474002,30.7597296 11.219252,30.77963 C11.3117611,30.802244 11.4060664,30.8180738 11.4967793,30.8225966 C11.8061907,30.8366173 12.3536111,30.9718492 12.745203,31.0012474 C12.9688415,31.0170772 13.3846834,31.084467 13.553984,31.3020139 C13.6509838,31.2500016 13.6900532,31.229649 13.7488818,31.1988939 C13.7946873,31.2400515 13.8274696,31.269902 13.8611501,31.3011093 L13.8975251,31.3472419 C14.1755014,31.4241296 14.3497419,31.5046355 14.4898527,31.5864983 L15,29.8271273 C14.5563156,29.7095344 13.6366135,29.4757054 13.5634145,29.4648507" id="Fill-6" fill="#000000"></path>
-                    <path d="M36.5281863,14.2293554 C36.2816505,14.1863015 36.0365024,14.1441446 35.7862663,14.1010908 C35.523079,14.0499643 35.0859753,13.8813367 35.1109526,14.0217102 C35.1128028,14.0360615 34.8898568,13.9979409 34.7635824,13.9656505 C34.4800432,13.885373 34.1909534,13.8046471 33.8907626,13.7203333 C33.8121302,13.7310967 33.7284098,13.7149515 33.6525527,13.7301998 C33.6497774,13.7310967 33.6557905,13.7077759 33.6534777,13.7064305 L33.1187773,13.5436331 C33.0401449,13.5180699 33.0938,13.3933931 32.9716885,13.3028006 C32.7427294,13.1337245 32.2713975,12.9718241 31.8689845,12.9310127 C31.3305838,12.8762984 30.7274269,12.6865924 30.1589608,12.5403886 C29.9096498,12.4771533 29.6797656,12.4179543 29.476709,12.3919426 C29.4119529,12.3847669 29.3444215,12.3766943 29.2815156,12.3686217 C29.2727273,12.343507 29.3402586,12.333192 29.4003893,12.3224285 C29.0585696,12.2358723 28.8425617,12.1488677 28.6834467,12.0699356 C28.5155434,12.0067003 28.3444023,11.951986 27.9877811,12.0672448 C27.7925877,12.1358618 27.6117332,12.2479812 27.4632567,12.3874578 C27.3120049,12.5206556 27.2194962,12.7139495 27.1103359,12.8919951 C27.0062636,13.1404517 26.9040415,13.3853205 26.8022819,13.6283954 C26.6898838,13.9131786 26.5427949,14.3459596 26.5506582,14.4603213 C26.5673097,14.7007054 26.4229961,15.069354 26.3240118,15.4093 C26.2920963,15.5250072 26.2587931,15.6411629 26.2236398,15.7658397 C26.1741477,15.8465657 26.1255806,15.9272917 26.0788637,16.0048783 C26.0432478,16.0169872 26.0030065,16.0313385 25.9502766,16.0488291 C25.9558271,16.1030949 25.9132731,16.1883056 25.8864455,16.2829344 C25.8346407,16.3690421 25.9017095,16.5008945 25.7097539,16.5363243 L25.8993968,16.0757377 C25.6260335,16.3093946 25.6746006,16.3277822 25.5524891,16.8565373 C25.4539673,17.0126075 25.3600709,17.1606051 25.2601615,17.3202631 C25.2046563,17.4960664 25.1505387,17.6655909 25.1010465,17.8216611 C24.9271301,18.4338331 24.6944707,19.0500413 24.4035307,19.6761161 C24.3706902,19.7465271 24.3406248,19.8393619 24.3198104,19.9124638 L23.9969549,21.0372457 C23.9210978,21.1273897 23.8424654,21.2220185 23.7624453,21.3175442 C23.515447,21.6068123 23.584366,21.8781412 23.409062,22.2207781 C23.3128529,22.1476763 23.1939792,22.2683167 23.0061865,22.8522346 C22.889163,23.2168469 22.6976699,23.6258585 22.5626072,24.007513 C22.5163528,24.1375715 22.5089521,24.2546241 22.4909129,24.398137 C22.4284696,24.4501604 22.3775898,24.4555421 22.3526124,24.3842342 C22.1884094,24.6474905 22.0538092,24.8362996 21.9266097,25.0757867 C21.8317883,25.2565231 21.7272535,25.5094645 21.658797,25.7148673 C21.5121707,26.1489936 21.3942221,26.5741504 21.1467612,26.9773318 C20.9945844,27.5639405 20.6000347,28.3631276 20.6342629,28.7900783 C20.6365756,28.8246111 20.6379633,28.8591439 20.6365756,28.8986099 C20.5329659,29.0255291 20.4381444,29.1026672 20.3525739,29.1017703 C20.1851331,29.4556191 20.0209301,29.7964621 19.8595024,30.1382021 C19.834525,30.1906739 19.8368377,30.1808074 19.8368377,30.1808074 L19.828512,30.1808074 C19.8257367,30.1817044 19.8243491,30.1817044 19.8243491,30.1843953 C19.8252742,30.18888 19.8335999,30.2032313 19.844701,30.2431458 C19.8576522,30.3059327 19.8187985,30.2920299 19.797059,30.2830603 C19.78087,30.2794725 19.8002968,30.2866482 19.7512672,30.2785756 C19.6740224,30.2628788 19.5981652,30.2521154 19.5232332,30.2485276 C19.2045406,30.2350732 18.688342,29.9458052 18.2840789,29.9171026 C18.0523445,29.9014059 17.6254168,29.8345827 17.4510378,29.6197619 C17.3506659,29.6708884 17.309962,29.6910699 17.2493688,29.7211179 C17.203577,29.6807549 17.1688862,29.6507069 17.1337329,29.6206589 L17.0962669,29.5740172 C16.2812651,29.3591964 16.2854279,29.2596344 15.5458207,29.0403288 C15.4519244,29.0116263 15.3145489,28.9510818 15.2775454,28.9492879 C15.0832771,28.9398699 14.7668973,28.7286369 14.5471891,28.685583 C14.5384008,28.6819952 14.5347004,28.6806498 14.5286873,28.6775104 L14,30.4359912 C14.1202613,30.4969842 14.2636499,30.5602195 14.4361786,30.6283881 C14.8557057,30.7925309 15.1836491,30.8701175 15.7747798,31.0450238 C15.8913408,31.0795566 17.2983984,31.5809546 17.3950701,31.5948574 C17.6420683,31.6311841 17.8886041,31.6693047 18.1397653,31.7069768 C18.4043402,31.752273 18.8446817,31.9114826 18.8169291,31.7715576 C18.8141538,31.7567578 19.03895,31.7903936 19.165687,31.8208901 C19.3224893,31.8608046 19.478829,31.9011676 19.6462698,31.9446699 C19.9279588,32.0020751 20.2253744,32.0388502 20.5126139,31.9303186 C20.6065103,31.8639439 20.720296,31.7998116 20.7850521,31.7105646 C20.7869023,31.7069768 20.8030913,31.7271583 20.8054041,31.7244674 C20.8054041,31.7244674 20.9894964,31.6083117 21.1060574,31.4338539 C21.1698884,31.352231 21.2036541,31.2428024 21.2415827,31.1728399 C21.276736,31.0992896 21.2998632,31.050854 21.2998632,31.050854 C21.4918188,31.020806 21.4793301,30.9934489 21.6093048,30.8342393 C21.7998728,30.6261457 22.0015418,30.1826013 22.0736986,29.7955652 C22.1699077,29.2789189 22.4104304,28.7102493 22.6028485,28.1707307 C22.6861063,27.9357285 22.7647388,27.7177683 22.8059051,27.5235775 C22.8170062,27.4666209 22.8294949,27.4087673 22.8396708,27.3549499 C22.8641856,27.3589862 22.8785245,27.3867918 22.8831499,27.454512 C23.0626168,26.9984102 23.186116,27.1091842 23.3581822,26.7234934 C23.5371866,26.3225544 23.727292,25.9184761 23.8854819,25.5139493 C23.9969549,25.2278206 24.1449689,24.7963851 24.1366431,24.6820233 C24.1199915,24.4411908 24.2643051,24.0725422 24.3632895,23.7325962 C24.3961301,23.6164405 24.4289706,23.5011817 24.464124,23.376505 C24.5131536,23.2953305 24.5617207,23.215053 24.6084376,23.1374664 C24.6435909,23.124909 24.6847573,23.1114547 24.7370247,23.0930671 C24.7314742,23.0392498 24.7744907,22.954039 24.8013182,22.8594103 C24.8535857,22.7733025 24.9400813,22.7015461 24.978935,22.6064689 L24.7892921,23.0670554 C24.910016,22.773751 25.0127007,22.8145625 25.1352747,22.2858074 C25.2337965,22.1292887 25.3267678,21.9817395 25.4280648,21.8220815 C25.4831075,21.6458298 25.5367626,21.4763053 25.5867173,21.3206835 C25.7615588,20.7085116 25.9928306,20.0918548 26.2846956,19.4662286 C26.3166111,19.3944721 26.3457513,19.3029827 26.3674909,19.2294324 L26.6908089,18.1055475 C26.7662035,18.014058 26.8448359,17.9194292 26.9239308,17.8252489 C27.1713917,17.5346354 27.1033978,17.263755 27.2787018,16.9211181 C27.3753734,16.9946684 27.4942471,16.8735794 27.6806522,16.2896616 C27.7981383,15.9254977 27.9896313,15.5160377 28.1251566,15.1343832 C28.1709484,15.0038762 28.1778866,14.887272 28.1959258,14.7437592 C28.2592942,14.6930812 28.3087864,14.687251 28.3351514,14.757662 C28.4993544,14.4948541 28.6339546,14.3055966 28.7606915,14.066558 C28.8222098,13.9409843 28.8032455,13.9979409 28.8097211,13.986729 C28.8097211,13.986729 28.8069459,13.9844866 28.8018579,13.9773109 C28.7912194,13.9616142 28.7912194,13.9338086 28.8037081,13.9288754 C28.8411741,13.9315662 28.7292385,13.9033121 29.0391428,14.0360615 C29.6543257,14.1401083 30.5049434,14.4625637 30.9411221,14.3975345 C30.9762754,14.3917043 31.0132789,14.3881165 31.0535201,14.3872195 C31.1913581,14.4773635 31.2783163,14.5639197 31.2834043,14.646888 C31.6589897,14.7823283 32.022549,14.9146292 32.3861083,15.0460331 C32.7024881,15.1617403 33.0535587,15.2850717 33.2908436,15.2850717 C33.5891842,15.2850717 33.9952975,15.5048257 34.3694952,15.528595 C34.6877252,15.550122 35.2483281,15.6963257 35.6512036,15.7339978 C35.8820128,15.7550762 36.3070904,15.830869 36.4768439,16.049726 C36.5776784,16.0012905 36.6193073,15.9820059 36.6803631,15.9528549 C36.7256924,15.9950118 36.7603831,16.0255082 36.7936863,16.0564532 L36.8297647,16.1035434 C37.1146915,16.1851663 37.2913832,16.2694801 37.4338466,16.3537939 L38,14.6199794 C37.5457822,14.4948541 36.6035809,14.2423612 36.5281863,14.2293554" id="Fill-8" fill="#000000"></path>
-                    <g id="Group-12" transform="translate(37.000000, 0.000000)">
-                        <mask id="mask-8" fill="white">
-                            <use xlink:href="#path-7"></use>
-                        </mask>
-                        <g id="Clip-11"></g>
-                        <path d="M12.2161829,12.8865231 C12.2833829,12.6460615 12.35104,12.4060615 12.4186971,12.1632923 C12.4954971,11.9062154 12.7098971,11.4894462 12.56544,11.4996 C12.5503543,11.5005231 12.6106971,11.2831385 12.6554971,11.1608308 C12.7642971,10.8866769 12.8744686,10.6083692 12.9892114,10.3185231 C12.9864686,10.2396 13.0106971,10.1588308 13.0024686,10.0817538 C13.0024686,10.0817538 13.0257829,10.0872923 13.0266971,10.0845231 L13.2452114,9.56990769 C13.2767543,9.49513846 13.3988114,9.56021538 13.5021257,9.44852308 C13.6959543,9.23898462 13.90624,8.78713846 13.9866971,8.39113846 C14.09504,7.86221538 14.3464686,7.2816 14.5498971,6.73329231 C14.6394971,6.49236923 14.7213257,6.26990769 14.76704,6.07052308 C14.77984,6.01329231 14.7930971,5.95375385 14.8049829,5.89790769 C14.8282971,5.90390769 14.8424686,5.93344615 14.8447543,6.00175385 C15.0349257,5.53698462 15.1537829,5.65513846 15.3325257,5.26144615 C15.4271543,5.05421538 15.52224,4.84513846 15.6177829,4.63744615 L15.8225829,4.06375385 L15.9213257,3.7776 C15.9313829,3.68390769 15.9418971,3.59252308 15.9290971,3.49929231 C15.9162971,3.23436923 15.79104,2.90483077 15.5944686,2.69806154 C15.41984,2.47698462 15.1482971,2.41052308 15.05824,2.38236923 C14.9549257,2.35883077 14.8420114,2.32375385 14.7231543,2.28083077 L14.5393829,2.21113846 C14.4776686,2.18621538 14.45344,2.18483077 14.4058971,2.16867692 C14.2372114,2.11467692 14.0616686,2.05790769 13.8884114,2.00067692 C13.7713829,1.96606154 13.6543543,1.93052308 13.5272686,1.89083077 C13.4458971,1.84006154 13.36544,1.78975385 13.2872686,1.74175385 C13.27584,1.70529231 13.2625829,1.66467692 13.2452114,1.61206154 C13.1898971,1.61621538 13.1044114,1.57190769 13.0084114,1.54283077 C12.9224686,1.48883077 12.7848686,1.55252308 12.7546971,1.3596 L13.2191543,1.56083077 C12.9873829,1.28206154 12.9672686,1.33052308 12.4314971,1.19529231 C12.2746971,1.09329231 12.12704,0.995907692 11.9665829,0.892523077 C11.7882971,0.832061538 11.6168686,0.774369231 11.4596114,0.721292308 C11.1487543,0.626676923 10.8388114,0.517292308 10.52704,0.394061538 C10.4223543,0.345138462 10.0845257,0.233446154 9.82258286,0.137446154 C9.54555429,0.0114461538 9.27264,-0.0204 8.98921143,0.0566769231 C8.86212571,0.0876 8.71538286,0.163292308 8.61892571,0.244061538 C8.50372571,0.328061538 8.41275429,0.436523077 8.33321143,0.548676923 C8.26829714,0.677907692 8.20338286,0.806676923 8.12201143,0.924369231 L8.02966857,1.20083077 L7.98441143,1.33652308 L7.95881143,1.42606154 L7.87058286,1.75190769 C7.79332571,1.84329231 7.71286857,1.93790769 7.63241143,2.03436923 C7.38006857,2.32744615 7.44224,2.6076 7.25938286,2.9556 C7.16612571,2.87713846 7.04589714,2.99898462 6.84704,3.59483077 C6.72178286,3.96821538 6.52246857,4.38452308 6.37938286,4.7736 C6.33046857,4.90606154 6.32041143,5.02698462 6.29892571,5.17329231 C6.23538286,5.22498462 6.18601143,5.22913846 6.16269714,5.15575385 C5.99401143,5.42298462 5.85641143,5.6136 5.72475429,5.85683077 C5.62601143,6.0396 5.51629714,6.29852308 5.44406857,6.5076 C5.28818286,6.95113846 5.16064,7.38590769 4.90692571,7.79436923 C4.74144,8.39436923 4.33138286,9.20621538 4.35561143,9.64606154 C4.35652571,9.68252308 4.35835429,9.71852308 4.35561143,9.75821538 C4.24955429,9.88606154 4.15264,9.96313846 4.06944,9.96083077 C3.89481143,10.3199077 3.72566857,10.6674462 3.55561143,11.0149846 C3.40795429,11.3177538 3.24841143,11.6542154 3.22555429,11.8891385 C3.19675429,12.1845231 2.93435429,12.5662154 2.87355429,12.9359077 C2.82006857,13.2492923 2.46715429,13.7256 2.39035429,14.1216 C2.34555429,14.3491385 2.22715429,14.7645231 1.98944,14.9099077 C2.02875429,15.0160615 2.04338286,15.0576 2.06715429,15.1217538 C2.02144,15.1632923 1.98669714,15.1928308 1.95149714,15.2242154 L1.90029714,15.2546769 C1.85915429,15.3525231 1.82395429,15.4369846 1.79104,15.5136 C1.77229714,15.5542154 1.77412571,15.5431385 1.76452571,15.5569846 C1.75081143,15.5712923 1.73664,15.5768308 1.72109714,15.5777538 C1.68864,15.5768308 1.65618286,15.5583692 1.63149714,15.5459077 C1.62326857,15.5417538 1.61778286,15.5172923 1.61549714,15.5242154 C1.65298286,15.5597538 1.48978286,15.4891385 1.36726857,15.4263692 C1.23835429,15.3622154 1.10806857,15.2939077 0.999725714,15.2685231 C0.991497143,15.2648308 0.98784,15.2629846 0.981897143,15.2616 L0.419611429,17.0579077 C0.537097143,17.1239077 0.676982857,17.1926769 0.846125714,17.2656 C0.977782857,17.3412923 1.42669714,17.4576 1.78006857,17.5494462 C2.14121143,17.5720615 2.59195429,17.4760615 2.97138286,17.0939077 C2.98875429,17.0740615 3.03035429,17.0283692 3.08932571,16.9600615 C3.14144,16.8848308 3.19492571,16.7694462 3.26532571,16.6452923 C3.33069714,16.5225231 3.40521143,16.3845231 3.48246857,16.2377538 C3.52498286,16.1528308 3.56978286,16.0628308 3.61458286,15.9728308 C3.79195429,15.6146769 3.96749714,15.2579077 3.98029714,15.2112923 C4.04841143,14.9708308 4.11515429,14.7312923 4.18281143,14.4876 C4.26098286,14.2309846 4.47446857,13.8151385 4.32909714,13.8239077 C4.31446857,13.8252923 4.37526857,13.6074462 4.42052571,13.4856 C4.52886857,13.2105231 4.63995429,12.9340615 4.75469714,12.6442154 C4.75104,12.5648308 4.77618286,12.4840615 4.76749714,12.4060615 L4.79309714,12.4106769 L5.01069714,11.8960615 C5.19309714,11.8849846 5.16429714,11.8849846 5.26898286,11.7737538 C5.46189714,11.5651385 5.67218286,11.1119077 5.75264,10.7159077 C5.86052571,10.1874462 6.11149714,9.60775385 6.31538286,9.05852308 C6.40361143,8.81852308 6.48681143,8.5956 6.53252571,8.39621538 C6.54532571,8.33852308 6.55766857,8.27898462 6.57001143,8.22313846 C6.59378286,8.22821538 6.60749714,8.25821538 6.60978286,8.32744615 C6.79995429,7.86175385 6.91835429,7.98036923 7.09846857,7.5876 C7.28452571,7.17821538 7.48246857,6.76790769 7.64932571,6.35529231 C7.76726857,6.06406154 7.92315429,5.62421538 7.91812571,5.50606154 C7.90761143,5.25729231 8.05984,4.8816 8.16544,4.53406154 C8.20018286,4.41590769 8.23584,4.29729231 8.27424,4.16990769 C8.32406857,4.08775385 8.37435429,4.00652308 8.42235429,3.9276 C8.45755429,3.91652308 8.49824,3.90267692 8.55081143,3.8856 C8.54669714,3.82975385 8.59104,3.74252308 8.62075429,3.64652308 C8.67378286,3.55975385 8.76109714,3.48683077 8.80178286,3.38990769 L8.60292571,3.85929231 C8.72909714,3.56113846 8.83058286,3.60544615 8.96452571,3.06498462 C9.06509714,2.90621538 9.16109714,2.75713846 9.26441143,2.59421538 C9.32338286,2.41513846 9.38144,2.24252308 9.43401143,2.08236923 L9.45869714,1.99883077 L9.45778286,1.97944615 L9.45778286,1.93975385 C9.45732571,1.87744615 9.47881143,1.79298462 9.54921143,1.78052308 C9.62509714,1.76990769 9.65709714,1.81098462 9.75492571,1.85990769 C9.82669714,1.89498462 9.92041143,1.92683077 9.99401143,1.94898462 L11.1327543,2.29929231 C11.2237257,2.37729231 11.3183543,2.45806154 11.4129829,2.53929231 C11.7023543,2.7936 11.9793829,2.73175385 12.32544,2.91590769 C12.2481829,3.00913846 12.3684114,3.13098462 12.9585829,3.33267692 C13.1428114,3.39590769 13.3380114,3.47667692 13.5364114,3.56206154 L13.8321829,3.68667692 C13.9021257,3.71667692 13.8682971,3.70098462 13.8906971,3.70836923 L13.9199543,3.71483077 C13.9455543,3.72036923 13.9967543,3.69498462 14.0621257,3.69313846 C14.0401829,3.73098462 13.9962971,3.75636923 13.9400686,3.78267692 C13.9181257,3.84821538 13.8399543,3.87683077 13.8129829,3.87544615 C13.8024686,3.87636923 13.7983543,3.87452308 13.7983543,3.87452308 C13.77184,3.93452308 13.7101257,4.09006154 13.6785829,4.18283077 C13.5231543,4.62636923 13.3956114,5.06113846 13.14144,5.47006154 C12.9764114,6.0696 12.5663543,6.88236923 12.5896686,7.32129231 C12.5914971,7.35729231 12.5928686,7.39421538 12.5905829,7.43344615 C12.48544,7.56175385 12.3885257,7.63975385 12.3044114,7.6356 C12.1297829,7.99513846 11.9601829,8.34313846 11.79104,8.69067692 C11.6433829,8.99344615 11.4842971,9.32898462 11.4618971,9.56483077 C11.4317257,9.86021538 11.1697829,10.2423692 11.1080686,10.6111385 C11.0564114,10.9249846 10.8520686,11.4659077 10.7761829,11.8619077 C10.73184,12.0894462 10.6129829,12.5052923 10.3752686,12.6502154 C10.4145829,12.7563692 10.4296686,12.7988308 10.45344,12.8625231 C10.4063543,12.9036 10.3720686,12.9340615 10.3368686,12.9645231 L10.2861257,12.9949846 C10.17504,13.2696 10.0730971,13.4366769 9.97298286,13.5700615 L11.6762971,14.3085231 C11.8477257,13.8696 12.1956114,12.9599077 12.2161829,12.8865231" id="Fill-10" fill="#000000" mask="url(#mask-8)"></path>
-                    </g>
-                    <path d="M29.2003615,32.5683598 C29.2613571,32.3273725 29.3214491,32.0863851 29.3838002,31.8412507 C29.4533804,31.584136 29.6557956,31.1620625 29.5116652,31.1763467 C29.4976588,31.1768075 29.5523289,30.9583982 29.5943481,30.8353703 C29.6946521,30.5598245 29.7967633,30.2792101 29.9038446,29.9870762 C29.8979709,29.908283 29.9214655,29.827186 29.9110737,29.7497751 C29.9097182,29.7474712 29.9336647,29.7553044 29.9350201,29.7525398 L30.1383389,29.2341635 C30.1677072,29.1576742 30.2892467,29.2198793 30.3900025,29.1056061 C30.5761521,28.8918047 30.7726937,28.4356336 30.8436293,28.0379813 C30.9376078,27.5080856 31.1716504,26.9238179 31.3596073,26.3695008 C31.4418385,26.1280527 31.518196,25.9041141 31.5588598,25.7045968 C31.5697034,25.6460779 31.5814508,25.5866374 31.5918426,25.5308832 C31.6148854,25.5350302 31.6297954,25.5649808 31.6343136,25.6331761 C31.8091678,25.1650247 31.9307073,25.2788371 32.0974287,24.8825672 C32.2722829,24.47017 32.4579808,24.0550082 32.6129549,23.6398464 C32.7227471,23.3458694 32.8659739,22.9026001 32.8582929,22.7851015 C32.8501602,22.6616127 32.8813357,22.5044871 32.9269695,22.335842 L32.9631151,22.2063631 C32.9726033,22.1708832 32.9685369,22.16904 32.9730551,22.1492265 L32.9875133,22.0432474 C32.9938388,21.9930225 33.0064898,21.9381898 33.0412799,21.8916511 C33.0805882,21.8847394 33.1203483,21.8847394 33.1578493,21.8953374 C33.1750185,21.9243664 33.1958022,21.9575425 33.2161341,22.0050027 C33.2224595,21.9759737 33.2527315,21.9851892 33.278937,21.9838069 C33.2992689,22.0063851 33.3557463,21.9068568 33.3485172,22.0764235 C33.3485172,22.0764235 33.2369178,22.0386396 33.2355623,22.044169 C33.2875216,22.1395502 33.2875216,22.1736478 33.3037871,22.1736478 C33.311468,22.1745694 33.3196008,22.1667361 33.3363181,22.156599 C33.3629754,22.1496873 33.5048468,22.1736478 33.6277417,22.1906967 C33.7913004,22.2764015 33.9467264,22.3584202 34.1138996,22.4455074 C34.2941756,22.4878991 34.4690298,22.5284476 34.6303294,22.5657707 C35.257455,22.6911026 35.8927134,22.8758749 36.54243,23.1173231 C36.6165284,23.1445091 36.7118623,23.1666264 36.7859607,23.1809106 L37.9394562,23.4163686 C38.0361456,23.4859462 38.1359977,23.5559846 38.2385607,23.6274054 C38.5480572,23.8522655 38.8146307,23.761492 39.17202,23.9112452 C39.1051507,24.0126166 39.2357266,24.1204388 39.8352912,24.261898 C40.2093978,24.3512891 40.6359156,24.5102578 41.0285468,24.6148546 C41.1622854,24.6507954 41.2811139,24.6494131 41.426148,24.655864 C41.4826255,24.7153044 41.4912101,24.764147 41.4225335,24.7950192 C41.7026616,24.9387822 41.8874558,25.0548985 42.1585476,25.1673286 C42.3474082,25.2244652 42.5742216,25.2866703 42.8032942,25.3451892 C43.0332704,25.4096983 43.2587283,25.3636204 43.4521071,25.3032584 C43.8573893,25.1696325 44.2116159,24.8973121 44.3833073,24.4968952 C44.476834,24.3075151 44.5681015,24.1213604 44.6629837,23.9278332 C44.712232,23.8236972 44.7669022,23.7200219 44.8297051,23.6181898 C44.9937156,23.019638 45.398546,22.2077455 45.3755032,21.7690839 C45.3736959,21.7331432 45.3723404,21.6962809 45.3755032,21.6580362 C45.4789699,21.5294789 45.5752074,21.452068 45.6574386,21.4552935 C45.8313891,21.0972682 45.9981106,20.7503017 46.164832,20.4028744 C46.3112216,20.0996818 46.4684548,19.7646956 46.4914976,19.5301591 C46.5199622,19.2347998 46.7788548,18.8541964 46.8398505,18.4846517 C46.8909061,18.1722436 47.2415181,17.6967197 47.3174238,17.3004498 C47.3603467,17.0737466 47.4778198,16.6595063 47.7136696,16.5139002 C47.6743613,16.4088426 47.6589994,16.3664509 47.6355048,16.3024026 C47.6815904,16.2618541 47.7159287,16.2314427 47.7498152,16.2001097 L47.8008708,16.1692375 C48.1121745,15.3891388 48.2106712,15.4057268 48.5179085,14.7021174 C48.5563132,14.6118047 48.6340261,14.4832474 48.6398998,14.4482282 C48.6737862,14.2570049 48.9209316,13.9704004 48.9905118,13.7584421 C48.99503,13.7492265 48.9968373,13.7464619 49,13.7413933 L47.3038692,13 C47.229319,13.1115085 47.1488951,13.2451344 47.0603385,13.4077894 C46.846176,13.8012946 46.7300583,14.1155458 46.4856239,14.6790784 C46.4381829,14.7901262 45.7699417,16.120395 45.7455434,16.2134723 C45.6786741,16.4530773 45.6118048,16.6926824 45.5449355,16.9359737 C45.468578,17.191706 45.2566746,17.6082501 45.3999014,17.598113 C45.4148115,17.5976522 45.3547195,17.8146791 45.3104411,17.9367855 C45.2029081,18.2095666 45.0940196,18.4869556 44.9806128,18.7763247 C44.985131,18.8555787 44.9584737,18.9366758 44.9670582,19.0131651 C44.9670582,19.0168513 44.9435636,19.0076358 44.94266,19.0099397 L44.7257866,19.5232474 C44.5464142,19.5343061 44.5753306,19.5343061 44.4727676,19.6458146 C44.2816479,19.8545474 44.0742627,20.3061108 43.993387,20.7014591 C43.8872094,21.2295118 43.6391604,21.8073286 43.4385525,22.3574986 C43.3495441,22.5966429 43.2682165,22.8187383 43.2225828,23.0173341 C43.2108355,23.0763138 43.1977327,23.1348327 43.1864372,23.1896654 C43.1633944,23.1845968 43.1489362,23.155107 43.1466771,23.0864509 C43.1231825,23.1449698 43.1010433,23.1933516 43.0798078,23.2357433 C43.0554095,23.2845858 43.0563132,23.2666155 43.0432104,23.2813604 C43.0228785,23.2942622 43.0011912,23.2970269 42.9804075,23.2961053 C42.9374846,23.2942622 42.9045018,23.2804388 42.8760371,23.2984092 C42.8448616,23.3177619 42.8023905,23.315458 42.7725704,23.2965661 L42.7273885,23.275831 L42.4450012,23.1859792 C42.1504149,23.0961273 41.706728,22.9827756 41.5919658,22.9998245 C41.3502423,23.0353044 40.9707139,22.9191882 40.6219091,22.8463851 C40.5026288,22.8238069 40.384252,22.7998464 40.2559353,22.7740428 C40.1709932,22.7316511 40.0878584,22.6897202 40.0056272,22.6487109 C39.9907172,22.6146133 39.973548,22.5754471 39.9514089,22.5243006 C39.8976423,22.5344377 39.8095375,22.4980362 39.7128481,22.4782227 C39.6220324,22.4335272 39.5429639,22.3528908 39.4449191,22.3215579 L39.9215888,22.4749973 C39.6188696,22.3773121 39.6518525,22.2717937 39.111928,22.1902359 C38.9474657,22.104531 38.7924916,22.0234339 38.6244147,21.9358859 C38.4441387,21.893955 38.2692845,21.8534065 38.1093403,21.8156226 C37.4813111,21.68983 36.8451491,21.5059792 36.1963362,21.2654526 C36.1222377,21.2378058 36.0269038,21.2152276 35.9528054,21.1995612 L34.7997618,20.9645639 C34.7026206,20.8972902 34.6005093,20.8254087 34.5002054,20.7544487 C34.3452312,20.6420187 34.2011008,20.6088426 34.0506449,20.5844213 C33.9711246,20.5715195 33.8879898,20.5572353 33.804855,20.5429512 C33.6693091,20.5180691 33.5287932,20.4858146 33.3724636,20.436972 C33.4036392,20.3862863 33.3561981,20.3291498 33.1601084,20.2531212 C32.978477,20.2005924 32.5989485,20.1830828 32.1656535,20.5134613 C32.0323667,20.616215 31.9144418,20.74339 31.8227224,20.8963686 C31.7445576,21.0668568 31.665941,21.2410313 31.5859689,21.4161273 C31.4874723,21.6248601 31.4698513,21.6856829 31.4287357,21.793966 C31.3916865,21.8944158 31.3559928,21.993944 31.3207508,22.09209 C31.2760207,22.2261766 31.2683398,22.3459792 31.2507188,22.4925069 C31.1892713,22.5459572 31.1413785,22.5519473 31.1160766,22.4791443 C30.9556806,22.7496215 30.8242011,22.9431487 30.6994989,23.1896654 C30.6059722,23.3748985 30.5052165,23.6352386 30.4383472,23.8453538 C30.2955722,24.2923094 30.1799064,24.7291278 29.9381829,25.1438289 C29.7895342,25.7465277 29.4036803,26.5676358 29.4371149,27.0058365 C29.439374,27.0413165 29.4416331,27.077718 29.4398258,27.1164235 C29.3399737,27.2468239 29.2464471,27.3269995 29.1628604,27.3260779 C28.9993017,27.6887109 28.8389058,28.0402852 28.6807689,28.390938 C28.5416085,28.697356 28.392508,29.0355677 28.3753389,29.2719473 C28.3536515,29.5677674 28.1033435,29.9543609 28.0513842,30.3239057 C28.0071059,30.6395392 27.8186971,31.1841799 27.7522796,31.5822929 C27.7143268,31.8099177 27.6076974,32.2269227 27.3754621,32.3780581 C27.4165777,32.482655 27.4328432,32.5241251 27.4581451,32.5877126 C27.4129631,32.6296434 27.3808839,32.6605156 27.345642,32.6927702 L27.2959418,32.7250247 C27.192927,33.0010313 27.0957858,33.1715195 27,33.3065277 L28.7015526,34 C28.8596895,33.5590346 29.1818369,32.6425453 29.2003615,32.5683598" id="Fill-13" fill="#000000"></path>
-                    <path d="M8.0877915,52.2403538 C8.15180613,52.0106051 8.2171925,51.7804162 8.28212163,51.5480267 C8.3561957,51.3024333 8.565615,50.9027938 8.42112483,50.9137971 C8.40603567,50.9155576 8.46410608,50.706055 8.50800183,50.5898602 C8.61362597,50.3279819 8.7219936,50.0612621 8.83310471,49.7835391 C8.82853224,49.7078364 8.85276635,49.6308134 8.84316415,49.5564312 C8.8427069,49.5537904 8.86694102,49.5617127 8.86694102,49.5617127 L9.08001829,49.0670048 C9.11156836,48.9948232 9.23411065,49.0555614 9.33653406,48.9481693 C9.52812071,48.7470291 9.73342478,48.3126192 9.80978509,47.9354264 C9.9122085,47.4288349 10.1563786,46.8742691 10.354824,46.3469914 C10.4407865,46.1176828 10.521262,45.904219 10.5642433,45.7140821 C10.5761317,45.6586255 10.5893919,45.6031689 10.6003658,45.5494729 C10.6241427,45.5534341 10.6387746,45.5816025 10.6415181,45.6476222 C10.8257888,45.2026492 10.9465021,45.3131222 11.1211706,44.9368097 C11.303155,44.5442123 11.4970279,44.1511747 11.6593507,43.7568168 C11.7736626,43.4773332 11.9250114,43.0556871 11.9190672,42.9434536 C11.9053498,42.7057825 12.0530407,42.3466351 12.1550069,42.0143357 C12.1888432,41.901662 12.223594,41.7881081 12.2597165,41.6661916 C12.3100137,41.5869679 12.3584819,41.5086245 12.4060357,41.4329218 C12.4412437,41.4214784 12.4814815,41.4082745 12.5345222,41.3911093 C12.5290352,41.3378534 12.5720165,41.2551087 12.5989941,41.1622409 C12.6529492,41.079056 12.5875629,40.9483369 12.7777778,40.9162073 L12.5834476,41.3655817 C12.8577961,41.1397942 12.8093278,41.1208685 12.9368999,40.6037139 C13.0365798,40.4514283 13.13123,40.3075053 13.2327389,40.152579 C13.2908093,39.9804875 13.345679,39.814998 13.3968907,39.6622723 C13.5770462,39.0645736 13.8148148,38.4620334 14.1115684,37.852011 C14.1284865,37.8168005 14.1440329,37.7771886 14.1591221,37.7375768 L14.1778692,37.6785991 L14.1778692,37.6631945 C14.1614083,37.5663656 14.2057613,37.3863517 14.3575674,37.3731478 C14.3895748,37.403957 14.4160951,37.4391675 14.4371285,37.4699767 L14.4590764,37.5091485 C14.4764518,37.5285142 14.4540466,37.5320353 14.5025149,37.5527215 C14.5404664,37.5698866 14.5788752,37.5839708 14.6168267,37.5954142 C14.6922725,37.617861 14.7668038,37.6301846 14.8431642,37.6403077 C14.9954275,37.6601136 15.1545496,37.6711169 15.3360768,37.7380169 C15.2711477,37.8361662 15.4051212,37.9365163 16.0146319,38.0584327 C16.3968907,38.1358959 16.8303612,38.2780584 17.2299954,38.3700459 C17.3667124,38.4017354 17.486054,38.3973341 17.6337449,38.3995347 C17.6918153,38.4563117 17.702332,38.500765 17.6323731,38.5324545 C17.9154092,38.6627334 18.1193416,38.7727663 18.3758573,38.8709157 C18.5669867,38.9435374 18.8349337,39.0183598 19.0489255,39.0641335 C19.5034294,39.1614026 19.9465021,39.233144 20.3799726,39.4281223 C20.9890261,39.517469 21.8372199,39.8154381 22.2670325,39.7423763 C22.3026978,39.7370947 22.3379058,39.7309329 22.3772291,39.7291723 C22.515775,39.814998 22.6035665,39.898623 22.611797,39.9791671 C22.7974394,40.0416658 22.9821674,40.1037244 23.1650663,40.1649026 C23.1929584,40.1776665 23.2926383,40.2009934 23.3813443,40.2225599 L23.6483768,40.2885796 C23.8267032,40.3290717 24.0100594,40.3928908 24.1815272,40.376606 C24.8139003,40.3669231 25.4069502,39.8937816 25.4933699,39.4756565 C25.5098308,39.4369249 25.523091,39.4008342 25.5381802,39.3638631 C25.5724737,39.2437072 25.6314586,39.0852598 25.6739826,38.9752269 C25.704161,38.8999644 25.73754,38.8220611 25.7695473,38.7410769 C25.8372199,38.5804288 25.905807,38.4136189 25.9295839,38.2494498 C25.9734797,37.9483998 26.3159579,37.4871419 26.3831733,37.106428 C26.4220393,36.889003 26.530407,36.491124 26.7654321,36.3463207 C26.7238226,36.2464108 26.7069044,36.206799 26.6817558,36.146501 C26.7274806,36.106449 26.7608596,36.0760799 26.7946959,36.0457108 L26.8459076,36.0153417 C27.1412894,35.2627167 27.2427984,35.2768009 27.5354367,34.5967975 C27.5720165,34.511412 27.647005,34.3859745 27.6529492,34.3516442 C27.6822131,34.1676692 27.9254687,33.8886257 27.9903978,33.6844047 C27.9954275,33.6769224 27.9972565,33.6725211 28,33.6681198 L26.2665752,33 C26.1929584,33.1095928 26.1147691,33.2381112 26.0297211,33.3956783 C25.8230453,33.7763922 25.7123914,34.0792027 25.4791952,34.6236455 C25.4330133,34.7310377 24.7896662,36.0171023 24.7672611,36.1060088 C24.7050754,36.3370779 24.6433471,36.5672668 24.5820759,36.8005365 C24.5102881,37.0465701 24.306813,37.4497307 24.4513032,37.4365267 C24.4659351,37.4356465 24.4110654,37.6442689 24.3685414,37.761784 C24.2816644,37.9884518 24.1943301,38.2173202 24.1024234,38.4580722 L24.1074531,38.4677551 C24.1216278,38.5034058 24.1197988,38.534215 24.138546,38.5804288 C24.136717,38.5791084 24.1184271,38.5663446 24.1184271,38.5663446 C24.1184271,38.5663446 24.0973937,38.6156393 24.0553269,38.6482091 C24.0155464,38.6834196 23.962963,38.6975038 23.962963,38.6975038 C23.8719707,38.534215 23.8884316,38.5619433 23.8417924,38.5078071 C23.8029264,38.4536709 23.7814358,38.4153795 23.7576589,38.4034959 C23.572931,38.3453985 23.347508,38.2974242 23.1499771,38.28334 C22.6168267,38.2410873 22.0169182,38.0685557 21.4517604,37.9360761 C21.2043896,37.8797393 20.9762231,37.8260432 20.7741198,37.805357 C20.7146776,37.7996353 20.6566072,37.7943537 20.5994513,37.7899524 C20.6021948,37.7661853 20.6291724,37.7490202 20.696845,37.7402176 C20.216278,37.611259 20.3187014,37.4845011 19.9103795,37.3577432 C19.486054,37.2274642 19.0580704,37.0857418 18.6323731,36.9730681 C18.3315043,36.8942846 17.8797439,36.7965754 17.7645176,36.8150609 C17.521262,36.8529122 17.1321445,36.7516819 16.7791495,36.6905036 C16.657979,36.6698175 16.5377229,36.6500115 16.4074074,36.6284451 C16.3209877,36.5892734 16.2341107,36.551422 16.1522634,36.5148911 C16.1353452,36.4823214 16.1175126,36.4453503 16.094193,36.3969358 C16.0397805,36.4070589 15.9492455,36.374049 15.8513946,36.3582043 C15.7581161,36.3168319 15.6771834,36.2415694 15.5765889,36.2138411 L16.0617284,36.3498418 C15.7544582,36.2631358 15.7850937,36.1623457 15.2368541,36.0963259 C15.1577503,36.0593549 15.0804755,36.0232641 15.003658,35.9871733 C14.9775949,35.9730891 14.9021491,35.9453608 14.8239598,35.9154319 C14.7489712,35.8881437 14.6735254,35.8586549 14.5967078,35.8300463 L14.5400091,35.8146417 C14.2025606,35.7464213 13.8875171,35.7811917 13.6282579,35.8969463 C13.3749428,36.0043384 13.1508916,36.1843523 12.9935985,36.4000168 C12.9176955,36.5118102 12.872428,36.6526523 12.8093278,36.7758892 L12.7201646,36.9673464 C12.6881573,37.0342464 12.6593507,37.096305 12.650663,37.1240333 C12.5313214,37.4250833 12.3982625,37.7278939 12.2496571,38.0337853 C12.216278,38.102886 12.1851852,38.193113 12.1641518,38.2648544 L11.829904,39.3638631 C11.7530864,39.4523296 11.6748971,39.5447572 11.5953361,39.6363046 C11.3465935,39.9179888 11.4106081,40.1847086 11.2318244,40.5183283 C11.1380887,40.4452665 11.0192044,40.5632218 10.8257888,41.1327521 C10.7055327,41.4888186 10.5102881,41.8880179 10.3712849,42.2616897 C10.3241884,42.3884476 10.3155007,42.5033219 10.2953818,42.6432838 C10.2322817,42.6934588 10.1838134,42.6978601 10.1586648,42.6291996 C9.99359854,42.8844759 9.85779607,43.0680108 9.72885231,43.3017207 C9.63100137,43.4773332 9.52629172,43.7255675 9.45496113,43.9249471 C9.30452675,44.3487938 9.1824417,44.7655985 8.93278464,45.1577557 C8.77366255,45.7321275 8.37265661,46.5107203 8.40146319,46.9297257 C8.40283493,46.9640559 8.40420668,46.9988263 8.40192044,47.0362375 C8.29858253,47.1594744 8.20256059,47.2338566 8.11796982,47.2325362 C7.9478738,47.5767191 7.78143576,47.9103389 7.6168267,48.2435185 C7.47187929,48.5335653 7.31641518,48.8553015 7.29583905,49.0802087 C7.27069044,49.3627732 7.01143118,49.7289628 6.95427526,50.0823884 C6.90534979,50.3812378 6.70781893,50.9005931 6.63465935,51.2782261 C6.59350709,51.4960912 6.47965249,51.8926498 6.24279835,52.0339321 C6.28349337,52.1347222 6.29949703,52.1747742 6.32327389,52.2350722 C6.27663466,52.2751242 6.24371285,52.3041729 6.20896205,52.3349821 L6.15775034,52.3640308 C6.08824874,52.532161 6.09693644,52.4973906 6.06812986,52.5365624 C6.04618198,52.5576887 6.02286237,52.5678117 6,52.5700124 L7.30772748,54 C7.40649291,53.805902 7.53132144,53.558548 7.66438043,53.2957894 C7.69318701,53.237692 7.74028349,53.1496657 7.75445816,53.1131348 L7.79698217,53.0044223 C7.8253315,52.9322407 7.85276635,52.8591788 7.88065844,52.789638 C7.98491084,52.5101545 8.07361683,52.2768847 8.0877915,52.2403538" id="Fill-15" fill="#000000"></path>
-                </g>
-                <g id="Group-15" transform="translate(203.000000, 378.000000)">
-                    <path d="M5.26116369,18.2052576 C5.35661925,18.6158699 5.73048684,18.7905257 6.09225676,18.5936099 L32.6232664,4.11909639 C32.9843734,3.92200931 33.1075044,3.46499331 32.8975354,3.10318185 L32.4214176,2.28675162 C32.2109514,1.92459769 31.7046724,1.65028535 31.2968319,1.67631249 L2.58741384,3.52988993 C2.17940763,3.55625953 1.92436232,3.91344775 2.02014932,4.32388887 L5.26116369,18.2052576 Z" id="Fill-1" fill="#000000"></path>
-                    <g id="Group-5" transform="translate(4.000000, 0.674603)">
-                        <mask id="mask-10" fill="white">
-                            <use xlink:href="#path-9"></use>
-                        </mask>
-                        <g id="Clip-4"></g>
-                        <path d="M24.3817797,2.03458909 C24.6482203,1.99024364 24.9117797,1.94573455 25.1858475,1.89909818 C25.4731356,1.85557091 25.9836441,1.85557091 25.9036441,1.74364364 C25.895678,1.73235273 26.1366949,1.69095273 26.2780508,1.67720727 C26.5960169,1.65200727 26.9221186,1.62549818 27.2605932,1.59833455 C27.3341525,1.56282545 27.4434746,1.54809818 27.4488983,1.51880727 C27.4499153,1.51766182 27.4504237,1.54008 27.4514407,1.54008 C27.4482203,1.53828 27.5099153,1.53860727 27.5941525,1.56429818 C27.6355085,1.57460727 27.6765254,1.59080727 27.7073729,1.60668 C27.7390678,1.61911636 27.7590678,1.62877091 27.7590678,1.62958909 C27.8007627,1.65904364 27.7417797,1.75788 27.765678,1.83773455 C27.7660169,1.85344364 27.7904237,1.87929818 27.7768644,1.88273455 C27.7673729,1.88797091 27.7599153,1.88731636 27.7575424,1.88224364 C27.7821186,1.92429818 27.8083898,1.96717091 27.8344915,2.01069818 L27.8372034,2.01478909 L27.8378814,2.01609818 L27.8382203,2.01642545 L27.8387288,2.01642545 C27.7607627,1.90237091 27.8172034,1.98500727 27.7994068,1.95997091 L27.8007627,1.96193455 L27.8051695,1.97060727 L27.8148305,1.98828 L27.8341525,2.02378909 L27.8744915,2.09480727 C27.9304237,2.18955273 27.9931356,2.28544364 28.0594068,2.37773455 C28.0877119,2.41618909 28.1370339,2.48524364 28.1514407,2.49637091 L28.1873729,2.50946182 C28.2665254,2.53057091 28.3202542,2.62728 28.2787288,2.70451636 C28.2609322,2.74280727 28.2248305,2.77078909 28.1855085,2.79369818 L28.1565254,2.81218909 L28.0639831,2.86406182 L27.8538136,2.97958909 C27.6136441,3.11491636 27.3905932,3.24009818 27.2124576,3.36757091 C27.1605932,3.40471636 27.1094068,3.44186182 27.0595763,3.47835273 C27.044661,3.46231636 27.054322,3.43204364 27.1022881,3.37853455 C26.6217797,3.63037091 26.6122881,3.47622545 26.1917797,3.67995273 C25.7536441,3.89120727 25.3055085,4.09755273 24.8809322,4.32173455 C24.5804237,4.48046182 24.1444915,4.73164364 24.064322,4.82426182 C23.8948305,5.01964364 23.5075424,5.22353455 23.1770339,5.43168 C23.064661,5.50286182 22.9527966,5.57420727 22.8316102,5.64997091 C22.7331356,5.68580727 22.6366949,5.72082545 22.5424576,5.75502545 C22.5065254,5.74553455 22.465339,5.73358909 22.4114407,5.71918909 C22.375,5.76369818 22.2790678,5.80591636 22.1873729,5.86368 C22.0829661,5.90115273 22.034322,6.04040727 21.8622881,5.96235273 L22.3531356,5.71166182 C21.9702542,5.74095273 21.9934746,5.78218909 21.5021186,6.12320727 C21.3127966,6.18768 21.124661,6.25231636 20.9316102,6.31858909 C20.7548305,6.42233455 20.5821186,6.52362545 20.4334746,6.61804364 C19.8399153,6.99391636 19.1997458,7.34066182 18.5082203,7.66286182 C18.4295763,7.69918909 18.3373729,7.75449818 18.2672034,7.79917091 L17.174661,8.48775273 C17.0478814,8.51638909 16.9165254,8.54617091 16.7861864,8.57529818 C16.3804237,8.66284364 16.2283898,8.90993455 15.8366949,9.07668 C15.8199153,8.96737091 15.6388983,8.99584364 15.0572034,9.34193455 C14.6933051,9.55826182 14.2397458,9.76869818 13.8500847,9.98813455 C13.7173729,10.06308 13.6229661,10.1493164 13.5016102,10.2499527 C13.4148305,10.2543709 13.3731356,10.2319527 13.4066949,10.1635527 C13.0848305,10.2758073 12.8407627,10.3473164 12.5633051,10.4621891 C12.3563559,10.5482618 12.085678,10.6873527 11.8794068,10.8068073 C11.4414407,11.0614255 11.0311017,11.3235709 10.5407627,11.4986618 C9.98262712,11.8661891 9.08177966,12.2652982 8.78686441,12.6123709 C8.76228814,12.6408436 8.7370339,12.6693164 8.70720339,12.6971345 C8.5329661,12.7390255 8.40228814,12.7460618 8.33838983,12.6987709 C7.94533898,12.8777891 7.56432203,13.0518982 7.18398305,13.2258436 C6.85127119,13.3770436 6.48754237,13.5473891 6.30161017,13.71348 C6.06737288,13.92408 5.58991525,14.0728255 5.27805085,14.3217164 C5.01313559,14.5328073 4.39601695,14.7054436 4.05279661,14.9661164 C3.85686441,15.1146982 3.46754237,15.3675164 3.17669492,15.3506618 C3.13127119,15.4524436 3.11364407,15.4922073 3.08669492,15.5540618 C3.02144068,15.56028 2.97228814,15.5648618 2.92313559,15.5697709 L2.86059322,15.5653527 C2.49415254,15.7597527 2.28076271,15.8513891 2.08330508,15.9312436 C1.98466102,15.9701891 1.89025424,16.0079891 1.78245763,16.0511891 C1.755,16.0621527 1.72771186,16.0737709 1.69838983,16.08588 C1.67550847,16.0952073 1.62364407,16.1194255 1.63313559,16.1127164 C1.62584746,16.1117345 1.61923729,16.11108 1.61313559,16.1117345 C1.61025424,16.1109164 1.60567797,16.1117345 1.60076271,16.1136982 C1.5929661,16.1166436 1.58601695,16.0965164 1.58313559,16.1050255 C1.57245763,16.1310436 1.56279661,16.1079709 1.57127119,16.08228 C1.57788136,16.0557709 1.59771186,16.03548 1.59110169,16.0423527 L1.59245763,16.04088 L0.159067797,17.2463891 C0.246186441,17.4535527 0.407711864,17.6775709 0.695508475,17.8443164 C0.901949153,17.9516618 1.12161017,17.999935 1.33872881,17.999935 C1.44771186,17.9901164 1.55533898,17.98848 1.67076271,17.9482255 C1.78618644,17.9086255 1.905,17.8673891 2.03042373,17.8236982 C2.24686441,17.7142255 2.5109322,17.5805345 2.83686441,17.4157527 C2.95398305,17.3579891 4.43347458,16.7055709 4.52025424,16.6484618 C4.74364407,16.5021709 4.96567797,16.3571891 5.19601695,16.2059891 C5.4390678,16.0526618 5.90483051,15.8502436 5.78415254,15.7797164 C5.77110169,15.7725164 5.97432203,15.6391527 6.09720339,15.5704255 C6.37669492,15.4211891 6.66262712,15.2683527 6.95957627,15.1091345 C7.01279661,15.0471164 7.09059322,14.9991709 7.13957627,14.9353527 C7.14127119,14.9330618 7.15347458,14.9526982 7.15550847,14.95188 L7.69483051,14.6771345 C7.84415254,14.7669709 7.82144068,14.7512618 7.98279661,14.72148 C8.28364407,14.6668255 8.77110169,14.4351164 9.11686441,14.1767345 C9.57923729,13.8321164 10.1888983,13.5252982 10.7416102,13.2156982 C10.9824576,13.0813527 11.2058475,12.9566618 11.3836441,12.8290255 C11.435678,12.7910618 11.4866949,12.7539164 11.5365254,12.7172618 C11.5507627,12.7341164 11.5412712,12.7635709 11.4938136,12.8177345 C11.9739831,12.5654073 11.9833051,12.7192255 12.4038136,12.5163164 C12.8421186,12.3053891 13.2900847,12.0982255 13.714661,11.8740436 C14.014661,11.7156436 14.4519492,11.4644618 14.5321186,11.3711891 C14.7012712,11.1764618 15.0882203,10.9719164 15.4194068,10.7647527 C15.5317797,10.6929164 15.6434746,10.6220618 15.7638136,10.5458073 C15.8621186,10.5102982 15.9594068,10.4754436 16.0533051,10.4407527 C16.0895763,10.4508982 16.1307627,10.4621891 16.184322,10.4772436 C16.2207627,10.43208 16.3173729,10.3908436 16.4090678,10.3327527 C16.5129661,10.2949527 16.6331356,10.2867709 16.7338136,10.2348982 L16.2433051,10.4852618 C16.555,10.3260436 16.6027966,10.4142436 17.0948305,10.07388 C17.2829661,10.0087527 17.4707627,9.94444364 17.6639831,9.87768 C17.8414407,9.77344364 18.0136441,9.67280727 18.1626271,9.57822545 C18.7561864,9.20251636 19.3960169,8.85560727 20.0875424,8.53308 C20.1668644,8.49691636 20.2582203,8.44128 20.3290678,8.39726182 L21.4211017,7.70835273 C21.5480508,7.67922545 21.6795763,7.64993455 21.8092373,7.62031636 C22.215678,7.53277091 22.3677119,7.28649818 22.7590678,7.11877091 C22.7758475,7.22808 22.9572034,7.19977091 23.5388983,6.85417091 C23.9022881,6.63751636 24.3558475,6.42691636 24.745339,6.20797091 C24.8787288,6.13269818 24.9722881,6.04646182 25.0938136,5.94615273 C25.1809322,5.94140727 25.2222881,5.96349818 25.1888983,6.03223411 C25.5109322,5.92046182 25.755339,5.84878909 26.0319492,5.73358909 C26.2397458,5.64768 26.5099153,5.50891636 26.7160169,5.38913455 C27.1544915,5.13468 27.564661,4.87237091 28.0551695,4.69711636 C28.1944915,4.60531636 28.3555085,4.51155273 28.5227966,4.41729818 C28.6070339,4.36968 28.6922881,4.32271636 28.7773729,4.27411636 L28.9048305,4.20342545 L29.1361864,4.06613455 C29.7970339,3.73248 29.9944915,3.05175273 29.8866949,2.70451636 C29.8739831,2.64626182 29.8627966,2.58768 29.8373729,2.52451636 C29.8509322,2.24682545 29.7999153,2.04866182 29.8366949,1.97257091 C29.6117797,1.54711636 29.5558475,1.45777091 29.445339,1.25911636 L29.3692373,1.12444364 L29.3504237,1.09040727 L29.3411017,1.07371636 L29.2877119,0.99468 L29.2439831,0.931025455 C29.2261864,0.906152727 29.2224576,0.896170909 29.1929661,0.859189091 L29.0768644,0.728770909 L28.9522881,0.604407273 L28.8507627,0.521443636 C28.6116102,0.328516364 28.3416102,0.184025455 28.0478814,0.103843636 C27.9080508,0.0591709091 27.7465254,0.0405163636 27.6039831,0.032234114 C27.4504237,0.0308618182 27.285678,0.0457527273 27.2544915,0.0660436364 C26.9514407,0.163898182 26.4526271,0.11088 26.0624576,0.21348 C25.7314407,0.300698182 25.104322,0.360589091 24.6809322,0.461225455 C24.4387288,0.520298182 23.9761864,0.595734545 23.7183898,0.464661818 C23.6344915,0.539116364 23.6009322,0.569552727 23.5499153,0.614552727 C23.4870339,0.594261818 23.4412712,0.579370909 23.3939831,0.563825455 L23.3390678,0.536007273 C23.0172034,0.560552727 22.804661,0.54648 22.6263559,0.521116364 L22.7344915,2.18677091 C23.244661,2.14422545 24.3004237,2.04866182 24.3817797,2.03458909" id="Fill-3" fill="#000000" mask="url(#mask-10)"></path>
-                    </g>
-                    <path d="M5.64716869,16.3863544 C5.55595186,16.1378771 5.46540946,15.8915576 5.3713263,15.635611 C5.27724313,15.3653898 5.18939846,14.8734147 5.08958263,14.970847 C5.07929755,14.9804741 4.99583668,14.7545705 4.95756271,14.6209538 C4.87679956,14.3181998 4.79401313,14.0086406 4.70819175,13.6871305 C4.65895826,13.6209031 4.63012633,13.5350896 4.57836373,13.4733437 C4.57667765,13.4713519 4.59809084,13.4637167 4.59758502,13.4613929 L4.45595445,12.8821105 C4.43521569,12.7971269 4.56167155,12.7795326 4.57178802,12.6191926 C4.59050349,12.3197583 4.47888511,11.799234 4.30589349,11.406683 C4.07490078,10.8818431 3.91893855,10.2262082 3.7452725,9.62435201 C3.66923037,9.36243002 3.59959534,9.11876622 3.51613447,8.91825813 C3.49118051,8.85949997 3.46656377,8.80157172 3.44262146,8.74513733 C3.46201136,8.73551028 3.49033748,8.75260659 3.53215221,8.8108668 C3.39777178,8.29183635 3.55390262,8.32138141 3.4542554,7.87173207 C3.3507302,7.40332659 3.25411792,6.92628997 3.13474359,6.46651563 C3.04942803,6.14218384 2.90560556,5.66498124 2.8331042,5.56588908 C2.75655625,5.46115348 2.69113642,5.30380111 2.62858292,5.12719465 C2.61340821,5.08304303 2.59789629,5.03839347 2.58221577,4.99225005 C2.56754689,4.94726852 2.5656922,4.95357589 2.55608155,4.9313341 L2.50735389,4.82991817 C2.48644653,4.78111902 2.4687427,4.72451864 2.47599284,4.66293876 C2.50684807,4.63289574 2.54427901,4.61181583 2.58305881,4.59969904 C2.61340821,4.61596542 2.64662395,4.63472156 2.68590957,4.66227482 C2.68051412,4.63488754 2.71356126,4.62808222 2.73969547,4.6151355 C2.76650411,4.62160886 2.77206817,4.56998799 2.80899328,4.59870314 C2.82113304,4.60949206 2.8352961,4.63073795 2.84979637,4.66841621 L2.82905761,4.66941211 C2.79348136,4.67306375 2.75503878,4.67007605 2.72232886,4.68700637 C2.83242977,4.75389772 2.83361002,4.77995713 2.85451739,4.75837928 C2.8610931,4.75074404 2.86935488,4.74078502 2.87947135,4.72933216 C2.92836762,4.71422766 3.04200929,4.69314776 3.15160437,4.67007605 C3.35039299,4.68650841 3.54783274,4.70227685 3.75151099,4.71837725 C3.95603227,4.69331374 4.15482089,4.66941211 4.33034163,4.64219082 C5.02770356,4.53330563 5.75474047,4.47039788 6.51836528,4.45097781 C6.60570413,4.44882002 6.71226427,4.43437946 6.7948821,4.42176471 L8.07680735,4.22441031 C8.20376903,4.24930784 8.33511452,4.27437135 8.46679723,4.29960084 C8.87179321,4.38226063 9.11408264,4.21461728 9.5401546,4.21760498 C9.50879355,4.32599222 9.68532593,4.3724676 10.3590828,4.28599019 C10.7802651,4.23204555 11.2810303,4.22009474 11.7273352,4.1741173 C11.8797567,4.15884682 12.0014915,4.11635504 12.1542502,4.07236941 C12.2348448,4.10307636 12.262665,4.14075462 12.2034837,4.19054967 C12.5428912,4.21611113 12.7951285,4.24797997 13.0944074,4.25345742 C13.3200047,4.25744103 13.6240046,4.23802096 13.8614044,4.20980376 C14.3665534,4.15104559 14.8492776,4.07286736 15.3684211,4.10855381 C16.0302067,3.99319527 17.0153822,3.98638995 17.4311691,3.78471998 C17.4650593,3.76778966 17.4996239,3.75185524 17.5389095,3.73824459 C17.714093,3.77011343 17.8358279,3.81592488 17.8739332,3.88563795 C18.3057379,3.87767075 18.7254027,3.87036747 19.1440559,3.86256625 C19.5090919,3.85576092 19.9118959,3.84530396 20.1509818,3.76563187 C20.452284,3.6657098 20.9481596,3.72015239 21.3364634,3.61541679 C21.6657545,3.52744553 22.2990454,3.61558277 22.7202278,3.51300496 C22.9615055,3.45408081 23.4216363,3.37723045 23.6779202,3.50918734 C23.7620555,3.43349886 23.7947654,3.40345584 23.8455163,3.35764439 C23.9077326,3.37855832 23.9535939,3.39349683 24.0002983,3.40909928 L24.0559389,3.43798041 C24.9650722,3.36710545 24.9974449,3.45574065 25.831885,3.41341485 C25.9370963,3.40777141 26.1003087,3.41756444 26.1377396,3.40843535 C26.3393946,3.35532062 26.7386579,3.43847836 26.9792612,3.40743945 C26.9880288,3.40777141 26.9935929,3.40843535 27,3.40843535 L26.8915852,1.70677235 C26.7464138,1.69199982 26.577806,1.68104491 26.3761511,1.67656335 C25.8898861,1.66577442 25.5273793,1.70146088 24.859861,1.73615143 C24.7293585,1.74312274 23.1117351,1.75042601 23.0083785,1.76934814 C22.7441701,1.8139977 22.4811419,1.85881325 22.2088402,1.90611855 C21.9225442,1.94977222 21.414866,1.94977222 21.4951233,2.06363691 C21.5030479,2.07525575 21.2622759,2.1170836 21.1223315,2.13086023 C20.8055174,2.15658768 20.4814531,2.18297906 20.1449119,2.21053232 C20.0695442,2.24704869 19.9790018,2.26032737 19.9081866,2.29900153 C19.905826,2.29999743 19.9022853,2.27709171 19.8999248,2.27758966 L19.2956344,2.31476997 C19.1971674,2.17136021 19.2113304,2.1945979 19.0530077,2.15658768 C18.7569324,2.08704058 18.2162071,2.10546475 17.7933387,2.20488888 C17.2283339,2.33750971 16.5453036,2.37568592 15.9136987,2.44008752 C15.6375191,2.46764078 15.3820783,2.49320225 15.1667661,2.5390137 C15.1038754,2.55378623 15.0416591,2.56772884 14.9812975,2.58150548 C14.975059,2.55942967 14.996135,2.53569402 15.0623979,2.50531904 C14.5196493,2.54548705 14.576976,2.39975353 14.1090893,2.41784573 C13.6221499,2.43743178 13.128972,2.44739079 12.6481025,2.48473709 C12.3093694,2.51063051 11.8067495,2.56739688 11.6951311,2.6205116 C11.4589116,2.73271646 11.0212057,2.76607914 10.6327333,2.82483731 C10.5007133,2.84591721 10.3697051,2.8661672 10.2277373,2.88857498 C10.123369,2.88243359 10.0203497,2.87562826 9.92087105,2.86915491 C9.89254494,2.84558525 9.86000363,2.81836395 9.81734585,2.78300946 C9.76507743,2.80923486 9.66037197,2.80923486 9.55229436,2.82633116 C9.44269928,2.81902789 9.32956344,2.77869389 9.21676481,2.78583118 L9.76710072,2.75130661 C9.4172395,2.77288447 9.4106638,2.67279641 8.82121086,2.78998077 C8.62242225,2.77421234 8.42447667,2.75811194 8.22130425,2.74184555 C8.01644575,2.76674308 7.81782574,2.79081069 7.64247361,2.81836395 C6.94561749,2.9275811 6.21841197,2.99048886 5.45428134,3.01007491 C5.36727971,3.01206671 5.261394,3.02567736 5.17810174,3.03895604 L3.89583928,3.23680839 C3.76870898,3.21191087 3.63635185,3.18668137 3.50652383,3.16194983 C3.32796815,3.12559944 3.18127934,3.13738427 3.0357708,3.16211581 C2.96444969,3.17572646 2.89093668,3.18933711 2.8159062,3.20344571 C2.72924178,3.21855021 2.56198283,3.23680839 2.4254105,3.24693339 C2.35122306,3.26021207 2.27214599,3.27149895 2.18801069,3.28162394 C2.19273171,3.25440265 2.17772561,3.23299077 2.13287593,3.22103996 C2.086846,3.20676538 2.01164691,3.20410964 1.91199969,3.23498257 C1.80695702,3.25606248 1.67426267,3.31498663 1.5240331,3.42719149 C1.37161163,3.53508077 1.2048585,3.71633477 1.10470546,3.98340224 C1.03389017,4.14722797 1.00303494,4.33097173 1,4.51803515 C1.00691292,4.70875021 1.06929781,4.91539968 1.10116469,5.11673769 C1.14466551,5.36089944 1.16540427,5.41484408 1.19558507,5.53916573 C1.22593448,5.65037469 1.25527224,5.75975782 1.28494721,5.86665121 C1.32642474,6.01188678 1.38931545,6.1224318 1.46080517,6.26318583 C1.44343856,6.34617758 1.41106586,6.3802042 1.35070426,6.33123907 C1.38341418,6.66486593 1.39555394,6.91450514 1.44242691,7.20630416 C1.47766595,7.42473847 1.54966149,7.71686945 1.61845348,7.94161113 C1.76547949,8.42146947 1.92683718,8.87626431 1.9812975,9.38516976 C2.211953,10.0064461 2.38899121,10.9615152 2.66348473,11.3291687 C2.68590957,11.3590457 2.70765998,11.3897527 2.72856735,11.4257711 C2.7273871,11.6008837 2.70192732,11.7276951 2.63920521,11.7759963 C2.72199165,12.1931129 2.80208036,12.5984446 2.88301211,13.0034444 C2.95230993,13.3563254 3.03290446,13.7443948 3.15362766,13.9624972 C3.30588052,14.2381958 3.33808462,14.7280131 3.50922155,15.0865375 C3.65489871,15.3902874 3.82316931,15.9841764 3.99953309,16.3749016 C4.10052917,16.5984814 4.25699722,17.0313664 4.16864673,17.3027494 C4.25902052,17.3708027 4.29493398,17.398024 4.34939431,17.4388559 C4.33995227,17.5029255 4.33270213,17.5500649 4.32511478,17.598698 L4.30589349,17.6569582 C4.32663225,17.7392861 4.34517911,17.8148086 4.36271433,17.8855175 C4.39137766,17.9909171 4.41666883,18.0875195 4.44212861,18.1793084 C4.48680968,18.3620562 4.52036264,18.5215664 4.54953179,18.6746032 L5.96634329,17.4601018 C5.96398278,17.4617616 5.95943036,17.4625915 5.95352909,17.4612637 C5.91205157,17.3145343 5.86838214,17.1590077 5.82808487,17.014768 C5.73838552,16.6940879 5.66133174,16.4246966 5.64716869,16.3863544" id="Fill-6" fill="#000000"></path>
-                    <path d="M3.2836888,16.2345207 C3.38051784,16.6267275 3.7536435,16.7871162 4.1129126,16.5906851 L30.7559214,2.01874403 C31.1155244,1.82231297 31.0726191,1.66733066 30.6612627,1.6748668 L0.592843412,2.22615164 C0.181153082,2.23368778 -0.0761116376,2.56101827 0.0202165539,2.95355274 L3.2836888,16.2345207 Z" id="Fill-8" fill="#FC6EB3"></path>
-                    <path d="M23.5967703,3.15816928 C23.9103584,3.12202552 24.2212875,3.08588176 24.5440157,3.04870532 C24.8727264,3.01428269 25.2323473,3.03992755 25.5055528,2.91204748 C25.5334716,2.89913899 25.8281148,2.86540482 25.9700354,2.85679916 C26.2746496,2.84475124 26.5860773,2.83167064 26.9101349,2.81859004 C27.073327,2.7827905 27.1803491,2.77280794 27.3523489,2.7330498 C27.3476958,2.73494305 27.2956804,2.7552524 27.2933538,2.75662931 L27.8414267,2.74578618 C27.9216932,2.74440927 27.5223545,2.88209979 27.5133806,2.93115204 C27.5049053,2.97693414 27.6062771,3.00171843 27.7860876,3.00430013 C27.8763252,3.00533281 27.9856738,3.00068575 28.1116409,2.99070319 C28.1852601,2.98192542 28.2209895,2.96677946 28.3095653,2.95731324 C28.4184154,2.95559211 28.4428444,2.9647141 28.456139,2.97418033 C28.3820212,3.03321514 28.2881276,3.09810179 28.1859248,3.16574226 C27.9675599,3.30446546 27.7458712,3.44542613 27.5309961,3.58191185 C27.34969,3.69998147 27.1798505,3.81013389 27.1098873,3.88947805 L27.0545483,3.95711852 C26.9839203,3.97209236 26.9320711,3.9751904 26.9033214,3.95987233 C26.4958397,4.20375666 26.111956,4.25590694 25.7210927,4.4700157 C25.3121153,4.69324645 24.8748868,4.92181271 24.5250708,5.13265132 C24.2777899,5.28084074 23.9622076,5.49408893 24.0015931,5.52592987 C24.0850171,5.59339822 23.7561402,5.79115623 23.5434254,5.95552429 C23.4718004,6.01163317 23.4000092,6.0682584 23.3230663,6.12867011 C23.2062393,6.1808204 23.0914066,6.23124955 22.9795652,6.28064602 C22.8921527,6.30147171 22.7916117,6.32522333 22.6609916,6.35517102 C22.6804351,6.37169388 22.5822207,6.42160669 22.5242227,6.4675609 C22.4024102,6.52160443 22.5783985,6.54070899 22.1072685,6.63571545 L22.5370188,6.38752829 C21.8754427,6.5932035 22.0067276,6.57375471 21.7483124,6.81884384 C21.5249619,6.91419452 21.3036056,7.00902887 21.0751034,7.10592857 C20.9479731,7.19456684 20.822837,7.28027919 20.7262845,7.35600898 C20.3428994,7.65514163 19.810614,7.98422197 19.1565161,8.32948094 C19.0822321,8.36872274 19.0160911,8.41639808 18.967067,8.45288607 L18.2074427,9.03204682 C18.0425888,9.08849993 17.8719184,9.14770685 17.7027437,9.20622532 C17.1752776,9.38315764 17.2841278,9.50036669 16.8930982,9.6915844 C16.7154482,9.66903758 16.4726542,9.74098088 16.0354257,10.0457933 C15.7598936,10.2378715 15.3396158,10.4586927 15.0260278,10.661442 C14.9185071,10.7309757 14.8822791,10.7931086 14.8201265,10.8702152 C14.6984803,10.8980976 14.6125635,10.9008514 14.5826505,10.8638471 C14.2441349,11.0034308 13.9759149,11.1023959 13.7111847,11.2270058 C13.5129279,11.3209796 13.2840934,11.4536788 13.123394,11.561938 C12.7825519,11.7913648 12.4777715,12.0242339 11.9901894,12.2264669 C11.5850343,12.5486627 10.7675782,12.9563987 10.6530778,13.2322961 C10.6429406,13.2544987 10.6321387,13.2773897 10.6146895,13.3016577 C10.4283979,13.3582829 10.2731826,13.384272 10.1640001,13.3625857 C9.81385167,13.5422719 9.47417281,13.7167946 9.13499249,13.8914895 C8.84018315,14.0420885 8.52310522,14.208694 8.39996333,14.356195 C8.24142436,14.5439704 7.78741132,14.706101 7.55558548,14.9360442 C7.35267555,15.1329416 6.76970419,15.3188238 6.49998854,15.565634 C6.34477325,15.7077995 6.01174172,15.9573636 5.72623864,15.9465204 C5.70230823,16.0439365 5.69333433,16.0823177 5.67887637,16.1411804 C5.6165576,16.1482371 5.57002625,16.1539168 5.52332871,16.1590802 L5.46300414,16.1556379 C5.11534847,16.3649275 4.92357283,16.4530494 4.73927544,16.5337705 C4.64720984,16.5743892 4.55730462,16.6146637 4.44945159,16.6625111 C4.40807193,16.6754196 4.41455308,16.6625111 4.39643909,16.6709447 C4.38896084,16.6745591 4.38214732,16.6530449 4.37882365,16.6618227 C4.36918501,16.6895329 4.35971256,16.6656092 4.36752318,16.637899 C4.3743367,16.6093282 4.39411252,16.587814 4.38713282,16.5948707 L4.38896084,16.5933217 L3,17.9082661 C3.08575063,18.1184163 3.23930409,18.3473268 3.516498,18.5166861 C3.68450942,18.6125531 3.8648184,18.6619496 4.0389786,18.6698668 C4.12655725,18.679333 4.21363735,18.6746032 4.30038509,18.6562699 C4.38663427,18.6555814 4.47670567,18.6061849 4.56910364,18.5614355 C4.7537334,18.4721088 4.9468385,18.3786513 5.15955325,18.2757277 C5.28801302,18.2161765 5.32490573,18.1884663 5.39453658,18.148364 C5.45951429,18.1094664 5.52814803,18.069364 5.60060399,18.0263357 C5.71394107,17.9605885 7.1640574,17.1958898 7.24864475,17.1297983 C7.4643508,16.9669793 7.67889356,16.8057093 7.90124695,16.637899 C8.13539936,16.4675069 8.59306843,16.2279254 8.46145118,16.1761194 C8.44782414,16.1700954 8.64159399,16.0255204 8.75975038,15.9484137 C9.03013077,15.7806034 9.30649376,15.6086623 9.59382485,15.430181 C9.64135331,15.367876 9.7154711,15.3165863 9.75685077,15.2546256 C9.75818023,15.2529045 9.77430002,15.2680504 9.77662659,15.2665014 L10.2982763,14.9573862 C10.4694452,15.0122903 10.4436868,15.0017914 10.6087069,14.9530834 C10.9171433,14.8620355 11.3975795,14.5869987 11.718812,14.3188464 C12.148396,13.9615395 12.7413384,13.6121498 13.2712973,13.2722263 C13.5024584,13.1235206 13.7171673,12.9865185 13.8805256,12.8576058 C13.928054,12.8195688 13.9747516,12.7822202 14.0202858,12.7459043 C14.040394,12.7546821 14.0374027,12.7779174 13.9980173,12.8261091 C14.4623337,12.5434993 14.5125211,12.6477998 14.9263177,12.4094231 C15.356068,12.1619244 15.7994453,11.9135651 16.2119125,11.6598704 C16.5024011,11.4803564 16.919189,11.2070407 16.9805107,11.129934 C17.1098014,10.9665986 17.4830493,10.7394093 17.7906548,10.5270216 C17.8945194,10.4547341 17.9978855,10.3826187 18.1095607,10.3046514 C18.2097693,10.2559434 18.3089808,10.2079238 18.4056995,10.160937 C18.4502367,10.1557736 18.5020859,10.1483727 18.5700549,10.1395949 C18.5959795,10.1053444 18.6920335,10.053022 18.7771194,9.99415932 C18.8833106,9.94235326 19.0207443,9.89949709 19.119291,9.84097861 L18.6411814,10.1258259 C18.9444661,9.94510707 19.0338728,9.97384997 19.4782472,9.6418437 C19.6748421,9.54735358 19.8699414,9.45183079 20.0708572,9.3551032 C20.2353787,9.24443444 20.3947486,9.1378964 20.5383311,9.04220149 C21.0862377,8.66165932 21.6979588,8.28352673 22.3847948,7.89282989 C22.4635657,7.84808047 22.5491502,7.79128313 22.6141279,7.74722216 L23.6097326,7.0696127 C23.7516532,7.00747985 23.8978946,6.94310953 24.0428066,6.87959978 C24.4991462,6.67977641 24.5603017,6.54070899 24.9568152,6.32401854 C25.0355862,6.34604902 25.2471376,6.25775497 25.7873999,5.90371823 C26.1249183,5.68358551 26.5782666,5.4230062 26.9460305,5.19134191 C27.0716652,5.11216986 27.1409636,5.05003701 27.2361867,4.97258609 C27.343375,4.92938569 27.4101807,4.91269072 27.4080204,4.94160573 C27.7533495,4.76278017 28.0232313,4.62749923 28.3108948,4.46795034 C28.5264346,4.34867593 28.7905,4.18826648 28.9827742,4.06468923 C29.3927487,3.80135612 29.7580198,3.55557854 30.2876463,3.27210819 C30.7772226,2.93786445 31.7005375,2.40878863 31.849604,2.23495435 C31.8637296,2.2198084 31.8344813,2.21034217 31.8343152,2.19330297 C31.8748639,2.14442284 31.9081006,2.09330523 31.9330281,2.0353031 C31.9587865,1.97712886 31.9705855,1.9136191 32,1.88935115 C31.9646029,1.78246888 31.9426667,1.74787414 31.9215614,1.70519008 C31.8474436,1.69004412 31.7266283,1.69778922 31.63207,1.69262582 C31.4304895,1.68866722 31.2307371,1.68470862 31.0306522,1.68092213 C30.6831628,1.67386549 30.2922994,1.66646462 29.9735596,1.6962402 C29.5738886,1.73376086 29.1740513,1.69434695 28.6902915,1.73324452 C28.2811479,1.76663448 27.6318694,1.77902662 27.1273366,1.82050589 C26.8378451,1.84356905 26.330321,1.8730004 26.2304448,1.79606582 C26.0727368,1.83393072 26.0100856,1.8494209 25.9145302,1.87179561 C25.8783022,1.85974769 25.8512143,1.84993724 25.823794,1.84064313 L25.8025225,1.82360393 C25.4786311,1.82790676 25.2949985,1.81482616 25.1544073,1.79554948 L22.0268358,3.24422586 C22.4984642,3.22219537 23.4993868,3.16952875 23.5967703,3.15816928" id="Fill-10" fill="#000000"></path>
-                    <g id="Group-14" transform="translate(0.000000, 1.674603)">
-                        <mask id="mask-12" fill="white">
-                            <use xlink:href="#path-11"></use>
-                        </mask>
-                        <g id="Clip-13"></g>
-                        <path d="M4.63714194,13.6207326 C4.54756774,13.3729853 4.45816129,13.1275958 4.36573548,12.8724379 C4.27364516,12.6031326 4.18776129,12.1120168 4.08879355,12.2091958 C4.07839355,12.2191326 3.99603226,11.9941221 3.95879355,11.8605642 C3.87911613,11.5590905 3.7986,11.2500379 3.71405806,10.9293642 C3.66574839,10.8630063 3.63706452,10.77728 3.58640645,10.71648 C3.58422581,10.7137853 3.60603226,10.7065432 3.60569677,10.7046905 L3.46697419,10.1266695 C3.44634194,10.0417853 3.57231613,10.0239326 3.5833871,9.86309053 C3.60267742,9.56481684 3.49398065,9.04557474 3.32355484,8.65365895 C3.09609677,8.13054316 2.94345161,7.47690105 2.77319355,6.87664842 C2.69871613,6.61441684 2.63010968,6.37239579 2.54841935,6.17281684 C2.52392903,6.11386947 2.49960645,6.05626947 2.4757871,5.99984842 C2.49591613,5.99041684 2.52309032,6.00692211 2.56502581,6.06553263 C2.43334839,5.54763789 2.58867742,5.57626947 2.49071613,5.12793263 C2.39023871,4.66005895 2.29647097,4.18477474 2.17854839,3.72599579 C2.09601935,3.40245895 1.95478065,2.92683789 1.88281935,2.82831158 C1.80733548,2.72372211 1.74225161,2.56725895 1.68102581,2.39075368 C1.65234194,2.30165895 1.62130968,2.20953263 1.59111613,2.11673263 C1.57266452,2.05593263 1.56813548,2.05222737 1.56025161,2.03454316 L1.53509032,1.98485895 C1.51278065,1.93888 1.48409677,1.88784842 1.46631613,1.82637474 C1.48174839,1.79083789 1.50456129,1.75917474 1.53509032,1.73728 C1.56679355,1.74738526 1.60134839,1.75917474 1.64546452,1.78039579 C1.63170968,1.75075368 1.65854839,1.73458526 1.67918065,1.71201684 C1.71105161,1.71437474 1.69897419,1.60658526 1.80129677,1.75563789 C1.79911613,1.74418526 1.677,1.78325895 1.68572258,1.79892211 C1.85564516,1.86999579 1.8049871,1.87353263 1.85715484,1.80599579 C1.86503871,1.79656421 1.87678065,1.78612211 1.89321935,1.77433263 C2.02456129,1.80346947 2.23524516,1.82199579 2.40097419,1.85130105 C2.58414839,1.83513263 2.76229032,1.82014316 2.92147742,1.80060632 C3.55470323,1.72245895 4.22147742,1.69146947 4.89714194,1.70595368 C4.97413548,1.70746947 5.07343871,1.69820632 5.15127097,1.68877474 L6.37209677,1.54595368 C6.46838065,1.57694316 6.56801935,1.60928 6.66749032,1.64111158 C6.96422581,1.74384842 7.27924516,1.58418526 7.64710323,1.60658526 C7.54410968,1.71639579 7.657,1.77231158 8.2914,1.71488 C8.69062581,1.67934316 9.12172258,1.68978526 9.5373871,1.66317474 C9.67946452,1.65458526 9.82187742,1.61669053 9.99448387,1.57862737 C10.0317226,1.61382737 10.0167935,1.65323789 9.9169871,1.70191158 C10.1719548,1.74502737 10.3428839,1.79016421 10.5799032,1.80919579 C10.7572065,1.82351158 11.0235806,1.81778526 11.2476839,1.80026947 C11.7207161,1.76321684 12.2130387,1.70544842 12.5788839,1.76709053 C13.2652839,1.67782737 14.0503161,1.71841684 14.6976323,1.52692211 L14.8574903,1.48414316 C14.9479032,1.52540632 14.9705484,1.57862737 14.8881871,1.65323789 C15.2372581,1.66620632 15.5762645,1.67782737 15.9146,1.68978526 C16.2076452,1.70090105 16.5332323,1.70915368 16.8645226,1.63740632 C17.2843806,1.54645895 17.5606516,1.62730105 18.0638774,1.53618526 C18.4966516,1.45938526 18.7980839,1.58266947 19.3333484,1.49475368 C19.6418258,1.44389053 20.1673613,1.38494316 20.0643677,1.53719579 C20.297529,1.46123789 20.3909613,1.43092211 20.5318645,1.38494316 C20.5323677,1.40970105 20.5332065,1.42822737 20.5335419,1.44709053 L20.5092194,1.47993263 C21.3548065,1.44894316 21.1702903,1.54443789 21.8830258,1.54005895 C21.9739419,1.53938526 22.0683806,1.55774316 22.1200452,1.54898526 C22.4005097,1.50334316 22.4771677,1.61045895 22.7279419,1.58923789 C22.731129,1.59125895 22.7366645,1.59075368 22.7411935,1.59159579 L25.9125226,0.166416842 C25.790071,0.153785263 25.6409484,0.143006316 25.4537484,0.134585263 C25.0016839,0.112858947 24.6202387,0.120774737 23.9502774,0.118416842 C23.8207806,0.118753684 22.2601097,0.0655326316 22.1433613,0.0717642105 C21.8498129,0.0902905263 21.5581097,0.107974737 21.2561742,0.127343158 C20.9446774,0.144690526 20.4555419,0.125658947 20.4421226,0.201953684 C20.4407806,0.205995789 20.3741871,0.212227368 20.2903161,0.218795789 C20.2061097,0.223006316 20.1052968,0.228564211 20.0309871,0.232606316 C19.7074129,0.238332632 19.3756194,0.244732632 19.0319161,0.250290526 C18.9331161,0.272522105 18.836329,0.277574737 18.7397097,0.301827368 C18.7361871,0.302669474 18.7502774,0.286501053 18.7470903,0.286501053 L18.1405355,0.290711579 C18.1477484,0.188816842 18.1442258,0.204985263 18.0172452,0.172311579 C17.7798903,0.112858947 17.2395935,0.101069474 16.762871,0.154964211 C16.1281355,0.227385263 15.4425742,0.228564211 14.7914,0.249785263 C14.5075806,0.259216842 14.2443935,0.268143158 14.0098903,0.294753684 C13.9407806,0.303343158 13.8735161,0.311090526 13.8077613,0.319343158 C13.8124581,0.302669474 13.8463419,0.285153684 13.9270258,0.263427368 C13.377,0.272522105 13.5080065,0.160690526 13.0395032,0.15328 C12.5523806,0.145701053 12.0605613,0.130206316 11.5699161,0.136774737 C11.2233613,0.141827368 10.703529,0.164227368 10.5718516,0.203806316 C10.2945742,0.286501053 9.85223871,0.294753684 9.44949032,0.326753684 C9.31244516,0.33888 9.17623871,0.350669474 9.02845806,0.363469474 C8.92848387,0.352185263 8.82951613,0.341743158 8.73306452,0.331469474 C8.71360645,0.309574737 8.68961935,0.283806316 8.65892258,0.251301053 C8.59920645,0.27168 8.49554194,0.266458947 8.38365806,0.275722105 C8.27747742,0.264437895 8.17716774,0.222501053 8.06276774,0.222669474 L8.61983871,0.220985263 C8.26640645,0.222501053 8.28905161,0.132564211 7.66907742,0.206501053 C7.47550323,0.181069474 7.28310323,0.156143158 7.08466452,0.13088 C6.87431613,0.144690526 6.67050968,0.157490526 6.48767097,0.169448421 C5.76587742,0.231427368 5.03116774,0.252985263 4.26324516,0.229069474 C4.17551613,0.226543158 4.06648387,0.233953684 3.98210968,0.241701053 L2.67791613,0.364816842 C2.55160645,0.333153684 2.42143871,0.299806316 2.29227742,0.267469474 C2.16596774,0.234627368 2.05374839,0.226037895 1.94605806,0.230248421 C1.87359355,0.235974737 1.80213548,0.240858947 1.72765806,0.246416842 C1.64043226,0.255006316 1.55119355,0.263427368 1.46010968,0.272185263 C1.26083226,0.318837895 1.04796774,0.341406316 0.828058065,0.434206316 C0.823529032,0.37728 0.7514,0.360269474 0.568896774,0.452564211 C0.48183871,0.504437895 0.36576129,0.58528 0.252367742,0.731806316 C0.146858065,0.881532632 0.0436967742,1.09357474 0.00830322581,1.36843789 C0.0116580645,1.45685895 -0.0140064516,1.53938526 0.0111548387,1.63690105 C0.0302774194,1.73239579 0.0487290323,1.82923789 0.0678516129,1.92759579 C0.0858,2.02528 0.104587097,2.12414316 0.123374194,2.22418526 C0.141658065,2.32506947 0.160612903,2.43538526 0.172522581,2.47243789 C0.227541935,2.69610105 0.281890323,2.92245895 0.342277419,3.13399579 C0.383541935,3.27917474 0.446277419,3.38915368 0.515219355,3.52928 C0.498612903,3.61248 0.466406452,3.64633263 0.406354839,3.59749053 C0.437890323,3.93096421 0.448458065,4.18005895 0.494251613,4.47109053 C0.527967742,4.68919579 0.598419355,4.97955368 0.666187097,5.20456421 C0.810109677,5.68254316 0.96896129,6.13626947 1.02029032,6.64506947 C1.24774839,7.26435368 1.42001935,8.21677474 1.69159355,8.58258526 C1.71289677,8.61290105 1.73503871,8.64321684 1.75533548,8.67892211 C1.75349032,8.85424842 1.72799355,8.97989053 1.66525806,9.02890105 C1.74644516,9.44506947 1.82427742,9.84961684 1.9026129,10.2533221 C1.97054839,10.6056589 2.04838065,10.9930274 2.16814839,11.2101221 C2.31810968,11.4843116 2.34813548,11.9734063 2.51705161,12.3309642 C2.66080645,12.6346274 2.82586452,13.2259537 2.99930968,13.6153432 C3.09894839,13.8386695 3.25293548,14.2698274 3.16436774,14.5414905 C3.25377419,14.6088589 3.28933548,14.6358063 3.34318065,14.6767326 C3.33345161,14.7403958 3.32573548,14.7875537 3.31835484,14.8358905 L3.29889677,14.8939958 C3.32355484,15.0105432 3.40088387,15.2658695 3.4418129,15.4371537 C3.4866,15.6192168 3.5198129,15.77888 3.54799355,15.9319747 L4.94109032,14.6536589 C4.93840645,14.65568 4.93404516,14.6568589 4.92850968,14.6551747 C4.93438065,14.6895326 4.90401935,14.5736589 4.88187742,14.4938274 C4.85906452,14.4101221 4.83625161,14.3270905 4.81410968,14.2474274 C4.72587742,13.9275958 4.65089677,13.6587958 4.63714194,13.6207326" id="Fill-12" fill="#000000" mask="url(#mask-12)"></path>
-                    </g>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file
diff --git a/resources/views/default.antlers.html b/resources/views/default.antlers.html
new file mode 100644
index 000000000..7b8882bf1
--- /dev/null
+++ b/resources/views/default.antlers.html
@@ -0,0 +1,33 @@
+{{ partial:header }}
+
+{{# <div listen-for-intersection-of-titles> #}}
+    {{ if screenshot }}
+        <figure>
+            {{ screenshot }}
+                <img src="{{ url }}" width="{{ width | /:2 | +:2 }}" alt="Screenshot of {{ page:title }}">
+            {{ /screenshot }}
+            {{# e.g. /fieldtypes/assets #}}
+            <figcaption>The {{ title }} in action!</figcaption>
+        </figure>
+    {{ /if }}
+
+    {{ content }}
+
+    {{ if options }}
+        <h2 id="options">Options</h2>
+        {{ options_content | markdown ?? '' }}
+        {{ partial:details :details="options" }}
+    {{ /if }}
+
+    {{ if parameters }}
+        <h2 id="parameters">Parameters</h2>
+        {{ partial:details :details="parameters" }}
+    {{ /if }}
+
+    {{ if variables }}
+        <h2 id="variables">Variables</h2>
+        {{ partial:variables }}
+    {{ /if }}
+{{# </div> #}}
+
+{{ partial:related }}
diff --git a/resources/views/deploying.antlers.html b/resources/views/deploying.antlers.html
index 625c4084a..96911fb94 100644
--- a/resources/views/deploying.antlers.html
+++ b/resources/views/deploying.antlers.html
@@ -1,96 +1,88 @@
-<header class="markdown pb-8 mb-8">
-    {{ partial:breadcrumbs }}
-    <div class="flex items-center">
-        <h1>{{ title }}</h1>
-        {{ partial:pro-badge }}
-    </div>
-    <div class="lg:pr-16 text-2xl">
-        {{ intro ?? overview | markdown}}
-    </div>
-    {{ svg src="zig-zag" class="mt-16" }}
-</header>
+{{ partial:header }}
 
-<section class="mt-0 md:pb-16"">
-    <header class="markdown">
-        <h2 id="vps">
-            Managed VPS Guides
-            <a class="anchor" href="#vps">#</a>
-        </h2>
-    </header>
-    <div class="grid md:grid-cols-2 lg:grid-cols-3 gap-y-6 md:gap-6 mt-8">
-        <a href="/deploying/laravel-forge" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <div class="h-16 flex items-center mb-2">
-                <img class="mx-auto mb-4 w-32" src="/img/forge-logo.svg" alt="Laravel Forge Logo">
+<div class="c-icon-grid">
+    <div class="c-icon-grid__item">
+        <a href="/deploying/laravel-forge">
+            <div class="c-icon-grid__icon">
+                {{# 2025-07-09 Attributes needed for the SVG to display in Firefox #}}
+                <img src="/img/icons/forge.svg" style="width: 300px; height: 58px;" alt="Laravel Forge Logo" />
             </div>
-            <h2 class="text-2xl mb-2 font-bold font-display">Laravel Forge</h2>
-            <p class="text-sm font-mono-alt">Server Management Platform</p>
         </a>
-        <a href="/deploying/ploi" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/ploi-cake.png" alt="Ploi Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Ploi</h2>
-            <p class="text-sm font-mono-alt">Server Management Platform</p>
+        <h2>Laravel Forge</h2>
+        <p>Server Management Platform</p>
+    </div>
+    <div class="c-icon-grid__item">
+        <a href="/deploying/laravel-cloud">
+            <div class="c-icon-grid__icon">
+                {{# 2025-07-09 Attributes needed for the SVG to display in Firefox #}}
+                <img src="/img/laravel-cloud-logo.svg" style="width: 150px; height: 150px;" class="u-hide-in-dark-mode" alt="Laravel Cloud Logo" />
+                <img src="/img/icons/laravel-cloud-dark-mode.svg" style="width: 150px; height: 150px;" class="u-hide-in-light-mode" alt="Laravel Cloud Logo" />
+            </div>
         </a>
-        <a href="https://help.fortrabbit.com/statamic" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <div class="h-16 flex items-center mb-2">
-                <img class="mx-auto px-1 w-32" src="/img/fortrabbit.svg" alt="fortrabbit Logo">
+        <h2>Laravel Cloud</h2>
+        <p>Managed Infrastructure Provider</p>
+    </div>
+    <div class="c-icon-grid__item">
+        <a href="/deploying/ploi">
+            <div class="c-icon-grid__icon">
+                <img src="/img/icons/ploi.png" class="u-hide-in-dark-mode" alt="Ploi logo" width="483" height="183" />
+                <img src="/img/icons/ploi-dark-mode.png" class="u-hide-in-light-mode" alt="Ploi logo" width="483" height="183" />
             </div>
-            <h2 class="text-2xl mb-2 font-bold font-display">Fortrabbit</h2>
-            <p class="text-sm font-mono-alt">PHP as a Service</p>
         </a>
-        <a href="https://buddy.works/guides/introduction-to-statamic#deployment-with-buddy" target="_blank" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <div class="h-16 flex items-center mb-2">
-                <img class="mx-auto mb-2 h-16" src="/img/buddy-logo.svg" alt="Buddy CI/CD Logo">
+        <h2>Ploi</h2>
+        <p>Server Management Platform</p>
+    </div>
+    <div class="c-icon-grid__item">
+        <a href="/deploying/fortrabbit">
+            <div class="c-icon-grid__icon">
+                <img src="/img/fortrabbit.svg" class="u-hide-in-dark-mode" alt="Fortrabbit Logo" />
+                {{# 2025-07-09 Attributes needed for the SVG to display in Firefox #}}
+                <img src="/img/icons/fortrabbit-dark-mode.svg" style="width: 723px; height: 125px;" class="u-hide-in-light-mode" alt="Fortrabbit Logo" />
             </div>
-            <h2 class="text-2xl mb-2 font-bold font-display">Buddy</h2>
-            <p class="text-sm font-mono-alt">CI/CD Platform</p>
         </a>
-        <a href="/deploying/digitalocean-app-platform" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/digital-ocean-logo.svg" alt="Digital Ocean Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Digital Ocean</h2>
-            <p class="text-sm font-mono-alt">App Platform</p>
+        <h2>Fortrabbit</h2>
+        <p>PHP as a Service</p>
+    </div>
+    <div class="c-icon-grid__item">
+        <a href="https://buddy.works/guides/introduction-to-statamic#deployment-with-buddy" target="_blank">
+            <div class="c-icon-grid__icon">
+                {{# 2025-07-09 Attributes needed for the SVG to display in Firefox #}}
+                <img src="/img/buddy-logo.svg" style="width: 131px; height: 150px;" alt="Buddy CI/CD Logo" />
+            </div>
         </a>
-        <a href="/deploying/workflow" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/code-fork.svg" alt="Git Branch Icon">
-            <h2 class="text-2xl mb-2 font-bold font-display">Git Workflow</h2>
-            <p class="text-sm font-mono-alt">Best Practices</p>
+        <h2>Buddy {{ svg src='external-link' }}</h2>
+        <p>CI/CD Platform</p>
+    </div>
+    <div class="c-icon-grid__item">
+        <a href="https://kinsta.com/docs/statamic-example-application/" target="_blank">
+            <div class="c-icon-grid__icon">
+                {{# 2025-07-09 Attributes needed for the SVG to display in Firefox #}}
+                <img src="/img/Kinsta_Icon_Black.svg" style="width: 150px; height: 150px;" alt="Kinsta Logo" class="rounded-lg" />
+            </div>
         </a>
-        {{# <a href="https://ploi.io/statamic" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/serverpilot-logo.svg" alt="Server Pilot Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Server Pilot</h2>
-            <p class="text-sm font-mono-alt">Server Management Platform</p>
-        </a> #}}
-        {{# <a href="https://scotch.io/tutorials/deploying-laravel-to-digitalocean" target="_blank" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/digital-ocean-logo.svg" alt="Digital Ocean Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Digital Ocean</h2>
-            <p class="text-sm font-mono-alt">DIY Ubuntu Droplet</p>
-        </a> #}}
+        <h2>Kinsta {{ svg src='external-link' }}</h2>
+        <p>Cloud Hosting</p>
     </div>
-</section>
-
-<section class="mt-6 md:mt-24 md:pb-16">
-    <header class="markdown">
-        <h2 id="static">
-            Static Site/Jamstack Guides
-            <a class="anchor" href="#static">#</a>
-        </h2>
-    </header>
-    <div class="grid md:grid-cols-2 lg:grid-cols-3 gap-y-6 md:gap-6 mt-8">
-        {{# <a href="#" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/digital-ocean-logo.svg" alt="Digital Ocean Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Digital Ocean</h2>
-            <p class="text-sm font-mono-alt">App Platform</p>
-        </a> #}}
-        <a href="/deploying/netlify" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/netlify-logo.svg" alt="Netlify Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Netlify</h2>
-            <p class="text-sm font-mono-alt">Netlify Platform</p>
+    <div class="c-icon-grid__item">
+        <a href="/deploying/netlify">
+            <div class="c-icon-grid__icon">
+                <img src="/img/icons/netlify.svg" alt="Netlify Logo" />
+            </div>
         </a>
-        <a href="/deploying/vercel" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/vercel-logo.svg" alt="Vercel Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Vercel</h2>
-            <p class="text-sm font-mono-alt">Vercel Platform</p>
+        <h2>Netlify</h2>
+        <p>Netlify Platform</p>
+    </div>
+    <div class="c-icon-grid__item">
+        <a href="/deploying/vercel">
+            <div class="c-icon-grid__icon">
+                <img src="/img/vercel-logo.svg" class="u-hide-in-dark-mode" alt="Vercel Logo" />
+                <img src="/img/icons/vercel-dark-mode.svg" class="u-hide-in-light-mode" alt="Vercel Logo" />
+            </div>
         </a>
+        <h2>Vercel</h2>
+        <p>Vercel Platform</p>
     </div>
-</section>
+</div>
 
-{{ partial:suggest }}
+{{ $suggest = 'yes' }}
+{{ push:scope_classes }}u-no-scroll-spy-toc-position{{ /push:scope_classes }}
\ No newline at end of file
diff --git a/resources/views/documentation-search/docs/page.antlers.html b/resources/views/documentation-search/docs/page.antlers.html
new file mode 100644
index 000000000..542064a0e
--- /dev/null
+++ b/resources/views/documentation-search/docs/page.antlers.html
@@ -0,0 +1,11 @@
+{{ partial:header }}
+
+{{ content | toc:ids }}
+
+{{ if options }}
+    <h2 id="options">Options</h2>
+    {{ if options_content }}
+        {{ options_content | markdown }}
+    {{ /if }}
+    {{ partial:details :details="options" }}
+{{ /if }}
\ No newline at end of file
diff --git a/resources/views/documentation-search/extending-docs/page.antlers.html b/resources/views/documentation-search/extending-docs/page.antlers.html
new file mode 100644
index 000000000..542064a0e
--- /dev/null
+++ b/resources/views/documentation-search/extending-docs/page.antlers.html
@@ -0,0 +1,11 @@
+{{ partial:header }}
+
+{{ content | toc:ids }}
+
+{{ if options }}
+    <h2 id="options">Options</h2>
+    {{ if options_content }}
+        {{ options_content | markdown }}
+    {{ /if }}
+    {{ partial:details :details="options" }}
+{{ /if }}
\ No newline at end of file
diff --git a/resources/views/documentation-search/fieldtypes/fieldtype.antlers.html b/resources/views/documentation-search/fieldtypes/fieldtype.antlers.html
new file mode 100644
index 000000000..dd0f14b4d
--- /dev/null
+++ b/resources/views/documentation-search/fieldtypes/fieldtype.antlers.html
@@ -0,0 +1,15 @@
+<article>
+    <figure>
+        {{ screenshot }}
+            <img src="{{ url }}" width="{{ width | /:2 | +:2 }}" alt="{{ page:title }} Fieldtype UI">
+        {{ /screenshot }}
+        <figcaption>The {{ title }} in action!</figcaption>
+    </figure>
+
+    {{ content | toc:ids }}
+
+    {{ if options }}
+        <h2 id="options">Options</h2>
+        {{ partial:details :details="options" }}
+    {{ /if }}
+</article>
\ No newline at end of file
diff --git a/resources/views/documentation-search/modifiers/modifiers.antlers.html b/resources/views/documentation-search/modifiers/modifiers.antlers.html
new file mode 100644
index 000000000..745ed74b2
--- /dev/null
+++ b/resources/views/documentation-search/modifiers/modifiers.antlers.html
@@ -0,0 +1,3 @@
+<article>
+    {{ content | toc:ids }}
+</article>
\ No newline at end of file
diff --git a/resources/views/documentation-search/reference/reference.antlers.html b/resources/views/documentation-search/reference/reference.antlers.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/resources/views/documentation-search/repositories/repositories.antlers.html b/resources/views/documentation-search/repositories/repositories.antlers.html
new file mode 100644
index 000000000..8e5e6df87
--- /dev/null
+++ b/resources/views/documentation-search/repositories/repositories.antlers.html
@@ -0,0 +1,3 @@
+<article class="markdown pb-8">
+    {{ content | toc:ids }}
+</article>
\ No newline at end of file
diff --git a/resources/views/documentation-search/screencasts/screencasts.antlers.html b/resources/views/documentation-search/screencasts/screencasts.antlers.html
new file mode 100644
index 000000000..153736809
--- /dev/null
+++ b/resources/views/documentation-search/screencasts/screencasts.antlers.html
@@ -0,0 +1,9 @@
+
+<article class="markdown pb-12">
+    <div class="p-2 border shadow-stack rounded">
+        <div class="embed">
+            <iframe class="" width="1120" height="630" src="{{ video | embed_url }}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"  allowfullscreen></iframe>
+        </div>
+    </div>
+    {{ content }}
+</article>
\ No newline at end of file
diff --git a/resources/views/documentation-search/sections/sections.antlers.html b/resources/views/documentation-search/sections/sections.antlers.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/resources/views/documentation-search/tags/tag-glide.antlers.html b/resources/views/documentation-search/tags/tag-glide.antlers.html
new file mode 100644
index 000000000..acc92a893
--- /dev/null
+++ b/resources/views/documentation-search/tags/tag-glide.antlers.html
@@ -0,0 +1,25 @@
+<article class="markdown pb-8">
+    {{ content | toc:ids }}
+
+    {{ if parameters }}
+    <h2 id="parameters">Parameters</h2>
+    {{ /if }}
+
+    {{ partial:details details="options" }}
+
+    <h3>Size, Crop, and Output</h3>
+    {{ partial:details :details="shape" }}
+
+    <h3>Filters and Effects</h3>
+    {{ partial:details :details="filters" }}
+
+    <h3>Other</h3>
+    {{ partial:details :details="other" }}
+
+    {{ if variables }}
+        <h2 id="variables">Variables</h2>
+        <p>These variables are only available within the <a href="#tag-pair">tag pair</a>.</p>
+        {{ partial:variables }}
+    {{ /if }}
+
+</article>
\ No newline at end of file
diff --git a/resources/views/documentation-search/tags/tag.antlers.html b/resources/views/documentation-search/tags/tag.antlers.html
new file mode 100644
index 000000000..ce189e360
--- /dev/null
+++ b/resources/views/documentation-search/tags/tag.antlers.html
@@ -0,0 +1,14 @@
+<article class="markdown pb-8">
+    {{ content | toc:ids }}
+
+    {{ if parameters }}
+        <h2 id="parameters">Parameters</h2>
+        {{ partial:details :details="parameters" }}
+    {{ /if }}
+
+    {{ if variables }}
+        <h2 id="variables">Variables</h2>
+        {{ partial:variables }}
+    {{ /if }}
+
+</article>
\ No newline at end of file
diff --git a/resources/views/documentation-search/tips/tips.antlers.html b/resources/views/documentation-search/tips/tips.antlers.html
new file mode 100644
index 000000000..b78f14370
--- /dev/null
+++ b/resources/views/documentation-search/tips/tips.antlers.html
@@ -0,0 +1,11 @@
+<article>
+    {{ content | toc:ids }}
+
+    {{ if options }}
+        <h2 id="options">Options</h2>
+        {{ if options_content }}
+            {{ options_content | markdown }}
+        {{ /if }}
+        {{ partial:details :details="options" }}
+    {{ /if }}
+</article>
\ No newline at end of file
diff --git a/resources/views/documentation-search/troubleshooting/troubleshooting.antlers.html b/resources/views/documentation-search/troubleshooting/troubleshooting.antlers.html
new file mode 100644
index 000000000..bba196dd0
--- /dev/null
+++ b/resources/views/documentation-search/troubleshooting/troubleshooting.antlers.html
@@ -0,0 +1,11 @@
+<article>
+    {{ content | toc:ids }}
+
+    {{ if options }}
+        <h2 id="options">Options</h2>
+        {{ if options_content }}
+            {{ options_content }}
+        {{ /if }}
+        {{ partial:details :details="options" }}
+    {{ /if }}
+</article>
\ No newline at end of file
diff --git a/resources/views/documentation-search/variables/variables.antlers.html b/resources/views/documentation-search/variables/variables.antlers.html
new file mode 100644
index 000000000..745ed74b2
--- /dev/null
+++ b/resources/views/documentation-search/variables/variables.antlers.html
@@ -0,0 +1,3 @@
+<article>
+    {{ content | toc:ids }}
+</article>
\ No newline at end of file
diff --git a/resources/views/documentation-search/widgets/widgets.antlers.html b/resources/views/documentation-search/widgets/widgets.antlers.html
new file mode 100644
index 000000000..c2af5ed44
--- /dev/null
+++ b/resources/views/documentation-search/widgets/widgets.antlers.html
@@ -0,0 +1,15 @@
+<article class="markdown pb-8">
+    <figure>
+        {{ screenshot }}
+        <img src="{{ url }}" width="{{ width | /:2 | +:2 }}" alt="{{ title }} Fieldtype UI">
+        {{ /screenshot }}
+        <figcaption>Behold! The {{ title }}!</figcaption>
+    </figure>
+
+    {{ content | toc:ids }}
+
+    {{ if options }}
+        <h2 id="options">Options</h2>
+        {{ partial:details :details="options" }}
+    {{ /if }}
+</article>
\ No newline at end of file
diff --git a/resources/views/extending/index.antlers.html b/resources/views/extending/index.antlers.html
index e075ab91c..542064a0e 100644
--- a/resources/views/extending/index.antlers.html
+++ b/resources/views/extending/index.antlers.html
@@ -1,15 +1,11 @@
 {{ partial:header }}
 
-<article class="markdown md:pb-16">
-    {{ content | toc:ids }}
+{{ content | toc:ids }}
 
-    {{ if options }}
-        <h2 id="options">Options</h2>
-        {{ if options_content }}
-            {{ options_content | markdown }}
-        {{ /if }}
-        {{ partial:details :details="options" }}
+{{ if options }}
+    <h2 id="options">Options</h2>
+    {{ if options_content }}
+        {{ options_content | markdown }}
     {{ /if }}
-</article>
-
-{{ partial:edit }}
+    {{ partial:details :details="options" }}
+{{ /if }}
\ No newline at end of file
diff --git a/resources/views/fieldtypes/index.antlers.html b/resources/views/fieldtypes/index.antlers.html
index 6fc381bc1..507dda79c 100644
--- a/resources/views/fieldtypes/index.antlers.html
+++ b/resources/views/fieldtypes/index.antlers.html
@@ -1,18 +1,20 @@
 {{ partial:header }}
 
 {{ collection:fieldtypes as="fieldtypes" }}
-<article class="bg-black p-4 md:py-8 md:pl-24 w-full relative rounded-sm shadow-stack md:shadow-stack-lg text-white z-10 flex font-mono-alt font-bold antialiased">
-    {{ fieldtypes split="2" }}
-        <ul class="list-none w-1/2 space-y-3">
-            {{ items }}
-                <li>
-                    <a href="{{ url }}" class="flex items-center text-white hover:text-pink no-underline">
-                        {{ svg src="/img/fieldtypes/icons/{slug}" class="h-4 w-4 mr-3 text-white" }}
-                        {{ title }}
-                    </a>
-                </li>
-            {{ /items }}
-        </ul>
-    {{ /fieldtypes }}
-</article>
+    <article class="c-panel-list">
+        {{ fieldtypes split="1" }}
+            <ul>
+                {{ items }}
+                    <li>
+                        <a href="{{ url }}">
+                            {{ svg src="/img/fieldtypes/icons/{slug}" }}
+                            {{ title }}
+                        </a>
+                    </li>
+                {{ /items }}
+            </ul>
+        {{ /fieldtypes }}
+    </article>
 {{ /collection:fieldtypes }}
+
+{{ $hide_toc = 'yes' }}
diff --git a/resources/views/fieldtypes/show.antlers.html b/resources/views/fieldtypes/show.antlers.html
index 83a0beac0..bcdc519a3 100644
--- a/resources/views/fieldtypes/show.antlers.html
+++ b/resources/views/fieldtypes/show.antlers.html
@@ -9,12 +9,14 @@ <h1>{{ title ensure_right=" Fieldtype" }}</h1>
 </header>
 
 <article class="markdown md:pb-16">
+    {{ if screenshot }}
     <figure>
         {{ screenshot }}
-        <img src="{{ url }}" width="{{ width | /:2 }}px" alt="{{ title }} Fieldtype UI">
+            <img src="{{ url }}" width="{{ width | /:2 | +:2 }}" alt="{{ page:title }} Fieldtype UI">
         {{ /screenshot }}
-        <figcaption>Behold! The {{ title }}!</figcaption>
+        <figcaption>The {{ title }} in action!</figcaption>
     </figure>
+    {{ /if }}
 
     {{ content | toc:ids }}
 
diff --git a/resources/views/guides/show.antlers.html b/resources/views/guides/show.antlers.html
deleted file mode 100644
index e01caa5dd..000000000
--- a/resources/views/guides/show.antlers.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{{ partial:header }}
-
-<article class="markdown md:pb-16">
-    {{ content | toc:ids }}
-</article>
-
-{{ partial:edit }}
diff --git a/resources/views/home.antlers.html b/resources/views/home.antlers.html
index 3f2478911..06b7f98a0 100644
--- a/resources/views/home.antlers.html
+++ b/resources/views/home.antlers.html
@@ -1,87 +1,73 @@
-<header class="markdown">
-    <h1>Learn Statamic</h1>
-    <div class="max-w-2xl text-xl">{{ intro | widont }}</div>
+<header>
+    <h1 id="learn-statamic" class="o-scroll-spy-timeline__track">Learn Statamic</h1>
+    {{ intro }}
 </header>
 
-<div class="bg-gradient-to-br from-gray-lightest to-mint mt-8 md:mt-12 p-4 md:py-5 md:px-8 border shadow-stack dark:bg-none dark:bg-gray-darkest dark:text-white dark:shadow-none">
-    <div class="flex flex-col md:flex-row items-center">
-        <div class="flex-1">
-            <h2 class="font-display text-3xl font-semibold mb-2">Get Started</h2>
-            <p>There's more than one way to get started with Statamic.</p>
-            <div class="flex flex-wrap md:space-x-4 mt-6">
-                <a href="/installing/local" class="button pr-3">Local Install &rarr;</a>
-                <a href="/quick-start-guide" class="hidden md:block button bg-mint">Quick Start Guide</a>
-            </div>
-            <div class="hidden md:flex flex-wrap space-x-4 mt-6">
-                {{# <a href="" class="button button-small">Local Environment Setup</a> #}}
-                <a href="/installing/laravel" class="button button-small">Laravel</a>
-                <a href="/installing/docker" class="button button-small">Docker</a>
-                <a href="/installing/ubuntu" class="button button-small">Ubuntu</a>
-                <a href="/starter-kits" class="button button-small">Starter Kits</a>
-            </div>
-        </div>
-        <div class="md:w-96 mt-4 md:m-0 md:pl-8">
-            <img src="/img/control-panel-screenshot.png" alt="The Statamic 3 Control Panel" class="border shadow rounded">
+<div class="c-tiles-with-description">
+    {{ tiles }}
+        <div class="c-tiles-with-description__item{{ flush_image ?= ' c-tiles-with-description__item--flush' }}">
+            <a href="{{ tile_link }}" class="u-link-style-none">
+                <figure class="c-tiles-with-description__item__thumbnail">
+                    {{ if tile_image_dark_mode }}
+                        {{ tile_image }}
+                            {{ partial:image_dimensions/tile modifier_classes='u-hide-in-dark-mode' }}
+                        {{ /tile_image }}
+                        {{ tile_image_dark_mode }}
+                            {{ partial:image_dimensions/tile modifier_classes='u-hide-in-light-mode' }}
+                        {{ /tile_image_dark_mode }}
+                    {{ else }}
+                        {{ tile_image }}
+                            {{ partial:image_dimensions/tile }}
+                        {{ /tile_image }}
+                    {{ /if }}
+                    <figcaption>{{ tile_title }} {{ if tile_link | is_external_url }}{{ svg src='external-link' }}{{ /if }}</figcaption>
+                </figure>
+            </a>
+            <p>{{ tile_description | remove_right('.') }}</p>
         </div>
-    </div>
+    {{ /tiles }}
 </div>
 
-<div class="bg-black shadow-stack mt-6 py-5 px-8 text-white hidden md:flex items-center dark:bg-pink dark:shadow-none">
-    <img src="/img/retro-tv.svg" alt="A retro tv" class="mr-2">
-    <p class="text-center flex-1">Check out <b class="text-yellow">Learn Statamic with Jack</b> &mdash; our brand new Laracasts CreatorSeries!</p>
-    <a href="https://laracasts.com/series/learn-statamic-with-jack" class="button">Watch &amp; Learn</a>
-</div>
+<hr>
 
-<div class="grid md:grid-cols-3 gap-y-6 md:gap-6 mt-6">
-    {{# <a href="/screencasts" class="bg-white border shadow-stack-sm text-center hover:shadow-stack-yellow-sm rounded-sm p-5 hover:bg-gradient-to-tl from-gray-lightest">
-        <img src="/img/tv.svg" alt="Retro TV Set" class="h-16 mb-4 mx-auto">
-            <h2 class="text-2xl mb-2 font-bold font-display">Screencasts</h2>
-        <p class="text-sm font-mono-alt">Tips, tricks, and tutorials on how to build with Statamic.</p>
-    </a> #}}
-    <a href="/screencasts" class="bg-white border shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm p-5 hover:bg-gradient-to-tl from-gray-lightest dark:bg-none dark:bg-gray-darkest dark:text-white dark:shadow-none">
-        <header class="flex items-center mb-3">
-            <img src="/img/tv.svg" alt="Retro TV Set" class="relative top-[-2px] transform rotate-[-7deg] -left-1">
-            <h2 class="text-2xl ml-2 font-bold font-display">Watch + Learn</h2>
-        </header>
-        <p class="text-sm font-mono-alt">Tips, tricks, and tutorials on how to build with Statamic.</p>
-    </a>
-    <a href="/upgrade-guide" class="bg-white border shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm p-5 hover:bg-gradient-to-tl from-gray-lightest dark:bg-none dark:bg-gray-darkest dark:text-white dark:shadow-none">
-        <header class="flex items-center mb-3">
-            <img src="/img/car.svg" alt="An older car that needs to be upgraded" class="relative top-[-2px] transform rotate-[-7deg] -left-1">
-            <h2 class="text-2xl font-bold font-display">Upgrade Guides</h2>
-        </header>
-        <p class="text-sm font-mono-alt">For when it's time to get that older Statamic site onto v3.</p>
-    </a>
-    <a href="https://statamic.com/discord" class="bg-white border shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm p-5 hover:bg-gradient-to-tl from-gray-lightest dark:bg-none dark:bg-gray-darkest dark:text-white dark:shadow-none">
-        <header class="flex items-center mb-3" x-data="{active: 1}" x-init="setInterval(() => { if (active === 9) { active = 0; }; active++ }, 1500)">
-            <img :style="{ 'display': active === 1 ? 'block' : 'none' }" src="/img/people/person-1.svg" alt="A person representing the community">
-            <img :style="{ 'display': active === 2 ? 'block' : 'none' }" src="/img/people/person-2.svg" alt="A person representing the community">
-            <img :style="{ 'display': active === 3 ? 'block' : 'none' }" src="/img/people/person-3.svg" alt="A person representing the community">
-            <img :style="{ 'display': active === 4 ? 'block' : 'none' }" src="/img/people/person-4.svg" alt="A person representing the community">
-            <img :style="{ 'display': active === 5 ? 'block' : 'none' }" src="/img/people/person-5.svg" alt="A person representing the community">
-            <img :style="{ 'display': active === 6 ? 'block' : 'none' }" src="/img/people/person-6.svg" alt="A person representing the community">
-            <img :style="{ 'display': active === 7 ? 'block' : 'none' }" src="/img/people/person-7.svg" alt="A person representing the community">
-            <img :style="{ 'display': active === 8 ? 'block' : 'none' }" src="/img/people/person-8.svg" alt="A person representing the community">
-            <img :style="{ 'display': active === 9 ? 'block' : 'none' }" src="/img/people/person-9.svg" alt="A person representing the community">
-            <h2 class="text-2xl ml-2 font-bold font-display">Community</h2>
-        </header>
-        <p class="text-sm font-mono-alt">Hang out with truly exceptional devs & designers on Discord.</p>
-    </a>
+<h2 id="sponsors" class="u-center-on-lower-mqs o-scroll-spy-timeline__track">Sponsors</h2>
+<p class="u-center-on-lower-mqs">We've reserved this space to thank our top open source sponsors.</p>
+<div class="c-logo-grid u-center-on-lower-mqs">
+    {{ hero_sponsors }}
+        <div class="c-logo-grid__item">
+            {{ if error }}
+                <p>We're having trouble loading the sponsors at the moment.</p>
+            {{ else }}
+                <a href="{{ url }}">
+                    <img src="{{ avatarUrl }}">
+                    <span>{{ name }}</span>
+                </a>
+            {{ /if }}
+        </div>
+    {{ /hero_sponsors }}
+    <div class="c-logo-grid__item">
+        <a href="https://github.com/sponsors/statamic">Sponsor Statamic</a>
+    </div>
 </div>
 
-<section class="markdown mt-6 md:mt-20">
+{{ $article_footer = 'no' }}
+
+{{# =JFG. Keeping this here for now because it could be useful at some point #}}
+{{# <section class="markdown mt-6 md:mt-20">
     <h2>Recent Updates</h2>
     <p>Keep your Statamic superpowers up-to-date with the latest updates to the docs.</p>
     <table>
         <thead>
             <th>Page</th>
+            <th>The Change</th>
             <th>Section</th>
             <th>Last Updated</th>
         </thead>
         <tbody>
             {{ collection from="docs|tags|modifiers|variables|fieldtypes|screencasts" sort="last_modified:desc" limit="5" title:not="Documentation" scope="entry" }}
                 <tr>
-                    <td class="w-1/2"><a href="{{ github_commits_url }}" target="_blank">{{ entry:title ?? entry:slug|title }}</a></td>
+                    <td class="w-1/2"><a href="{{ url }}">{{ entry:title ?? entry:slug|title }}</a></td>
+                    <td><a href="{{ github_commits_url }}" target="_blank">View</a></td>
                     <td>{{ entry:collection | deslugify | title }}</td>
                     <td x-text="dayjs('{{ entry:last_modified format="Y-m-d H:i:s" }}').fromNow(true) + ' ago'"></td>
                 </tr>
@@ -89,35 +75,4 @@ <h2>Recent Updates</h2>
         </tbody>
     </table>
     <a href="/recent-updates" class="button float-right mt-4">View all recent updates</a>
-</section>
-
-<section class="mt-32 lg:mt-64 relative lg:min-h-[440px] dark:mt-32">
-    <img src="/img/splatter-sponsors.png" alt="" class="hidden lg:block absolute max-w-none w-[1100px] left-[-170px] top-[-130px] dark:hidden" loading="lazy">
-    <img src="/img/palms-left.png" width="448" class="hidden lg:block absolute left-[-100px] top-[-180px] dark:hidden" alt="" loading="lazy">
-    <img src="/img/palms-right.png" width="159" class="hidden lg:block absolute right-0 top-[-140px] dark:hidden" alt="" loading="lazy">
-    <div class="bg-yellow border shadow-lg p-4 md:px-5 md:py-8 relative">
-        <header class="markdown markdown-tight bg-transparent mb-5">
-            <h2 class="mb-3 dark:text-black">Sponsors</h2>
-            <p class="text-black text-base md:w-4/5">We've reserved this space to thank our top open source sponsors! Donations through sponsors go towards building new Starter Kits, Addons, and other open source resources.</p>
-        </header>
-        <div class="flex flex-wrap">
-            <a href="https://spiegel.de" class="button h-13 bg-white flex items-center mb-4 mr-2 md:mr-4 pl-2 pr-2">
-                <img src="https://pbs.twimg.com/profile_images/1214723509521387520/7UENeEVp_400x400.jpg" class="rounded h-8 w-8 md:h-10 md:w-10 mr-2">
-                <span class="font-bold">DER SPIEGEL</span>
-            </a>
-            {{ hero_sponsors }}
-                {{ if error }}
-                    <p class="text-xs flex items-center m-0">We're having trouble loading the sponsors at the moment.</p>
-                {{ else }}
-                    <a href="{{ url === 'https://github.com/remarkabledev' ? 'https://remarkable.dev' : url }}" class="button h-13 bg-white flex items-center mb-4 mr-2 md:mr-4 pl-2 pr-2">
-                        <img src="{{ avatarUrl }}" class="rounded h-8 w-8 md:h-10 md:w-10 mr-2">
-                        <span class="font-bold">{{ name }}</span>
-                    </a>
-                {{ /if }}
-            {{ /hero_sponsors }}
-        </div>
-        <a href="https://github.com/sponsors/statamic" class="button bg-white">
-            Become a Statamic Sponsor &rarr;
-        </a>
-    </div>
-</section>
+</section> #}}
diff --git a/resources/views/image_dimensions/navigation_image.antlers.html b/resources/views/image_dimensions/navigation_image.antlers.html
new file mode 100644
index 000000000..7ff07c88d
--- /dev/null
+++ b/resources/views/image_dimensions/navigation_image.antlers.html
@@ -0,0 +1,24 @@
+<picture{{ modifier_classes ?= ' class="{ modifier_classes }"'}}>
+    {{# WebP #}}
+    <source
+        srcset="{{ glide:url width='65' dpr='2' format='webp' }} 2x,
+                {{ glide:url width='65' dpr='3' format='webp' }} 3x"
+        type="image/webp"
+    >
+    {{# JPEG #}}
+    <source
+        srcset="{{ glide:url width='65' dpr='2' }} 2x,
+                {{ glide:url width='65' dpr='3' }} 3x"
+        type="image/jpeg"
+    >
+    {{# Fallback, with dimensions set to minimise layout shift. See Jay George's Wiki under Performance > Images for more information. #}}
+    <img 
+        src="{{ glide:url width='65' dpr='2' }}"
+        decoding="async"
+        fetchpriority="high"
+        width="{{ width }}" 
+        height="{{ height }}"
+        alt="{{ if alt }}{{ alt | ucfirst | ensure_right('.') | smartypants }}{{ else }}{{ filename | ucfirst | ensure_right('.') | replace('-| ') | smartypants }}{{ /if }}"
+        {{ image_width_override ?='style="width: {image_width_override};"' }}{{ if hue_rotate == 'hue_rotate_1' }} class="u-image-boost-with-hue-rotate"{{ elseif hue_rotate == 'hue_rotate_2' }} class="u-image-boost-with-hue-rotate-extra"{{ /if }}
+    />
+</picture>
\ No newline at end of file
diff --git a/resources/views/image_dimensions/tile.antlers.html b/resources/views/image_dimensions/tile.antlers.html
new file mode 100644
index 000000000..8eb4647a2
--- /dev/null
+++ b/resources/views/image_dimensions/tile.antlers.html
@@ -0,0 +1,32 @@
+<picture{{ modifier_classes ?= ' class="{ modifier_classes }"'}}>
+    {{# WebP #}}
+    <source
+        srcset="{{ glide:url width='375' dpr='2' format='webp' }} 750w,
+                {{ glide:url width='500' dpr='2' format='webp' }} 1000w,
+                {{ glide:url width='768' dpr='2' format='webp' }} 1536w,
+                {{ glide:url width='1024' dpr='2' format='webp' }} 2048w,
+                {{ glide:url width='1680' dpr='2' format='webp' }} 3360w"
+        type="image/webp"
+        sizes="(min-width: 1000px) 250px, 200px"
+    >
+    {{# JPEG #}}
+    <source
+        srcset="{{ glide:url width='375' dpr='2' }} 750w,
+                {{ glide:url width='500' dpr='2' }} 1000w,
+                {{ glide:url width='768' dpr='2' }} 1536w,
+                {{ glide:url width='1024' dpr='2' }} 2048w,
+                {{ glide:url width='1680' dpr='2' }} 3360w"
+        type="image/jpeg"
+        sizes="(min-width: 1000px) 250px, 200px"
+    >
+    {{# Fallback, with dimensions set to minimise layout shift. See Jay George's Wiki under Performance > Images for more information. #}}
+    <img 
+        src="{{ glide:url width='375' dpr='2' }}"
+        decoding="async"
+        fetchpriority="high"
+        width="{{ width }}" 
+        height="{{ height }}"
+        alt="{{ if alt }}{{ alt | ucfirst | ensure_right('.') | smartypants }}{{ else }}{{ filename | ucfirst | ensure_right('.') | replace('-| ') | smartypants }}{{ /if }}"
+        {{ if hue_rotate == 'hue_rotate_1' }} class="u-image-boost-with-hue-rotate"{{ elseif hue_rotate == 'hue_rotate_2' }} class="u-image-boost-with-hue-rotate-extra"{{ /if }}
+    >
+</picture>
\ No newline at end of file
diff --git a/resources/views/installing.antlers.html b/resources/views/installing.antlers.html
index 87687f477..43e204c87 100644
--- a/resources/views/installing.antlers.html
+++ b/resources/views/installing.antlers.html
@@ -1,69 +1,103 @@
-<header class="markdown pb-8 mb-8">
-    {{ partial:breadcrumbs }}
-    <div class="flex items-center">
-        <h1>{{ title }}</h1>
-        {{ partial:pro-badge }}
-    </div>
-    <div class="lg:pr-16 text-2xl">
-        {{ intro ?? overview | markdown}}
-    </div>
-    {{ svg src="zig-zag" class="mt-16" }}
-</header>
+{{ partial:header }}
 
-<section class="mt-0 md:pb-16"">
-    <div class="grid md:grid-cols-2 lg:grid-cols-3 gap-y-6 md:gap-6 mt-8">
-        <a href="/installing/local" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/laptop.svg" alt="Local Install Laptop">
-            <h2 class="text-2xl mb-2 font-bold font-display">Local Install</h2>
-            <p class="text-sm font-mono-alt">MacOS, Windows, or Linux</p>
-        </a>
-        <a href="/installing/laravel" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/laravel-logo.svg" alt="Laravel Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Laravel Application</h2>
-            <p class="text-sm font-mono-alt">Drop into an existing app</p>
-        </a>
-        <a href="/installing/docker" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-4 h-14" src="/img/docker-logo.svg" alt="Docker Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Docker</h2>
-            <p class="text-sm font-mono-alt">Using Laravel Sail</p>
+<div class="c-icon-grid">
+    <div class="c-icon-grid__item">
+        <a href="/installing/laravel-herd">
+            <div class="c-icon-grid__icon">
+                <img src="/img/icons/laravel-herd.png" alt="Laravel Herd icon" width="256" height="256" />
+            </div>
         </a>
-        <a href="/installing/ubuntu" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-4 h-14" src="/img/ubuntu-logo.svg" alt="Ubuntu Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Ubuntu</h2>
-            <p class="text-sm font-mono-alt">18.04, 20.04 LTS</p>
+        <h2>Laravel Herd</h2>
+        <p>macOS, Windows</p>
+        <div class="c-icon-grid__item__label">
+            <div>Recommended</div>
+        </div>
+    </div>
+    <div class="c-icon-grid__item">
+        <a href="/installing/local">
+            <div class="c-icon-grid__icon">
+                <img src="/img/icons/terminal.svg" alt="an icon that represents the command line" />
+            </div>
         </a>
+        <h2>Statamic CLI</h2>
+        <p>macOS, Windows, or Linux</p>
     </div>
-</section>
-
-<section class="mt-6 md:mt-24 md:pb-16">
-    <header class="markdown">
-        <h2 id="cloud">
-            Cloud Hosting
-            <a class="anchor" href="#cloud">#</a>
-        </h2>
-    </header>
-    <div class="grid md:grid-cols-2 lg:grid-cols-3 gap-y-6 md:gap-6 mt-8">
-        <a href="/installing/digital-ocean" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/digital-ocean-logo.svg" alt="Digital Ocean Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Digital Ocean</h2>
-            <p class="text-sm font-mono-alt">Virtual Private Server</p>
+    <div class="c-icon-grid__item">
+        <a href="/installing/laravel">
+            <div class="c-icon-grid__icon">
+                <img src="/img/icons/laravel.svg" alt="The Laravel logo" />
+            </div>
         </a>
-        <a href="/installing/linode" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16 w-32" src="/img/linode-logo.svg" alt="Linode Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Linode</h2>
-            <p class="text-sm font-mono-alt">Virtual Private Server</p>
+        <h2>Laravel Application</h2>
+        <p>Drop into an existing app</p>
+    </div>
+    <div class="c-icon-grid__item">
+        <a href="/installing/docker">
+            <div class="c-icon-grid__icon">
+                <img src="/img/icons/docker.svg" alt="Docker logo" />
+            </div>
         </a>
-        <a href="https://ploi.io/statamic" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest dark:bg-gray-darkest dark:text-white dark:shadow-none">
-            <img class="mx-auto mb-2 h-16" src="/img/ploi-cake.png" alt="Ploi Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Ploi</h2>
-            <p class="text-sm font-mono-alt">One-Click Install</p>
+        <h2>Docker</h2>
+        <p>Using Laravel Sail</p>
+    </div>
+    <div class="c-icon-grid__item">
+        <a href="/installing/ubuntu">
+            <div class="c-icon-grid__icon">
+                <img src="/img/icons/ubuntu.svg" alt="Ubuntu logo" />
+            </div>
         </a>
-        {{# <a href="https://forge.laravel" class="bg-white border text-center shadow-stack-sm hover:shadow-stack-yellow-sm rounded-sm px-3 py-6 hover:bg-gradient-to-tl from-gray-lightest">
-            <img class="mx-auto mb-2 h-16 w-32" src="/img/forge-logo.svg" alt="Forge Logo">
-            <h2 class="text-2xl mb-2 font-bold font-display">Laravel Forge</h2>
-            <p class="text-sm font-mono-alt">VPS of your choice</p>
-        </a> #}}
+        <h2>Ubuntu</h2>
+        <p>18.04, 20.04 LTS</p>
     </div>
+</div>
+
+<section>
+
+    <h2>Cloud hosting</h2>
+
+    <div class="c-icon-grid" style="padding-block-end: 0;">
+        <div class="c-icon-grid__item">
+            <a href="/installing/laravel-forge-1-click">
+                <div class="c-icon-grid__icon">
+                    {{# 2025-07-09 Attributes needed for the SVG to display in Firefox #}}
+                    <img src="/img/icons/forge.svg" style="width: 300px; height: 58px;" alt="Laravel Forge Logo" />
+                </div>
+            </a>
+            <h3>Forge</h3>
+            <p>One-Click Install</p>
+        </div>
+        <div class="c-icon-grid__item">
+            <a href="https://ploi.io/statamic">
+                <div class="c-icon-grid__icon">
+                    <img src="/img/icons/ploi.png" class="u-hide-in-dark-mode" alt="Ploi logo" width="483" height="183" />
+                    <img src="/img/icons/ploi-dark-mode.png" class="u-hide-in-light-mode" alt="Ploi logo" width="483" height="183" />
+                </div>
+            </a>
+            <h3>Ploi {{ svg src='external-link' }}</h3>
+            <p>One-Click Install</p>
+        </div>
+        <div class="c-icon-grid__item">
+            <a href="/installing/digital-ocean">
+                <div class="c-icon-grid__icon">
+                    {{# 2025-07-09 Attributes needed for the SVG to display in Firefox #}}
+                    <img src="/img/icons/digital-ocean.svg" style="width: 201px; height: 150px;" alt="Digital Ocean logo" />
+                </div>
+            </a>
+            <h3>Digital Ocean</h3>
+            <p>Virtual Private Server</p>
+        </div>
+        <div class="c-icon-grid__item">
+            <a href="/installing/linode">
+                <div class="c-icon-grid__icon">
+                    <img src="/img/icons/linode.svg" alt="Linode logo" />
+                </div>
+            </a>
+            <h3>Linode</h3>
+            <p>Virtual Private Server</p>
+        </div>
+    </div>
+
 </section>
 
-{{ partial:suggest }}
+{{ $suggest = 'yes' }}
+{{ push:scope_classes }}u-no-scroll-spy-toc-position{{ /push:scope_classes }}
diff --git a/resources/views/layout.antlers.html b/resources/views/layout.antlers.html
index dd4958a80..c22704886 100644
--- a/resources/views/layout.antlers.html
+++ b/resources/views/layout.antlers.html
@@ -1,48 +1,167 @@
-<html lang="en" class="bg-white" :class="{ dark: darkMode }"
-    x-data="htmlData()"
-    x-init="window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => setSystemTheme(e.matches ? 'dark' : 'light'))">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta http-equiv="X-UA-Compatible" content="ie=edge">
-    <title>{{ meta_title ?? title }} // Statamic 3 Docs</title>
-    <meta name="description" content="{{ intro | striptags }}">
-    <meta property="og:type" content="website" />
-    <meta property="og:title" content="{{ title }}" />
-    <meta property="og:description" content="{{ intro | striptags }}" />
-    <meta property="og:url" content="{{ permalink }}" />
-    <meta property="og:site_name" content="Statamic Docs" />
-    <meta property="og:locale" content="en_US" />
-    {{# <meta property="og:image" content="{{ snapit:og }}" /> #}}
-    <meta property="og:image" content="https://statamic.dev/img/social-placeholder.png" />
-    <meta property="twitter:title" content="{{ title }}" />
-    <meta property="twitter:card" content="summary" />
-    <meta property="twitter:site" content="@statamic" />
-    {{# <meta property="twitter:image" content="{{ snapit:twitter }}" /> #}}
-    <meta property="twitter:image" content="https://statamic.dev/img/social-placeholder.png" />
-    <meta property="twitter:description" content="{{ intro | striptags }}" />
-    <link rel="icon" type="image/png" href="/img/favicon-32x32.png" sizes="32x32" />
-    <link rel="icon" type="image/png" href="/img/favicon-16x16.png" sizes="16x16" />
-    <link rel="preconnect" href="https://90UJMUR5MX-dsn.algolia.net" crossorigin />
-    <link rel="stylesheet" href="https://use.typekit.net/huy6nsb.css" defer>
-    <link rel="stylesheet" href="{{ mix src='/css/tailwind.css' }}">
-    <script src="{{ mix src='/js/app.js' }}" defer></script>
-    <script>
-    </script>
-</head>
-<body class="font-sans leading-normal dark:bg-black dark:bg-none" x-data="bodyData()" x-spread="bindings">
-{{ partial:partials/promo }}
-{{ partial:partials/nav }}
-<div class="max-w-7xl mx-auto flex px-4 md:px-10 py-6 lg:py-12" name="top">
-    {{ partial:side-nav }}
-    <div id="content" class="w-full {{ content_width ?? 'max-w-2xl' }}" x-show="! showNav">
-        {{ template_content }}
-        {{ partial:back-to-top }}
-    </div>
-</div>
-{{ partial:old-docs-banner }}
-{{ partial:footer }}
-{{ partial:scripts }}
-<div class="fixed"><input type="text"></div>
-</body>
+<html lang="en" class="{{ stack:scope_classes }}{{ value }}{{ !last ?= ' ' }}{{ /stack:scope_classes }}">
+    {{ partial:head }}
+    {{ partial:site_header }}
+    <body>
+        {{# =jfg This is not currently in use but could be useful in future #}}
+        {{# {{ partial:partials/promo }} #}}
+
+        {{# Need tabindex="-1" to lock the tab focus here when using Skip to Content #}}
+        <main tabindex="-1" id="main" class="s-main o-scroll-spy-timeline">
+            {{ partial:nav_sidebar }}
+            <nav class="c-breadcrumbs">
+                <ol>
+                    <li><a href="{{ nav:collection:sections include_home="true" }}{{ page:section === section ?= '{ url }' }}{{ /nav:collection:sections }}">{{ page:section | replace('_', ' ') }}</a></li>
+                    {{ if section }}
+                    {{ nav :handle="section" }}
+                        {{ if {children | where('is_current', true) | count} > 0 }}
+                            <li>
+                                {{ svg src='breadcrumb-chevron' }}
+                                {{# It's possible to add a URL to the section heading here in /cp/navigation/docs, e.g. we want to do this for "Getting Started". If a section heading URL is not present then we fall back to the first child URL. #}}
+                                <a href="{{ if url }}{{ url }}{{ else }}{{ children | first }}{{ url }}{{ /children }}{{ /if }}">
+                                    {{ title }}
+                                </a>
+                            </li>
+                        {{ /if }}
+                    {{ /nav }}
+                    {{ /if }}
+                    <li>{{ svg src='breadcrumb-chevron' }}<button popovertarget="popover-nav-sidebar">{{ breadcrumb_title ?? nav_title ?? title }}</button></li>
+                </ol>
+            </nav>
+
+            <div class="c-nav-toc-with-popover-api">
+                {{ unless $hide_toc == 'yes' }}
+                    <button class="c-nav-toc-with-popover-api__mobile-button" popovertarget="popover-nav-toc">
+                        {{ svg src='nav-toc-chevron' }}
+                    </button>
+                    <nav id="popover-nav-toc" class="c-nav-toc-with-popover-api__mobile u-hide-on-large-screens" popover>
+                        <button class="c-nav-toc-with-popover-api__close-button" title="Close" popovertarget="popover-nav-toc">
+                            <svg height="100pt" aria-hidden="true" viewBox="0 0 100 100" width="100pt" xmlns="http://www.w3.org/2000/svg"><path d="m91.668 13.676-5.3398-5.3398-36.328 36.324-36.328-36.324-5.3398 5.3398 36.328 36.324-36.328 36.324 5.3398 5.3398 36.328-36.324 36.328 36.324 5.3398-5.3398-36.328-36.324z"/></svg>
+                        </button>
+                        <ul>
+                            <li>
+                                <span class="c-nav-toc-with-popover-api-category-heading">On this page
+                                    {{ if section }}
+                                        {{ nav :handle="section" }}
+                                            {{ if ({children | where('is_current', true) | count} > 0) || is_current }}
+                                                {{ navigation_image }}
+                                                    {{ partial:image_dimensions/navigation_image }}
+                                                {{ /navigation_image }}
+                                            {{ /if }}
+                                        {{ /nav }}
+                                    {{ /if }}
+                                </span>
+                                {{ template_content | toc }}
+                            </li>
+                        </ul>
+                    </nav>
+                {{ /unless }}
+                <nav class="c-nav-toc-with-popover-api__desktop u-hide-on-small-screens">
+                    <ul class="o-shadow-container-vertical">
+                        {{ unless $hide_toc == 'yes' }}
+                            <li>
+                                <span class="c-nav-toc-with-popover-api-category-heading">On this page
+                                    {{ if section }}
+                                        {{ nav :handle="section" }}
+                                            {{ if ({children | where('is_current', true) | count} > 0) || is_current }}
+                                                {{ navigation_image }}
+                                                    {{ partial:image_dimensions/navigation_image }}
+                                                {{ /navigation_image }}
+                                            {{ /if }}
+                                        {{ /nav }}
+                                    {{ /if }}
+                                </span>
+                                {{ template_content | toc }}
+                            </li>
+                        {{ /unless }}
+                        <li class="c-sidebar-advert">
+                            {{ if advert_override }}
+                                {{ advert_override }}
+                                    <a href="{{ link }}">
+                                        {{ image }}
+                                            <picture>
+                                                {{# WebP #}}
+                                                <source
+                                                    srcset="{{ glide:url width='220' dpr='2' format='webp' }} 2x,
+                                                            {{ glide:url width='220' dpr='3' format='webp' }} 3x"
+                                                    type="image/webp"
+                                                >
+                                                {{# JPEG #}}
+                                                <source
+                                                    srcset="{{ glide:url width='220' dpr='2' }} 2x,
+                                                            {{ glide:url width='220' dpr='3' }} 3x"
+                                                    type="image/jpeg"
+                                                >
+                                                {{# Fallback, with dimensions set to minimise layout shift. See Jay George's Wiki under Performance > Images for more information. #}}
+                                                <img 
+                                                    src="{{ glide:url width='220' }}"
+                                                    decoding="async"
+                                                    fetchpriority="high"
+                                                    width="{{ width }}" 
+                                                    height="{{ height }}"
+                                                    alt="{{ if alt }}{{ alt | ucfirst | ensure_right('.') | smartypants }}{{ else }}{{ filename | ucfirst | ensure_right('.') | replace('-| ') | smartypants }}{{ /if }}"
+                                                />
+                                            </picture>
+                                        {{ /image }}
+                                        <h2>{{ heading }}</h2>
+                                        <p>{{ text }}</p>
+                                        <p><a href="{{ link }}">{{ link_text }}</a></p>
+                                    </a>
+                                {{ /advert_override }}
+                            {{ else }}
+                                {{ collection:adverts limit='1' sort='random' }}
+                                    <a href="{{ link }}">
+                                        {{ image }}
+                                            <picture>
+                                                {{# WebP #}}
+                                                <source
+                                                    srcset="{{ glide:url width='220' dpr='2' format='webp' }} 2x,
+                                                            {{ glide:url width='220' dpr='3' format='webp' }} 3x"
+                                                    type="image/webp"
+                                                >
+                                                {{# JPEG #}}
+                                                <source
+                                                    srcset="{{ glide:url width='220' dpr='2' }} 2x,
+                                                            {{ glide:url width='220' dpr='3' }} 3x"
+                                                    type="image/jpeg"
+                                                >
+                                                {{# Fallback, with dimensions set to minimise layout shift. See Jay George's Wiki under Performance > Images for more information. #}}
+                                                <img 
+                                                    src="{{ glide:url width='220' }}"
+                                                    decoding="async"
+                                                    fetchpriority="high"
+                                                    width="{{ width }}" 
+                                                    height="{{ height }}"
+                                                    alt="{{ if alt }}{{ alt | ucfirst | ensure_right('.') | smartypants }}{{ else }}{{ filename | ucfirst | ensure_right('.') | replace('-| ') | smartypants }}{{ /if }}"
+                                                />
+                                            </picture>
+                                        {{ /image }}
+                                        <h2>{{ heading }}</h2>
+                                        <p>{{ text }}</p>
+                                        <p><a href="{{ link }}">{{ link_text }}</a></p>
+                                    </a>
+                                {{ /collection:adverts }}
+                            {{ /if }}
+                        </li>
+                    </ul>
+                </nav>
+            </div>
+            <div class="c-entry-content-wrapper" name="top">
+                {{# {{ partial:side-nav }} #}}
+                <article id="content" class="c-entry-content js__scroll-spy-toc__timeline">
+                    {{ template_content }}
+                </article>
+                {{ if $suggest == 'yes' }}
+                    {{ partial:suggest }}
+                {{ else }}
+                    {{# e.g. we output this variable on homepages like / and /reference #}}
+                    {{ unless $article_footer == 'no' }}
+                        {{ partial:edit }}
+                    {{ /unless }}
+                {{ /if }}
+            </div>
+        </main>
+
+        {{ partial:footer }}
+        {{ partial:scripts }}
+    </body>
 </html>
diff --git a/resources/views/modifiers/index.antlers.html b/resources/views/modifiers/index.antlers.html
index e64b7845f..4f1101e73 100644
--- a/resources/views/modifiers/index.antlers.html
+++ b/resources/views/modifiers/index.antlers.html
@@ -1,21 +1,16 @@
 {{ partial:header }}
 
-<article class="markdown md:pb-16">
-    {{ content | toc:ids }}
+{{ content | toc:ids }}
 
-    <div class="space-y-10">
-        {{ taxonomy:modifier_types collection="modifiers" }}
-            <div class="bg-white border p-8 w-full rounded-sm shadow-stack z-10 font-mono-alt font-bold antialiased dark:bg-gray-darkest dark:shadow-none">
-                <h3 class="m-0">{{ title | title }}</h3>
-                <ul class="list-col-3 mb-0">
-                    {{ entries sort="slug" }}
-                        <li><a class="" href="{{ url }}">{{ slug }}</a></li>
-                    {{ /entries }}
-                </ul>
-            </div>
-        {{ /taxonomy:modifier_types }}
-    </div>
+<article class="c-panel-list">
+    {{ taxonomy:modifier_types collection="modifiers" }}
+        <h3>{{ title | title }}</h3>
+        <ul>
+            {{ entries sort="slug" }}
+                <li><a href="{{ url }}">{{ slug }}</a></li>
+            {{ /entries }}
+        </ul>
+    {{ /taxonomy:modifier_types }}
 </article>
 
-{{ partial:related }}
-
+{{ partial:related }}
\ No newline at end of file
diff --git a/resources/views/modifiers/show.antlers.html b/resources/views/modifiers/show.antlers.html
deleted file mode 100644
index d16315a3b..000000000
--- a/resources/views/modifiers/show.antlers.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<header class="markdown pb-8 mb-8">
-    {{ partial:breadcrumbs }}
-    <div class="flex items-center">
-        <h1 class="leading-tight {{ title | length > 28 ?= 'text-5xl'}}"><code>{{ slug }}</code> Modifier</h1>
-        {{ partial:pro-badge }}
-    </div>
-    {{ intro ?? overview | markdown }}
-    {{ partial:toc }}
-</header>
-
-<article class="markdown md:pb-16">
-    {{ content | toc:ids }}
-</article>
-
-{{ partial:related badge="Related Modifiers" description="These similar modifiers may aid you on your quest."}}
-
-{{ partial:edit }}
diff --git a/resources/views/page.antlers.html b/resources/views/page.antlers.html
index df9d389e7..7b8882bf1 100644
--- a/resources/views/page.antlers.html
+++ b/resources/views/page.antlers.html
@@ -1,17 +1,33 @@
 {{ partial:header }}
 
-<article class="markdown md:pb-16">
-    {{ content | toc:ids }}
+{{# <div listen-for-intersection-of-titles> #}}
+    {{ if screenshot }}
+        <figure>
+            {{ screenshot }}
+                <img src="{{ url }}" width="{{ width | /:2 | +:2 }}" alt="Screenshot of {{ page:title }}">
+            {{ /screenshot }}
+            {{# e.g. /fieldtypes/assets #}}
+            <figcaption>The {{ title }} in action!</figcaption>
+        </figure>
+    {{ /if }}
+
+    {{ content }}
 
     {{ if options }}
         <h2 id="options">Options</h2>
-        {{ if options_content }}
-            {{ options_content | markdown }}
-        {{ /if }}
+        {{ options_content | markdown ?? '' }}
         {{ partial:details :details="options" }}
     {{ /if }}
-</article>
 
-{{ partial:related }}
+    {{ if parameters }}
+        <h2 id="parameters">Parameters</h2>
+        {{ partial:details :details="parameters" }}
+    {{ /if }}
 
-{{ partial:edit }}
+    {{ if variables }}
+        <h2 id="variables">Variables</h2>
+        {{ partial:variables }}
+    {{ /if }}
+{{# </div> #}}
+
+{{ partial:related }}
diff --git a/resources/views/partials/back-to-top.antlers.html b/resources/views/partials/back-to-top.antlers.html
deleted file mode 100644
index aae2defe0..000000000
--- a/resources/views/partials/back-to-top.antlers.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<a
-    href="#top"
-    class="fixed bottom-4 right-4 opacity-0 transistion hover:scale-110 duration-200 hidden lg:block"
-    @scroll.window="nearTop = window.pageYOffset > 600 ? false : true"
-    x-bind:class="{ 'opacity-100' : !nearTop }"
-    title="Go back to the top"
-    aria-label="Go back to the top"
->
-    {{ svg src="img/back-to-top" class="h-10 w-10 text-yellow hover:text-mint" }}
-</a>
diff --git a/resources/views/partials/breadcrumbs.antlers.html b/resources/views/partials/breadcrumbs.antlers.html
deleted file mode 100644
index 04faecd82..000000000
--- a/resources/views/partials/breadcrumbs.antlers.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{{ if segment_2 }}
-<nav class="breadcrumbs space-x-2 flex mb-8 text-sm">
-    <a href="/" class="no-underline font-normal">Docs</a>
-    {{ nav:breadcrumbs include_home="false" }}
-        {{ if ! is_current }}
-            <span>/</span>
-            <a href="{{ url }}" class="no-underline font-normal">{{ breadcrumb_title ?? nav_title ?? title }}</a>
-        {{ /if }}
-    {{ /nav:breadcrumbs }}
-</nav>
-{{ /if }}
diff --git a/resources/views/partials/details.antlers.html b/resources/views/partials/details.antlers.html
index 9402fc20c..ce00e99c1 100644
--- a/resources/views/partials/details.antlers.html
+++ b/resources/views/partials/details.antlers.html
@@ -1,20 +1,18 @@
-<div class="space-y-10">
-    {{ details }}
-    <div class="parameter relative">
-        <header class="inline-flex items-center relative shadow-stack-sm border overflow-hidden h-10">
-            <h3 class="bg-black m-0 py-2 px-4 font-bold font-mono-alt text-base text-white tracking-wide">
-                {{ name }}
-            </h3>
-            <div class="bg-mint py-4 px-4 font-mono leading-none text-xs font-bold">
-                {{ type }}
-            </div>
-            {{ if required }}
-                <div class="bg-white py-4 px-4 font-mono leading-none text-xs font-bold text-pink border-l">required</div>
-            {{ /if }}
-        </header>
-        <div class="markdown markdown-tight bg-gray-lightest text-base text-black px-4 py-2 leading-tight shadow-stack-sm border relative z-10 -top-px">
-            {{ description | widont  }}
+{{ details }}
+<div class="c-pill-with-description">
+    <header>
+        <h3>
+            {{ name }}
+        </h3>
+        <div>
+            {{ type }}
         </div>
+        {{ if required }}
+            <div>required</div>
+        {{ /if }}
+    </header>
+    <div>
+        {{ description | widont  }}
     </div>
-    {{ /details }}
 </div>
+{{ /details }}
diff --git a/resources/views/partials/edit.antlers.html b/resources/views/partials/edit.antlers.html
index 0b5c60a14..2a4972fae 100644
--- a/resources/views/partials/edit.antlers.html
+++ b/resources/views/partials/edit.antlers.html
@@ -1,10 +1,10 @@
 {{ if {github_edit_url} }}
-<div class="relative mt-16 overflow-hidden lg:overflow-visible dark:mt-0">
-    <img src="/img/splatter-feedback.png" alt="" class="absolute max-w-none w-[820px] left-[-90px] top-[-92px] dark:hidden">
-    <div class="bg-gray-lightest p-5 border shadow-stack relative z-10 dark:bg-mint">
-        <div class="text-2xl font-display font-bold mb-3">Docs feedback</div>
-        <p class="text-base mb-3">Submit improvements, related content, or suggestions through Github.</p>
-        <a href="{{ github_edit_url }}" class="button">Betterify this page &rarr;</a>
+<div class="o-entry-content">
+    <div class="c-feedback-meerkat">
+        <h2>Docs Feedback</h2>
+        <p>Submit improvements, related content, or suggestions through Github.</p>
+        <a href="{{ github_edit_url }}" class="c-btn c-btn--1">Betterify this page</a>
+        <img src="/img/meerkat.webp" alt="Meerkat" width="150" height="278">
     </div>
 </div>
 {{ /if }}
diff --git a/resources/views/partials/experimental.antlers.html b/resources/views/partials/experimental.antlers.html
deleted file mode 100644
index dcda06e86..000000000
--- a/resources/views/partials/experimental.antlers.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{ if experimental }}
-    <a class="inline-block md:ml-8 mb-6 flex-shrink-0" href="/experimental">
-        <img src="/img/label-experimental-{{ experimental_badges | random }}.jpg" alt="Experimental Feature" width="140" />
-    </a>
-{{ /if }}
diff --git a/resources/views/partials/favicons.antlers.html b/resources/views/partials/favicons.antlers.html
new file mode 100644
index 000000000..7102653db
--- /dev/null
+++ b/resources/views/partials/favicons.antlers.html
@@ -0,0 +1,6 @@
+<link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96" />
+<link rel="icon" type="image/svg+xml" href="/favicons/favicon.svg" />
+<link rel="shortcut icon" href="/favicons/favicon.ico" />
+<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon.png" />
+<meta name="apple-mobile-web-app-title" content="Docs" />
+<link rel="manifest" href="/favicons/site.webmanifest" />
\ No newline at end of file
diff --git a/resources/views/partials/footer.antlers.html b/resources/views/partials/footer.antlers.html
index eeb32c24e..b8c865469 100644
--- a/resources/views/partials/footer.antlers.html
+++ b/resources/views/partials/footer.antlers.html
@@ -1,77 +1,91 @@
-<div id="site-footer" class="bg-black text-white relative mt-8 z-20 dark:bg-gray-darkest" x-show="! showNav">
-    <div class="max-w-7xl mx-auto px-6 md:px-10 py-12 relative">
-        <div class="md:w-1/2">
-            <h2 class="text-3xl font-bold font-display mb-4 antialiased">Community</h2>
-            <p class="mb-8">The Statamic developer community is strong. We have more than 25k users and 4,000 of them are probably chatting right now in our live Discord chat.</p>
-            {{ partial:social }}
+<footer id="footer" class="c-site-footer">
+    <div class="c-site-footer__scene">
+        <div class="c-site-footer__scene__image-container">
+            <img src="/img/footer/waterfall.avif" alt="" />
         </div>
-        <div class="flex flex-wrap justify-between mt-12 py-12 hover-within:underline-grow">
-            <div class="w-1/2 md:w-1/3 lg:w-auto pb-12 pr-4">
-                <h3 class="text-base font-bold mb-3">
-                    Learn
-                </h3>
-                <ul class="space-y-2 text-sm">
-                    <li><a href="/recent-updates">What's New</a></li>
-                    {{ nav:collection:sections include_home="true" }}
-                    <li><a href="{{ url }}">{{ title }}</a></li>
-                    {{ /nav:collection:sections }}
-                </ul>
+        <div class="c-site-footer__scene__stars u-hide-in-light-mode">
+            <img src="/img/theme-dark.svg" alt="Stars" />
+            <img src="/img/theme-dark.svg" alt="Stars" />
+            <img src="/img/theme-dark.svg" alt="Stars" />
+            <img src="/img/theme-dark.svg" alt="Stars" />
+            <img src="/img/theme-dark.svg" alt="Stars" />
+        </div>
+    </div>
+    <div class="c-site-footer__nav">
+        <div class="c-site-footer__nav__item">
+            <div class="c-site-footer-heading">
+                {{ svg src='footer-arrow' }}
+                Learn
             </div>
-            <div class="w-1/2 md:w-1/3 lg:w-auto pb-12 pr-4">
-                <h3 class="text-base font-bold mb-3">
-                    Product
-                </h3>
-                <ul class="space-y-2 text-sm">
-                    <li><a href="https://statamic.com/blog">Blog</a></li>
-                    <li><a href="https://statamic.com/pricing">Pricing</a></li>
-                    <li><a href="https://statamic.com/license">License</a></li>
-                    <li><a href="https://statamic.com/release-notes">Release Notes</a></li>
-                    <li><a href="https://statamic.com/roadmap">Roadmap</a></li>
-                </ul>
+            <ul>
+                <li><a href="/recent-updates">What's New</a></li>
+                {{ nav:collection:sections include_home="true" }}
+                <li><a href="{{ url }}">{{ title }}</a></li>
+                {{ /nav:collection:sections }}
+            </ul>
+        </div>
+        <div class="c-site-footer__nav__item">
+            <div class="c-site-footer-heading">
+                {{ svg src='footer-arrow' }}
+                Product
             </div>
-            <div class="w-1/2 md:w-1/3 lg:w-auto pb-12 pr-4">
-                <h3 class="text-base font-bold mb-3">
-                    Marketplace
-                </h3>
-                <ul class="space-y-2 text-sm">
-                    <li><a href="https://statamic.com/addons">Addons</a></li>
-                    <li><a href="https://statamic.com/starter-kits">Starter Kits</a></li>
-                    <li><a href="https://statamic.com/sell">Become a Seller</a></li>
-                </ul>
+            <ul>
+                <li><a href="https://statamic.com">Statamic.com</a></li>
+                <li><a href="https://statamic.com/blog">Blog</a></li>
+                <li><a href="https://statamic.com/pricing">Pricing</a></li>
+                <li><a href="https://statamic.com/license">License</a></li>
+                <li><a href="https://statamic.com/release-notes">Release Notes</a></li>
+                <li><a href="https://statamic.com/roadmap">Roadmap</a></li>
+                <li><a href="https://v1.statamic.com">V1 Docs</a> / <a href="https://v2.statamic.com">V2 Docs</a></li>
+            </ul>
+        </div>
+        <div class="c-site-footer__nav__item">
+            <div class="c-site-footer-heading">
+                {{ svg src='footer-arrow' }}
+                Community
             </div>
-            <div class="w-1/2 md:w-1/3 lg:w-auto pb-12 pr-4">
-                <h3 class="text-base font-bold mb-3">
-                    Support
-                </h3>
-                <ul class="space-y-2 text-sm">
-                    <li><a href="https://statamic.com/support">Support Center</a></li>
-                    <li><a href="https://statamic.com/partners">Partners</a></li>
-                    <li><a href="https://statamic.com/partners/how-to-join">Become a Partner</a></li>
-                </ul>
+            <ul>
+                <li><a href="https://statamic.com/discord"><img src="/img/icons/social/discord.svg" alt="Discord" /> Discord</a><span>(5.8k+ members)</span></li>
+                <li><a href="https://github.com/statamic/cms"><img src="/img/icons/social/github.svg" alt="GitHub" /> GitHub</a><span>(4.3k stars)</span></li>
+                <li><a href="https://github.com/statamic/cms/discussions"><img src="/img/icons/social/statamic.svg" alt="Discussions" /> Discussions</a></li>
+                <li><a href="https://twitter.com/statamic"><img src="/img/icons/social/x.svg" alt="X / Twitter" />Social</a></li>
+                <li><a rel="me" href="https://bsky.app/profile/statamic.com"><img src="/img/icons/social/bluesky.svg" alt="Bluesky" /> Bluesky</a></li>
+                <li><a rel="me" href="https://mastodon.social/@statamic"><img src="/img/icons/social/mastodon.svg" alt="Mastodon" /> Mastodon</a></li>
+            </ul>
+        </div>
+        <div class="c-site-footer__nav__item">
+            <div class="c-site-footer-heading">
+                {{ svg src='footer-arrow' }}
+                Marketplace
             </div>
-            <div class="w-1/2 md:w-2/3 lg:w-auto pb-12">
-                <h3 class="text-base font-bold mb-3">
-                    Search
-                </h3>
-                <form class="relative flex items-center text-sm w-[300px] md:w-[360px] h-9 m-0 rounded border-2 border-white shadow-white relative top-[-2px]" action="/search-results">
-                    <input
-                        class="focus:outline-none bg-black dark:bg-gray-darkest placeholder-white antialised px-3 flex-1 appearance-none"
-                        type="text" placeholder="Are these the droids?" @click="document.getElementsByClassName('DocSearch-Button')[0].click()">
-                    <button class="bg-white hover:bg-mint text-black px-4 h-full">Search</button>
-                </form>
+            <ul>
+                <li><a href="https://statamic.com/addons">Addons</a></li>
+                <li><a href="https://statamic.com/starter-kits">Starter Kits</a></li>
+                <li><a href="https://statamic.com/sell">Become a Seller</a></li>
+            </ul>
+        </div>
+        <div class="c-site-footer__nav__item">
+            <div class="c-site-footer-heading">
+                {{ svg src='footer-arrow' }}
+                Support
             </div>
+            <ul>
+                <li><a href="https://statamic.com/support">Support Center</a></li>
+                <li><a href="https://statamic.com/partners">Partners</a></li>
+                <li><a href="https://statamic.com/partners/join">Become a Partner</a></li>
+                <li><br><small>&copy; Copyright 2012–{{ now | format:Y }} Statamic, LLC. All rights reserved. 🇺🇸</small></li>
+            </ul>
         </div>
-        <div class="flex flex-col md:flex-row justify-center md:justify-between items-center md:items-end text-white">
-            <div class="text-xs antialiased hover-within:underline-grow">
-                <a href="https://v1.statamic.com">Version 1 Docs</a>
-                &nbsp;&nbsp;//&nbsp;&nbsp;
-                <a href="https://v2.statamic.com">Version 2 Docs</a>
+    </div>
+    <div class="c-site-footer__nav">
+        <div class="c-site-footer__nav__item">
+            <div class="o-font-toggle">
+                {{ svg src='crane-kick' }}
+                <input type="radio" id="font-sans-off" name="font-toggle" value="sans-off" class="font-toggle__radio" checked>
+                <label for="font-sans-off" class="font-toggle__sans-off">Sans Off</label>
+                <input type="radio" id="font-sans-on" name="font-toggle" value="sans-on" class="font-toggle__radio">
+                <label for="font-sans-on" class="font-toggle__sans-on">Sans On</label>
             </div>
-            <a href="https://statamic.com" class="text-white mt-10 md:mt-0 flex flex-col items-center md:items-end hover:text-yellow">
-                {{ svg src="statamic-logo" class="w-32" }}
-                <span class="text-xs antialiased pt-2">Looking for statamic.com?</span>
-            </a>
         </div>
-        <img src="/img/splatter-palm.png" alt="" class="absolute top-[-70px] left-0" width="214">
     </div>
-</div>
+</footer>
diff --git a/resources/views/partials/head.antlers.html b/resources/views/partials/head.antlers.html
new file mode 100644
index 000000000..a7b8f1d9f
--- /dev/null
+++ b/resources/views/partials/head.antlers.html
@@ -0,0 +1,55 @@
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>{{ meta_title ?? title }} // Statamic Docs</title>
+    {{ partial:meta }}
+    {{ livewire:styles }}
+    {{# GROUP WEB FONTS 
+    =================================================== #}}
+    {{# Highest priority because render blocking. An additional preload improves the Lighthouse score. #}}
+    {{# Typekit #}}
+    {{# Make Lighthouse happy. Source: https://stackoverflow.com/questions/60411231/preload-typekit-font-css#60812240 #}}
+    {{# https://use.typekit.net & https://p.typekit.net is the font file origin (Lighthouse required both links from Adobe) #}}
+    {{# It may not have the same origin as the CSS file (https://use.typekit.net/pgd3inh.css) #}}
+    <link rel="preconnect" href="https://use.typekit.net" crossorigin>
+    <link rel="preconnect" href="https://p.typekit.net" crossorigin>
+    <link rel="stylesheet" href="https://use.typekit.net/wyy0pka.css"/>
+
+    <link rel="preconnect" href="https://fonts.googleapis.com">
+    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+    <link href="https://fonts.googleapis.com/css2?family=Lexend:wght@250..800&family=Source+Code+Pro:ital,wght@0,200..800;1,200..900&display=swap" rel="stylesheet">
+    {{# GROUP CSS 
+    =================================================== #}}
+    {{ partial:styles/stylesheets }}
+    {{# GROUP JS
+    =================================================== #}}
+    <script>
+        // Test for "system" color scheme first. The browser will ignore the subsequent theme-colors.
+        if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
+            document.head.insertAdjacentHTML('beforeend', '<meta name="theme-color" content="hsl(230deg 17% 7%)">');
+        }
+        document.addEventListener('DOMContentLoaded', (event) => {
+            // Get preferred color scheme from localStorage, default to 'light'
+            const preferredScheme = localStorage.getItem('preferredColorScheme') || 'light';
+            
+            // Check if screen width is greater than 1200px
+            const isWideScreen = window.innerWidth > 1200;
+
+            if (isWideScreen) {
+                // Set theme color based on preferred scheme
+                const themeColor = preferredScheme === 'dark' 
+                    ? 'hsl(230deg 17% 7%)' 
+                    : 'white';
+                document.head.insertAdjacentHTML('beforeend', `<meta name="theme-color" content="${themeColor}">`);
+            } else {
+                // Set theme color based on preferred scheme
+                const themeColor = preferredScheme === 'dark' 
+                    ? 'hsl(230deg 17% 7%)' 
+                    : 'hsl(197deg 100% 95%)';
+                document.head.insertAdjacentHTML('beforeend', `<meta name="theme-color" content="${themeColor}">`);
+            }
+        });
+    </script>
+    {{ vite src="resources/js/site.js" }}
+</head>
\ No newline at end of file
diff --git a/resources/views/partials/header.antlers.html b/resources/views/partials/header.antlers.html
index e18c131bb..fe8ca3ca1 100644
--- a/resources/views/partials/header.antlers.html
+++ b/resources/views/partials/header.antlers.html
@@ -1,10 +1,74 @@
-<header class="markdown pb-8 mb-8">
-    {{ partial:breadcrumbs }}
-    <div class="md:flex items-center">
-        <h1 class="{{ title | length > 36 ?= 'text-5xl'}}">{{ title }}</h1>
-        {{ partial:pro-badge }}
-        {{ partial:experimental }}
-    </div>
-    {{ intro ?? overview | markdown }}
-    {{ partial:toc hide="{hide_toc} ?? false"}}
-</header>
+{{ if pro }}
+    <header>
+        <div class="o-badge-heading">
+            <h1>{{ title }}</h1>
+            <div class="c-pro-badge">
+                <a href="/licensing">
+                    {{ global:pro_badges sort='random' limit='1' }}
+                        {{ artwork }}
+                            <picture class="c-pro-badge__artwork">
+                                {{# WebP #}}
+                                <source
+                                    srcset="{{ glide:url width='95' dpr='2' format='webp' }} 190w,
+                                            {{ glide:url width='120' dpr='2' format='webp' }} 240w"
+                                    type="image/webp"
+                                    sizes="(min-width: 1440px) 120px, 95px"
+                                >
+                                {{# JPEG #}}
+                                <source
+                                    srcset="{{ glide:url width='95' dpr='2' }} 190w,
+                                            {{ glide:url width='120' dpr='2' }} 240w"
+                                    type="image/jpeg"
+                                    sizes="(min-width: 1440px) 120px, 95px"
+                                >
+                                {{# Fallback, with dimensions set to minimise layout shift. See Jay George's Wiki under Performance > Images for more information. #}}
+                                <img 
+                                    src="{{ glide:url width='95' dpr='2' }}"
+                                    decoding="async"
+                                    fetchpriority="high"
+                                    width="{{ width }}" 
+                                    height="{{ height }}"
+                                    alt="{{ if alt }}{{ alt | ucfirst | ensure_right('.') | smartypants }}{{ else }}{{ filename | ucfirst | ensure_right('.') | replace('-| ') | smartypants }}{{ /if }}"
+                                >
+                            </picture>
+                        {{ /artwork }}
+                        <div class="c-pro-badge__text">
+                            {{ icon }}
+                                <picture>
+                                    {{# WebP #}}
+                                    <source
+                                        srcset="{{ glide:url width='80' dpr='2' format='webp' }} 160w"
+                                        type="image/webp"
+                                        sizes="100vw"
+                                    >
+                                    {{# JPEG #}}
+                                    <source
+                                        srcset="{{ glide:url width='80' dpr='2' }} 160w"
+                                        type="image/jpeg"
+                                        sizes="100vw"
+                                    >
+                                    {{# Fallback, with dimensions set to minimise layout shift. See Jay George's Wiki under Performance > Images for more information. #}}
+                                    <img 
+                                        src="{{ glide:url width='80' dpr='2' }}"
+                                        decoding="async"
+                                        fetchpriority="high"
+                                        width="{{ width }}" 
+                                        height="{{ height }}"
+                                        alt="{{ if alt }}{{ alt | ucfirst | ensure_right('.') | smartypants }}{{ else }}{{ filename | ucfirst | ensure_right('.') | replace('-| ') | smartypants }}{{ /if }}"
+                                    >
+                                </picture>
+                            {{ /icon }}
+                            Pro Feature
+                        </div>
+                    {{ /global:pro_badges }}
+                </a>
+            </div>
+        </div>
+        {{ intro ?? overview | markdown }}
+    </header>
+{{ else }}
+    <header>
+        <h1>{{ title }}</h1>
+        {{ intro ?? overview | markdown }}
+    </header>
+{{ /if }}
diff --git a/resources/views/partials/lorem.antlers.html b/resources/views/partials/lorem.antlers.html
index 50568a2be..01996e37f 100644
--- a/resources/views/partials/lorem.antlers.html
+++ b/resources/views/partials/lorem.antlers.html
@@ -15,7 +15,7 @@
 
 ## Flat First
 
-Statamic 3 has the ability to adapt to any data storage mechanism, from relational databases like MySQL and Postgres, to
+Statamic has the ability to adapt to any data storage mechanism, from relational databases like MySQL and Postgres, to
 NoSQL solutions like MongoDB and Redis, and more.
 
 However, these solutions all add <code>md:words</code> complexity and should only be used when necessary for scale.
@@ -83,4 +83,4 @@
 You can do everything (and more) without ever logging into the Control Panel. Granted, the CP does tend to make some of
 the more complicated things easier (like creating relationships, discovering all possible options for a given setting,
 and so on), but we love efficiency and your editor is a great place to find it.
-{{ /markdown }}
\ No newline at end of file
+{{ /markdown }}
diff --git a/resources/views/partials/meta.antlers.html b/resources/views/partials/meta.antlers.html
new file mode 100644
index 000000000..9c9ea7495
--- /dev/null
+++ b/resources/views/partials/meta.antlers.html
@@ -0,0 +1,14 @@
+<meta name="description" content="{{ intro | striptags }}">
+<meta property="og:type" content="website" />
+<meta property="og:title" content="{{ title }}" />
+<meta property="og:description" content="{{ intro | striptags }}" />
+<meta property="og:url" content="{{ permalink }}" />
+<meta property="og:site_name" content="Statamic Docs" />
+<meta property="og:locale" content="en_US" />
+<meta property="og:image" content="https://statamic.dev/img/social-placeholder.jpg" />
+<meta property="twitter:title" content="{{ title }}" />
+<meta property="twitter:card" content="summary" />
+<meta property="twitter:site" content="@statamic" />
+<meta property="twitter:image" content="https://statamic.dev/img/social-placeholder.jpg" />
+<meta property="twitter:description" content="{{ intro | striptags }}" />
+{{ partial:favicons}}
diff --git a/resources/views/partials/nav.antlers.html b/resources/views/partials/nav.antlers.html
deleted file mode 100644
index c152bc8bf..000000000
--- a/resources/views/partials/nav.antlers.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<nav
-    id="site-nav"
-    class="site-nav hidden bg-white md:flex sticky top-0 z-40 max-w-7xl mx-auto items-center justify-between px-4 lg:px-10 font-display h-20
-        dark:bg-black"
->
-    <div class="w-full flex items-center justify-between md:block md:w-74">
-        <a href="/" class="relative top-[-3px] text-pink hover:text-purple">
-            {{ svg src="docs-logo" class="block w-48" title="Statamic" }}
-        </a>
-    </div>
-    <div class="flex-1 flex items-center justify-between space-x-4 md:h-full">
-        <ul class="flex items-center space-x-2 md:space-x-6 lg:space-x-10 md:text-lg">
-            {{ nav:collection:sections include_home="true" }}
-            <li><a class="hover:text-pink dark:text-white {{ page:section === section ?= 'active' }}" href="{{ url }}">{{ title }}</a></li>
-            {{ /nav:collection:sections }}
-        </ul>
-        <div class="flex items-center h-full">
-            <form class="relative hidden md:flex items-center text-sm w-[160px] lg:w-[240px] h-9 m-0 rounded border-2 border-black shadow-sm md:shadow relative top-[-2px] dark:bg-gray-darkest" :class="{ 'md:hidden': themePickerOpen }" action="/search-results">
-                <div id="docsearch" ref="docSearch"></div>
-            </form>
-            {{ partial:theme }}
-        </div>
-    </div>
-</nav>
-
-<nav id="site-nav-mobile" class="site-nav md:hidden w-full border-b items-center justify-between pl-4 font-display py-1">
-    <div class="w-full flex items-center justify-between">
-        <a href="/" class="text-pink hover:text-purple">
-            {{ svg src="statamic-mark" class="block h-8 w-8" title="Statamic"}}
-        </a>
-        <div class="flex lg:hidden relative items-center w-full ml-3 h-8 rounded border border-black shadow-sm">
-                <input
-                    class="focus:outline-none placeholder-black antialised px-3 flex-1 appearance-none"
-                    type="text" placeholder="Search..." @click="document.getElementsByClassName('DocSearch-Button')[0].click()" />
-                <button class="bg-black hover:bg-purple text-white px-2 text-sm h-full">
-                    {{ svg src="search" class="text-white p-px" }}
-                </button>
-        </div>
-        <button type="button"
-                id="sidebar-open"
-                x-bind:class="{ 'hidden': showNav }"
-                @click="showNav = true"
-                class="flex p-4 items-center lg:hidden text-gray-500 focus:outline-none focus:text-gray-700">
-                {{ svg src="menu" class="w-7 h-7" }}
-        </button>
-        <button type="button"
-            id="sidebar-close"
-            x-bind:class="{ 'hidden': ! showNav }"
-            @click="showNav = false"
-            class="lg:flex p-4 items-center lg:hidden text-gray-500 focus:outline-none focus:text-gray-700">
-            {{ svg src="close" class="w-7 h-7" }}
-        </button>
-    </div>
-</nav>
diff --git a/resources/views/partials/nav_contents.antlers.html b/resources/views/partials/nav_contents.antlers.html
new file mode 100644
index 000000000..30c75f6e7
--- /dev/null
+++ b/resources/views/partials/nav_contents.antlers.html
@@ -0,0 +1,98 @@
+{{# Notes... 
+
+    Little hack to stop the scrollbar flickering here...
+        - First we hide the overflow so the view transition captures a "screenshot" of the ul without the scroll bar
+        - Then we remove the overflow pretty much as soon as the page has loaded
+        - The overflow is both hidden and removed with JS so it's a cool progressive enhancement
+        - Be careful with the delay between switching the overflow back to auto. If the delay is set to more than 50ms, the scroll bars will flicker in when loading when "System Settings > Scroll bar behaviour > Show scroll bars" is set to "Automatically based on mouse or trackpad" on macOS.
+
+    We also add a few conditions to check that we're the scroll position is only saved if we're in the same section of the site, e.g. if we're going from Docs to Reference we now have a different sidebar nav so we don't want to apply a previous position.
+#}}
+<ul 
+    wire:scroll 
+    class="o-shadow-container-vertical o-toggle-subnav-container"
+    x-data="{ 
+        navScrollPosition: $persist(0)
+    }"
+    x-init="
+        if (window.location.pathname === '/' || window.location.pathname === '/reference' || window.location.pathname === '/extending') {
+            navScrollPosition = 0;
+        } else {
+            $el.scrollTop = navScrollPosition;
+            // Scroll to current menu item if we _didn't_ come from a click in the sidenav
+            if (!localStorage.getItem('comingFromSidebarNav')) {
+                $el.querySelector('.o-current-menu-item').scrollIntoView({ block: 'center' });
+            }
+        }
+        $el.style.overflow = 'hidden';
+        setTimeout(() => {
+            $el.style.overflow = 'auto';
+            localStorage.removeItem('comingFromSidebarNav');
+        }, 20)
+    "
+    @scroll="navScrollPosition = $el.scrollTop"
+    @click="localStorage.setItem('comingFromSidebarNav', 'true')"
+>
+    {{ if section }}
+    {{ nav :handle="section" }}
+        <li>
+            <label class="o-toggle-subnav c-nav-sidebar-with-popover-api-category-heading{{ if is_current }} o-current-menu-item{{ /if }}">
+                {{ title }}
+                {{ if navigation_image_dark_mode }}
+                    {{ navigation_image }}
+                        {{ partial:image_dimensions/navigation_image modifier_classes='u-hide-in-dark-mode' }}
+                    {{ /navigation_image }}
+                    {{ navigation_image_dark_mode }}
+                        {{ partial:image_dimensions/navigation_image modifier_classes='u-hide-in-light-mode' }}
+                    {{ /navigation_image_dark_mode }}
+                {{ else }}
+                    {{ navigation_image }}
+                        {{ partial:image_dimensions/navigation_image }}
+                    {{ /navigation_image }}
+                {{ /if }}
+                <input id="{{ title | slugify }}" type="checkbox">
+            </label>
+            <ul>
+                {{ if children }}
+                    {{ children scope="child" }}
+                        <li>
+                            <a wire:navigate
+                                href="{{ url }}"
+                                {{ if is_current }}class="o-current-menu-item"{{ /if }}
+                            >
+                                {{ nav_title ?? title }}
+                            </a>
+                        </li>
+                    {{ /children }}
+                {{ /if }}
+
+                {{ if section == "reference" }}
+                    <li {{ if permalink === current_url }}x-effect="open = '{{ collection:title }}'"{{ /if }}>
+                        <a wire:navigate
+                            href="{{ url }}"
+                            {{ permalink === current_url ?= 'class="o-current-menu-item"' }}
+                        >
+                            All {{ title }}
+                        </a>
+                    </li>
+
+                    {{ collection :from="slug" }}
+                        <li {{ if permalink === current_url }}x-effect="open = '{{ collection:title }}'"{{ /if }}>
+                            <a wire:navigate
+                                href="{{ url }}"
+                                {{ permalink === current_url ?= 'class="o-current-menu-item"' }}
+                            >
+                                {{ nav_title ?? title }}
+                            </a>
+                        </li>
+                    {{ /collection }}
+                {{ /if }}
+            </ul>
+        </li>
+        {{# =JFG. Old/2024 site section #}}
+        {{# {{ if segment_1 }}
+        {{ partial:sidebar-promo}}
+        {{ /if }} #}}
+    {{ /nav }}
+    {{ /if }}
+</ul>
diff --git a/resources/views/partials/nav_sidebar.antlers.html b/resources/views/partials/nav_sidebar.antlers.html
new file mode 100644
index 000000000..b5f696cc2
--- /dev/null
+++ b/resources/views/partials/nav_sidebar.antlers.html
@@ -0,0 +1,17 @@
+<div class="c-nav-sidebar-with-popover-api">
+    <button class="c-nav-sidebar-with-popover-api__mobile-button" id="anchor-nav-mobile" popovertarget="popover-nav-sidebar">
+        {{ svg src='nav-lines' }}
+    </button>
+    <nav id="popover-nav-sidebar" class="c-nav-sidebar-with-popover-api__mobile u-hide-on-medium-screens u-hide-on-large-screens" popover>
+        <button class="c-nav-collapse-expand c-nav-collapse-expand--mobile js__expand-collapse-nav u-hide-on-medium-screens u-hide-on-large-screens">
+            {{ svg src='nav-collapsed' }}
+        </button>
+        <button class="c-nav-sidebar-with-popover-api__close-button" title="Close" popovertarget="popover-nav-sidebar">
+            <svg height="100pt" aria-hidden="true" viewBox="0 0 100 100" width="100pt" xmlns="http://www.w3.org/2000/svg"><path d="m91.668 13.676-5.3398-5.3398-36.328 36.324-36.328-36.324-5.3398 5.3398 36.328 36.324-36.328 36.324 5.3398 5.3398 36.328-36.324 36.328 36.324 5.3398-5.3398-36.328-36.324z"/></svg>
+        </button>
+        {{ partial:nav_contents }}
+    </nav>
+    <nav class="c-nav-sidebar-with-popover-api__desktop u-hide-on-small-screens">
+        {{ partial:nav_contents }}
+    </nav>
+</div>
\ No newline at end of file
diff --git a/resources/views/partials/pro-badge.antlers.html b/resources/views/partials/pro-badge.antlers.html
deleted file mode 100644
index 4329903d3..000000000
--- a/resources/views/partials/pro-badge.antlers.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{ if pro }}
-    <a class="inline-block ml-8 mb-6 flex-shrink-0" href="/licensing">
-        <img src="/img/label-pro-{{ pro_badges | random }}.jpg" alt="Pro Feature" width="136" />
-    </a>
-{{ /if }}
diff --git a/resources/views/partials/promo.antlers.html b/resources/views/partials/promo.antlers.html
index 33c807cfa..e18b1214d 100644
--- a/resources/views/partials/promo.antlers.html
+++ b/resources/views/partials/promo.antlers.html
@@ -4,6 +4,9 @@
 {{# <a href="https://laracasts.com/series/learn-statamic-with-jack?ref=statamic.dev" class="hidden md:block sticky z-50 -top-8 bg-gradient-to-r from-purple to-blue via-pink hover:bg-gradient-animate py-2 text-center text-white font-bold text-sm antialiased">
     📼 Learn Statamic with Jack &mdash; a 22 episode series — is now live on <span class="bg-yellow text-black px-1 rounded-sm">Laracasts!</span> 📼
 </a> #}}
-<a href="http://flatcamp.com?ref=statamic.dev" class="hidden md:block sticky z-50 -top-8 bg-gradient-to-r from-purple to-blue via-pink hover:bg-gradient-animate py-2 text-center text-white font-bold text-sm antialiased">
-    ⛺️ Come to the first ever Statamic non-conference! Tickets for <b>Flat Camp 2023</b> are now for sale. ⛺️
-</a>
+{{# <a href="https://statamic.com/blog/statamic-4-unleashed" class="hidden md:block sticky z-50 -top-8 bg-gradient-to-r from-purple to-blue via-pink hover:bg-gradient-animate py-2 text-center text-white font-bold text-sm antialiased">
+    🔥 <b>Statamic 4 has been unleashed!</b> Explore what's new and improved &rarr;
+</a> #}}
+{{# <a href="https://flatcamp.com" class="hidden md:block sticky z-50 -top-8 bg-gradient-to-r from-purple to-blue via-pink hover:bg-gradient-animate py-2 text-center text-white font-bold text-sm antialiased">
+    🤌 Flat Camp EU 2024 tickets are now available! Spend 3 dedicated days with the core Statamic team.
+</a> #}}
diff --git a/resources/views/partials/related.antlers.html b/resources/views/partials/related.antlers.html
index 06c3ec5ef..0cdc3dba5 100644
--- a/resources/views/partials/related.antlers.html
+++ b/resources/views/partials/related.antlers.html
@@ -1,31 +1,21 @@
 {{ if related_entries }}
-{{ svg src="zig-zag-lg" class="mx-auto w-full md:w-auto my-12 md:mb-24" }}
-<section class="bg-white border shadow-stack relative p-5 pt-8">
-    <div class="font-display shadow uppercase bg-yellow text-black inline-block py-1.5 px-2 leading-none absolute -left-4 -top-3 m-0 border -rotate-6 text-sm font-semibold tracking-wide">
-        {{ badge ?? "Learn More!" }}
-    </div>
-    <p class="mb-4 text-lg">{{ description ?? "There is more to learn more in these related articles:" }}</p>
-    {{ related_entries as="entries" }}
-        <div>
-        {{ entries group_by="collection:title" }}
-            {{ groups }}
-                <div class="flex mt-6">
-                    <div class="w-6 mr-5">
-                        {{ svg src="collections/{group|lower|slugify}" class="h-6 w-6" }}
-                    </div>
-                    <div class="">
-                        <h2 class="text-xl font-display font-bold">{{ group }}</h2>
-                        <ul class="list-col-2 space-y-2">
-                        {{ items }}
-                            <li class="pr-4"><a class="hover:text-pink" href="{{ url }}">{{ title }}</a>
-                        {{ /items }}
-                        </ul>
-                    </div>
-                </div>
-            {{ /groups }}
-        {{ /entries }}
-        </div>
-    {{ /related_entries }}
-</section>
-{{ svg src="zig-zag-lg" class="mx-auto w-full md:w-auto my-12 md:my-24" }}
+    <section class="c-related">
+        <div class="u-label">{{ badge ?? "Learn More!" }}</div>
+        <p>{{ description ?? "There is more to learn more in these related articles:" }}</p>
+
+        {{ related_entries as="entries" }}
+            {{ entries group_by="collection:title" }}
+                {{ groups }}
+                    {{ items }}
+                        <div class="c-related__item">
+                            <ul>
+                                <li><a href="{{ {mount_url :handle="collection:handle"} ?? '/' }}">{{ group }}</a></li>
+                                <li>{{ svg src='breadcrumb-chevron' }}<a href="{{ url }}">{{ title }}</a></li>
+                            </ul>
+                        </div>
+                    {{ /items }}
+                {{ /groups }}
+            {{ /entries }}
+        {{ /related_entries }}
+    </section>
 {{ /if }}
diff --git a/resources/views/partials/scripts.antlers.html b/resources/views/partials/scripts.antlers.html
index f7679eb85..c24c368d8 100644
--- a/resources/views/partials/scripts.antlers.html
+++ b/resources/views/partials/scripts.antlers.html
@@ -1,3 +1,75 @@
 {{ if environment === "production" }}
 <script src="https://cdn.usefathom.com/script.js" data-site="LGYIPVOA" defer></script>
 {{ /if }}
+
+{{ livewire:scriptConfig }}
+
+{{# <script data-navigate-once>
+    document.addEventListener('livewire:navigated', e => {
+        document.querySelectorAll('[wire\\:current\\.class]').forEach(el => {
+            let url = new URL(window.location.href)
+
+            if (url.pathname === el.getAttribute('href')) {
+                el.classList.add(...el.getAttribute('wire:current.class').split(' '))
+            } else {
+                el.classList.remove(...el.getAttribute('wire:current.class').split(' '))
+            }
+        })
+    })
+
+    document.addEventListener('alpine:initializing', () => {
+        Alpine.store('tocNavHighlighter', {
+            visibleHeadingId: null,
+        })
+
+        let store = Alpine.store('tocNavHighlighter')
+        let headings = []
+
+        document.addEventListener('scroll', Alpine.throttle(() => {
+            onScroll()
+        }, 25))
+
+        document.addEventListener('livewire:navigated', () => {
+            store.visibleHeadingId = null
+
+            // Grab all the headings inside the main container.
+            allHeadings = document.querySelectorAll('[listen-for-intersection-of-titles] h2, [listen-for-intersection-of-titles] h3, [listen-for-intersection-of-titles] h4, [listen-for-intersection-of-titles] h5, [listen-for-intersection-of-titles] h6');
+            headingsForHighlight = document.querySelectorAll('[listen-for-intersection-of-titles] h2:not(.no-sidebar)')
+
+            assignHeadingIds()
+
+            onScroll()
+        })
+
+        function assignHeadingIds() {
+            // If a heading doesn't have an [id], we'll give it one
+            // based on its text content.
+            allHeadings.forEach(heading => {
+                if (heading.id) return
+
+                heading.id = heading.textContent.trim().replace(/\s+/g, '-').toLowerCase()
+            })
+        }
+
+        function onScroll() {
+            let isAtTopIshOfPage = window.scrollY < 175;
+            let isAtBottomIshOfPage = (window.scrollY + window.innerHeight) > (document.body.offsetHeight - 175);
+            let headingsByDistanceFromTop = {};
+            let relativeTop;
+
+            if (isAtBottomIshOfPage) relativeTop = window.innerHeight;
+            else if (isAtTopIshOfPage) relativeTop = 250;
+            else relativeTop = window.innerHeight / 2;
+
+            headingsForHighlight.forEach(heading => {
+                headingsByDistanceFromTop[heading.getBoundingClientRect().top - relativeTop] = heading;
+            })
+
+            let closestNegativeTop = Math.max(...Object.keys(headingsByDistanceFromTop).filter(top => top < 0));
+
+            if (closestNegativeTop >= 0 || [Infinity, NaN, -Infinity].includes(closestNegativeTop)) return this.visibleHeadingId = null;
+
+            store.visibleHeadingId = headingsByDistanceFromTop[closestNegativeTop].id;
+        }
+    })
+</script> #}}
diff --git a/resources/views/partials/side-nav.antlers.html b/resources/views/partials/side-nav.antlers.html
index 3e488bc03..0f7aa6e38 100644
--- a/resources/views/partials/side-nav.antlers.html
+++ b/resources/views/partials/side-nav.antlers.html
@@ -1,28 +1,29 @@
-<div id="side-nav" class="md:block relative w-full z-10 md:w-64 lg:px-2 md:mr-16 lg:-ml-6 {{ ! segment_1 ?= 'z-10' }}" :class="{'mobile-open': showNav}" x-show="showNav">
+<div id="side-nav" class="md:block relative w-full z-10 md:w-[19rem] {{ ! segment_1 ?= 'z-10' }}" x-persist="side-nav">
     {{ if section }}
-    <div class="side-nav bg-white dark:bg-black md:bg-transparent sticky top-24 pb-6" x-data="{ open: 'Getting Started' }">
-        <nav class="lg:overflow-y-auto lg:overflow-x-visible max-h-screen-sans-nav">
-            <header class="hidden md:block font-display font-bold text-xl ml-6 border-b-2 border-gray dark:text-white">{{ section | deslugify | title }}</header>
+    <div wire:scroll class="overflow-y-auto side-nav bg-white dark:bg-black md:bg-transparent pb-6 fixed" :style="{ 'max-height': 'calc(100dvh - ' + $el.offsetTop + 'px)' }">
+        <nav>
             <div class="md:hidden">
                 <div class="grid grid-cols-2 gap-2 mb-6">
                     {{ nav:collection:sections include_home="true" }}
-                        <a class="text-lg font-display p-2 font-medium border shadow-sm text-center hover:text-pink {{ page:section === section ? 'bg-mint' : 'dark:bg-white' }}" href="{{ url }}">{{ nav_title ?? title }}</a>
+                        <a wire:navigate class="text-base p-2 font-normal border shadow-sm text-center {{ page:section === section ? 'bg-mint' : 'dark:bg-white' }}" href="{{ url }}">{{ nav_title ?? title }}</a>
                     {{ /nav:collection:sections }}
                 </div>
-                {{ svg src="zig-zag-lg" class="w-full my-4 mx-auto" }}
             </div>
             <div class="pl-2 md:p-0">
                 {{ nav :handle="section" }}
-                <div class="relative pl-1">
-                    <button class="text-lg relative font-medium font-display mt-4 mb-2 flex items-center dark:text-white" @click="open = (open === '{{ title }}') ? '' : '{{ title }}'">
-                        <span class="mr-2 relative -top-px transform transistion duration-100" :class="{'rotate-90': open === '{{ title }}' }">{{ svg src="img/chevron2" class="dark:text-current-color" }}</span>
-                        <span>{{ title }}</span>
-                    </button>
-                    <ul class="space-y-2 text-base ml-[1.35rem] antialised" x-show="open == '{{ title }}'">
+                <div class="relative">
+                    <div class="text-base text-zinc-600 font-normal mt-2 mb-2 flex items-center dark:text-white" >
+                        {{ title }}
+                    </div>
+                    <ul class="list-inside border-l space-y-2 text-base mb-4 ml-1">
                         {{ if children }}
                             {{ children scope="child" }}
-                                <li class="{{ is_current || is_parent ?= 'active' }}" {{ if is_current || is_parent }}x-effect="open = '{{ parent:title }}'"{{ /if }}>
-                                    <a href="{{ url }}" class="hover:text-pink dark:text-gray-dark dark:hover:text-pink">
+                                <li>
+                                    <a wire:navigate
+                                        href="{{ url }}"
+                                        class="border-l hover:border-black pl-4 border-transparent"
+                                        wire:current.class="active !border-black !text-black"
+                                    >
                                         {{ nav_title ?? title }}
                                     </a>
                                 </li>
@@ -30,14 +31,22 @@
                         {{ /if }}
                         {{ if section == "reference" }}
                             <li class="{{ permalink === current_url ?= 'active' }}" {{ if permalink === current_url }}x-effect="open = '{{ collection:title }}'"{{ /if }}>
-                                <a href="{{ url }}" class="hover:text-pink dark:text-gray-dark dark:hover:text-pink">
+                                <a wire:navigate
+                                    href="{{ url }}"
+                                    class="border-l hover:border-black pl-4 border-transparent"
+                                    wire:current.class="active !border-black !text-black"
+                                >
                                     All {{ title }}
                                 </a>
                             </li>
 
                             {{ collection :from="slug" }}
                                 <li class="{{ permalink === current_url ?= 'active' }}" {{ if permalink === current_url }}x-effect="open = '{{ collection:title }}'"{{ /if }}>
-                                    <a href="{{ url }}" class="hover:text-pink dark:text-gray-dark dark:hover:text-pink">
+                                    <a wire:navigate
+                                        href="{{ url }}"
+                                        class="border-l hover:border-black pl-4 border-transparent"
+                                        wire:current.class="active !border-black !text-black"
+                                    >
                                         {{ nav_title ?? title }}
                                     </a>
                                 </li>
@@ -48,12 +57,9 @@
                 {{ /nav }}
             </div>
         </nav>
-        <div class="mt-16">
-            <small class="text-[9px] text-gray-dark tracking-widest uppercase">Sponsor</small>
-            <a href="https://www.fortrabbit.com" x-on:click="fathom.trackGoal('VDDHHZZ8', 0)" class="bg-gray-lightest mt-2 hover:bg-white text-gray-dark hover:text-gray-darkest p-2 border shadow-mint-md relative block max-w-[130px] text-xs">
-                PHP hosting for real developers. <span style="font-family: Georgia,Times,'Times New Roman',serif; font-weight: 700; font-style: italic;">•fortrabbit</span> 
-            </a>
-        </div>
+        {{# {{ if segment_1 }}
+            {{ partial:sidebar-promo}}
+        {{ /if }} #}}
     </div>
     {{ /if }}
 </div>
diff --git a/resources/views/partials/sidebar-promo.antlers.html b/resources/views/partials/sidebar-promo.antlers.html
new file mode 100644
index 000000000..eb14e6c20
--- /dev/null
+++ b/resources/views/partials/sidebar-promo.antlers.html
@@ -0,0 +1,32 @@
+---
+quotes:
+  -
+    text: "Bought Jack McDade's course on design. Going through it now...and it is SO well done!"
+    cite: "Justin Jackson, Transistor.fm"
+  -
+    text: "For a software dev like me who has no idea how to create a cute hand-drawn dashed line, this course just 100% works."
+    cite: "Ira Zayats, Developer"
+  -
+    text: "Just exceptional. Thank you so much, Jack, you smashed it."
+    cite: "Hugo, Developer"
+  -
+    text: "Taking your approach on designing things actually makes it fun, more natural, and overall easier."
+    cite: "Dominik, Developer"
+  -
+    text: "This course is the most refreshing take on teaching design that I've come across."
+    cite: "Mikaël Sévigny, Developer"
+---
+
+<a class="mt-16 block group" href="https://radicaldesigncourse.com/?ref=statamic.dev">
+    <img width="160" src="https://radicaldesigncourse.com/assets/ads/radical-design-statamic-docs.jpg" alt="Radical Design Course by Jack McDade" class="rounded shadow-soft relative -rotate-3 group-hover:scale-[1.05] block ml-4">
+    <div class="mt-8">
+        <p class="font-mono-alt uppercase text-[11px] text-gray-darker dark:text-gray tracking-widest">From the creator of Statamic</p>
+        <p class="font-bold text-base leading-tight mt-2 font-display dark:text-white">Learn how to make your websites standout and be remembered.</p>
+        <blockquote class="border-l border-gray-dark/50 text-sm text-[#475569] dark:text-gray pl-3 mt-2">
+            {{ view:quotes | random }}
+                <p>{{ text }}</p>
+                <cite class="mt-3 block not-italic text-[12px]">— {{ cite }}</cite>
+            {{ /view:quotes }}
+        </blockquote>
+    </div>
+</a>
diff --git a/resources/views/partials/site_header.antlers.html b/resources/views/partials/site_header.antlers.html
new file mode 100644
index 000000000..4c2504377
--- /dev/null
+++ b/resources/views/partials/site_header.antlers.html
@@ -0,0 +1,58 @@
+<a href="#main" class="c-skip-to-content u-screen-reader-text" title="Skip to content">
+    Skip to content
+</a>
+
+<a href="#footer" class="c-skip-to-content u-screen-reader-text" title="Skip to footer navigation">
+    Skip to footer navigation
+</a>
+
+<header class="c-docs-header">
+    <div class="c-docs-header__inner">
+        <a class="o-logo" href="/">
+            {{ svg src='logomark' }}
+            {{ svg src='wordmark' }}
+        </a>
+        <div class="c-docs-header__search">
+            <button class="c-nav-collapse-expand js__expand-collapse-nav u-hide-on-small-screens">
+                {{ svg src='nav-collapsed' }}
+            </button>
+            <form class="c-search-form" action="/search-results">
+                <div id="docsearch" ref="docSearch"></div>
+            </form>
+            <div class="c-theme-picker">
+                <div class="c-theme-picker__button">
+                    <img class="c-theme-picker-light-icon u-hide-in-dark-mode" src="/img/theme-light.svg" alt="Light theme" />
+                    <img class="c-theme-picker-dark-icon u-hide-in-light-mode" src="/img/theme-dark.svg" alt="Dark theme" />
+                </div>
+                <select id="color-scheme">
+                    <option value="system">System</option>
+                    <option value="dark">Dark</option>
+                    <option value="light">Light</option>
+                </select>
+            </div>
+        </div>
+        <div class="c-nav-dots-with-popover-api">
+            <button id="anchor-nav-dots" class="c-docs-header__nav-dots c-nav-dots-with-popover-api__mobile-button" popovertarget="popover-nav-dots">
+                {{ svg src='nav-dots' }}
+            </button>
+            <nav id="popover-nav-dots" class="c-nav-dots-with-popover-api__mobile u-hide-on-large-screens" popover>
+                <ul>
+                    {{ nav:collection:sections include_home="true" }}
+                        <li>
+                            <a wire:navigate href="{{ url }}" {{ page:section === section ?= 'class="o-current-menu-item"' }}>{{ nav_title ?? title }}</a>
+                        </li>
+                    {{ /nav:collection:sections }}
+                </ul>
+            </nav>
+            <nav class="c-nav-dots-with-popover-api__desktop u-hide-on-small-screens u-hide-on-medium-screens">
+                <ul>
+                    {{ nav:collection:sections include_home="true" }}
+                        <li>
+                            <a wire:navigate href="{{ url }}" {{ page:section === section ?= 'class="o-current-menu-item"' }}>{{ nav_title ?? title }}</a>
+                        </li>
+                    {{ /nav:collection:sections }}
+                </ul>
+            </nav>
+        </div>
+    </div>
+</header>
diff --git a/resources/views/partials/suggest.antlers.html b/resources/views/partials/suggest.antlers.html
index a623a5bee..30a0a0523 100644
--- a/resources/views/partials/suggest.antlers.html
+++ b/resources/views/partials/suggest.antlers.html
@@ -1,8 +1,8 @@
-<div class="relative mt-16">
-    <img src="/img/splatter-colorful.png" alt="" class="absolute max-w-none hidden lg:block w-[900px] lg:w-[1026px] left-[-140px] top-[-92px] dark:hidden">
-    <div class="bg-gray-lightest p-5 border shadow-stack relative z-10 w-full md:flex items-center justify-between dark:bg-mint dark:shadow-none">
-        <div class="text-2xl font-display font-bold mb-3 md:mb-0">Suggestions</div>
-        <p class="text-base md:px-6 mb-3 md:mb-0 leading-tight">Help us improve the docs by suggesting new content</p>
-        <a href="https://github.com/statamic/docs/issues/new" class="button">Suggest Content</a>
+<div class="o-entry-content">
+    <div class="c-feedback-meerkat">
+        <h2>Suggest Content</h2>
+        <p>Help us improve the docs by suggesting new content</p>
+        <a href="https://github.com/statamic/docs/issues/new" class="c-btn c-btn--1">Suggest Content</a>
+        <img src="/img/meerkat.webp" alt="Meerkat" width="150" height="278">
     </div>
 </div>
diff --git a/resources/views/partials/theme.antlers.html b/resources/views/partials/theme.antlers.html
index d6603eabf..c3e15a910 100644
--- a/resources/views/partials/theme.antlers.html
+++ b/resources/views/partials/theme.antlers.html
@@ -17,6 +17,7 @@
     </div>
 
     <button class="relative top-[-1px]" :class="{ 'top-[1px]': themePickerOpen }" @click="themePickerOpen = !themePickerOpen">
+        <span :x-text="darkMode" />
         <svg x-show="!darkMode" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-6 h-6 text-black"><path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" class="stroke-current"></path><path d="M12 4v1M17.66 6.344l-.828.828M20.005 12.004h-1M17.66 17.664l-.828-.828M12 20.01V19M6.34 17.664l.835-.836M3.995 12.004h1.01M6 6l.835.836" class="stroke-current"></path></svg>
         <svg x-show="darkMode" viewBox="0 0 24 24" fill="none" class="w-6 h-6 relative top-[-2px]" :class="{ 'text-gray-lighter': themePickerOpen, 'text-gray-darker': !themePickerOpen  }"><path fill-rule="evenodd" clip-rule="evenodd" d="M17.715 15.15A6.5 6.5 0 0 1 9 6.035C6.106 6.922 4 9.645 4 12.867c0 3.94 3.153 7.136 7.042 7.136 3.101 0 5.734-2.032 6.673-4.853Z" class="fill-current opacity-50"></path><path d="m17.715 15.15.95.316a1 1 0 0 0-1.445-1.185l.495.869ZM9 6.035l.846.534a1 1 0 0 0-1.14-1.49L9 6.035Zm8.221 8.246a5.47 5.47 0 0 1-2.72.718v2a7.47 7.47 0 0 0 3.71-.98l-.99-1.738Zm-2.72.718A5.5 5.5 0 0 1 9 9.5H7a7.5 7.5 0 0 0 7.5 7.5v-2ZM9 9.5c0-1.079.31-2.082.845-2.93L8.153 5.5A7.47 7.47 0 0 0 7 9.5h2Zm-4 3.368C5 10.089 6.815 7.75 9.292 6.99L8.706 5.08C5.397 6.094 3 9.201 3 12.867h2Zm6.042 6.136C7.718 19.003 5 16.268 5 12.867H3c0 4.48 3.588 8.136 8.042 8.136v-2Zm5.725-4.17c-.81 2.433-3.074 4.17-5.725 4.17v2c3.552 0 6.553-2.327 7.622-5.537l-1.897-.632Z" class="fill-current"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M17 3a1 1 0 0 1 1 1 2 2 0 0 0 2 2 1 1 0 1 1 0 2 2 2 0 0 0-2 2 1 1 0 1 1-2 0 2 2 0 0 0-2-2 1 1 0 1 1 0-2 2 2 0 0 0 2-2 1 1 0 0 1 1-1Z" class="fill-current"></path></svg>
     </button>
diff --git a/resources/views/partials/toc.antlers.html b/resources/views/partials/toc.antlers.html
index e8bc06706..c7bab5e70 100644
--- a/resources/views/partials/toc.antlers.html
+++ b/resources/views/partials/toc.antlers.html
@@ -1,20 +1,18 @@
-{{ if ! hide_toc && content | toc }}
-    <div id="table-of-contents" class="border rounded-sm mt-8 md:mt-16 dark:bg-gray-darkest shadow-none" :class="open ? 'shadow-stack' : 'shadow-stack-sm'" x-data="{open: getCookie('toc_open') != 'false'}">
-        <div class="bg-black font-mono-alt text-white py-2 pl-5 pr-2 flex items-center justify-between dark:bg-gray-darkest">
-            <span x-text="open ? 'Table of Contents' : 'Box of Mysterious Purpose'"></span>
-            <button class="p-2 hover:text-yellow" @click="open = false; setCookie('toc_open', 'false'); $refs.close.play()" x-show="open">
-                <svg viewBox="0 0 16 16" height="16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.6,0,0,1.6,0,0)"><path d="M9.78.22a.749.749,0,0,0-1.06,0L7.2,1.741,6.354.9A.5.5,0,0,0,5.5,1.25V4a.5.5,0,0,0,.5.5H8.75A.5.5,0,0,0,9.1,3.646L8.259,2.8,9.78,1.28A.749.749,0,0,0,9.78.22Z" fill="currentColor" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path><path d="M4,5.5H1.25A.5.5,0,0,0,.9,6.354l.845.844L.22,8.72A.75.75,0,1,0,1.28,9.78L2.8,8.259l.844.845A.5.5,0,0,0,4,9.25a.493.493,0,0,0,.191-.038A.5.5,0,0,0,4.5,8.75V6A.5.5,0,0,0,4,5.5Z" fill="currentColor" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path></g></svg>
-            </button>
-            <button class="p-2 hover:text-yellow" @click="open = true; setCookie('toc_open', 'true'); $refs.open.play()" x-show="!open" x-cloak>
-                <svg viewBox="0 0 16 16" height="16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.6,0,0,1.6,0,0)"><path d="M9.5,0H6.75A.5.5,0,0,0,6.4.854l.845.844L5.72,3.22A.75.75,0,1,0,6.78,4.28L8.3,2.759l.844.845A.5.5,0,0,0,9.5,3.75a.493.493,0,0,0,.191-.038A.5.5,0,0,0,10,3.25V.5A.5.5,0,0,0,9.5,0Z" fill="currentColor" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path><path d="M3.22,5.72,1.7,7.241.854,6.4A.5.5,0,0,0,0,6.75V9.5a.5.5,0,0,0,.5.5H3.25A.5.5,0,0,0,3.6,9.146L2.759,8.3,4.28,6.78A.75.75,0,0,0,3.22,5.72Z" fill="currentColor" stroke="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="0"></path></g></svg>
-            </button>
-        </div>
-        <div class="px-4" x-show="open">
-            {{ content | toc }}
-        </div>
-         <audio x-ref="open"><source src="/audio/open.mp3" type="audio/mpeg" /></audio>
-         <audio x-ref="close"><source src="/audio/close.mp3" type="audio/mpeg" /></audio>
+<div
+    class="side-nav max-h-[100vh] overflow-y-auto px-6 w-[19rem] hidden lg:block"
+    :style="{ position: 'sticky', top: $el.offsetTop + 'px', 'max-height': 'calc(100dvh - ' + $el.offsetTop + 'px)' }"
+>
+    <div class="text-base text-zinc-500 font-normal mt-2 mb-2 flex items-center dark:text-white" >
+        On this page
     </div>
-{{ else }}
-    {{ svg src="zig-zag" class="mt-12" }}
-{{ /if }}
+    <ol class="toc">
+        <template x-for="el in document.querySelectorAll('article h2')" hidden>
+            <li><a
+                x-init="el.id = el.textContent.trim().replace(/\s+/g, '-').toLowerCase(); $el.setAttribute('href', '#'+el.id)"
+                x-bind:class="$store.tocNavHighlighter.visibleHeadingId == el.id && 'active'"
+                x-text="el.textContent"
+            >
+            </a></li>
+        </template>
+    </ol>
+</div>
diff --git a/resources/views/reference/index.antlers.html b/resources/views/reference/index.antlers.html
index 411adcc90..28b267dfb 100644
--- a/resources/views/reference/index.antlers.html
+++ b/resources/views/reference/index.antlers.html
@@ -1,17 +1,50 @@
-<header class="markdown pb-8">
-    {{ partial:breadcrumbs }}
-    <h1>{{ title }}</h1>
-    <div class="text-2xl max-w-2xl">{{ intro ?? overview | markdown }}</div>
-</header>
+{{ partial:header }}
 
-<section class="grid lg:grid-cols-2 xl:grid-cols-3 gap-6">
+<section class="c-tiles-with-description">
     {{ nav handle="reference" }}
-        <a href="{{ url }}" class="bg-gray-lightest border shadow-stack-sm p-5 block dark:bg-gray-darkest dark:shadow-none dark:text-white">
-            <h2 class="text-2xl font-bold font-display mb-3">{{ title }}</h2>
-            {{ content | widont }}
-            {{ collection :in="slug" as="entries" }}
-                <button class="button bg-mint mt-3">Explore all {{ entries | count }} {{ title }}</button>
-            {{ /collection }}
-        </a>
+        <div class="c-tiles-with-description__item{{ flush_image ?= ' c-tiles-with-description__item--flush' }}">
+            <a href="{{ url }}" class="u-link-style-none">
+                <figure class="c-tiles-with-description__item__thumbnail">
+                    {{ if tile_image_dark_mode }}
+                        {{ tile_image }}
+                            {{ partial:image_dimensions/tile modifier_classes='u-hide-in-dark-mode' }}
+                        {{ /tile_image }}
+                        {{ tile_image_dark_mode }}
+                            {{ partial:image_dimensions/tile modifier_classes='u-hide-in-light-mode' }}
+                        {{ /tile_image_dark_mode }}
+                    {{ else }}
+                        {{ tile_image }}
+                            {{ partial:image_dimensions/tile }}
+                        {{ /tile_image }}
+                    {{ /if }}
+                    <figcaption>{{ collection :in="slug" as="entries" }}{{ entries | count }} {{ title }}{{ /collection }}</figcaption>
+                </figure>
+            </a>
+            {{ content }}
+        </div>
     {{ /nav }}
 </section>
+
+<hr>
+
+<h2 id="sponsors" class="u-center-on-lower-mqs o-scroll-spy-timeline__track">Sponsors</h2>
+<p class="u-center-on-lower-mqs">We've reserved this space to thank our top open source sponsors.</p>
+<div class="c-logo-grid u-center-on-lower-mqs">
+    {{ hero_sponsors }}
+        <div class="c-logo-grid__item">
+            {{ if error }}
+                <p>We're having trouble loading the sponsors at the moment.</p>
+            {{ else }}
+                <a href="{{ url }}">
+                    <img src="{{ avatarUrl }}">
+                    <span>{{ name }}</span>
+                </a>
+            {{ /if }}
+        </div>
+    {{ /hero_sponsors }}
+    <div class="c-logo-grid__item">
+        <a href="https://github.com/sponsors/statamic">Sponsor Statamic</a>
+    </div>
+</div>
+
+{{ $article_footer = 'no' }}
\ No newline at end of file
diff --git a/resources/views/repositories/index.antlers.html b/resources/views/repositories/index.antlers.html
index d06a09db3..f0208dded 100644
--- a/resources/views/repositories/index.antlers.html
+++ b/resources/views/repositories/index.antlers.html
@@ -1,18 +1,18 @@
 {{ partial:header }}
 
 {{ collection:repositories as="repositories" }}
-<article class="bg-black p-4 md:py-8 md:pl-24 w-full relative rounded-sm shadow-stack md:shadow-stack-lg text-white z-10 flex font-mono-alt font-bold antialiased">
-    {{ repositories split="2" }}
-        <ul class="list-none w-1/2 space-y-3">
-            {{ items }}
-                <li>
-                    <a href="{{ url }}" class="flex items-center text-white hover:text-pink no-underline">
-                        {{ svg src="/img/repositories/{nav_title | slugify}" class="h-4 w-4 mr-3 text-white" }}
-                        {{ nav_title }}
-                    </a>
-                </li>
-            {{ /items }}
-        </ul>
-    {{ /repositories }}
-</article>
-{{ /collection:repositories }}
+    <article class="c-panel-list">
+        {{ repositories split="1" }}
+            <ul>
+                {{ items }}
+                    <li>
+                        <a href="{{ url }}">
+                            {{ svg src="/img/repositories/{nav_title | slugify}" }}
+                            {{ nav_title }}
+                        </a>
+                    </li>
+                {{ /items }}
+            </ul>
+        {{ /repositories }}
+    </article>
+{{ /collection:repositories }}
\ No newline at end of file
diff --git a/resources/views/repositories/show.antlers.html b/resources/views/repositories/show.antlers.html
deleted file mode 100644
index 24174aaec..000000000
--- a/resources/views/repositories/show.antlers.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<header class="markdown pb-8 mb-8">
-    {{ partial:breadcrumbs }}
-    <div class="flex items-center">
-        <h1>{{ title }}</h1>
-        {{ partial:pro-badge }}
-    </div>
-    {{ intro ?? overview | markdown }}
-    {{ partial:toc }}
-</header>
-
-<article class="markdown pb-8">
-    {{ content | toc:ids }}
-</article>
-
-{{ partial:related }}
-
-{{ partial:edit }}
diff --git a/resources/views/snap.antlers.html b/resources/views/snap.antlers.html
index 7e75ba6c1..9f99ced32 100644
--- a/resources/views/snap.antlers.html
+++ b/resources/views/snap.antlers.html
@@ -4,7 +4,6 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <link rel="stylesheet" href="https://use.typekit.net/huy6nsb.css" defer>
-    <link rel="stylesheet" href="{{ mix src='/css/tailwind.css' }}">
 </head>
 <body class="font-sans leading-normal markdown flex flex-col">
     <div class="h-4 bg-gradient-to-r from-purple to-blue via-pink"></div>
diff --git a/resources/views/social.antlers.html b/resources/views/social.antlers.html
index cb3dce75f..90a04fdff 100644
--- a/resources/views/social.antlers.html
+++ b/resources/views/social.antlers.html
@@ -4,7 +4,6 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <link rel="stylesheet" href="https://use.typekit.net/huy6nsb.css" defer>
-    <link rel="stylesheet" href="{{ mix src='/css/tailwind.css' }}">
 </head>
 {{# 1280x640 #}}
 <body class="font-sans leading-normal markdown flex flex-col">
diff --git a/resources/views/styles/_stylesheet.antlers.html b/resources/views/styles/_stylesheet.antlers.html
new file mode 100644
index 000000000..0e131d351
--- /dev/null
+++ b/resources/views/styles/_stylesheet.antlers.html
@@ -0,0 +1 @@
+{{ push:stylesheets }}{{ name }}{{ /push:stylesheets }}
\ No newline at end of file
diff --git a/resources/views/styles/_stylesheet_external.antlers.html b/resources/views/styles/_stylesheet_external.antlers.html
new file mode 100644
index 000000000..28ac58ac1
--- /dev/null
+++ b/resources/views/styles/_stylesheet_external.antlers.html
@@ -0,0 +1 @@
+{{ push:stylesheets_external }}{{ name }}{{ /push:stylesheets_external }}
\ No newline at end of file
diff --git a/resources/views/styles/_stylesheet_local_only.antlers.html b/resources/views/styles/_stylesheet_local_only.antlers.html
new file mode 100644
index 000000000..f85336805
--- /dev/null
+++ b/resources/views/styles/_stylesheet_local_only.antlers.html
@@ -0,0 +1 @@
+{{ push:stylesheets_local_only }}{{ name }}{{ /push:stylesheets_local_only }}
\ No newline at end of file
diff --git a/resources/views/styles/_stylesheet_production_only.antlers.html b/resources/views/styles/_stylesheet_production_only.antlers.html
new file mode 100644
index 000000000..7fbeeba68
--- /dev/null
+++ b/resources/views/styles/_stylesheet_production_only.antlers.html
@@ -0,0 +1 @@
+{{ push:stylesheets_production_only }}{{ name }}{{ /push:stylesheets_production_only }}
\ No newline at end of file
diff --git a/resources/views/styles/_stylesheets.antlers.html b/resources/views/styles/_stylesheets.antlers.html
new file mode 100644
index 000000000..58278485e
--- /dev/null
+++ b/resources/views/styles/_stylesheets.antlers.html
@@ -0,0 +1,15 @@
+{{ prepend:stylesheets }}style{{ /prepend:stylesheets }}
+{{ stack:stylesheets_external as="styles" }}
+    {{ styles | pluck ('value') | unique }}
+        <link rel="stylesheet" href="{{ value }}">
+    {{ /styles }}
+{{ /stack:stylesheets_external }}
+{{ stack:stylesheets as="styles" }}
+    {{ styles | pluck ('value') | unique }}
+        {{ if environment == 'local' }}
+            <link rel="stylesheet" href="/css/{{ value }}.css">
+        {{ else }}
+            <link rel="stylesheet" href="{{ vite:asset src='public/css/{value}.css' }}">
+        {{ /if }}
+    {{ /styles }}
+{{ /stack:stylesheets }}
\ No newline at end of file
diff --git a/resources/views/tabs.antlers.html b/resources/views/tabs.antlers.html
new file mode 100644
index 000000000..ba03c28bd
--- /dev/null
+++ b/resources/views/tabs.antlers.html
@@ -0,0 +1,12 @@
+ <div x-data="{ tab: '{{ active }}' }" x-cloak>
+    <div>
+        <div class="c-doc-tabs__tabs" data-indexer="ignore">
+          {{ foreach:tabs }}
+              <button type="button" x-on:click="tab = '{{ key }}'" :class="{ 'c-doc-tabs__active': tab === '{{ key }}' }">{{ value }}</button>
+          {{ /foreach:tabs }}
+        </div>
+        {{ foreach:samples }}
+            <div class="tab-content" x-show="tab === '{{ key }}'">{{ value }}</div>
+        {{ /foreach:samples }}
+   </div>
+ </div>
diff --git a/resources/views/tags/glide.antlers.html b/resources/views/tags/glide.antlers.html
index 6d501d4db..a9fd658d6 100644
--- a/resources/views/tags/glide.antlers.html
+++ b/resources/views/tags/glide.antlers.html
@@ -1,12 +1,4 @@
-<header class="markdown pb-8 mb-8">
-    {{ partial:breadcrumbs }}
-    <div class="flex items-center">
-        <h1>{{ title ensure_right=" Tag" }}</h1>
-        {{ partial:pro-badge }}
-    </div>
-    {{ intro ?? overview | markdown }}
-    {{ partial:toc }}
-</header>
+{{ partial:header}}
 
 <article class="markdown pb-8">
     {{ content | toc:ids }}
@@ -33,5 +25,3 @@ <h2 id="variables">Variables</h2>
     {{ /if }}
 
 </article>
-
-{{ partial:edit }}
diff --git a/resources/views/tags/index.antlers.html b/resources/views/tags/index.antlers.html
index 118c3bdee..6cdb452e9 100644
--- a/resources/views/tags/index.antlers.html
+++ b/resources/views/tags/index.antlers.html
@@ -1,6 +1,6 @@
 {{ partial:header }}
 
-<article class="markdown md:pb-16">
+<article>
     {{ content }}
     <table>
         <thead>
diff --git a/resources/views/tags/show.antlers.html b/resources/views/tags/show.antlers.html
deleted file mode 100644
index aff44b743..000000000
--- a/resources/views/tags/show.antlers.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<header class="markdown pb-8 mb-8">
-    {{ partial:breadcrumbs }}
-    <div class="flex items-center">
-        <h1>{{ title ensure_right=" Tag" }}</h1>
-        {{ partial:pro-badge }}
-    </div>
-    {{ intro ?? overview | markdown }}
-    {{ partial:toc }}
-</header>
-
-<article class="markdown pb-8">
-    {{ content | toc:ids }}
-
-    {{ if parameters }}
-        <h2 id="parameters">Parameters</h2>
-        {{ partial:details :details="parameters" }}
-    {{ /if }}
-
-    {{ if variables }}
-        <h2 id="variables">Variables</h2>
-        {{ partial:variables }}
-    {{ /if }}
-
-</article>
-
-{{ partial:related }}
-
-{{ partial:edit }}
diff --git a/resources/views/tips/index.antlers.html b/resources/views/tips/index.antlers.html
index 509f915a3..6b4d8395c 100644
--- a/resources/views/tips/index.antlers.html
+++ b/resources/views/tips/index.antlers.html
@@ -1,12 +1,12 @@
 {{ partial:header }}
 
-<article class="markdown md:pb-16">
-    {{ content }}
-    <ul>
-    {{ collection:tips }}
-        <li><h2 class="mb-1 mt-0"><a href="{{ url }}" class="text-xl font-medium ">{{ title }}</a></h2></li>
-    {{ /collection:tips }}
-    </ul>
-</article>
+{{ content }}
+<ul>
+{{ collection:tips }}
+    <li><h2><a href="{{ url }}">{{ title }}</a></h2></li>
+{{ /collection:tips }}
+</ul>
 
-{{ partial:suggest }}
+{{ $suggest = 'yes' }}
+{{ $hide_toc = 'yes' }}
+{{ push:scope_classes }}u-no-scroll-spy-toc-position{{ /push:scope_classes }}
diff --git a/resources/views/troubleshooting/index.antlers.html b/resources/views/troubleshooting/index.antlers.html
index f1469c397..fdd1cb9c6 100644
--- a/resources/views/troubleshooting/index.antlers.html
+++ b/resources/views/troubleshooting/index.antlers.html
@@ -1,12 +1,12 @@
 {{ partial:header }}
 
-<article class="markdown md:pb-16">
-    {{ content }}
-    <ul>
-    {{ collection:troubleshooting }}
-        <li><h2 class="mb-1 mt-0"><a href="{{ url }}" class="text-xl font-medium ">{{ title }}</a></h2></li>
-    {{ /collection:troubleshooting }}
-    </ul>
-</article>
+{{ content }}
+<ul>
+{{ collection:troubleshooting }}
+    <li><h2><a href="{{ url }}">{{ title }}</a></h2></li>
+{{ /collection:troubleshooting }}
+</ul>
 
-{{ partial:suggest }}
+{{ $suggest = 'yes' }}
+{{ $hide_toc = 'yes' }}
+{{ push:scope_classes }}u-no-scroll-spy-toc-position{{ /push:scope_classes }}
diff --git a/resources/views/updates.antlers.html b/resources/views/updates.antlers.html
index fd6bebc02..a1dcb1087 100644
--- a/resources/views/updates.antlers.html
+++ b/resources/views/updates.antlers.html
@@ -1,9 +1,9 @@
-<header class="markdown">
+<header>
     <h1>{{ title }}</h1>
     {{ intro }}
 </header>
 
-<section class="markdown mt-8 w-full">
+<section class=mt-8 w-full">
     <table>
         <thead>
             <th>Page</th>
diff --git a/resources/views/variables/index.antlers.html b/resources/views/variables/index.antlers.html
index b65e873d0..6a8b12093 100644
--- a/resources/views/variables/index.antlers.html
+++ b/resources/views/variables/index.antlers.html
@@ -1,22 +1,20 @@
 {{ partial:header }}
 
-<article class="markdown md:pb-16">
-    {{ content | toc:ids }}
+{{ content | toc:ids }}
 
-    {{ taxonomy:types sort="order" }}
-        <h3 id="{{ slug }}-variables">{{ title }}</h3>
-        {{ content }}
-        <table>
-            {{ entries sort="title" }}
-            <tr>
-                <td>
-                    <a href="{{ url }}" class="font-display text-base text-pink-hot font-bold">{{ slug }}</a>
-                </td>
-                <td>
-                    {{ description ?? overview | markdown }}
-                </td>
-            </tr>
-            {{ /entries }}
-        </table>
-    {{ /taxonomy:types }}
-</article>
+{{ taxonomy:types sort="order" }}
+    <h3 id="{{ slug }}-variables">{{ title }}</h3>
+    {{ content }}
+    <table>
+        {{ entries sort="title" }}
+        <tr>
+            <td>
+                <a href="{{ url }}" class="font-display text-base text-pink-hot font-bold">{{ slug }}</a>
+            </td>
+            <td>
+                {{ description ?? overview | markdown }}
+            </td>
+        </tr>
+        {{ /entries }}
+    </table>
+{{ /taxonomy:types }}
diff --git a/resources/views/variables/show.antlers.html b/resources/views/variables/show.antlers.html
deleted file mode 100644
index fb9d6e2c0..000000000
--- a/resources/views/variables/show.antlers.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<header class="markdown pb-8 mb-8">
-    {{ partial:breadcrumbs }}
-    <div class="flex items-center">
-        <h1><code>{{ slug }}</code></h1>
-        {{ partial:pro-badge }}
-    </div>
-    {{ intro ?? overview | markdown }}
-    {{ partial:toc }}
-</header>
-
-<article class="markdown md:pb-16">
-    {{ content | toc:ids }}
-</article>
-
-{{ partial:edit }}
diff --git a/resources/views/widgets/index.antlers.html b/resources/views/widgets/index.antlers.html
index 99a9a3f0a..539bff873 100644
--- a/resources/views/widgets/index.antlers.html
+++ b/resources/views/widgets/index.antlers.html
@@ -1,6 +1,6 @@
 {{ partial:header }}
 
-<article class="markdown md:pb-16">
+<article>
     {{ content }}
     <table>
         <thead>
diff --git a/resources/views/widgets/show.antlers.html b/resources/views/widgets/show.antlers.html
deleted file mode 100644
index 386665d0f..000000000
--- a/resources/views/widgets/show.antlers.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<header class="markdown pb-8 mb-8">
-    {{ partial:breadcrumbs }}
-    <div class="flex items-center">
-        <h1>{{ title ensure_right=" Tag" }}</h1>
-        {{ partial:pro-badge }}
-    </div>
-    {{ intro ?? overview | markdown }}
-    {{ partial:toc }}
-</header>
-
-<article class="markdown pb-8">
-    <figure>
-        {{ screenshot }}
-        <img src="{{ url }}" width="{{ width | /:2 }}px" alt="{{ title }} Fieldtype UI">
-        {{ /screenshot }}
-        <figcaption>Behold! The {{ title }}!</figcaption>
-    </figure>
-
-    {{ content | toc:ids }}
-
-    {{ if options }}
-        <h2 id="options">Options</h2>
-        {{ partial:details :details="options" }}
-    {{ /if }}
-</article>
-
-{{ partial:edit }}
diff --git a/routes/web.php b/routes/web.php
index 3ce62fc8b..2ad6d2cfe 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -1,7 +1,5 @@
 <?php
 
-use Statamic\Facades\Entry;
-
 Route::statamic('search-results', 'search', ['hide_sidebar' => true]);
 Route::statamic('sitemap.xml', 'sitemap', ['content_type' => 'xml', 'layout' => 'sitemap']);
 
@@ -20,4 +18,7 @@
 Route::permanentRedirect('/content-queries/{slug}', '/repositories/{slug}');
 Route::permanentRedirect('repositories', 'content-queries');
 Route::permanentRedirect('new-antlers-parser', 'antlers');
+Route::permanentRedirect('/tips/storing-entries-in-a-database', '/tips/building-your-own-entries-repository');
+Route::permanentRedirect('/account-api-sites', '/sites-api');
+Route::permanentRedirect('/deploying/workflow', '/tips/git-workflow');
 // Route::permanentRedirect('extending/queries', 'content-queries');
diff --git a/tailwind.config.js b/tailwind.config.js
deleted file mode 100644
index 7e35ce914..000000000
--- a/tailwind.config.js
+++ /dev/null
@@ -1,146 +0,0 @@
-const colors = require('tailwindcss/colors')
-const plugin = require('tailwindcss/plugin')
-
-module.exports = {
-  mode: 'jit',
-  purge: {
-    content: [
-      './resources/**/*.antlers.html',
-      './resources/**/*.blade.php',
-      './content/**/*.md'
-    ]
-  },
-  darkMode: 'class',
-  important: true,
-  theme: {
-    colors: {
-      transparent: 'transparent',
-      current: 'currentColor',
-      black:  '#191A1B',
-      white: '#FFFFFF',
-      ninja: {
-        blue: '#00b1e1',
-        orange: '#f49b0b',
-        red: '#e03a10',
-        purple: '#925aa1',
-        green: '#4c9c23'
-      },
-      pink: {
-        lightest: '#FFFCFE',
-        lighter: '#FFF6FA',
-        light: '#FFDCED',
-        DEFAULT: '#FF269E'
-      },
-      red: {
-        DEFAULT: '#DE3618',
-        dark: '#98230E',
-      },
-      purple: '#6B26FF',
-      blue: {
-        lightest: '#B1D8FC',
-        light: '#01A1D7',
-        DEFAULT: '#339CE5',
-        dark: '#066A85'
-      },
-      teal: '#01D7B0',
-      mint: '#B8FFF3',
-      yellow: '#FAF77D',
-      gray: {
-        lightest: '#F3F4F6',
-        lighter: '#EEF2F6',
-        light: '#E7ECF1',
-        DEFAULT: '#CBD5E1',
-        'dark': '#94A3B8',
-        'darker': '#4B5563',
-        'darkest': '#374151'
-      }
-    },
-    borderColor: theme => ({
-       ...theme('colors'),
-        DEFAULT: theme('colors.black', 'currentColor'),
-    }),
-    boxShadow: {
-      'none': 'none',
-      DEFAULT: "2px 2px 0 theme('colors.black', 'currentColor')",
-      'sm': "1px 1px 0 theme('colors.black', 'currentColor')",
-      'md': "2px 2px 0 theme('colors.black', 'currentColor')",
-      'lg': "4px 4px 0 theme('colors.black', 'currentColor')",
-      'white': "2px 2px 0 theme('colors.white', 'currentColor')",
-      'white-lg': "4px 4px 0 theme('colors.white', 'currentColor')",
-      'mint': "1px 1px 0 theme('colors.mint', 'currentColor')",
-      'mint-md': "3px 3px 0 theme('colors.mint', 'currentColor')",
-      'mint-lg': "7px 7px 0 theme('colors.mint', 'currentColor')",
-      'yellow': "1px 1px 0 theme('colors.yellow', 'currentColor')",
-      'yellow-md': "3px 3px 0 theme('colors.yellow', 'currentColor')",
-      'yellow-lg': "7px 7px 0 theme('colors.yellow', 'currentColor')",
-      'pink': "1px 1px 0 theme('colors.pink.DEFAULT', 'currentColor')",
-      'pink-md': "3px 3px 0 theme('colors.pink.DEFAULT', 'currentColor')",
-      'pink-lg': "7px 7px 0 theme('colors.pink.DEFAULT', 'currentColor')",
-      'purple': "1px 1px 0 theme('colors.purple', 'currentColor')",
-      'purple-md': "3px 3px 0 theme('colors.purple', 'currentColor')",
-      'purple-lg': "7px 7px 0 theme('colors.purple', 'currentColor')",
-      'red': "1px 1px 0 theme('colors.red.DEFAULT', 'currentColor')",
-      'red-md': "3px 3px 0 theme('colors.red.DEFAULT', 'currentColor')",
-      'red-lg': "7px 7px 0 theme('colors.red.DEFAULT', 'currentColor')",
-      'red-dark': "1px 1px 0 theme('colors.red.dark', 'currentColor')",
-      'red-dark-md': "3px 3px 0 theme('colors.red.dark', 'currentColor')",
-      'red-dark-lg': "7px 7px 0 theme('colors.red.dark', 'currentColor')",
-      'teal': "1px 1px 0 theme('colors.teal', 'currentColor')",
-      'teal-md': "3px 3px 0 theme('colors.teal', 'currentColor')",
-      'teal-lg': "7px 7px 0 theme('colors.teal', 'currentColor')",
-      'stack-yellow-sm': "3px 3px 0 -1px #fff, 3px 3px 0 theme('colors.black'), 4px 4px 4px theme('colors.yellow')",
-      'stack-sm': "3px 3px 0 -1px #fff, 3px 3px 0 theme('colors.black')",
-      'stack': "5px 5px 0 -1px #fff, 5px 5px 0 theme('colors.black')",
-      'stack-md': "10px 10px 0 -1px #fff, 10px 10px 0 theme('colors.black')",
-      'stack-lg': "20px 20px 0 -1px #fff, 20px 20px 0 theme('colors.black'), 40px 40px 0 -1px #fff, 40px 40px 0 theme('colors.black')",
-      'bleed-yellow': "0 3px 1px theme('colors.yellow')",
-      'outline': '0 0 0 3px rgba(66, 153, 225, 0.5)',
-    },
-    extend: {
-      fontFamily: {
-        display: ['tenon', 'sans-serif'],
-        mono: ['Menlo', 'monospace'],
-        'mono-alt': ['code-saver', 'monospace'],
-      },
-      fontSize: {
-        '3xl': ['2rem', 1],
-        '7xl': ['4.25rem', 1],
-        '8xl': ['5rem', 1],
-        '9xl': ['6rem', 1],
-      },
-      height: {
-        'screen-sans-nav': 'calc(100vh - 100px)',
-      },
-      maxHeight: {
-        'screen-sans-nav': 'calc(100vh - 100px)',
-      },
-      spacing: {
-        68: '17rem',
-        74: '18.5rem',
-        76: '19rem'
-      }
-    },
-  },
-  variants: {},
-  plugins: [
-    plugin(function({ addUtilities }) {
-      const newUtilities = {
-        '.list-col-1': {
-          'column-count': '1',
-        },
-        '.list-col-2': {
-          'column-count': '2',
-        },
-        '.list-col-3': {
-          'column-count': '3',
-        },
-        '.list-col-4': {
-          'column-count': '4',
-        },
-      }
-      addUtilities(newUtilities, {
-        variants: ['responsive'],
-      })
-    })
-  ],
-}
diff --git a/users/jay@statamic.com.yaml b/users/jay@statamic.com.yaml
new file mode 100644
index 000000000..68cb5c955
--- /dev/null
+++ b/users/jay@statamic.com.yaml
@@ -0,0 +1,4 @@
+name: Jay
+super: true
+id: 0ee22856-4e6d-47a0-8763-70ceae6a47b6
+password_hash: $2y$10$HQ3t5nMJPDMvE96TWnapw.7ZX4uIjMwQbJpw0qe.iXehuvebFpbzi
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 000000000..bb4a7ef33
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,17 @@
+import { defineConfig } from 'vite';
+import laravel from 'laravel-vite-plugin';
+import vue2 from '@vitejs/plugin-vue2';
+
+export default defineConfig({
+    plugins: [
+        laravel({
+            input: [
+                // CSS
+                'public/css/style.css',
+                // JS
+                'resources/js/site.js',
+            ],
+        }),
+        vue2(),
+    ],
+});
\ No newline at end of file
diff --git a/webpack.mix.js b/webpack.mix.js
deleted file mode 100644
index 4c9a55439..000000000
--- a/webpack.mix.js
+++ /dev/null
@@ -1,39 +0,0 @@
-const mix = require('laravel-mix');
-
-/*
- |--------------------------------------------------------------------------
- | Mix Asset Management
- |--------------------------------------------------------------------------
- |
- | Mix provides a clean, fluent API for defining some Webpack build steps
- | for your Laravel application. By default, we are compiling the Sass
- | file for the application as well as bundling up all the JS files.
- |
- */
-
-mix.js('resources/js/app.js', 'public/js')
-
-mix.postCss('resources/css/tailwind.css', 'public/css', [
-    require('postcss-import'),
-    require('tailwindcss'),
-    require('postcss-nested'),
-    require('autoprefixer'),
-    require('postcss-preset-env')({stage: 0})
-])
-
-if (mix.inProduction()) {
-   mix.version();
-}
-
-mix.browserSync({
-    proxy: 'docs.test',
-    injectChanges: true,
-    notify: false,
-    ui: false,
-    files: [
-        './content/**/*.md',
-        './resources/views/**/*.html',
-        './public/css/**/*.css',
-        './public/js/**/*.js'
-    ]
-});
