Begin docs layout of new design

This commit is contained in:
Matthew Holt 2023-05-02 17:29:08 -06:00
parent c5b7a286ce
commit 48111ebb9d
No known key found for this signature in database
GPG key ID: 2A349DD577D586A5
14 changed files with 1902 additions and 321 deletions

View file

@ -1,6 +1,23 @@
localhost {
debug
}
file_server localhost {
templates file_server
templates
try_files {path}.html {path} try_files {path}.html {path}
handle_path /temporary-markdown-proxy/* {
reverse_proxy 127.0.0.1:10434
}
}
:10434 {
log
bind 127.0.0.1
root ../src/docs/markdown
uri strip_prefix /docs
try_files {path}.md {path}
file_server
}

330
new/docs/index.html Normal file
View file

@ -0,0 +1,330 @@
<!DOCTYPE html>
<html>
<head>
<title>Caddy Documentation</title>
{{include "/includes/head.html"}}
<link rel="stylesheet" href="/resources/css/docs.css">
<!-- <meta property="og:title" content="Caddy 2 - The Ultimate Server with Automatic HTTPS">
<meta name="twitter:title" value="Caddy 2 - The Ultimate Server with Automatic HTTPS"> -->
<script src="/resources/js/vendor/marked.min.js"></script>
<script src="/resources/js/docs.js"></script>
</head>
<body>
<div class="hero">
{{include "/includes/header.html" "logo-light.svg"}}
</div>
<div id="autonav"></div>
<main>
<div class="docs wrapper">
<nav>
<ul>
<li class="heading">Get Caddy</li>
<li>
<a href="/docs/install" class="current">Install</a>
<ul>
<li><a href="/docs/install/packages">OS packages</a></li>
<li><a href="/docs/install/downloads">Static binaries</a></li>
<li><a href="/docs/install/plugins">With plugins</a></li>
</ul>
</li>
<li><a href="/docs/build">Build from source</a></li>
<li class="heading">Tutorials</li>
<li><a href="/docs/basics">Caddy basics</a></li>
<li><a href="/docs/troubleshooting">How to fix problems</a></li>
<li><a href="/docs/static-files">Static files</a></li>
<li><a href="/docs/reverse-proxy">Reverse proxy</a></li>
<li><a href="/docs/reverse-proxy">Custom domains</a></li>
<li><a href="/docs/reverse-proxy">Automate mTLS</a></li>
<li class="heading">Reference</li>
<li><a href="/docs/command-line">Command line</a></li>
<li><a href="/docs/api">API</a></li>
<li><a href="/docs/json/">JSON config</a></li>
<li>
<a href="/docs/caddyfile">Caddyfile</a>
<ul>
<li><a href="/docs/caddyfile/concepts">Concepts</a></li>
<li><a href="/docs/caddyfile/directives">Directives</a></li>
<li><a href="/docs/caddyfile/matchers">Request matchers</a></li>
<li><a href="/docs/caddyfile/options">Global options</a></li>
<li><a href="/docs/caddyfile/patterns">Common patterns</a></li>
</ul>
</li>
<!-- <li><a href="/docs/caddyfile">Caddyfile</a></li> -->
<li><a href="/docs/automatic-https">Automatic HTTPS</a></li>
<li><a href="/docs/automatic-https">Modules</a></li>
<li class="heading">Articles</li>
<!-- <li><a href="/docs/v2-upgrade">Upgrading to Caddy 2</a></li> -->
<li><a href="/docs/conventions">Conventions</a></li>
<li><a href="/docs/config-adapters">Config Adapters</a></li>
<li><a href="/docs/logging">How Logging Works</a></li>
<li><a href="/docs/metrics">Monitoring Caddy</a></li>
<li><a href="/docs/architecture">Caddy Architecture</a></li>
<li><a href="/docs/running">Keep Caddy Running</a></li>
<li><a href="/docs/signature-verification">Verifying Asset Signatures</a></li>
<li class="heading">Develop</li>
<li><a href="/docs/architecture">Caddy architecture</a></li>
<li><a href="/docs/contribute">Contribute</a></li>
<li><a href="/docs/extend">Write a module</a></li>
</ul>
</nav>
<article><h1 id="api">Administration API</h1>
<p>Caddy is configured through an administration endpoint which can be accessed via HTTP using a <a href="https://en.wikipedia.org/wiki/Representational_state_transfer">REST</a> API. You can <a href="/docs/json/admin/">configure this endpoint</a> in your Caddy config.</p>
<p><strong>Default address: <code>localhost:2019</code></strong></p>
<p>The default address can be changed by setting the <code>CADDY_ADMIN</code> environment variable. Some installation methods may set this to something different. The address in the Caddy config always takes precedence over the default.</p>
<aside class="tip">
If you are running untrusted code on your server (yikes 😬), make sure you protect your admin endpoint by isolating processes, patching vulnerable programs, and configuring the endpoint to bind to a permissioned unix socket instead.
</aside>
<p>The latest configuration will be saved to disk after any changes (unless <a href="/docs/json/admin/config/">disabled</a>). You can resume the last working config after a restart with <a href="/docs/command-line#caddy-run"><code>caddy run --resume</code></a>, which guarantees config durability in the event of a power cycle or similar.</p>
<p>To get started with the API, try our <a href="/docs/api-tutorial">API tutorial</a> or, if you only have a minute, our <a href="/docs/quick-starts/api">API quick-start guide</a>.</p>
<hr>
<ul>
<li>
<p><strong><a href="#post-load">POST /load</a></strong>
Sets or replaces the active configuration</p>
</li>
<li>
<p><strong><a href="#post-stop">POST /stop</a></strong>
Stops the active configuration and exits the process</p>
</li>
<li>
<p><strong><a href="#get-configpath">GET /config/[path]</a></strong>
Exports the config at the named path</p>
</li>
<li>
<p><strong><a href="#post-configpath">POST /config/[path]</a></strong>
Sets or replaces object; appends to array</p>
</li>
<li>
<p><strong><a href="#put-configpath">PUT /config/[path]</a></strong>
Creates new object; inserts into array</p>
</li>
<li>
<p><strong><a href="#patch-configpath">PATCH /config/[path]</a></strong>
Replaces an existing object or array element</p>
</li>
<li>
<p><strong><a href="#delete-configpath">DELETE /config/[path]</a></strong>
Deletes the value at the named path</p>
</li>
<li>
<p><strong><a href="#using-id-in-json">Using <code>@id</code> in JSON</a></strong>
Easily traverse into the config structure</p>
</li>
<li>
<p><strong><a href="#concurrent-config-changes">Concurrent config changes</a></strong>
Avoid collisions when making unsynchronized changes to config</p>
</li>
<li>
<p><strong><a href="#post-adapt">POST /adapt</a></strong>
Adapts a configuration to JSON without running it</p>
</li>
<li>
<p><strong><a href="#get-pkicaltidgt">GET /pki/ca/&lt;id&gt;</a></strong>
Returns information about a particular <a href="/docs/json/apps/pki/">PKI app</a> CA</p>
</li>
<li>
<p><strong><a href="#get-pkicaltidgtcertificates">GET /pki/ca/&lt;id&gt;/certificates</a></strong>
Returns the certificate chain of a particular <a href="/docs/json/apps/pki/">PKI app</a> CA</p>
</li>
<li>
<p><strong><a href="#get-reverse-proxyupstreams">GET /reverse_proxy/upstreams</a></strong>
Returns the current status of the configured proxy upstreams</p>
</li>
</ul>
<h2 id="post-load">POST /load</h2>
<p>Sets Caddy's configuration, overriding any previous configuration. It blocks until the reload completes or fails. Configuration changes are lightweight, efficient, and incur zero downtime. If the new config fails for any reason, the old config is rolled back into place without downtime.</p>
<p>This endpoint supports different config formats using config adapters. The request's Content-Type header indicates the config format used in the request body. Usually, this should be <code>application/json</code> which represents Caddy's native config format. For another config format, specify the appropriate Content-Type so that the value after the forward slash / is the name of the config adapter to use. For example, when submitting a Caddyfile, use a value like <code>text/caddyfile</code>; or for JSON 5, use a value such as <code>application/json5</code>; etc.</p>
<p>If the new config is the same as the current one, no reload will occur. To force a reload, set <code>Cache-Control: must-revalidate</code> in the request headers.</p>
<h3 id="examples">Examples</h3>
<p>Set a new active configuration:</p>
<pre><code class="cmd bash">curl "http://localhost:2019/load" \
-H "Content-Type: application/json" \
-d @caddy.json</code></pre>
<p>Note: curl's <code>-d</code> flag removes newlines, so if your config format is sensitive to line breaks (e.g. the Caddyfile), use <code>--data-binary</code> instead:</p>
<pre><code class="cmd bash">curl "http://localhost:2019/load" \
-H "Content-Type: text/caddyfile" \
--data-binary @Caddyfile</code></pre>
<h2 id="post-stop">POST /stop</h2>
<p>Gracefully shuts down the server and exits the process. To only stop the running configuration without exiting the process, use <a href="#delete-configpath">DELETE /config/</a>.</p>
<h3 id="example">Example</h3>
<p>Stop the process:</p>
<pre><code class="cmd bash">curl -X POST "http://localhost:2019/stop"</code></pre>
<h2 id="get-configpath">GET /config/[path]</h2>
<p>Exports Caddy's current configuration at the named path. Returns a JSON body.</p>
<h3 id="examples-1">Examples</h3>
<p>Export entire config and pretty-print it:</p>
<pre><code class="cmd"><span class="bash">curl "http://localhost:2019/config/" | jq</span>
{
"apps": {
"http": {
"servers": {
"myserver": {
"listen": [
":443"
],
"routes": [
{
"match": [
{
"host": [
"example.com"
]
}
],
"handle": [
{
"handler": "file_server"
}
]
}
]
}
}
}
}
}</code></pre>
<p>Export just the listener addresses:</p>
<pre><code class="cmd"><span class="bash">curl "http://localhost:2019/config/apps/http/servers/myserver/listen"</span>
[":443"]</code></pre>
<h2 id="post-configpath">POST /config/[path]</h2>
<p>Changes Caddy's configuration at the named path to the JSON body of the request. If the destination value is an array, POST appends; if an object, it creates or replaces.</p>
<p>As a special case, many items can be added to an array if:</p>
<ol>
<li>the path ends in <code>/...</code></li>
<li>the element of the path before <code>/...</code> refers to an array</li>
<li>the payload is an array</li>
</ol>
<p>In this case, the elements in the payload's array will be expanded, and each one will be appended to the destination array. In Go terms, this would have the same effect as:</p>
<pre class="chroma"><code><span class="line"><span class="cl"><span class="nx">baseSlice</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">baseSlice</span><span class="p">,</span> <span class="nx">newElems</span><span class="o">...</span><span class="p">)</span>
</span></span></code></pre><h3 id="examples-2">Examples</h3>
<p>Add a listener address:</p>
<pre><code class="cmd bash">curl \
-H "Content-Type: application/json" \
-d '":8080"' \
"http://localhost:2019/config/apps/http/servers/myserver/listen"</code></pre>
<p>Add multiple listener addresses:</p>
<pre><code class="cmd bash">curl \
-H "Content-Type: application/json" \
-d '[":8080", ":5133"]' \
"http://localhost:2019/config/apps/http/servers/myserver/listen/..."</code></pre>
<h2 id="put-configpath">PUT /config/[path]</h2>
<p>Changes Caddy's configuration at the named path to the JSON body of the request. If the destination value is a position (index) in an array, PUT inserts; if an object, it strictly creates a new value.</p>
<h3 id="example-1">Example</h3>
<p>Add a listener address in the first slot:</p>
<pre><code class="cmd bash">curl -X PUT \
-H "Content-Type: application/json" \
-d '":8080"' \
"http://localhost:2019/config/apps/http/servers/myserver/listen/0"</code></pre>
<h2 id="patch-configpath">PATCH /config/[path]</h2>
<p>Changes Caddy's configuration at the named path to the JSON body of the request. PATCH strictly replaces an existing value or array element.</p>
<h3 id="example-2">Example</h3>
<p>Replace the listener addresses:</p>
<pre><code class="cmd bash">curl -X PATCH \
-H "Content-Type: application/json" \
-d '[":8081", ":8082"]' \
"http://localhost:2019/config/apps/http/servers/myserver/listen"</code></pre>
<h2 id="delete-configpath">DELETE /config/[path]</h2>
<p>Removes Caddy's configuration at the named path. DELETE deletes the target value.</p>
<h3 id="examples-3">Examples</h3>
<p>To unload the entire current configuration but leave the process running:</p>
<pre><code class="cmd bash">curl -X DELETE "http://localhost:2019/config/"</code></pre>
<p>To stop only one of your HTTP servers:</p>
<pre><code class="cmd bash">curl -X DELETE "http://localhost:2019/config/apps/http/servers/myserver"</code></pre>
<h2 id="using-id-in-json">Using <code>@id</code> in JSON</h2>
<p>You can embed IDs in your JSON document for easier direct access to those parts of the JSON.</p>
<p>Simply add a field called <code>&quot;@id&quot;</code> to an object and give it a unique name. For example, if you had a reverse proxy handler that you wanted to access frequently:</p>
<pre class="chroma"><code><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">&#34;@id&#34;</span><span class="p">:</span> <span class="s2">&#34;my_proxy&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">&#34;handler&#34;</span><span class="p">:</span> <span class="s2">&#34;reverse_proxy&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre><p>To use it, simply make a request to the <code>/id/</code> API endpoint in the same way you would to the corresponding <code>/config/</code> endpoint, but without the whole path. The ID takes the request directly into that scope of the config for you.</p>
<p>For example, to access the upstreams of the reverse proxy without an ID, the path would be something like</p>
<pre><code>/config/apps/http/servers/myserver/routes/1/handle/0/upstreams
</code></pre>
<p>but with an ID, the path becomes</p>
<pre><code>/id/my_proxy/upstreams
</code></pre>
<p>which is much easier to remember and write by hand.</p>
<h2 id="concurrent-config-changes">Concurrent config changes</h2>
<aside class="tip">
<p>This section is for all <code>/config/</code> endpoints. It is experimental and subject to change.</p>
</aside>
<p>Caddy's config API provides <a href="https://en.wikipedia.org/wiki/ACID">ACID guarantees</a> for individual requests, but changes that involve more than a single request are subject to collisions or data loss if not properly synchronized.</p>
<p>For example, two clients may <code>GET /config/foo</code> at the same time, make an edit within that scope (config path), then call <code>POST|PUT|PATCH|DELETE /config/foo/...</code> at the same time to apply their changes, resulting in a collision: either one will overwrite the other, or the second might leave the config in an unintended state since it was applied to a different version of the config than it was prepared against. This is because the changes are not aware of each other.</p>
<p>Caddy's API does not support transactions spanning multiple requests, and HTTP is a stateless protocol. However, you can use the <code>Etag</code> trailer and <code>If-Match</code> header to detect and prevent collisions for any and all changes as a kind of optimistic concurrency control. This is useful if there is any chance that you are using Caddy's <code>/config/...</code> endpoints concurrently without synchronization. All responses to <code>GET /config/...</code> requests have an HTTP trailer called <code>Etag</code> that contains the path and a hash of the contents in that scope (e.g. <code>Etag: &quot;/config/apps/http/servers 65760b8e&quot;</code>). Simply set the <code>If-Match</code> header on a mutative request to that of an Etag trailer from a previous <code>GET</code> request.</p>
<p>The basic algorithm for this is as follows:</p>
<ol>
<li>Perform a <code>GET</code> request to any scope <code>S</code> within the config. Hold onto the <code>Etag</code> trailer of the response.</li>
<li>Make your desired change on the returned config.</li>
<li>Perform a <code>POST|PUT|PATCH|DELETE</code> request within scope <code>S</code>, setting the <code>If-Match</code> header to the recent <code>Etag</code> value.</li>
<li>If the response is HTTP 412 (Precondition Failed), repeat from step 1, or give up after too many attempts.</li>
</ol>
<p>This algorithm safely allows multiple, overlapping changes to Caddy's configuration without explicit synchronization. It is designed so that simultaneous changes to different parts of the config don't require a retry: only changes that overlap the same scope of the config can possibly cause a collision and thus require a retry.</p>
<h2 id="post-adapt">POST /adapt</h2>
<p>Adapts a configuration to Caddy JSON without loading or running it. If successful, the resulting JSON document is returned in the response body.</p>
<p>The Content-Type header is used to specify the configuration format in the same way that <a href="#post-load">/load</a> works. For example, to adapt a Caddyfile, set <code>Content-Type: text/caddyfile</code>.</p>
<p>This endpoint will adapt any configuration format as long as the associated <a href="/docs/config-adapters">config adapter</a> is plugged in to your Caddy build.</p>
<h3 id="examples-4">Examples</h3>
<p>Adapt a Caddyfile to JSON:</p>
<pre><code class="cmd bash">curl "http://localhost:2019/adapt" \
-H "Content-Type: text/caddyfile" \
--data-binary @Caddyfile</code></pre>
<h2 id="get-pkicaltidgt">GET /pki/ca/&lt;id&gt;</h2>
<p>Returns information about a particular <a href="/docs/json/apps/pki/">PKI app</a> CA by its ID. If the requested CA ID is the default (<code>local</code>), then the CA will be provisioned if it has not already been. Other CA IDs will return an error if they have not been previously provisioned.</p>
<pre><code class="cmd"><span class="bash">curl "http://localhost:2019/pki/ca/local" | jq</span>
{
"id": "local",
"name": "Caddy Local Authority",
"root_common_name": "Caddy Local Authority - 2022 ECC Root",
"intermediate_common_name": "Caddy Local Authority - ECC Intermediate",
"root_certificate": "-----BEGIN CERTIFICATE-----\nMIIB ... gRw==\n-----END CERTIFICATE-----\n",
"intermediate_certificate": "-----BEGIN CERTIFICATE-----\nMIIB ... FzQ==\n-----END CERTIFICATE-----\n"
}</code></pre>
<h2 id="get-pkicaltidgtcertificates">GET /pki/ca/&lt;id&gt;/certificates</h2>
<p>Returns the certificate chain of a particular <a href="/docs/json/apps/pki/">PKI app</a> CA by its ID. If the requested CA ID is the default (<code>local</code>), then the CA will be provisioned if it has not already been. Other CA IDs will return an error if they have not been previously provisioned.</p>
<p>This endpoint is used internally by the <a href="/docs/command-line#caddy-trust"><code>caddy trust</code></a> command to allow installing the CA's root certificate to your system's trust store.</p>
<pre><code class="cmd"><span class="bash">curl "http://localhost:2019/pki/ca/local/certificates"</span>
-----BEGIN CERTIFICATE-----
MIIByDCCAW2gAwIBAgIQViS12trTXBS/nyxy7Zg9JDAKBggqhkjOPQQDAjAwMS4w
...
By75JkP6C14OfU733oElfDUMa5ctbMY53rWFzQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIBpDCCAUmgAwIBAgIQTS5a+3LUKNxC6qN3ZDR8bDAKBggqhkjOPQQDAjAwMS4w
...
9M9t0FwCIQCAlUr4ZlFzHE/3K6dARYKusR1ck4A3MtucSSyar6lgRw==
-----END CERTIFICATE-----</code></pre>
<h2 id="get-reverse-proxyupstreams">GET /reverse_proxy/upstreams</h2>
<p>Returns the current status of the configured reverse proxy upstreams (backends) as a JSON document.</p>
<pre><code class="cmd"><span class="bash">curl "http://localhost:2019/reverse_proxy/upstreams" | jq</span>
[
{"address": "10.0.1.1:80", "num_requests": 4, "fails": 2},
{"address": "10.0.1.2:80", "num_requests": 5, "fails": 4},
{"address": "10.0.1.3:80", "num_requests": 3, "fails": 3}
]</code></pre>
<p>Each entry in the JSON array is a configured <a href="/docs/json/apps/http/servers/routes/handle/reverse_proxy/upstreams/">upstream</a> stored in the global upstream pool.</p>
<ul>
<li><strong>address</strong> is the dial address of the upstream. For SRV upstreams, this is the <code>lookup_srv</code> DNS name.</li>
<li><strong>num_requests</strong> is the amount of active requests currently being handled by the upstream.</li>
<li><strong>fails</strong> the current number of failed requests remembered, as configured by passive health checks.</li>
</ul>
<p>If your goal is to determine a backend's availability, you will need to cross-check relevant properties of the upstream against the handler configuration you are utilizing. For example, if you've enabled <a href="/docs/json/apps/http/servers/routes/handle/reverse_proxy/health_checks/passive/">passive health checks</a> for your proxies, then you need to also take into consideration the <code>fails</code> and <code>num_requests</code> values to determine if an upstream is considered available: check that the <code>fails</code> amount is less than your configured maximum amount of failures for your proxy (i.e. <a href="/docs/json/apps/http/servers/routes/handle/reverse_proxy/health_checks/passive/max_fails/"><code>max_fails</code></a>), and that <code>num_requests</code> is less than or equal to your configured amount of maximum requests per upstream (i.e. <a href="/docs/json/apps/http/servers/routes/handle/reverse_proxy/health_checks/passive/unhealthy_request_count/"><code>unhealthy_request_count</code></a> for the whole proxy, or <a href="/docs/json/apps/http/servers/routes/handle/reverse_proxy/upstreams/max_requests/"><code>max_requests</code></a> for individual upstreams).</p>
</article>
<nav id="pagenav">
<div class="heading">On this page</div>
</nav>
</div>
</main>
</body>
</html>

View file

@ -4,8 +4,14 @@
<!-- <link rel="preconnect" href="https://BH4D9OD16A-dsn.algolia.net" crossorigin /> --> <!-- <link rel="preconnect" href="https://BH4D9OD16A-dsn.algolia.net" crossorigin /> -->
<link rel="icon" href="/resources/images/favicon.png"> <link rel="icon" href="/resources/images/favicon.png">
<!-- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:400,700|Maven+Pro:400,700,900|Montserrat:400,700|PT+Mono&display=swap">-->
<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=Gantari:wght@400;600;800&family=Figtree:wght@300..900&&family=JetBrains+Mono:wght@400;600&family=Inter:wght@400;500;600&family=Maven+Pro:wght@400;700&family=Poppins:wght@400;600;800&family=Albert+Sans:wght@400;600&family=Red+Hat+Text&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/resources/css/common.css"> <link rel="stylesheet" href="/resources/css/common.css">
<link rel="stylesheet" href="/resources/css/chroma.css">
<script src="/resources/js/lib.js"></script> <script src="/resources/js/lib.js"></script>
<script src="/resources/js/common.js"></script> <script src="/resources/js/common.js"></script>

190
new/includes/header.html Normal file
View file

@ -0,0 +1,190 @@
<header>
<div class="topbar">
<div class="wrapper">
<div style="flex: 1;"></div>
<a href="https://zerossl.com">
A ZeroSSL Project
</a>
<a href="javascript:">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5"></path>
</svg>
GitHub
</a>
<a href="javascript:nextTheme();">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brightness-half" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 9a3 3 0 0 0 0 6v-6z"></path>
<path d="M6 6h3.5l2.5 -2.5l2.5 2.5h3.5v3.5l2.5 2.5l-2.5 2.5v3.5h-3.5l-2.5 2.5l-2.5 -2.5h-3.5v-3.5l-2.5 -2.5l2.5 -2.5z"></path>
</svg>
<span>Theme: <span id="current-theme">System</span></span>
</a>
</div>
</div>
<div class="navbar wrapper">
<a href="/"><img src="/resources/images/{{index .Args 0}}" id="logo" alt="Caddy"></a>
<nav role="navigation">
<ul>
<li class="dropdown-trigger">
<a href="/docs/">Documentation</a>
<div class="dropdown">
<div class="row flatlinks">
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-server-bolt" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z"></path>
<path d="M15 20h-9a3 3 0 0 1 -3 -3v-2a3 3 0 0 1 3 -3h12"></path>
<path d="M7 8v.01"></path>
<path d="M7 16v.01"></path>
<path d="M20 15l-2 3h3l-2 3"></path>
</svg>
Install
</b>
Learn how to build or download then install Caddy
</a>
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-file-text" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M14 3v4a1 1 0 0 0 1 1h4"></path>
<path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z"></path>
<path d="M9 9l1 0"></path>
<path d="M9 13l6 0"></path>
<path d="M9 17l6 0"></path>
</svg>
Caddyfile
</b>
A simplified, human-friendly configuration format
</a>
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-file-code" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M14 3v4a1 1 0 0 0 1 1h4"></path>
<path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z"></path>
<path d="M10 13l-1 2l1 2"></path>
<path d="M14 13l1 2l-1 2"></path>
</svg>
JSON
</b>
Powerful and programmable native config format
</a>
</div>
<div class="row">
<div class="linkbox">
<div class="col">
<div class="links-header">Tutorials</div>
<a href="javascript:">Caddy basics</a>
<a href="javascript:">Static files</a>
<a href="javascript:">Reverse proxy</a>
<a href="javascript:">Troubleshooting</a>
</div>
<div class="col">
<div class="links-header">Reference</div>
<a href="javascript:">Command line</a>
<a href="javascript:">Caddyfile</a>
<a href="javascript:">API</a>
<a href="javascript:">JSON Config</a>
<a href="javascript:">Auto HTTPS</a>
</div>
<!-- <div class="col">
<div class="links-header">Caddyfile</div>
<a href="javascript:">Directives</a>
<a href="javascript:">Request matchers</a>
<a href="javascript:">Global options</a>
</div> -->
<div class="col">
<div class="links-header">Develop</div>
<a href="javascript:">Architecture</a>
<a href="javascript:">Contribute</a>
<a href="javascript:">Write a module</a>
</div>
<div class="col">
<div class="links-header">Articles</div>
<a href="javascript:">Logging</a>
<a href="javascript:">Monitoring</a>
<a href="javascript:">Security</a>
<a href="javascript:">Custom domains</a>
<a href="javascript:">All articles...</a>
</div>
</div>
<!-- Make a new linkbox div for a separate section. -->
</div>
<div class="row featured">
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-atom-2" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 12m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"></path>
<path d="M12 21l0 .01"></path>
<path d="M3 9l0 .01"></path>
<path d="M21 9l0 .01"></path>
<path d="M8 20.1a9 9 0 0 1 -5 -7.1"></path>
<path d="M16 20.1a9 9 0 0 0 5 -7.1"></path>
<path d="M6.2 5a9 9 0 0 1 11.4 0"></path>
</svg>
Examples
</b>
Learn from examples contributed by the community
</a>
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-message-circle-question" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M15.02 19.52c-2.341 .736 -5 .606 -7.32 -.52l-4.7 1l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c1.649 1.407 2.575 3.253 2.742 5.152"></path>
<path d="M19 22v.01"></path>
<path d="M19 19a2.003 2.003 0 0 0 .914 -3.782a1.98 1.98 0 0 0 -2.414 .483"></path>
</svg>
<!-- <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-help-hexagon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M19.875 6.27c.7 .398 1.13 1.143 1.125 1.948v7.284c0 .809 -.443 1.555 -1.158 1.948l-6.75 4.27a2.269 2.269 0 0 1 -2.184 0l-6.75 -4.27a2.225 2.225 0 0 1 -1.158 -1.948v-7.285c0 -.809 .443 -1.554 1.158 -1.947l6.75 -3.98a2.33 2.33 0 0 1 2.25 0l6.75 3.98h-.033z"></path>
<path d="M12 16v.01"></path>
<path d="M12 13a2 2 0 0 0 .914 -3.782a1.98 1.98 0 0 0 -2.414 .483"></path>
</svg> -->
FAQ
</b>
Get fast answers to common questions
</a>
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-hexagons" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M4 18v-5l4 -2l4 2v5l-4 2z"></path>
<path d="M8 11v-5l4 -2l4 2v5"></path>
<path d="M12 13l4 -2l4 2v5l-4 2l-4 -2"></path>
</svg>
Modules
</b>
The official list of registered Caddy plugins
</a>
</div>
<div class="row">
<div class="plainbox">
<a href="javascript:">Documentation index</a>
<a href="javascript:">Community wiki</a>
<a href="javascript:">Contribute to docs</a>
</div>
</div>
</div>
</li>
<li>
<a href="https://store.caddyserver.com">Store</a>
</li>
<li>
<a href="/account">Account</a>
</li>
<li>
<a href="/help/">Help</a>
</li>
</ul>
</nav>
<div class="actions">
<a href="/download" class="button secondary">Download</a>
<a href="/sponsor" class="button primary">Sponsor</a>
</div>
</div>
</header>

View file

@ -9,186 +9,7 @@
</head> </head>
<body> <body>
<div class="hero"> <div class="hero">
<header> {{include "/includes/header.html" "logo-dark.svg"}}
<div class="topbar">
<div class="wrapper">
<a href="javascript:">GitHub</a>
<a href="javascript:">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brightness-half" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 9a3 3 0 0 0 0 6v-6z"></path>
<path d="M6 6h3.5l2.5 -2.5l2.5 2.5h3.5v3.5l2.5 2.5l-2.5 2.5v3.5h-3.5l-2.5 2.5l-2.5 -2.5h-3.5v-3.5l-2.5 -2.5l2.5 -2.5z"></path>
</svg>
System theme
</a>
</div>
</div>
<div class="navbar wrapper">
<a href="/"><img src="/resources/images/logo.svg" id="logo" alt="Caddy"></a>
<nav role="navigation" style="position: relative;">
<ul>
<li id="docs-link">
<a href="/docs/">Documentation</a>
<div id="docs-dropdown" class="dropdown hidden">
<div class="row flatlinks">
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-server-bolt" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z"></path>
<path d="M15 20h-9a3 3 0 0 1 -3 -3v-2a3 3 0 0 1 3 -3h12"></path>
<path d="M7 8v.01"></path>
<path d="M7 16v.01"></path>
<path d="M20 15l-2 3h3l-2 3"></path>
</svg>
Installation
</b>
Learn how to install Caddy for your platform
</a>
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-file-text" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M14 3v4a1 1 0 0 0 1 1h4"></path>
<path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z"></path>
<path d="M9 9l1 0"></path>
<path d="M9 13l6 0"></path>
<path d="M9 17l6 0"></path>
</svg>
Caddyfile
</b>
A simplified, human-friendly configuration format
</a>
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-file-code" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M14 3v4a1 1 0 0 0 1 1h4"></path>
<path d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z"></path>
<path d="M10 13l-1 2l1 2"></path>
<path d="M14 13l1 2l-1 2"></path>
</svg>
JSON
</b>
Powerful and programmable native config format
</a>
</div>
<div class="row">
<div class="linkbox">
<div class="col">
<h2>Tutorials</h2>
<a href="javascript:">Caddy basics</a>
<a href="javascript:">Static files</a>
<a href="javascript:">Reverse proxy</a>
<a href="javascript:">Troubleshooting</a>
</div>
<div class="col">
<h2>Reference</h2>
<a href="javascript:">Command line</a>
<a href="javascript:">Caddyfile</a>
<a href="javascript:">API</a>
<a href="javascript:">JSON Config</a>
<a href="javascript:">Auto HTTPS</a>
</div>
<!-- <div class="col">
<h2>Caddyfile</h2>
<a href="javascript:">Directives</a>
<a href="javascript:">Request matchers</a>
<a href="javascript:">Global options</a>
</div> -->
<div class="col">
<h2>Develop</h2>
<a href="javascript:">Architecture</a>
<a href="javascript:">Contribute</a>
<a href="javascript:">Write a module</a>
</div>
<div class="col">
<h2>Articles</h2>
<a href="javascript:">Logging</a>
<a href="javascript:">Monitoring</a>
<a href="javascript:">Security</a>
<a href="javascript:">Custom domains</a>
<a href="javascript:">All articles...</a>
</div>
</div>
<!-- Make a new linkbox div for a separate section. -->
</div>
<div class="row featured">
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-atom-2" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M12 12m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"></path>
<path d="M12 21l0 .01"></path>
<path d="M3 9l0 .01"></path>
<path d="M21 9l0 .01"></path>
<path d="M8 20.1a9 9 0 0 1 -5 -7.1"></path>
<path d="M16 20.1a9 9 0 0 0 5 -7.1"></path>
<path d="M6.2 5a9 9 0 0 1 11.4 0"></path>
</svg>
Examples
</b>
Learn from examples contributed by the community
</a>
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-message-circle-question" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M15.02 19.52c-2.341 .736 -5 .606 -7.32 -.52l-4.7 1l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c1.649 1.407 2.575 3.253 2.742 5.152"></path>
<path d="M19 22v.01"></path>
<path d="M19 19a2.003 2.003 0 0 0 .914 -3.782a1.98 1.98 0 0 0 -2.414 .483"></path>
</svg>
<!-- <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-help-hexagon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M19.875 6.27c.7 .398 1.13 1.143 1.125 1.948v7.284c0 .809 -.443 1.555 -1.158 1.948l-6.75 4.27a2.269 2.269 0 0 1 -2.184 0l-6.75 -4.27a2.225 2.225 0 0 1 -1.158 -1.948v-7.285c0 -.809 .443 -1.554 1.158 -1.947l6.75 -3.98a2.33 2.33 0 0 1 2.25 0l6.75 3.98h-.033z"></path>
<path d="M12 16v.01"></path>
<path d="M12 13a2 2 0 0 0 .914 -3.782a1.98 1.98 0 0 0 -2.414 .483"></path>
</svg> -->
FAQ
</b>
Get fast answers to common questions
</a>
<a href="/docs/install">
<b>
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-hexagons" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M4 18v-5l4 -2l4 2v5l-4 2z"></path>
<path d="M8 11v-5l4 -2l4 2v5"></path>
<path d="M12 13l4 -2l4 2v5l-4 2l-4 -2"></path>
</svg>
Modules
</b>
The official list of registered Caddy plugins
</a>
</div>
<div class="row">
<div class="plainbox">
<a href="javascript:">Documentation index</a>
<a href="javascript:">Community wiki</a>
<a href="javascript:">Contribute to docs</a>
</div>
</div>
</div>
</li>
<li>
<a href="https://store.caddyserver.com">Store</a>
</li>
<li>
<a href="/account">Account</a>
</li>
<li>
<a href="/help">Help</a> <!-- TODO: a dropdown menu -->
</li>
</ul>
</nav>
<div class="actions">
<a href="/download" class="button secondary">Download</a>
<a href="/sponsor" class="button primary">Sponsor</a>
</div>
</div>
</header>
</div> </div>
</body> </body>

View file

@ -0,0 +1,162 @@
/*
Derived from https://gist.github.com/nicolashery/5765395
Adjusted to be high-contrast
*/
/*
Solarized Light (High Contrast)
Derived from http://ethanschoonover.com/solarized
*/
.chroma {
/* background: linear-gradient(0deg, #f8fbfd 0%, #edf5fd 100%); */
background: linear-gradient(to bottom, #eff7f9, transparent);
color: #254048;
}
.chroma .c { color: #93a1a1 } /* Comment */
.chroma .err { color: #586e75 } /* Error */
.chroma .g { color: #586e75 } /* Generic */
.chroma .k { color: #577b00 } /* Keyword */
.chroma .l { color: #586e75 } /* Literal */
.chroma .n { color: #586e75 } /* Name */
.chroma .o { color: #577b00 } /* Operator */
.chroma .x { color: #d03d00 } /* Other */
.chroma .p { color: #586e75 } /* Punctuation */
.chroma .cm { color: #93a1a1 } /* Comment.Multiline */
.chroma .cp { color: #577b00 } /* Comment.Preproc */
.chroma .c1 { color: #93a1a1 } /* Comment.Single */
.chroma .cs { color: #577b00 } /* Comment.Special */
.chroma .gd { color: #dc322f; background-color: #efdede } /* Generic.Deleted */
.chroma .ge { color: #586e75; font-style: italic } /* Generic.Emph */
.chroma .gr { color: #dc322f } /* Generic.Error */
.chroma .gh { color: #d03d00 } /* Generic.Heading */
.chroma .gi { color: #577b00; background-color: #ddecdc } /* Generic.Inserted */
.chroma .go { color: #586e75 } /* Generic.Output */
.chroma .gp { color: #586e75 } /* Generic.Prompt */
.chroma .gs { color: #586e75; font-weight: bold } /* Generic.Strong */
.chroma .gu { color: #d03d00 } /* Generic.Subheading */
.chroma .gt { color: #586e75 } /* Generic.Traceback */
.chroma .kc { color: #d03d00 } /* Keyword.Constant */
.chroma .kd { color: #0673bf } /* Keyword.Declaration */
.chroma .kn { color: #577b00 } /* Keyword.Namespace */
.chroma .kp { color: #577b00 } /* Keyword.Pseudo */
.chroma .kr { color: #0673bf } /* Keyword.Reserved */
.chroma .kt { color: #dc322f } /* Keyword.Type */
.chroma .ld { color: #586e75 } /* Literal.Date */
.chroma .m { color: #008076 } /* Literal.Number */
.chroma .s { color: #008076 } /* Literal.String */
.chroma .na { color: #586e75 } /* Name.Attribute */
.chroma .nb { color: #B58900 } /* Name.Builtin */
.chroma .nc { color: #0673bf } /* Name.Class */
.chroma .no { color: #d03d00 } /* Name.Constant */
.chroma .nd { color: #0673bf } /* Name.Decorator */
.chroma .ni { color: #d03d00 } /* Name.Entity */
.chroma .ne { color: #d03d00 } /* Name.Exception */
.chroma .nf { color: #0673bf } /* Name.Function */
.chroma .nl { color: #586e75 } /* Name.Label */
.chroma .nn { color: #586e75 } /* Name.Namespace */
.chroma .nx { color: #586e75 } /* Name.Other */
.chroma .py { color: #586e75 } /* Name.Property */
.chroma .nt { color: #0673bf } /* Name.Tag */
.chroma .nv { color: #0673bf } /* Name.Variable */
.chroma .ow { color: #577b00 } /* Operator.Word */
.chroma .w { color: #586e75 } /* Text.Whitespace */
.chroma .mf { color: #008076 } /* Literal.Number.Float */
.chroma .mh { color: #008076 } /* Literal.Number.Hex */
.chroma .mi { color: #008076 } /* Literal.Number.Integer */
.chroma .mo { color: #008076 } /* Literal.Number.Oct */
.chroma .sb { color: #93a1a1 } /* Literal.String.Backtick */
.chroma .sc { color: #008076 } /* Literal.String.Char */
.chroma .sd { color: #586e75 } /* Literal.String.Doc */
.chroma .s2 { color: #008076 } /* Literal.String.Double */
.chroma .se { color: #d03d00 } /* Literal.String.Escape */
.chroma .sh { color: #586e75 } /* Literal.String.Heredoc */
.chroma .si { color: #008076 } /* Literal.String.Interpol */
.chroma .sx { color: #008076 } /* Literal.String.Other */
.chroma .sr { color: #dc322f } /* Literal.String.Regex */
.chroma .s1 { color: #008076 } /* Literal.String.Single */
.chroma .ss { color: #008076 } /* Literal.String.Symbol */
.chroma .bp { color: #0673bf } /* Name.Builtin.Pseudo */
.chroma .vc { color: #0673bf } /* Name.Variable.Class */
.chroma .vg { color: #0673bf } /* Name.Variable.Global */
.chroma .vi { color: #0673bf } /* Name.Variable.Instance */
.chroma .il { color: #008076 } /* Literal.Number.Integer.Long */
/*
Solarized Dark (High Contrast)
Derived from http://ethanschoonover.com/solarized
*/
.dark .chroma {
background: linear-gradient(to bottom, #24454f, transparent);
color: #93a1a1;
}
.dark .chroma .c { color: #586e75 } /* Comment */
.dark .chroma .err { color: #93a1a1 } /* Error */
.dark .chroma .g { color: #93a1a1 } /* Generic */
.dark .chroma .k { color: #76a507 } /* Keyword */
.dark .chroma .l { color: #93a1a1 } /* Literal */
.dark .chroma .n { color: #93a1a1 } /* Name */
.dark .chroma .o { color: #76a507 } /* Operator */
.dark .chroma .x { color: #ec662e } /* Other */
.dark .chroma .p { color: #93a1a1 } /* Punctuation */
.dark .chroma .cm { color: #586e75 } /* Comment.Multiline */
.dark .chroma .cp { color: #76a507 } /* Comment.Preproc */
.dark .chroma .c1 { color: #586e75 } /* Comment.Single */
.dark .chroma .cs { color: #76a507 } /* Comment.Special */
.dark .chroma .gd { color: #dc322f; background-color: #efdede } /* Generic.Deleted */
.dark .chroma .ge { color: #93a1a1; font-style: italic } /* Generic.Emph */
.dark .chroma .gr { color: #dc322f } /* Generic.Error */
.dark .chroma .gh { color: #ec662e } /* Generic.Heading */
.dark .chroma .gi { color: #76a507 } /* Generic.Inserted */
.dark .chroma .go { color: #93a1a1 } /* Generic.Output */
.dark .chroma .gp { color: #93a1a1 } /* Generic.Prompt */
.dark .chroma .gs { color: #93a1a1; font-weight: bold } /* Generic.Strong */
.dark .chroma .gu { color: #ec662e } /* Generic.Subheading */
.dark .chroma .gt { color: #93a1a1 } /* Generic.Traceback */
.dark .chroma .kc { color: #ec662e } /* Keyword.Constant */
.dark .chroma .kd { color: #0090f5 } /* Keyword.Declaration */
.dark .chroma .kn { color: #76a507 } /* Keyword.Namespace */
.dark .chroma .kp { color: #76a507 } /* Keyword.Pseudo */
.dark .chroma .kr { color: #0090f5 } /* Keyword.Reserved */
.dark .chroma .kt { color: #dc322f } /* Keyword.Type */
.dark .chroma .ld { color: #93a1a1 } /* Literal.Date */
.dark .chroma .m { color: #09a598 } /* Literal.Number */
.dark .chroma .s { color: #09a598 } /* Literal.String */
.dark .chroma .na { color: #93a1a1 } /* Name.Attribute */
.dark .chroma .nb { color: #B58900 } /* Name.Builtin */
.dark .chroma .nc { color: #0090f5 } /* Name.Class */
.dark .chroma .no { color: #ec662e } /* Name.Constant */
.dark .chroma .nd { color: #0090f5 } /* Name.Decorator */
.dark .chroma .ni { color: #ec662e } /* Name.Entity */
.dark .chroma .ne { color: #ec662e } /* Name.Exception */
.dark .chroma .nf { color: #0090f5 } /* Name.Function */
.dark .chroma .nl { color: #93a1a1 } /* Name.Label */
.dark .chroma .nn { color: #93a1a1 } /* Name.Namespace */
.dark .chroma .nx { color: #93a1a1 } /* Name.Other */
.dark .chroma .py { color: #93a1a1 } /* Name.Property */
.dark .chroma .nt { color: #0090f5 } /* Name.Tag */
.dark .chroma .nv { color: #0090f5 } /* Name.Variable */
.dark .chroma .ow { color: #76a507 } /* Operator.Word */
.dark .chroma .w { color: #93a1a1 } /* Text.Whitespace */
.dark .chroma .mf { color: #09a598 } /* Literal.Number.Float */
.dark .chroma .mh { color: #09a598 } /* Literal.Number.Hex */
.dark .chroma .mi { color: #09a598 } /* Literal.Number.Integer */
.dark .chroma .mo { color: #09a598 } /* Literal.Number.Oct */
.dark .chroma .sb { color: #586e75 } /* Literal.String.Backtick */
.dark .chroma .sc { color: #09a598 } /* Literal.String.Char */
.dark .chroma .sd { color: #93a1a1 } /* Literal.String.Doc */
.dark .chroma .s2 { color: #09a598 } /* Literal.String.Double */
.dark .chroma .se { color: #ec662e } /* Literal.String.Escape */
.dark .chroma .sh { color: #93a1a1 } /* Literal.String.Heredoc */
.dark .chroma .si { color: #09a598 } /* Literal.String.Interpol */
.dark .chroma .sx { color: #09a598 } /* Literal.String.Other */
.dark .chroma .sr { color: #dc322f } /* Literal.String.Regex */
.dark .chroma .s1 { color: #09a598 } /* Literal.String.Single */
.dark .chroma .ss { color: #09a598 } /* Literal.String.Symbol */
.dark .chroma .bp { color: #0090f5 } /* Name.Builtin.Pseudo */
.dark .chroma .vc { color: #0090f5 } /* Name.Variable.Class */
.dark .chroma .vg { color: #0090f5 } /* Name.Variable.Global */
.dark .chroma .vi { color: #0090f5 } /* Name.Variable.Instance */
.dark .chroma .il { color: #09a598 } /* Literal.Number.Integer.Long */

View file

@ -1,3 +1,81 @@
:root {
--body-bg: white;
--text-color: #222;
--header-bg: rgba(118, 179, 194, 0.11);
--header-border-color: #ebf0f2;
--main-nav-link-color: #546c75;
--main-nav-link-hover-color: #01324b;
--link-color: #0097f2;
--link-decoration-color: #ddd;
--link-hover-color: rgb(27, 170, 70);
--code-bg: #f2f8f9;
--dropdown-bg: #e8ecef;
--dropdown-linkbox: white;
--dropdown-link-title-color: #384f61;
--dropdown-link-color: #647687;
--dropdown-link-hover-bg: rgb(239, 244, 248);
--dropdown-link-hover-color: #142633;
--dropdown-featured-bg: linear-gradient(to bottom, rgb(239 244 247), transparent);
--dropdown-shadow-color: rgb(0 0 0 / .4);
}
.dark {
--body-bg: #0d171a;
--text-color: #a4c0c2;
--header-bg: rgba(44, 130, 164, 0.11);
--header-border-color: transparent;
--main-nav-link-color: #7d8e93;
--main-nav-link-hover-color: #e2e9ec;
--link-color: #34a1e4;
--link-decoration-color: #375862;
--link-hover-color: rgb(42, 228, 98);
--code-bg: #1f3237;
--dropdown-bg: #34414b;
--dropdown-linkbox: #202b2f;
--dropdown-link-title-color: #f0f3f5;
--dropdown-link-color: #9ebeca;
--dropdown-link-hover-color: white;
--dropdown-link-hover-bg: rgb(30, 48, 63);
--dropdown-featured-bg: linear-gradient(to bottom, rgb(46, 58, 66), transparent);
--dropdown-shadow-color: black;
}
.dark .button.secondary {
border-color: rgb(64, 121, 136);
}
.dark article h2,
.dark article h3 {
color: #e0f8f9;
}
* { * {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -5,31 +83,58 @@
} }
body { body {
font-family: Inter, system-ui; font-family: Inter, Figtree, Gantari, 'Albert Sans', Inter, system-ui;
font-size: 16px; font-size: 18px;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
tab-size: 4; tab-size: 4;
-moz-tab-size: 4; background-color: var(--body-bg);
color: var(--text-color);
}
main a {
color: var(--link-color);
text-decoration-line: underline;
text-decoration-thickness: 2px;
text-underline-offset: 2px;
text-decoration-color: var(--link-decoration-color);
transition: all .15s;
}
main a:hover {
color: var(--link-hover-color);
text-decoration-color: var(--link-color);
}
b,
strong {
font-weight: 600;
}
code {
font-family: 'JetBrains Mono', 'Chivo Mono', monospace;
font-feature-settings: "liga" 0; /* prevent the merging of chars like "fi", relevant for Chivo Mono especially */
} }
.wrapper { .wrapper {
max-width: 1400px; max-width: 1400px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
box-sizing: content-box;
padding-left: 50px;
padding-right: 50px;
} }
header { header {
background: rgb(255 255 255 / .1); background: var(--header-bg);
box-shadow: 0 0 50px rgb(0 0 0 / .2); position: relative;
backdrop-filter: blur(10px); z-index: 99;
} }
header a { header a {
text-decoration: none; text-decoration: none;
} }
header .topbar,
header nav > ul { header nav > ul {
background: linear-gradient(to right, rgb(100 190 121), rgb(54 206 255)); background: linear-gradient(to right, rgb(100 190 121), rgb(54 206 255));
background-clip: text; background-clip: text;
@ -37,7 +142,7 @@ header nav > ul {
} }
.topbar { .topbar {
font-size: 14px; font-size: 12px;
border-bottom: 1px solid hsl(203deg 100% 79% / 20%); border-bottom: 1px solid hsl(203deg 100% 79% / 20%);
} }
@ -46,19 +151,20 @@ header nav > ul {
justify-content: flex-end; justify-content: flex-end;
align-items: center; align-items: center;
gap: 1em; gap: 1em;
color: rgba(255, 255, 255, 0.75); color: #777;
} }
.topbar a { .topbar a {
display: inline-block; display: inline-block;
padding: 8px; padding: 10px 10px 8px;
color: inherit; color: #719bcc;
display: flex; display: flex;
align-items: center; align-items: center;
} }
.topbar a:hover { .topbar a:hover {
background: rgb(0 0 0 / .5); background: rgb(0 0 0 / .05);
color: black;
} }
.navbar { .navbar {
@ -67,37 +173,44 @@ header nav > ul {
gap: 2em; gap: 2em;
} }
nav ul { header nav ul {
list-style: none; list-style: none;
margin: 0; margin: 0;
padding-left: 0; padding-left: 0;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 2em;
flex: 1; flex: 1;
} }
.topbar,
.navbar nav > ul > li > a { .navbar nav > ul > li > a {
-webkit-text-fill-color: rgba(0 0 0 / .1); -webkit-text-fill-color: rgba(0 0 0 / .1);
} }
.topbar a:hover,
.navbar nav > ul > li > a:hover { .navbar nav > ul > li > a:hover {
-webkit-text-fill-color: rgba(255 255 255 / .4); -webkit-text-fill-color: rgba(255 255 255 / .4);
} }
.navbar nav {
position: relative;
}
.navbar nav > ul > li > a, .navbar nav > ul > li > a,
.navbar .button { .navbar .button {
text-decoration: none; text-decoration: none;
transition: all 250ms; transition: all 200ms;
color: inherit; color: inherit;
font-weight: 500; font-weight: 500;
} }
.navbar nav > ul > li > a { .navbar nav > ul > li > a {
padding: 20px 5px; padding: 20px 1.5em;
display: block; display: block;
font-family: Figtree, system-ui;
font-size: 16px;
}
.navbar .button {
font-size: 80%;
} }
.icon { .icon {
@ -128,6 +241,7 @@ nav ul {
.button.secondary:hover { .button.secondary:hover {
color: white; color: white;
border-color: white;
} }
.button.primary { .button.primary {
@ -138,49 +252,43 @@ nav ul {
.button.primary:hover { .button.primary:hover {
color: #1a71cb; color: #1a71cb;
transform: scale(1.08); transform: scale(1.1);
box-shadow: 0 4px 15px rgb(0 0 0 / .2); box-shadow: 0 4px 15px rgb(0 0 0 / .2);
} }
.button.primary:active { .button:active {
transition: all 100ms; transition: all 100ms;
transform: scale(.95); transform: scale(.95);
box-shadow: 0 -1px 4px rgb(0 0 0 / .5); box-shadow: 2px 2px 5px inset rgba(0, 0, 0, 0.2);
}
#docs-link:hover .dropdown {
visibility: visible;
opacity: 1;
transform-origin: top center;
animation: rotateMenu 300ms ease;
}
@keyframes rotateMenu {
0% { transform: rotateX(-90deg) }
100% { transform: rotateX(0deg) }
} }
.dropdown { .dropdown {
font-size: 16px;
position: absolute; position: absolute;
display: inline-block; display: inline-block;
background: #e8ecef; background: var(--dropdown-bg);
border-radius: 15px; border-radius: 15px;
line-height: 1.5; line-height: 1.5;
overflow: hidden; overflow: hidden;
box-shadow: 0 20px 50px black; box-shadow: 0 30px 75px var(--dropdown-shadow-color);
transition-duration: .2s;
transition-property: opacity, transform;
visibility: hidden; visibility: hidden;
opacity: 0;
top: calc(100% - 5px); top: calc(100% - 5px);
left: 0; left: 0;
} }
.dropdown-trigger:hover .dropdown {
visibility: visible;
transform-origin: top left;
animation: rotateMenu 300ms ease;
}
@keyframes rotateMenu {
0% { transform: rotateX(-90deg) scale(0.75); opacity: 0; }
100% { transform: rotateX(0deg) scale(1); opacity: 1; }
}
.dropdown .row { .dropdown .row {
display: flex; display: flex;
gap: 1px; gap: 1px;
@ -201,24 +309,24 @@ nav ul {
} }
.dropdown .plainbox a { .dropdown .plainbox a {
color: #647687; color: var(--dropdown-link-color);
} }
.dropdown .plainbox a:hover { .dropdown .plainbox a:hover {
color: #142633; color: var(--dropdown-link-hover-color);
} }
.dropdown .linkbox { .dropdown .linkbox {
background: white; background: var(--dropdown-linkbox);
gap: 4em; gap: 4em;
} }
.dropdown h2 { .dropdown .links-header {
font-family: Poppins, ui-rounded; font-family: Poppins, ui-rounded;
font-weight: 500; font-weight: 600;
color: #444; color: var(--dropdown-link-title-color);
font-size: 22px; font-size: 20px;
margin-bottom: 15px; margin-bottom: 5px;
} }
.dropdown .col { .dropdown .col {
@ -227,20 +335,25 @@ nav ul {
.dropdown .col a { .dropdown .col a {
display: block; display: block;
color: #647687; color: var(--dropdown-link-color);
text-decoration: none; text-decoration: none;
padding: 5px 0; padding: 5px 0;
} }
.dropdown .col a:hover { .dropdown .col a:hover {
color: #142633; color: var(--dropdown-link-hover-color);
}
.dropdown .flatlinks a,
.dropdown .featured a {
transition: background-color 150ms;
} }
.dropdown .flatlinks a { .dropdown .flatlinks a {
background: white; background: var(--dropdown-linkbox);
padding: 1em 2em; padding: 1em 2em;
color: #647687; color: var(--dropdown-link-color);
font-size: 14px; font-size: 14px;
} }
@ -252,21 +365,22 @@ nav ul {
} }
.dropdown .flatlinks a b { .dropdown .flatlinks a b {
color: #142633; color: var(--dropdown-link-title-color);
margin-bottom: .25em; margin-bottom: .25em;
} }
.dropdown .flatlinks a:hover { .dropdown .flatlinks a:hover {
background: rgb(239, 244, 248); /* background: rgb(239, 244, 248); */
background: var(--dropdown-link-hover-bg);
} }
.dropdown .featured a b { .dropdown .featured a b {
color: #384f61; color: var(--dropdown-link-title-color);
margin-bottom: .5em; margin-bottom: .5em;
} }
.dropdown .featured a:hover b { .dropdown .featured a:hover b {
color: #1e3141; color: var(--dropdown-link-hover-color);
} }
@ -282,13 +396,13 @@ nav ul {
font-size: 14px; font-size: 14px;
line-height: 1.4; line-height: 1.4;
border-radius: 10px; border-radius: 10px;
color: #647687; color: var(--dropdown-link-color);
font-size: 14px; font-size: 14px;
background-color: white; background-color: var(--dropdown-linkbox);
background-image: linear-gradient(to bottom, rgb(239 244 247), rgba(252,252,252,0)); background-image: var(--dropdown-featured-bg);
/* background-image: linear-gradient(to bottom, rgb(239 244 247), rgba(252,252,252,0)); */
/* background: linear-gradient(137deg, rgb(241 251 247) 0%, rgb(242 248 255) 100%); */ /* background: linear-gradient(137deg, rgb(241 251 247) 0%, rgb(242 248 255) 100%); */
flex: 1; flex: 1;
transition: background-color 150ms;
box-shadow: 0 1px 2px rgb(0 0 0 / .2); box-shadow: 0 1px 2px rgb(0 0 0 / .2);
} }
@ -296,10 +410,19 @@ nav ul {
background-color: rgb(223, 233, 238); /* rgb(232, 255, 254); */ background-color: rgb(223, 233, 238); /* rgb(232, 255, 254); */
} }
.dark .dropdown .featured a:hover {
background-color: rgb(64, 82, 92);
}
.dropdown .featured a b { .dropdown .featured a b {
display: block; display: block;
color: #384f61; color: var(--dropdown-link-title-color);
font-size: 16px; font-size: 16px;
margin-bottom: .5em; margin-bottom: .5em;
font-weight: 600; font-weight: 600;
}
#current-theme {
text-transform: capitalize;
} }

670
new/resources/css/docs.css Normal file
View file

@ -0,0 +1,670 @@
html,
body {
min-height: 100%;
}
.wrapper {
max-width: 1800px;
}
:root {
--header-bg: white;
}
.dark {
--header-bg: rgba(44, 130, 164, 0.11);
}
header {
border-bottom: 1px solid var(--header-border-color);
}
.topbar {
border-bottom: 0;
}
.button.primary {
background: linear-gradient(135deg, #7ece98 25%, rgb(49, 155, 208) 80%);
color: white;
}
.button.primary:hover {
color: white;
}
.button.secondary {
color: rgb(64, 131, 153);
border: 1px solid rgb(226, 242, 247);
}
.button.secondary:hover {
color: rgb(7, 86, 134);
border-color: rgb(155, 191, 213);
}
main {
margin-top: 50px;
font-family: Inter, system-ui;
}
.docs {
display: flex;
font-size: 16px;
}
.docs nav {
flex: 1;
}
main nav ul {
list-style-type: none;
}
main nav li {
position: relative;
}
main nav li li::before {
content: '';
display: block;
position: absolute;
width: 1px;
height: 100%;
background-color: #d2e5e7;
transition: .15s;
}
main nav li li:hover::before {
background-color: #62868d;
width: 4px;
}
main nav ul li a,
main nav .heading,
#autonav a {
padding: 8px 18px 8px 28px;
}
/*
main nav li a,
#pagenav a {
color: #546c75;
} */
main nav a {
display: block;
text-decoration: none;
color: inherit;
border-radius: 1.5em;
color: var(--main-nav-link-color);
transition: .15s;
}
main nav li:hover > a,
#autonav a:hover,
#pagenav a:hover {
color: var(--main-nav-link-hover-color);
}
main nav li:hover > a {
/* background: #f6fafc; */
box-shadow: -10px 0 10px -3px rgba(0, 0, 0, 0.15);
}
main nav > ul > li > a::before {
content: '\203A';
font-weight: bold;
font-size: 150%;
line-height: .75;
position: absolute;
opacity: 0;
left: 0;
transition: left .15s, opacity .15s;
}
main nav li a:hover::before {
opacity: 1;
left: .75rem;
}
main nav li a.current {
background: linear-gradient(to right, #ecf1f3, transparent);
}
main nav .heading {
font-weight: bold;
text-transform: uppercase;
font-size: 80%;
letter-spacing: 1px;
}
main nav .heading:not(:first-child) {
margin-top: 2.5em;
}
main nav li li a {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
padding-left: 1em;
transition: padding .15s;
}
main nav li li a:not(#autonav a) {
font-size: 90%;
}
main nav li ul {
margin-left: 2.5em;
margin-bottom: .5em;
}
article {
font-family: 'Albert Sans', Figree, Assistant, 'Red Hat Text', 'Be Vietnam Pro', system-ui;
font-size: 20px;
word-wrap: break-word;
max-width: 1100px;
/* color: #222; */
}
/*
while we want most elements that are rendered
server-side from markdown to have a constrained
width, a few elements should be allowed to
extend to the borders of the page
*/
article > :not(.fullwidth),
article > .fullwidth > *,
.pad {
padding-left: 8%;
padding-right: 8%;
}
article > :not(h1, hr),
dd,
article p,
article ol,
article ul,
article pre,
article table {
margin-bottom: 1.5rem;
}
article > .fullwidth { margin-bottom: 1.5rem; }
article > .fullwidth > * { margin-bottom: 0; }
article > pre.chroma > code {
background: none;
padding: 0;
}
article > pre.chroma {
padding-top: 2em;
padding-bottom: 2em;
}
article ul,
article ol,
#hovercard ul,
#hovercard ol {
margin-left: 2.5em;
}
article ul ul,
article ol ol,
article ol ul,
article ul ol {
margin-bottom: 0;
}
article p,
article li {
line-height: 1.75;
}
article li p,
article li ul,
article li ol {
margin-bottom: .5em;
}
article h1,
article h2,
article h3,
article h4,
article h5,
article h6 {
/* to ensure that the anchor-link icons stay inside the heading */
position: relative;
font-family: Gantari;
font-weight: 800;
}
article h1,
article h2,
article h3 {
text-align: center;
}
article h1 {
font-size: 72px;
color: #0e3e5b;
letter-spacing: -2px;
margin-top: 5%;
margin-bottom: 50px;
background: linear-gradient(to right, #23a1ec, #3fd53a);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
article h2 {
font-size: 56px;
padding-bottom: 15px;
margin: 100px 0 40px;
border-image-slice: 1;
border-bottom-width: 10px;
border-bottom-style: solid;
border-image-source: linear-gradient(to left, #23a1ec, #3fd53a);
}
article h3 {
font-size: 36px;
margin: 50px 0 20px;
font-weight: 600;
text-align: center;
}
article h4 {
font-size: 24px;
margin: 25px 0 15px;
}
article h5 {
font-size: 22px;
margin: 2em 0 1em;
}
.anchor-link {
opacity: 0;
font-size: .6em;
border-radius: 10px;
padding: .3em .5em;
margin-left: .25em;
position: absolute;
top: 5px;
text-decoration: none;
}
*:hover > .anchor-link,
.anchor-link:focus {
opacity: 1;
text-decoration: none;
}
.anchor-link:hover {
background-color: rgba(0, 0, 0, .075);
}
code {
background-color: var(--code-bg);
border-radius: 6px;
padding: 2px 5px;
font-size: 90%;
}
code.cmd {
background-color: #333;
color: #eaeaea;
}
pre > code,
pre.chroma,
.group {
display: block;
white-space: pre;
}
pre > code,
article > pre {
padding: 1em;
line-height: 1.6;
overflow: auto;
}
pre > code.cmd,
.chroma {
border-radius: 10px;
}
code.cmd.bash,
code.cmd .bash,
code.cmd.bash-continuation,
code.cmd .bash-continuation {
font-weight: bold;
}
code.cmd.bash::before,
code.cmd .bash::before {
content: '$';
margin-right: .5rem;
}
code.cmd.bash-continuation::before,
code.cmd .bash-continuation::before {
content: '>';
margin-right: .5rem;
}
dt:hover .inline-link {
visibility: visible;
}
dd {
margin-left: 1em;
}
#field-list-header {
display: none;
}
.field-name {
display: block;
font-family: 'Source Code Pro', monospace;
margin-top: 2em;
font-weight: bold;
margin-bottom: .5em;
}
.inline-link {
text-decoration: none;
position: absolute;
margin-left: -1.5em;
/* margin-top: -.1em; */
padding-right: .3em;
padding-left: .2em;
visibility: hidden;
}
.inline-link:hover {
text-decoration: none;
}
hr {
border: none;
border-top: 4px solid var(--link-decoration-color);
margin: 4em auto;
width: 35%;
}
article img {
max-width: 100%;
}
iframe {
margin: 1em 0 2em;
}
article aside {
position: relative;
font-size: 16px;
margin: 2em auto 3em !important;
max-width: 800px;
}
article aside.tip,
article aside.advice {
padding-left: calc(8% + 50px) !important;
}
article aside.tip::before,
article aside.advice::before {
font-size: 45px;
position: absolute;
top: -4px;
left: 8%;
}
article aside.tip {
color: #706b95;
}
article aside.advice {
color: #826848;
}
article aside.tip:nth-child(even)::before {
content: '💁‍♀️';
}
article aside.tip:nth-child(odd)::before {
content: '💁‍♂️';
}
article aside.advice::before {
content: '🤦';
}
article aside.complete {
color: #6b6b6b;
border: 2px dotted #88db88;
text-align: center;
max-width: 500px;
padding: 15px 25px !important;
}
article aside.complete::before {
content: '✅ complete';
color: #39c849;
text-transform: uppercase;
font-size: 14px;
font-weight: bold;
letter-spacing: 1px;
margin-right: 2em;
margin-bottom: .5em;
}
table {
table-layout: fixed;
border-collapse: collapse;
font-size: 16px;
}
article > table {
margin: 25px auto;
}
th, td {
border-bottom: 1px solid #ddd;
padding: 10px;
line-height: 1.4em;
vertical-align: top;
word-wrap: break-word;
}
th {
text-align: left;
background: #eee;
}
td code {
font-size: 14px;
word-wrap: break-word;
}
#autonav {
position: absolute;
visibility: hidden;
left: 75%;
top: 0;
background: #fff;
box-shadow: 0 10px 40px rgb(0 0 0 / .2);
border-radius: 10px;
border-top-left-radius: 0;
min-width: 250px;
max-width: 350px;
z-index: 999;
padding-top: .5em;
padding-bottom: .5em;
max-height: 400px;
overflow: hidden;
overflow-y: auto;
font-size: 14px;
}
main nav > ul > li:hover #autonav {
visibility: visible;
}
#autonav .heading {
color: #888;
}
#autonav a {
transition: none;
border-radius: 0;
}
#autonav a:hover {
color: #01324b;
background: #f1f7fb;
}
#pagenav .heading {
padding-left: .75em;
}
#pagenav a {
display: block;
animation: fadeIn 500ms;
padding: .75em;
font-size: 90%;
}
#pagenav a:hover {
background: #f4f7f9;
}
@keyframes fadeIn {
0% { opacity: 0; transform: translateY(2em); }
100% { opacity: 1; transform: translateY(0); }
}
.dark main nav li a.current {
background: linear-gradient(to right, #1a3c4d, transparent);
}
.dark main nav a {
color: #7d8e93;
}
.dark main nav li:hover > a {
box-shadow: -10px 0 10px -3px rgba(255, 255, 255, 0.15);
}
.dark main nav li li::before {
background-color: #32494f
}
.dark #autonav {
background: #36383a;
}
.dark #pagenav a:hover {
background: #18262f;
}
.dark code.cmd {
background: black;
}

View file

@ -0,0 +1,73 @@
<?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 379 114" 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-linecap:round;stroke-linejoin:round;">
<g transform="matrix(1,0,0,1,-35.5985,-67.948)">
<g transform="matrix(1.16548,0,0,1.10195,-124,-68.27)">
<g id="Light-Logo" serif:id="Light Logo" transform="matrix(0.858013,0,0,0.907485,-3243.42,-1469.17)">
<g id="Logo" transform="matrix(1,0,0,1,21.4759,36.7359)">
<g id="Icon">
<g>
<g transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path d="M3901.56,610.734C3893.53,610.261 3886.06,608.1 3879.2,604.877C3872.24,601.608 3866.04,597.093 3860.8,591.633C3858.71,589.457 3856.76,587.149 3854.97,584.709C3853.2,582.281 3851.57,579.733 3850.13,577.066C3845.89,569.224 3843.21,560.381 3842.89,550.868C3842.57,543.321 3843.64,536.055 3845.94,529.307C3848.37,522.203 3852.08,515.696 3856.83,510.049L3855.79,509.095C3850.39,514.54 3846.02,520.981 3842.9,528.125C3839.84,535.125 3838.03,542.781 3837.68,550.868C3837.34,561.391 3839.51,571.425 3843.79,580.306C3845.27,583.38 3847.03,586.304 3849.01,589.049C3851.01,591.806 3853.24,594.39 3855.69,596.742C3861.75,602.568 3869,607.19 3877.03,610.1C3884.66,612.867 3892.96,614.059 3901.56,613.552L3901.56,610.734Z" style="fill:rgb(0,144,221);"/>
</g>
<g transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path d="M3875.69,496.573C3879.62,494.538 3883.8,492.897 3888.2,491.786C3892.49,490.704 3896.96,490.124 3901.56,490.032C3903.82,490.13 3906.03,490.332 3908.21,490.688C3917.13,492.147 3925.19,495.814 3932.31,500.683C3936.13,503.294 3939.59,506.335 3942.81,509.619C3947.09,513.98 3950.89,518.816 3953.85,524.232C3958.2,532.197 3960.96,541.186 3961.32,550.868C3961.61,558.748 3960.46,566.345 3957.88,573.322C3956.09,578.169 3953.7,582.753 3950.66,586.838C3947.22,591.461 3942.96,595.427 3938.27,598.769C3933.66,602.055 3928.53,604.619 3923.09,606.478C3922.37,606.721 3921.6,606.805 3920.93,607.167C3920.42,607.448 3920.14,607.854 3919.69,608.224L3920.37,610.389C3920.98,610.432 3921.47,610.573 3922.07,610.474C3922.86,610.344 3923.55,609.883 3924.28,609.566C3931.99,606.216 3938.82,601.355 3944.57,595.428C3947.02,592.903 3949.25,590.174 3951.31,587.319C3953.59,584.168 3955.66,580.853 3957.43,577.348C3961.47,569.34 3964.01,560.422 3964.36,550.868C3964.74,540.511 3962.66,530.628 3958.48,521.868C3955.57,515.775 3951.72,510.163 3946.95,505.478C3943.37,501.962 3939.26,498.99 3934.84,496.562C3926.88,492.192 3917.87,489.76 3908.37,489.229C3906.12,489.104 3903.86,489.054 3901.56,489.154C3896.87,489.06 3892.3,489.519 3887.89,490.397C3883.3,491.309 3878.89,492.683 3874.71,494.525L3875.69,496.573Z" style="fill:rgb(0,144,221);"/>
</g>
</g>
<g>
<g transform="matrix(-3.37109,-0.514565,0.514565,-3.37109,4078.07,1806.88)">
<path d="M22,12C22,10.903 21.097,10 20,10C19.421,10 18.897,10.251 18.53,10.649C18.202,11.006 18,11.481 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z" style="fill:none;fill-rule:nonzero;stroke:rgb(0,144,221);stroke-width:1.05px;"/>
</g>
<g transform="matrix(-5.33921,-5.26159,-3.12106,-6.96393,4073.87,1861.55)">
<path d="M10.315,5.333C10.315,5.333 9.748,5.921 9.03,6.673C7.768,7.995 6.054,9.805 6.054,9.805L6.237,9.86C6.237,9.86 8.045,8.077 9.36,6.771C10.107,6.028 10.689,5.444 10.689,5.444L10.315,5.333Z" style="fill:rgb(0,144,221);"/>
</g>
</g>
<g id="Padlock" transform="matrix(3.11426,0,0,3.11426,3938.31,1737.25)">
<g>
<path d="M9.876,21L18.162,21C18.625,21 19,20.625 19,20.162L19,11.838C19,11.375 18.625,11 18.162,11L5.838,11C5.375,11 5,11.375 5,11.838L5,16.758" style="fill:none;stroke:rgb(34,182,56);stroke-width:1.89px;stroke-linecap:butt;stroke-linejoin:miter;"/>
<path d="M8,11L8,7C8,4.806 9.806,3 12,3C14.194,3 16,4.806 16,7L16,11" style="fill:none;fill-rule:nonzero;stroke:rgb(34,182,56);stroke-width:1.89px;"/>
</g>
</g>
<g>
<g transform="matrix(5.30977,0.697415,-0.697415,5.30977,3852.72,1727.97)">
<path d="M22,12C22,11.659 21.913,11.337 21.76,11.055C21.421,10.429 20.756,10 20,10C18.903,10 18,10.903 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z" style="fill:none;fill-rule:nonzero;stroke:rgb(0,144,221);stroke-width:0.98px;"/>
</g>
<g transform="matrix(4.93114,2.49604,1.11018,5.44847,3921.41,1726.72)">
<path d="M8.902,6.77C8.902,6.77 7.235,8.253 6.027,9.366C5.343,9.996 4.819,10.502 4.819,10.502L5.52,11.164C5.52,11.164 6.021,10.637 6.646,9.951C7.749,8.739 9.219,7.068 9.219,7.068L8.902,6.77Z" style="fill:rgb(0,144,221);"/>
</g>
</g>
</g>
<g id="Wordmark" transform="matrix(1.54159,0,0,2.8744,2710.6,709.804)">
<g id="y" transform="matrix(0.50291,0,0,0.281607,905.533,304.987)">
<path d="M192.152,286.875L202.629,268.64C187.804,270.106 183.397,265.779 180.143,263.391C176.888,261.004 174.362,257.99 172.563,254.347C170.765,250.705 169.866,246.691 169.866,242.305L169.866,208.107L183.21,208.107L183.21,242.213C183.21,245.188 183.896,247.822 185.268,250.116C186.64,252.41 188.465,254.197 190.743,255.475C193.022,256.754 195.501,257.393 198.182,257.393C200.894,257.393 203.393,256.75 205.68,255.463C207.966,254.177 209.799,252.391 211.178,250.105C212.558,247.818 213.248,245.188 213.248,242.213L213.248,208.107L226.545,208.107L226.545,242.305C226.545,246.707 225.378,258.46 218.079,268.64C215.735,271.909 207.835,286.875 207.835,286.875L192.152,286.875Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
<g id="add" transform="matrix(0.525075,0,0,0.281607,801.871,304.987)">
<g transform="matrix(116.242,0,0,116.242,161.846,267.39)">
<path d="M0.276,0.012C0.227,0.012 0.186,0 0.15,-0.024C0.115,-0.048 0.088,-0.08 0.069,-0.12C0.05,-0.161 0.04,-0.205 0.04,-0.254C0.04,-0.305 0.051,-0.35 0.072,-0.39C0.094,-0.431 0.125,-0.463 0.165,-0.487C0.205,-0.51 0.254,-0.522 0.31,-0.522C0.366,-0.522 0.413,-0.51 0.452,-0.486C0.491,-0.463 0.521,-0.431 0.542,-0.39C0.562,-0.35 0.573,-0.305 0.573,-0.256L0.573,-0L0.458,-0L0.458,-0.095L0.456,-0.095C0.446,-0.076 0.433,-0.058 0.417,-0.042C0.401,-0.026 0.381,-0.013 0.358,-0.003C0.335,0.007 0.307,0.012 0.276,0.012ZM0.307,-0.086C0.337,-0.086 0.363,-0.093 0.386,-0.108C0.408,-0.123 0.426,-0.144 0.438,-0.17C0.45,-0.195 0.456,-0.224 0.456,-0.256C0.456,-0.288 0.45,-0.317 0.438,-0.342C0.426,-0.367 0.409,-0.387 0.387,-0.402C0.365,-0.417 0.338,-0.424 0.308,-0.424C0.276,-0.424 0.249,-0.417 0.226,-0.402C0.204,-0.387 0.186,-0.366 0.174,-0.341C0.162,-0.315 0.156,-0.287 0.156,-0.255C0.156,-0.224 0.162,-0.195 0.174,-0.169C0.186,-0.144 0.203,-0.123 0.226,-0.108C0.248,-0.093 0.275,-0.086 0.307,-0.086Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,226.592,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,290.293,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
</g>
<g id="c" transform="matrix(-0.0716462,0.31304,-0.583685,-0.0384251,1489.76,-444.051)">
<path d="M2668.11,700.4C2666.79,703.699 2666.12,707.216 2666.12,710.766C2666.12,726.268 2678.71,738.854 2694.21,738.854C2709.71,738.854 2722.3,726.268 2722.3,710.766C2722.3,704.111 2719.93,697.672 2715.63,692.597L2707.63,699.378C2710.33,702.559 2711.57,706.602 2711.81,710.766C2712.2,717.38 2706.61,724.52 2697.27,726.637C2683.9,728.581 2676.61,720.482 2676.61,710.766C2676.61,708.541 2677.03,706.336 2677.85,704.269L2668.11,700.4Z" style="fill:rgb(230,230,230);"/>
</g>
</g>
</g>
<g id="R" transform="matrix(0.497016,0,0,0.497016,2390.38,823.152)">
<g transform="matrix(1,0,0,1,-0.10786,0.450801)">
<g transform="matrix(12.1247,0,0,12.1247,3862.61,1929.9)">
<path d="M0.073,-0L0.073,-0.7L0.383,-0.7C0.428,-0.7 0.469,-0.69 0.506,-0.67C0.543,-0.651 0.572,-0.623 0.594,-0.588C0.616,-0.553 0.627,-0.512 0.627,-0.465C0.627,-0.418 0.615,-0.377 0.592,-0.342C0.569,-0.306 0.539,-0.279 0.501,-0.259L0.57,-0.128C0.574,-0.12 0.579,-0.115 0.584,-0.111C0.59,-0.107 0.596,-0.106 0.605,-0.106L0.664,-0.106L0.664,-0L0.587,-0C0.56,-0 0.535,-0.007 0.514,-0.02C0.493,-0.034 0.476,-0.052 0.463,-0.075L0.381,-0.232C0.375,-0.231 0.368,-0.231 0.361,-0.231C0.354,-0.231 0.347,-0.231 0.34,-0.231L0.192,-0.231L0.192,-0L0.073,-0ZM0.192,-0.336L0.368,-0.336C0.394,-0.336 0.417,-0.341 0.438,-0.351C0.459,-0.361 0.476,-0.376 0.489,-0.396C0.501,-0.415 0.507,-0.438 0.507,-0.465C0.507,-0.492 0.501,-0.516 0.488,-0.535C0.475,-0.554 0.459,-0.569 0.438,-0.579C0.417,-0.59 0.394,-0.595 0.369,-0.595L0.192,-0.595L0.192,-0.336Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
</g>
<g transform="matrix(1,0,0,1,0.278569,0.101881)">
<circle cx="3866.43" cy="1926.14" r="8.923" style="fill:none;stroke:rgb(230,230,230);stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,73 @@
<?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 379 114" 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-linecap:round;stroke-linejoin:round;">
<g transform="matrix(1,0,0,1,-35.5985,-67.948)">
<g transform="matrix(1.16548,0,0,1.10195,-124,-68.27)">
<g id="Light-Logo" serif:id="Light Logo" transform="matrix(0.858013,0,0,0.907485,-3243.42,-1469.17)">
<g id="Logo" transform="matrix(1,0,0,1,21.4759,36.7359)">
<g id="Icon">
<g>
<g transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path d="M3901.56,610.734C3893.53,610.261 3886.06,608.1 3879.2,604.877C3872.24,601.608 3866.04,597.093 3860.8,591.633C3858.71,589.457 3856.76,587.149 3854.97,584.709C3853.2,582.281 3851.57,579.733 3850.13,577.066C3845.89,569.224 3843.21,560.381 3842.89,550.868C3842.57,543.321 3843.64,536.055 3845.94,529.307C3848.37,522.203 3852.08,515.696 3856.83,510.049L3855.79,509.095C3850.39,514.54 3846.02,520.981 3842.9,528.125C3839.84,535.125 3838.03,542.781 3837.68,550.868C3837.34,561.391 3839.51,571.425 3843.79,580.306C3845.27,583.38 3847.03,586.304 3849.01,589.049C3851.01,591.806 3853.24,594.39 3855.69,596.742C3861.75,602.568 3869,607.19 3877.03,610.1C3884.66,612.867 3892.96,614.059 3901.56,613.552L3901.56,610.734Z" style="fill:rgb(31,136,192);"/>
</g>
<g transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path d="M3875.69,496.573C3879.62,494.538 3883.8,492.897 3888.2,491.786C3892.49,490.704 3896.96,490.124 3901.56,490.032C3903.82,490.13 3906.03,490.332 3908.21,490.688C3917.13,492.147 3925.19,495.814 3932.31,500.683C3936.13,503.294 3939.59,506.335 3942.81,509.619C3947.09,513.98 3950.89,518.816 3953.85,524.232C3958.2,532.197 3960.96,541.186 3961.32,550.868C3961.61,558.748 3960.46,566.345 3957.88,573.322C3956.09,578.169 3953.7,582.753 3950.66,586.838C3947.22,591.461 3942.96,595.427 3938.27,598.769C3933.66,602.055 3928.53,604.619 3923.09,606.478C3922.37,606.721 3921.6,606.805 3920.93,607.167C3920.42,607.448 3920.14,607.854 3919.69,608.224L3920.37,610.389C3920.98,610.432 3921.47,610.573 3922.07,610.474C3922.86,610.344 3923.55,609.883 3924.28,609.566C3931.99,606.216 3938.82,601.355 3944.57,595.428C3947.02,592.903 3949.25,590.174 3951.31,587.319C3953.59,584.168 3955.66,580.853 3957.43,577.348C3961.47,569.34 3964.01,560.422 3964.36,550.868C3964.74,540.511 3962.66,530.628 3958.48,521.868C3955.57,515.775 3951.72,510.163 3946.95,505.478C3943.37,501.962 3939.26,498.99 3934.84,496.562C3926.88,492.192 3917.87,489.76 3908.37,489.229C3906.12,489.104 3903.86,489.054 3901.56,489.154C3896.87,489.06 3892.3,489.519 3887.89,490.397C3883.3,491.309 3878.89,492.683 3874.71,494.525L3875.69,496.573Z" style="fill:rgb(31,136,192);"/>
</g>
</g>
<g>
<g transform="matrix(-3.37109,-0.514565,0.514565,-3.37109,4078.07,1806.88)">
<path d="M22,12C22,10.903 21.097,10 20,10C19.421,10 18.897,10.251 18.53,10.649C18.202,11.006 18,11.481 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z" style="fill:none;fill-rule:nonzero;stroke:rgb(31,136,192);stroke-width:1.05px;"/>
</g>
<g transform="matrix(-5.33921,-5.26159,-3.12106,-6.96393,4073.87,1861.55)">
<path d="M10.315,5.333C10.315,5.333 9.748,5.921 9.03,6.673C7.768,7.995 6.054,9.805 6.054,9.805L6.237,9.86C6.237,9.86 8.045,8.077 9.36,6.771C10.107,6.028 10.689,5.444 10.689,5.444L10.315,5.333Z" style="fill:rgb(31,136,192);"/>
</g>
</g>
<g id="Padlock" transform="matrix(3.11426,0,0,3.11426,3938.31,1737.25)">
<g>
<path d="M9.876,21L18.162,21C18.625,21 19,20.625 19,20.162L19,11.838C19,11.375 18.625,11 18.162,11L5.838,11C5.375,11 5,11.375 5,11.838L5,16.758" style="fill:none;stroke:rgb(34,182,56);stroke-width:1.89px;stroke-linecap:butt;stroke-linejoin:miter;"/>
<path d="M8,11L8,7C8,4.806 9.806,3 12,3C14.194,3 16,4.806 16,7L16,11" style="fill:none;fill-rule:nonzero;stroke:rgb(34,182,56);stroke-width:1.89px;"/>
</g>
</g>
<g>
<g transform="matrix(5.30977,0.697415,-0.697415,5.30977,3852.72,1727.97)">
<path d="M22,12C22,11.659 21.913,11.337 21.76,11.055C21.421,10.429 20.756,10 20,10C18.903,10 18,10.903 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z" style="fill:none;fill-rule:nonzero;stroke:rgb(31,136,192);stroke-width:0.98px;"/>
</g>
<g transform="matrix(4.93114,2.49604,1.11018,5.44847,3921.41,1726.72)">
<path d="M8.902,6.77C8.902,6.77 7.235,8.253 6.027,9.366C5.343,9.996 4.819,10.502 4.819,10.502L5.52,11.164C5.52,11.164 6.021,10.637 6.646,9.951C7.749,8.739 9.219,7.068 9.219,7.068L8.902,6.77Z" style="fill:rgb(31,136,192);"/>
</g>
</g>
</g>
<g id="Wordmark" transform="matrix(1.54159,0,0,2.8744,2710.6,709.804)">
<g id="y" transform="matrix(0.50291,0,0,0.281607,905.533,304.987)">
<path d="M192.152,286.875L202.629,268.64C187.804,270.106 183.397,265.779 180.143,263.391C176.888,261.004 174.362,257.99 172.563,254.347C170.765,250.705 169.866,246.691 169.866,242.305L169.866,208.107L183.21,208.107L183.21,242.213C183.21,245.188 183.896,247.822 185.268,250.116C186.64,252.41 188.465,254.197 190.743,255.475C193.022,256.754 195.501,257.393 198.182,257.393C200.894,257.393 203.393,256.75 205.68,255.463C207.966,254.177 209.799,252.391 211.178,250.105C212.558,247.818 213.248,245.188 213.248,242.213L213.248,208.107L226.545,208.107L226.545,242.305C226.545,246.707 225.378,258.46 218.079,268.64C215.735,271.909 207.835,286.875 207.835,286.875L192.152,286.875Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
<g id="add" transform="matrix(0.525075,0,0,0.281607,801.871,304.987)">
<g transform="matrix(116.242,0,0,116.242,161.846,267.39)">
<path d="M0.276,0.012C0.227,0.012 0.186,0 0.15,-0.024C0.115,-0.048 0.088,-0.08 0.069,-0.12C0.05,-0.161 0.04,-0.205 0.04,-0.254C0.04,-0.305 0.051,-0.35 0.072,-0.39C0.094,-0.431 0.125,-0.463 0.165,-0.487C0.205,-0.51 0.254,-0.522 0.31,-0.522C0.366,-0.522 0.413,-0.51 0.452,-0.486C0.491,-0.463 0.521,-0.431 0.542,-0.39C0.562,-0.35 0.573,-0.305 0.573,-0.256L0.573,-0L0.458,-0L0.458,-0.095L0.456,-0.095C0.446,-0.076 0.433,-0.058 0.417,-0.042C0.401,-0.026 0.381,-0.013 0.358,-0.003C0.335,0.007 0.307,0.012 0.276,0.012ZM0.307,-0.086C0.337,-0.086 0.363,-0.093 0.386,-0.108C0.408,-0.123 0.426,-0.144 0.438,-0.17C0.45,-0.195 0.456,-0.224 0.456,-0.256C0.456,-0.288 0.45,-0.317 0.438,-0.342C0.426,-0.367 0.409,-0.387 0.387,-0.402C0.365,-0.417 0.338,-0.424 0.308,-0.424C0.276,-0.424 0.249,-0.417 0.226,-0.402C0.204,-0.387 0.186,-0.366 0.174,-0.341C0.162,-0.315 0.156,-0.287 0.156,-0.255C0.156,-0.224 0.162,-0.195 0.174,-0.169C0.186,-0.144 0.203,-0.123 0.226,-0.108C0.248,-0.093 0.275,-0.086 0.307,-0.086Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,226.592,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,290.293,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
</g>
<g id="c" transform="matrix(-0.0716462,0.31304,-0.583685,-0.0384251,1489.76,-444.051)">
<path d="M2668.11,700.4C2666.79,703.699 2666.12,707.216 2666.12,710.766C2666.12,726.268 2678.71,738.854 2694.21,738.854C2709.71,738.854 2722.3,726.268 2722.3,710.766C2722.3,704.111 2719.93,697.672 2715.63,692.597L2707.63,699.378C2710.33,702.559 2711.57,706.602 2711.81,710.766C2712.2,717.38 2706.61,724.52 2697.27,726.637C2683.9,728.581 2676.61,720.482 2676.61,710.766C2676.61,708.541 2677.03,706.336 2677.85,704.269L2668.11,700.4Z" style="fill:rgb(46,46,46);"/>
</g>
</g>
</g>
<g id="R" transform="matrix(0.497016,0,0,0.497016,2390.38,823.152)">
<g transform="matrix(1,0,0,1,-0.10786,0.450801)">
<g transform="matrix(12.1247,0,0,12.1247,3862.61,1929.9)">
<path d="M0.073,-0L0.073,-0.7L0.383,-0.7C0.428,-0.7 0.469,-0.69 0.506,-0.67C0.543,-0.651 0.572,-0.623 0.594,-0.588C0.616,-0.553 0.627,-0.512 0.627,-0.465C0.627,-0.418 0.615,-0.377 0.592,-0.342C0.569,-0.306 0.539,-0.279 0.501,-0.259L0.57,-0.128C0.574,-0.12 0.579,-0.115 0.584,-0.111C0.59,-0.107 0.596,-0.106 0.605,-0.106L0.664,-0.106L0.664,-0L0.587,-0C0.56,-0 0.535,-0.007 0.514,-0.02C0.493,-0.034 0.476,-0.052 0.463,-0.075L0.381,-0.232C0.375,-0.231 0.368,-0.231 0.361,-0.231C0.354,-0.231 0.347,-0.231 0.34,-0.231L0.192,-0.231L0.192,-0L0.073,-0ZM0.192,-0.336L0.368,-0.336C0.394,-0.336 0.417,-0.341 0.438,-0.351C0.459,-0.361 0.476,-0.376 0.489,-0.396C0.501,-0.415 0.507,-0.438 0.507,-0.465C0.507,-0.492 0.501,-0.516 0.488,-0.535C0.475,-0.554 0.459,-0.569 0.438,-0.579C0.417,-0.59 0.394,-0.595 0.369,-0.595L0.192,-0.595L0.192,-0.336Z" style="fill:rgb(46,46,46);fill-rule:nonzero;"/>
</g>
</g>
<g transform="matrix(1,0,0,1,0.278569,0.101881)">
<circle cx="3866.43" cy="1926.14" r="8.923" style="fill:none;stroke:rgb(46,46,46);stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1,73 +0,0 @@
<?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 100 27" 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-linecap:round;stroke-linejoin:round;">
<g transform="matrix(1,0,0,1,-3639.07,-3116.43)">
<g transform="matrix(0.875155,0,0,2.93093,3481.84,3067.03)">
<g transform="matrix(0.297956,0,0,0.0889674,-994.219,-139.295)">
<g id="Logo" transform="matrix(1,0,0,1,21.4759,36.7359)">
<g id="Icon">
<g>
<g transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path d="M3901.56,610.734L3901.56,613.552C3892.96,614.059 3884.66,612.867 3877.03,610.1C3869,607.19 3861.75,602.568 3855.69,596.742C3853.24,594.39 3851.01,591.806 3849.01,589.049C3847.03,586.304 3845.27,583.38 3843.79,580.306C3839.51,571.425 3837.34,561.391 3837.68,550.868C3838.03,542.781 3839.84,535.125 3842.9,528.125C3846.02,520.981 3850.39,514.54 3855.79,509.095L3856.83,510.049C3852.08,515.696 3848.37,522.203 3845.94,529.307C3843.64,536.055 3842.57,543.321 3842.89,550.868C3843.21,560.381 3845.89,569.224 3850.13,577.066C3851.57,579.733 3853.2,582.281 3854.97,584.709C3856.76,587.149 3858.71,589.457 3860.8,591.633C3866.04,597.093 3872.24,601.608 3879.2,604.877C3886.06,608.1 3893.53,610.261 3901.56,610.734Z" style="fill:rgb(0,144,221);"/>
</g>
<g transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path d="M3875.69,496.573L3874.71,494.525C3878.89,492.683 3883.3,491.309 3887.89,490.397C3892.3,489.519 3896.87,489.06 3901.56,489.154C3903.86,489.054 3906.12,489.104 3908.37,489.229C3917.87,489.76 3926.88,492.192 3934.84,496.562C3939.26,498.99 3943.37,501.962 3946.95,505.478C3951.72,510.163 3955.57,515.775 3958.48,521.868C3962.66,530.628 3964.74,540.511 3964.36,550.868C3964.01,560.422 3961.47,569.34 3957.43,577.348C3955.66,580.853 3953.59,584.168 3951.31,587.319C3949.25,590.174 3947.02,592.903 3944.57,595.428C3938.83,601.355 3931.99,606.216 3924.28,609.566C3923.55,609.883 3922.86,610.344 3922.07,610.474C3921.47,610.573 3920.98,610.432 3920.37,610.389L3919.69,608.224C3920.14,607.854 3920.42,607.448 3920.93,607.167C3921.6,606.805 3922.37,606.721 3923.09,606.478C3928.53,604.619 3933.66,602.055 3938.27,598.768C3942.96,595.427 3947.22,591.461 3950.66,586.838C3953.7,582.753 3956.09,578.169 3957.88,573.322C3960.46,566.345 3961.61,558.748 3961.32,550.868C3960.96,541.186 3958.2,532.197 3953.85,524.232C3950.89,518.816 3947.09,513.98 3942.81,509.619C3939.59,506.335 3936.13,503.294 3932.31,500.683C3925.19,495.814 3917.13,492.147 3908.21,490.688C3906.03,490.332 3903.82,490.13 3901.56,490.032C3896.96,490.124 3892.49,490.704 3888.2,491.786C3883.8,492.897 3879.62,494.538 3875.69,496.573Z" style="fill:rgb(0,144,221);"/>
</g>
</g>
<g>
<g transform="matrix(-3.37109,-0.514565,0.514565,-3.37109,4078.07,1806.88)">
<path d="M22,12C22,10.903 21.097,10 20,10C19.421,10 18.897,10.251 18.53,10.649C18.202,11.006 18,11.481 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z" style="fill:none;fill-rule:nonzero;stroke:rgb(0,144,221);stroke-width:1.05px;"/>
</g>
<g transform="matrix(-5.33921,-5.26159,-3.12106,-6.96393,4073.87,1861.55)">
<path d="M10.773,4.925L10.675,5.457C10.675,5.457 10.615,5.518 10.557,5.577C10.343,5.791 9.894,6.24 9.36,6.771C8.045,8.077 6.237,9.86 6.237,9.86L6.054,9.805C6.054,9.805 7.768,7.995 9.03,6.673C9.543,6.135 9.978,5.682 10.186,5.467C10.542,5.096 10.773,4.925 10.773,4.925Z" style="fill:rgb(0,144,221);"/>
</g>
</g>
<g transform="matrix(3.11426,0,0,3.11426,3938.31,1737.25)">
<g>
<path d="M9.876,21L18.162,21C18.625,21 19,20.625 19,20.162L19,11.838C19,11.375 18.625,11 18.162,11L5.838,11C5.375,11 5,11.375 5,11.838L5,16.758" style="fill:none;stroke:rgb(35,194,56);stroke-width:1.89px;stroke-linecap:butt;stroke-linejoin:miter;"/>
<path d="M8,11L8,7C8,4.806 9.806,3 12,3C14.194,3 16,4.806 16,7L16,11" style="fill:none;fill-rule:nonzero;stroke:rgb(35,194,56);stroke-width:1.89px;"/>
</g>
</g>
<g>
<g transform="matrix(5.30977,0.697415,-0.697415,5.30977,3852.72,1727.97)">
<path d="M22,12C22,11.659 21.913,11.337 21.76,11.055C21.421,10.429 20.756,10 20,10C18.903,10 18,10.903 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z" style="fill:none;fill-rule:nonzero;stroke:rgb(0,144,221);stroke-width:0.98px;"/>
</g>
<g transform="matrix(4.93114,2.49604,1.11018,5.44847,3921.41,1726.72)">
<path d="M8.902,6.77L9.219,7.068C9.219,7.068 7.749,8.739 6.646,9.951C6.021,10.637 5.52,11.164 5.52,11.164L4.819,10.502C4.819,10.502 5.343,9.996 6.027,9.366C7.235,8.253 8.902,6.77 8.902,6.77Z" style="fill:rgb(0,144,221);"/>
</g>
</g>
</g>
<g id="Wordmark" transform="matrix(1.54159,0,0,2.8744,2710.6,709.804)">
<g id="y" transform="matrix(0.50291,0,0,0.281607,905.533,304.987)">
<path d="M192.152,286.875L202.629,268.64C187.804,270.106 183.397,265.779 180.143,263.391C176.888,261.004 174.362,257.99 172.563,254.347C170.765,250.705 169.866,246.691 169.866,242.305L169.866,208.107L183.21,208.107L183.21,242.213C183.21,245.188 183.896,247.822 185.268,250.116C186.64,252.41 188.465,254.197 190.743,255.475C193.022,256.754 195.501,257.393 198.182,257.393C200.894,257.393 203.393,256.75 205.68,255.463C207.966,254.177 209.799,252.391 211.178,250.105C212.558,247.818 213.248,245.188 213.248,242.213L213.248,208.107L226.545,208.107L226.545,242.305C226.545,246.707 225.378,258.46 218.079,268.64C215.735,271.909 207.835,286.875 207.835,286.875L192.152,286.875Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
<g id="add" transform="matrix(0.525075,0,0,0.281607,801.871,304.987)">
<g transform="matrix(116.242,0,0,116.242,161.846,267.39)">
<path d="M0.276,0.012C0.227,0.012 0.185,-0 0.15,-0.024C0.115,-0.048 0.087,-0.08 0.069,-0.121C0.05,-0.161 0.04,-0.205 0.04,-0.254C0.04,-0.305 0.051,-0.35 0.073,-0.391C0.094,-0.431 0.125,-0.463 0.166,-0.487C0.206,-0.51 0.254,-0.522 0.31,-0.522C0.365,-0.522 0.412,-0.51 0.452,-0.487C0.491,-0.463 0.521,-0.431 0.542,-0.391C0.563,-0.35 0.573,-0.305 0.573,-0.256L0.573,-0L0.458,-0L0.458,-0.095L0.456,-0.095C0.446,-0.076 0.433,-0.059 0.417,-0.043C0.401,-0.026 0.381,-0.013 0.358,-0.003C0.335,0.007 0.307,0.012 0.276,0.012ZM0.307,-0.086C0.337,-0.086 0.363,-0.094 0.386,-0.109C0.408,-0.124 0.425,-0.144 0.438,-0.17C0.45,-0.195 0.456,-0.224 0.456,-0.256C0.456,-0.288 0.45,-0.317 0.438,-0.342C0.426,-0.367 0.409,-0.387 0.387,-0.402C0.365,-0.417 0.339,-0.424 0.308,-0.424C0.276,-0.424 0.249,-0.417 0.226,-0.402C0.203,-0.387 0.186,-0.366 0.174,-0.341C0.162,-0.316 0.156,-0.287 0.156,-0.255C0.156,-0.224 0.162,-0.195 0.174,-0.17C0.186,-0.144 0.203,-0.124 0.226,-0.109C0.248,-0.094 0.275,-0.086 0.307,-0.086Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,224.849,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.005 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.089 0.071,-0.118 0.059,-0.152C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.071,-0.399C0.093,-0.438 0.122,-0.468 0.159,-0.49C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.334,-0.518 0.355,-0.511C0.376,-0.504 0.396,-0.493 0.413,-0.48C0.43,-0.467 0.444,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.157 0.538,-0.116C0.515,-0.075 0.484,-0.043 0.445,-0.021C0.405,0.001 0.359,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.108C0.406,-0.122 0.423,-0.142 0.436,-0.167C0.449,-0.192 0.455,-0.222 0.455,-0.255C0.455,-0.288 0.449,-0.318 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.384,-0.403C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.205,-0.387 0.188,-0.367 0.175,-0.342C0.162,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.162,-0.192 0.175,-0.167C0.188,-0.142 0.205,-0.122 0.229,-0.108C0.252,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,287.154,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.005 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.089 0.071,-0.118 0.059,-0.152C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.071,-0.399C0.093,-0.438 0.122,-0.468 0.159,-0.49C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.334,-0.518 0.355,-0.511C0.376,-0.504 0.396,-0.493 0.413,-0.48C0.43,-0.467 0.444,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.157 0.538,-0.116C0.515,-0.075 0.484,-0.043 0.445,-0.021C0.405,0.001 0.359,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.108C0.406,-0.122 0.423,-0.142 0.436,-0.167C0.449,-0.192 0.455,-0.222 0.455,-0.255C0.455,-0.288 0.449,-0.318 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.384,-0.403C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.205,-0.387 0.188,-0.367 0.175,-0.342C0.162,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.162,-0.192 0.175,-0.167C0.188,-0.142 0.205,-0.122 0.229,-0.108C0.252,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
</g>
<g id="c" transform="matrix(-0.0716462,0.31304,-0.583685,-0.0384251,1489.76,-444.051)">
<path d="M2668.11,700.4C2666.79,703.699 2666.12,707.216 2666.12,710.766C2666.12,726.268 2678.71,738.854 2694.21,738.854C2709.71,738.854 2722.3,726.268 2722.3,710.766C2722.3,704.111 2719.93,697.672 2715.63,692.597L2707.63,699.378C2710.33,702.559 2711.57,706.602 2711.81,710.766C2712.2,717.38 2706.61,724.52 2697.27,726.637C2683.9,728.581 2676.61,720.482 2676.61,710.766C2676.61,708.541 2677.03,706.336 2677.85,704.269L2668.11,700.4Z" style="fill:rgb(230,230,230);"/>
</g>
</g>
</g>
<g id="R" transform="matrix(0.670012,0,0,0.670012,1723.64,487.612)">
<g transform="matrix(1,0,0,1,-0.10786,0.450801)">
<g transform="matrix(12.1247,0,0,12.1247,3862.61,1929.9)">
<path d="M0.079,-0L0.079,-0.716L0.396,-0.716C0.46,-0.716 0.508,-0.709 0.542,-0.697C0.575,-0.684 0.601,-0.661 0.621,-0.628C0.641,-0.596 0.651,-0.56 0.651,-0.521C0.651,-0.47 0.634,-0.427 0.602,-0.392C0.569,-0.357 0.518,-0.335 0.449,-0.326C0.474,-0.314 0.493,-0.302 0.506,-0.29C0.534,-0.265 0.56,-0.233 0.585,-0.195L0.709,-0L0.59,-0L0.496,-0.149C0.468,-0.192 0.445,-0.225 0.427,-0.248C0.409,-0.27 0.393,-0.286 0.379,-0.295C0.365,-0.305 0.351,-0.311 0.336,-0.314C0.325,-0.317 0.308,-0.318 0.283,-0.318L0.173,-0.318L0.173,-0L0.079,-0ZM0.173,-0.4L0.377,-0.4C0.42,-0.4 0.454,-0.404 0.479,-0.413C0.503,-0.422 0.521,-0.437 0.534,-0.456C0.547,-0.476 0.553,-0.497 0.553,-0.521C0.553,-0.554 0.541,-0.582 0.516,-0.604C0.492,-0.626 0.453,-0.637 0.4,-0.637L0.173,-0.637L0.173,-0.4Z" style="fill:rgb(230,230,230);fill-rule:nonzero;"/>
</g>
</g>
<g transform="matrix(1,0,0,1,0.278569,0.101881)">
<circle cx="3866.43" cy="1926.14" r="8.923" style="fill:none;stroke:rgb(230,230,230);stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;"/>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,160 @@
// AJQuery: https://github.com/coolaj86/ajquery.js (modified slightly by me)
function $(sel, el) { return ((typeof el === 'string' ? $(el) : el) || document).querySelector(sel); }
function $$(sel, el) { return (el || document).querySelectorAll(sel); }
function ready(fn) {
if (document.readyState !== 'loading') {
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}
function on(eventName, elemSelector, handler, capture) {
let events = [eventName];
if (eventName.indexOf(',') >= 0) {
events = eventName.split(',');
}
events.forEach(eventName => {
// from youmightnotneedjquery.com
document.addEventListener(eventName.trim(), function (e) {
// loop parent nodes from the target to the delegation node
for (let target = e.target; target && target != this; target = target.parentNode) {
if (NodeList.prototype.isPrototypeOf(elemSelector)) {
for (el of elemSelector) {
if (el == target) {
handler.call(target, e);
return;
}
}
} else if (!elemSelector || target.matches(elemSelector)) {
handler.call(target, e);
return;
}
}
}, capture); // I find capture=true helpful when using :not() selectors to exclude one elem of the node tree
});
}
// cloneTemplate does a deep clone of the <template> tag selected by tplSelector.
function cloneTemplate(tplSelector) {
// Ohhhhhh wow, we need to use firstElementChild when cloning the content of a template tag (!!!!):
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#avoiding_documentfragment_pitfall
// I spent way too long on this.
const elem = $(tplSelector);
if (!elem) return;
return elem.content.firstElementChild.cloneNode(true);
// return document.importNode(elem.content, true);
}
ready(function() {
// on page load, immediately set the configured theme
setTheme(getTheme());
const autonav = $('#autonav');
// when a left-side-nav-link is hovered, show the in-page nav in a popout to the side
on('mouseover', 'main nav li a:not(#autonav a)', async e => {
const response = await fetch("/temporary-markdown-proxy"+e.target.getAttribute('href'));
const markdown = await response.text();
const tokens = marked.lexer(markdown);
autonav.replaceChildren();
let seenH1 = false;
for (const tkn of tokens) {
if (tkn.type != "heading") continue;
if (tkn.depth == 1) {
seenH1 = true;
}
if (!seenH1 || tkn.depth != 2) continue;
// this includes HTML entities like &lt; (i.e. not user-facing text), but
// that's how the server-side markdown renderer does it too ¯\_(ツ)_/¯
const anchor = anchorID(tkn.text);
const a = document.createElement('a');
a.classList.add('autonav-link');
a.innerHTML = marked.parseInline(tkn.text);
a.href = `${e.target.href}#${anchor}`;
autonav.append(a);
}
if ($('#autonav *')) {
const sections = document.createElement('div')
sections.classList.add('heading');
sections.innerText = 'Sections';
autonav.prepend(sections);
e.target.closest('li').append(autonav);
} else {
// no links, so remove it from nav so as not to display an empty box
$('body').append(autonav);
}
});
const spacingMS = 50;
let delay = spacingMS;
$$('main article h2').forEach(elem => {
const a = document.createElement('a');
a.innerText = elem.innerText;
a.href = `#${elem.id}`;
setTimeout(function() {
$('#pagenav').append(a);
}, delay);
delay += spacingMS;
});
});
function anchorID(text) {
return text.trim().toLowerCase().replace(/\s/g, '-').replace(/[^\w-]/g, '');
}
// when the system theme changes, apply that to our site if system theme is configured
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {
if (getTheme() == "system") {
applyTheme(matches ? "dark" : "light");
}
});
// getTheme returns the configured theme.
function getTheme() {
return localStorage.getItem("theme") || "system";
}
// setTheme changes the configured theme to light, dark, or system and applies it.
function setTheme(theme) {
localStorage.setItem("theme", theme);
$('#current-theme').innerText = theme;
if (theme == "system") {
theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? "dark" : "light";
}
applyTheme(theme);
}
// applyTheme simply adds or removes the 'dark' class to the HTML.
function applyTheme(lightOrDark) {
if (lightOrDark == "dark") {
$('html').classList.add('dark');
$('#logo').src = '/resources/images/logo-dark.svg';
} else {
$('html').classList.remove('dark');
$('#logo').src = '/resources/images/logo-light.svg';
}
}
// nextTheme switches to the next theme in the rotation.
function nextTheme() {
let theme = getTheme();
if (theme == "system") {
theme = "light";
} else if (theme == "light") {
theme = "dark";
} else if (theme == "dark") {
theme = "system";
}
setTheme(theme);
}

23
new/resources/js/docs.js Normal file
View file

@ -0,0 +1,23 @@
ready(function() {
// highlight current page in left nav
let currentPageLink = $('main nav a[href="'+window.location.pathname+'"]');
if (window.location.pathname.startsWith("/docs/json/")) {
// as a special case, highlight the JSON structure link anywhere within it
currentPageLink = $('main nav a[href="/docs/json/"]');
}
if (window.location.pathname.startsWith("/docs/modules/")) {
// as another special case, highlight the modules link anywhere within it
currentPageLink = $('main nav a[href="/docs/modules/"]');
}
currentPageLink?.classList?.add('current');
// add anchor links, inspired by https://github.com/bryanbraun/anchorjs
$$('article > h2[id], article > h3[id], article > h4[id], article > h5[id], article > h6[id]').forEach(function(elem) {
const anchor = document.createElement('a');
anchor.href = `#${elem.id}`;
anchor.classList.add('anchor-link');
anchor.title = "Link to this section";
anchor.innerText = '🔗';
elem.append(anchor);
});
});

6
new/resources/js/vendor/marked.min.js vendored Normal file

File diff suppressed because one or more lines are too long