Move new site into src folder

This commit is contained in:
Matthew Holt 2023-12-07 19:11:10 -07:00 committed by Francis Lavoie
parent c0d7ca3f22
commit b4c4b113f6
No known key found for this signature in database
GPG key ID: 0F66EE1687682239
199 changed files with 4768 additions and 9104 deletions

View file

@ -4,7 +4,14 @@
localhost {
file_server
templates
templates {
extensions {
hitCounter {
style bright_green
pad_digits 6
}
}
}
try_files {path}.html {path}

File diff suppressed because it is too large Load diff

View file

@ -1,24 +0,0 @@
<div class="ex-custom-ca">
```caddy
{
pki {
ca corporate {
name "Our Corporation Authority"
}
}
}
internal.example.com {
# ACME endpoint: /acme/corporate/directory
acme_server {
ca corporate
}
}
```
</div>
<script>
window.$_('.ex-custom-ca code').classList.add('light');
</script>

View file

@ -1,63 +0,0 @@
<script>
ready(() => {
let startElement, endElement;
startElement = findWithContent('.ex-fs pre.chroma code span.line', 'file_server /downloads/* {');
endElement = findNextText(startElement, '}');
wrapRangeWithSpan(startElement, endElement, 'rollover-compress rollover-blue');
startElement = findWithContent('.ex-fs pre.chroma code span', 'encode');
endElement = findNextText(startElement, 'gzip');
wrapRangeWithSpan(startElement, endElement, 'rollover-compress rollover-blue');
startElement = findWithContent('.ex-fs pre.chroma code span.line', 'file_server /database/* {');
endElement = findNextText(startElement, '}');
wrapRangeWithSpan(startElement, endElement, 'rollover-vfs rollover-green');
startElement = findWithContent('.ex-fs pre.chroma code span.line', 'file_server /embedded/* {');
endElement = findNextText(startElement, '}');
wrapRangeWithSpan(startElement, endElement, 'rollover-vfs rollover-green');
startElement = findWithContent('.ex-fs pre.chroma code span', '# (Range/Etag/etc. all work without extra config)');
wrapRangeWithSpan(startElement, startElement, 'rollover-range rollover-yellow');
startElement = findWithContent('.ex-fs pre.chroma code span', 'file_server');
endElement = findNextText(startElement, 'browse');
wrapRangeWithSpan(startElement, endElement, 'rollover-browse rollover-purple');
window.$_('.ex-fs code').classList.add('light');
});
</script>
<div class="ex-fs">
```caddy
example.com
root * /var/www
# Serve precompressed files if present
file_server /downloads/* {
precompressed gzip zstd br
}
# Compress everything else that would benefit
encode zstd gzip
# Static site using database as file system
file_server /database/* {
fs sqlite data.sql
}
# Static site embedded within the Caddy binary
file_server /embedded/* {
fs embedded
}
# (Range/Etag/etc. all work without extra config)
# Serve static site with directory listings
file_server browse
```
</div>

View file

@ -1,22 +0,0 @@
<div class="ex-json-automate-certs">
```json
{
"apps": {
"tls": {
"certificates": {
"automate": [
"example.com",
"sub.example.com",
"example.net"
]
}
}
}
}
```
</div>
<script>
window.$_('.ex-json-automate-certs code').classList.add('light');
</script>

View file

@ -1,21 +0,0 @@
<div class="ex-local-https">
```caddy
localhost {
respond "Hello from HTTPS!"
}
192.168.1.10 {
respond "Also HTTPS!"
}
http://localhost {
respond "Plain HTTP"
}
```
</div>
<script>
window.$_('.ex-local-https code').classList.add('light');
</script>

View file

@ -1,36 +0,0 @@
<script>
ready(() => {
let startElement, endElement;
startElement = findWithContent('.ex-on-demand pre.chroma code span.line', 'on_demand_tls {');
endElement = findNextText(startElement, '}');
wrapRangeWithSpan(startElement, endElement, 'rollover-abuse rollover-purple');
startElement = findWithContent('.ex-on-demand pre.chroma code span.line', 'tls');
endElement = findNextText(startElement, '}');
wrapRangeWithSpan(startElement, endElement, 'rollover-ondemand rollover-green');
window.$_('.ex-on-demand code').classList.add('light');
});
</script>
<div class="ex-on-demand">
```caddy
{
on_demand_tls {
ask http://localhost:9123/check
}
}
https:// {
tls {
on_demand
}
# reverse_proxy, etc...
}
# other sites...
```
</div>

View file

@ -1,53 +0,0 @@
<script>
ready(() => {
let startElement, endElement;
startElement = findWithContent('.ex-proxy pre.chroma code span', 'php_fastcgi');
endElement = findNextText(startElement, '9000');
wrapRangeWithSpan(startElement, endElement, 'rollover-php rollover-green');
startElement = findWithContent('.ex-proxy pre.chroma code span.line', 'reverse_proxy /api/* {');
endElement = findNextText(startElement, '}');
wrapRangeWithSpan(startElement, endElement, 'rollover-dynamic-backends rollover-purple');
startElement = findWithContent('.ex-proxy pre.chroma code span.line', 'reverse_proxy /service/* {');
endElement = findNextText(startElement, '}');
wrapRangeWithSpan(startElement, endElement, 'rollover-ha rollover-blue');
window.$_('.ex-proxy code').classList.add('dark');
});
</script>
<div class="ex-proxy">
```caddy
example.com
# Serve PHP sites
handle /blog/* {
root * /var/www/wordpress
php_fastcgi localhost:9000
file_server
}
# Proxy an autoscaling API with dynamic backends
reverse_proxy /api/* {
dynamic srv _api._tcp.example.com
}
# Proxy a compute-heavy distributed service
# with load balancing and health checks
reverse_proxy /service/* {
to 10.0.1.1:80 10.0.1.2:80 10.0.1.3:80
lb_policy least_conn
lb_try_duration 10s
fail_duration 5s
}
# Proxy everything else to an HTTPS upstream
reverse_proxy https://service.example.com {
header_up Host {upstream_hostport}
}
```
</div>

View file

@ -1,23 +0,0 @@
<div class="ex-website-caddyfile">
```caddy
caddyserver.com
root * src
file_server
templates # markdown & syntax highlighting!
encode zstd gzip
redir /docs/json /docs/json/
rewrite /docs/json/* /docs/json/index.html
rewrite /docs/* /docs/index.html
reverse_proxy /api/* localhost:9002
```
</div>
<script>
window.$_('.ex-website-caddyfile code').classList.add('light');
</script>

View file

@ -1,49 +0,0 @@
<footer>
<div class="wrapper">
<div class="logo-area">
<img src="/resources/images/logo-dark.svg" class="logo" alt="Caddy web server">
<p>
A free <a href="https://github.com/caddyserver/caddy">open source</a> project
that relies on <a href="/sponsor">sponsors</a>.
</p>
<p>
<a href="https://usefathom.com/ref/AUKNWU">Privacy-respecting analytics</a> by Fathom
</p>
<br>
<p>
&copy; {{now | date "2006"}} ZeroSSL. All rights reserved.
</p>
</div>
<div class="link-col">
<div class="col-header">Project</div>
<a href="/features">Features</a>
<a href="/download">Download</a>
<a href="/docs">Documentation</a>
</div>
<div class="link-col">
<div class="col-header">Business services</div>
<a href="/support">Support</a>
<a href="/sponsor">Sponsorships</a>
</div>
<div class="link-col">
<div class="col-header">Community</div>
<a href="https://caddy.community">Forum</a>
<a href="https://github.com/caddyserver">GitHub</a>
<a href="https://twitter.com/caddyserver">Twitter / X</a>
<a href="https://scholar.google.com/scholar?q=caddy+web+server">Research</a>
</div>
</div>
<div class="wrapper nostalgia">
<p>Caddy supports an open Web that promotes privacy, preserves data ownership, fosters innovation, freely allows varieties of client software, and safeguards human sanctity.</p>
<div class="nostalgia-badges">
<img src="/resources/images/nostalgia/get.gif" title="Honoring early Web clients">
<img src="/resources/images/nostalgia/microsoft-ie.gif" title="Honoring early Web clients">
<img src="/resources/images/nostalgia/now_anim.gif" title="Honoring early Web clients">
<div class="w3c">
<img src="/resources/images/nostalgia/valid_html5_yellow.png" title="This site uses HTML 5">
<img src="/resources/images/nostalgia/valid_css3_blue.png" title="This site uses CSS 3">
</div>
<div title="Don't forget to sign our guestbook!">{{ maybe "hitCounter" .OriginalReq.URL.Path }}</div>
</div>
</div>
</footer>

View file

@ -1,60 +0,0 @@
{{define "cacheBust" -}}
{{- if fileExists "/.commit-hash" -}}
{{- $commitHash := (include "/.commit-hash") -}}
{{- trim (printf "?v=%v" $commitHash) -}}
{{- end -}}
{{- end}}
{{define "head"}}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- <link rel="preconnect" href="https://BH4D9OD16A-dsn.algolia.net" crossorigin /> -->
<link rel="icon" href="/resources/images/favicon.png">
<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;700;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/chroma.css">
<script src="/resources/js/lib.js"></script>
<script src="/resources/js/common.js"></script>
<!-- General metatags -->
<!-- <meta name="author" content="Caddy Web Server">
<meta name="description" content="Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go">
<meta name="theme-color" content="#5ea9a2"> -->
<!-- Open Graph tags -->
<!-- <meta property="og:type" content="website">
<meta property="og:url" content="https://caddyserver.com/">
<meta property="og:description" content="Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go">
<meta property="og:image" content="https://caddyserver.com/resources/images/caddy-open-graph.jpg"> -->
<!-- Twitter card tags additive with the og: tags -->
<!-- <meta name="twitter:card" content="summary_large_image">
<meta name="twitter:domain" value="caddyserver.com">
<meta name="twitter:description" value="Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go">
<meta name="twitter:image" content="https://caddyserver.com/resources/images/caddy-open-graph.jpg">
<meta name="twitter:url" value="https://caddyserver.com/"> -->
<!-- Algolia DocSearch -->
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@docsearch/css@3"> -->
<!-- Global site tag (gtag.js) - Google Analytics (ZeroSSL) -->
<!-- <script async src="https://www.googletagmanager.com/gtag/js?id=G-2DLB04LK4P"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-2DLB04LK4P');
</script> -->
<!-- Alpine.js to augment markdown docs -->
<script src="https://cdn.jsdelivr.net/npm/@alpinejs/persist@3.x.x/dist/cdn.min.js" defer></script>
<script src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
{{end}}

View file

@ -1,206 +0,0 @@
<header class="{{index .Args 0}}">
<div class="topbar">
<div class="wrapper">
<a href="https://zerossl.com">
A ZeroSSL Project
</a>
<a href="https://store.caddyserver.com">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-building-store" 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 d="M3 21l18 0" />
<path d="M3 7v1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1h-18l2 -4h14l2 4" />
<path d="M5 21l0 -10.15" />
<path d="M19 21l0 -10.15" />
<path d="M9 21v-4a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v4" />
</svg>
Store
</a>
<a href="https://github.com/caddyserver/caddy">
<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="/" class="logo-link">
<img src="/resources/images/logo-light.svg" class="logo" id="logo-light" alt="Caddy web server">
<img src="/resources/images/logo-dark.svg" class="logo" id="logo-dark" alt="Caddy web server">
</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>
Various ways to install Caddy on your computer or server
</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="/features">Features</a>
</li>
<li>
<a href="/account">Account</a>
</li>
<li>
<a href="/support">Support</a>
</li>
</ul>
</nav>
<div class="actions">
<a href="/download" class="button primary">Download</a>
<a href="/sponsor" class="button purple">Sponsor</a>
</div>
</div>
</header>

View file

@ -1,136 +0,0 @@
<!--
All the markdown content is hidden by default, and loaded by ID.
The HTML ID should start with qa-content- followed by the state ID.
Make sure to leave empty lines after the opening of the div and before the end,
otherwise the markdown parsing will not work.
-->
<div id="qa-content-install_dpkg">
<pre><code class="cmd"><span class="bash">sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https</span>
<span class="bash">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg</span>
<span class="bash">curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list</span>
<span class="bash">sudo apt update</span>
<span class="bash">sudo apt install caddy</span></code></pre>
</div>
<div id="qa-content-install_rpm">
<pre><code class="cmd"><span class="bash">dnf install 'dnf-command(copr)'</span>
<span class="bash">dnf copr enable @caddy/caddy</span>
<span class="bash">dnf install caddy</span></code></pre>
</div>
<div id="qa-content-install_arch">
<pre><code class="cmd"><span class="bash">pacman -Syu caddy</span></code></pre>
</div>
<div id="qa-content-install_mac">
<pre><code class="cmd bash">brew install caddy</code></pre>
</div>
<div id="qa-content-install_windows">
<p>Chocolatey:</p> <pre><code class="cmd">choco install caddy</code></pre>
<p>Scoop:</p> <pre><code class="cmd">scoop install caddy</code></pre>
</div>
<div id="qa-content-install_nix">
- Package name: [`caddy`](https://search.nixos.org/packages?channel=unstable&show=caddy&query=caddy)
- NixOS module: [`services.caddy`](https://search.nixos.org/options?channel=unstable&show=services.caddy.enable&query=services.caddy)
</div>
<div id="qa-content-install_android">
In Termux: <pre><code class="cmd">pkg install caddy</code></pre>
</div>
<div id="qa-content-install_other">
<h4>Webi</h2>
<p>Linux and macOS:</p>
<pre><code class="cmd bash">curl -sS https://webi.sh/caddy | sh</code></pre>
<p>Windows:</p>
<pre><code class="cmd">curl.exe https://webi.ms/caddy | powershell</code></pre>
<h4>Ansible</h4>
<pre><code class="cmd bash">ansible-galaxy install nvjacobo.caddy</code></pre>
</div>
<div id="qa-content-install_docker">
<pre><code class="cmd bash">docker pull caddy</code></pre>
</div>
<div id="qa-content-install_build">
Make sure to have `git` and the latest version of [Go](https://go.dev) installed.
<pre><code class="cmd"><span class="bash">git clone "https://github.com/caddyserver/caddy.git"</span>
<span class="bash">cd caddy/cmd/caddy/</span>
<span class="bash">go build</span></code></pre>
</div>
<div id="qa-content-install_with_plugins">
[`xcaddy`](https://github.com/caddyserver/xcaddy) is a command line tool that helps you build Caddy with plugins. A basic build looks like:
<pre><code class="cmd bash">xcaddy build</code></pre>
To build with plugins, use `--with`:
<pre><code class="cmd bash">xcaddy build \
--with github.com/caddyserver/nginx-adapter
--with github.com/caddyserver/ntlm-transport@v0.1.1</code></pre>
</div>
<div id="qa-content-install_binary">
1. Obtain a Caddy binary:
- [from releases on GitHub](https://github.com/caddyserver/caddy/releases) (expand "Assets")
- Refer to [Verifying Asset Signatures](/docs/signature-verification) for how to verify the asset signature
- [from our download page](/download)
- [by building from source](/docs/build) (either with `go` or `xcaddy`)
2. [Install Caddy as a system service.](/docs/running#manual-installation) This is strongly recommended, especially for production servers.
Place the binary in one of your `$PATH` (or `%PATH%` on Windows) directories so you can run `caddy` without typing the full path of the executable file. (Run `echo $PATH` to see the list of directories that qualify.)
You can upgrade static binaries by replacing them with newer versions and restarting Caddy. The [`caddy upgrade` command](/docs/command-line#caddy-upgrade) can make this easy.
</div>
<div id="qa-content-cfg_ondemand_smallscale">
On-demand TLS is designed for situations when you either don't control the domain names, or you have too many certificates to load all at once when the server starts. For every other use case, standard TLS automation is likely better suited.
</div>
<div id="qa-content-cfg_ondemand_caddyfile">
In order to prevent abuse, you must first configure an `ask` endpoint so Caddy can check whether it should get a certificate. Add this to your global options at the top:
```caddy
{
on_demand_tls {
ask http://localhost:5555/check
}
}
```
Change that endpoint to be something you've set up that will respond with HTTP 200 if the domain given in the `domain=` query parameter is allowed to have a certificate.
Then create a site block that serves all sites/hosts on the TLS port:
```caddy
https:// {
tls {
on_demand
}
}
```
This is the minimum config to enable Caddy to accept and service TLS connections for arbitrary hosts. This config doesn't invoke any handlers. Usually you'll also [`reverse_proxy`](/docs/caddyfile/directives/reverse_proxy) to your backend application.
</div>

View file

@ -1,103 +0,0 @@
{{ include "/includes/quick-assist/structure.html" }}
<script>
document.addEventListener('alpine:init', () => {
Alpine.data('quick_assist', () => ({
current: 'start',
crumbs: [],
structure: quickAssistStructure,
getQuestion() {
const data = this.structure[this.current];
return data ? (data.title ?? data.prompt) : "";
},
getContent() {
const content = document.getElementById(`qa-content-${this.current}`);
return content ? content.innerHTML : "";
},
getOptions() {
const data = this.structure[this.current];
return data ? (data.options ?? []) : [];
},
hasNext() {
return this.getOptions().some(opt => opt.next);
},
crumbTitle(crumb) {
if (crumb.title) {
return crumb.title;
}
const data = this.structure[crumb.id];
return data ? (data.title ?? data.prompt) : "";
},
goto(next, title = null) {
if (!next) return true;
// Do nothing if last crumb is the same as the next state
const count = this.crumbs.length;
if (count && this.crumbs[count - 1].id === next) return true;
// Change the page
this.current = next;
// Read backwards through the crumbs and if we find it pop everything after it
for (let i = count - 1; i >= 0; i--) {
if (this.crumbs[i].id === next) {
this.crumbs.splice(i + 1);
return false;
}
}
// Insert the crumb
this.crumbs.push({ id: next, title: title });
return false;
},
reset() {
this.current = 'start';
this.crumbs = [];
}
}));
});
</script>
<div x-data="quick_assist" class="box box-filled box-capped quick-assist">
<div class="box-cap quick-assist-history">
<a title="Click quick for slick trick (not AI)" @click="reset()">Quick Assist</a>
<template x-for="crumb in crumbs">
<a x-text="crumbTitle(crumb)" @click="goto(crumb.id)" />
</template>
</div>
<div>
<h3 class="quick-assist-question" x-text="getQuestion()"></h3>
<div class="quick-assist-content" x-html="getContent()"></div>
<div class="quick-assist-options">
<template x-for="opt in getOptions()">
<div>
<a
x-show="opt.href ?? false"
:href="opt.href"
x-text="opt.text ?? ''"
class="button reset"
/>
<a
x-show="!opt.href"
@click.prevent="goto(opt.next, opt.crumb ?? opt.text)"
x-text="opt.text ?? ''"
class="button reset"
/>
</div>
</template>
<a
x-show="!hasNext()"
@click="reset()"
class="button reset"
>
Reset
</a>
</div>
</div>
</div>
<!-- All the markdown content is hidden by default and loaded by ID -->
<div style="display: none;">
{{ markdown (include "/includes/quick-assist/content.md") }}
</div>

View file

@ -1,275 +0,0 @@
<script>
const quickAssistStructure = {
start: {
prompt: "What are you looking for?",
options: [
{
text: "How to install Caddy",
next: "install"
},
{
text: "Help configuring Caddy",
next: "configure"
},
{
text: "A solution to a problem",
next: "solution"
},
{
text: "An example for my use case",
next: "example"
}
]
},
install: {
prompt: "How do you want to install Caddy?",
options: [
{
text: "OS package manager",
next: "install_pkgmgr"
},
{
text: "Docker",
next: "install_docker"
},
{
text: "Build from source",
next: "install_build"
},
{
text: "Build with plugins",
next: "install_with_plugins"
},
{
text: "Pre-built binary",
next: "install_binary"
}
]
},
install_pkgmgr: {
prompt: "Which OS are you using?",
options: [
{
text: "Linux (Debian, Ubuntu, Raspbian)",
next: "install_dpkg"
},
{
text: "Linux (Fedora, RedHat, CentOS)",
next: "install_rpm"
},
{
text: "Linux (Arch, Manjaro, Parabola)",
next: "install_arch"
},
{
text: "macOS",
next: "install_mac"
},
{
text: "Windows",
next: "install_windows"
},
{
text: "Nix/NixOS",
next: "install_nix"
},
{
text: "Android",
next: "install_android"
},
{
text: "Other",
next: "install_other"
}
]
},
install_dpkg: {
title: "Install Caddy on Debian-based systems",
options: [
{
text: "Learn more",
href: "/docs/install#debian-ubuntu-raspbian"
}
]
},
install_rpm: {
title: "Install Caddy via RPM",
options: [
{
text: "Learn more",
href: "/docs/install#fedora-redhat-centos"
}
]
},
install_arch: {
title: "Install Caddy on Arch/Manjaro/Parabola Linux",
options: [
{
text: "Learn more",
href: "/docs/install#arch-linux-manjaro-parabola"
}
]
},
install_mac: {
title: "Install Caddy on macOS",
options: [
{
text: "Learn more",
href: "/docs/install#homebrew"
}
]
},
install_windows: {
title: "Install Caddy on Windows",
options: [
{
text: "Learn more",
href: "/docs/install#windows"
}
]
},
install_nix: {
title: "Install Caddy on Nix/Nixpkgs/NixOS",
options: [
{
text: "Learn more",
href: "/docs/install#nixnixpkgsnixos"
}
]
},
install_android: {
title: "Install Caddy on Android",
content: ``,
options: [
{
text: "Learn more",
href: "/docs/install#termux"
}
]
},
install_other: {
title: "Miscellaneous install methods",
options: [
{
text: "Learn more",
href: "/docs/install#fedora-redhat-centos"
}
]
},
install_docker: {
title: "Official Docker image",
options: [
{
text: "Learn more",
href: "/docs/install#docker"
}
]
},
install_build: {
title: "Build Caddy from source",
options: [
{
text: "Learn more",
href: "/docs/build"
}
]
},
install_with_plugins: {
title: "Build Caddy with plugins",
options: [
{
text: "Learn more",
href: "/docs/build#xcaddy"
}
]
},
install_binary: {
title: "Install Caddy binary manually",
options: [
{
text: "Learn more",
href: "/docs/build#xcaddy"
}
]
},
configure: {
prompt: "What are you trying to configure?",
options: [
{
text: "On-demand TLS",
next: "cfg_ondemand"
},
{
text: "Authentication",
next: "cfg_authentication"
},
{
text: "Load balancing",
next: "cfg_loadbalancing"
}
]
},
cfg_ondemand: {
prompt: "Do you control the (DNS records of) the domain names you're serving?",
options: [
{
text: "Yes",
crumb: "I control the domains",
next: "cfg_ondemand_havecontrol"
},
{
text: "No",
crumb: "DNS out of my control",
next: "cfg_ondemand_ok"
}
]
},
cfg_ondemand_havecontrol: {
prompt: "Do you have hundreds or thousands of your own domain names to serve?",
options: [
{
text: "Yes",
crumb: "Lots of domains",
next: "cfg_ondemand_ok"
},
{
text: "No",
crumb: "Small scale",
next: "cfg_ondemand_smallscale"
}
]
},
cfg_ondemand_smallscale: {
title: "You likely don't need on-demand TLS.",
options: [
{
text: "Learn more",
href: "/docs/automatic-https#on-demand-tls"
}
]
},
cfg_ondemand_ok: {
prompt: "Are you using the Caddyfile or JSON to configure Caddy?",
options: [
{
text: "Caddyfile",
next: "cfg_ondemand_caddyfile"
},
{
text: "JSON",
next: "cfg_ondemand_json"
}
]
},
cfg_ondemand_caddyfile: {
title: "Setting up On-Demand TLS",
options: [
{
text: "Learn more",
href: "/docs/automatic-https#on-demand-tls"
}
]
},
};
</script>

View file

@ -1,715 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Caddy - The Ultimate Server with Automatic HTTPS</title>
{{import "/includes/head.html"}}
{{template "head"}}
<link rel="stylesheet" href="/resources/css/vendor/asciinema-player-3.6.1.css{{template "cacheBust"}}">
<script src="/resources/js/vendor/asciinema-player-3.6.1.min.js{{template "cacheBust"}}"></script>
<script src="/resources/js/home.js{{template "cacheBust"}}"></script>
<link rel="stylesheet" href="/resources/css/marketing.css{{template "cacheBust"}}">
<link rel="stylesheet" href="/resources/css/home.css{{template "cacheBust"}}">
<!-- <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"> -->
</head>
<body>
<div class="hero">
{{include "/includes/header.html" "dark-header"}}
<div class="wrapper">
<div class="hero-content">
<div class="asides">
<div>
<h1>
<div class="color-dodge">
<div class="the">The</div>
Ultimate Server
</div>
<div class="subheading">
makes your sites more <b>secure</b>, more <b>reliable</b>, and more <b>scalable</b> than any other solution.
</div>
</h1>
<div class="action-buttons">
<a href="/download" class="button primary">Download</a>
<a href="/docs/" class="button cool">Docs<sh></sh></a>
<iframe src="https://ghbtns.com/github-btn.html?user=caddyserver&amp;repo=caddy&amp;type=star&amp;count=true&amp;size=large" frameborder="0" scrolling="0" width="160px" height="30px" class="github-stars"></iframe>
</div>
</div>
<div>
<div class="display right">
<div class="caption">
<div id="video-demo"></div>
Play screencast to see Caddy serve HTTPS in &lt; 1 minute.
</div>
</div>
</div>
</div>
<div class="sponsors-leaders">
<!-- <h3>Trusted, used, and sponsored by <b>leaders</b></h3> -->
<h3>Sponsored by <b>leaders</b></h3>
<!--
Images are not in any particular order except the top row is featured (higher-tier) sponsors.
Images are individually adjusted to appear roughly equally sized and weighted along their row.
-->
<div class="sponsor-logos">
<a href="https://zerossl.com" target="_blank">
<img src="/resources/images/sponsors/zerossl.svg" alt="ZeroSSL" title="ZeroSSL" height="45">
</a>
<a href="https://stripe.com" target="_blank">
<img src="/resources/images/sponsors/stripe.svg" alt="Stripe" title="Stripe" class="featured" height="45">
</a>
</div>
<div class="sponsors-divider"></div>
<div class="sponsor-logos">
<a href="https://opensource.mercedes-benz.com/" target="_blank">
<img src="/resources/images/sponsors/mercedes-benz.svg" alt="Mercedes-Benz" title="Mercedes-Benz" height="38">
</a>
<a href="https://tailscale.com" target="_blank">
<img src="/resources/images/sponsors/tailscale.svg" alt="Tailscale" title="Tailscale" height="22">
</a>
<a href="https://les-tilleuls.coop/" target="_blank">
<img src="/resources/images/sponsors/les-tilleuls-white.svg" alt="Les-Tilleuls" title="Les-Tilleuls" height="25">
</a>
<a href="https://framer.com" target="_blank">
<img src="/resources/images/sponsors/framer.svg" alt="Framer" title="Framer" height="32">
</a>
<a href="https://sourcegraph.com/" target="_blank">
<img src="/resources/images/sponsors/sourcegraph.svg" alt="Sourcegraph" title="Sourcegraph" height="30">
</a>
<a href="https://fusionauth.com" target="_blank">
<img src="/resources/images/sponsors/fusionauth.svg" alt="FusionAuth" title="FusionAuth" height="35">
</a>
<a href="https://www.aryeo.com" target="_blank">
<img src="/resources/images/sponsors/aryeo.svg" alt="Aryeo" title="Aryeo" height="26">
</a>
<a href="https://checklyhq.com" target="_blank">
<img src="/resources/images/sponsors/checkly.svg" alt="Checkly" title="Checkly" height="24" style="position: relative; top: 3px;">
</a>
<a href="https://appcove.com/" target="_blank">
<img src="/resources/images/sponsors/appcove.png" alt="AppCove" title="AppCove" height="24">
</a>
<a href="https://www.transistor.fm" target="_blank">
<img src="/resources/images/sponsors/transistorfm.svg" alt="Transistor" title="Transistor" height="32">
</a>
<a href="https://photostructure.com/" target="_blank">
<img src="/resources/images/sponsors/photostructure.svg" alt="PhotoStructure" title="PhotoStructure" height="30">
</a>
<a href="https://gitea.com/" target="_blank">
<img src="/resources/images/sponsors/gitea.svg" alt="Gitea" title="Gitea" height="25">
</a>
<a href="https://aniftyco.com/" target="_blank">
<img src="/resources/images/sponsors/niftyco.svg" alt="Niftyco" title="Niftyco" height="25">
</a>
<a href="https://iqm.com/" target="_blank">
<img src="/resources/images/sponsors/iqm.svg" alt="IQM" title="IQM" height="24">
</a>
<a href="https://approximated.app/" target="_blank">
<img src="/resources/images/sponsors/approximated.svg" alt="Approximated" title="Approximated" height="20">
</a>
<a href="/sponsor" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-new-section" 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 12l6 0"></path>
<path d="M12 9l0 6"></path>
<path d="M4 6v-1a1 1 0 0 1 1 -1h1m5 0h2m5 0h1a1 1 0 0 1 1 1v1m0 5v2m0 5v1a1 1 0 0 1 -1 1h-1m-5 0h-2m-5 0h-1a1 1 0 0 1 -1 -1v-1m0 -5v-2m0 -5"></path>
</svg>
Join the ranks
</a>
</div>
<!-- <a href="#">Why a sponsorship</a> -->
<!-- <a href="/sponsor" class="button purple">Sponsorship info</a> -->
</div>
</div>
</div>
</div>
<main>
<div class="wavy-top">
<div class="bgtext">
Every<br>
<span class="site-on">site on</span><br>
HTTPS
</div>
<h2 id="every-site-https">
<b>By default, </b>Caddy <b>automatically obtains</b> and <b>renews</b> TLS certificates for <b>all your sites.</b>
</h2>
<div class="wrapper feature cols">
<div class="col">
<h3 class="purple">HTTPS/TLS for custom domains</h3>
<p>
The secret sauce of almost every white-label SaaS is Caddy's original On-Demand TLS feature. Grow your SaaS business by orders of magnitude with ease!
</p>
</div>
<div class="col">
<h3 class="green">Dynamically provision certificates</h3>
<p>
With On-Demand TLS, only Caddy obtains, renews, and maintains certificates on-the-fly during TLS handshakes. Perfect for customer-owned domains.
</p>
</div>
<div class="col">
<h3 class="blue">Massively scale your TLS</h3>
<p>
Other web servers and scripted certificate tools fall over with hundreds of thousands of sites or thousands of instances. Caddy is designed to manage certificates reliably at this scale.
</p>
</div>
</div>
<div class="wrapper">
<div class="sponsorship-primer">
<h3>sponsored by <b>users like you</b></h3>
<p>
Caddy is free software and relies on sponsorships to survive. Not just donations: sponsorships ensure ongoing development and provide your business with tangible benefits.
</p>
<a href="/sponsor" class="button purple">See sponsorships</a>
</div>
</div>
</div>
<section class="light">
<div class="section-upset">
<div class="wrapper">
<h2 id="most-advanced">The <b>most advanced</b> HTTPS server <b>in the world</b></h2>
</div>
</div>
<div class="wrapper">
<div class="feature cols">
<div class="col">
<h3 class="green">All you need for TLS and PKI 🔐</h3>
<p>
Caddy securely serves all sites with TLS by default. It can also manage your internal PKI for you across a fleet of servers and clients.
</p>
</div>
<div class="col">
<h3 class="purple">On-line config API ⚡️</h3>
<p>
Caddy's native configuration is a JSON document that you can export and manipulate with a RESTful config API.
</p>
</div>
<div class="col">
<h3 class="blue">PCI, HIPAA, and NIST compliant ✅</h3>
<p>
Caddy's TLS defaults are secure and pass PCI, HIPAA, and NIST compliance requirements. Yes, defaults: no hassle required.
</p>
</div>
<div class="col">
<h3 class="purple">HTTPS for localhost 🏠</h3>
<p>
We mean it when we say Caddy serves every site on HTTPS. Even localhost and internal IPs are served with TLS using the intermediate of a fully-automated, self-managed CA that is automatically installed into most local trust stores.
</p>
</div>
<div class="col">
<h3 class="blue">Cluster coordination 🌐</h3>
<p>
Simply configure multiple Caddy instances with the same storage, and they will automatically coordinate certificate management as a fleet and share resources such as keys and OCSP staples!
</p>
</div>
<div class="col">
<h3 class="green">Fewer moving parts ⚙️</h3>
<p>
Simplify your infrastructure! Caddy saves money, increases developer productivity, and reduces problems in production.
</p>
</div>
</div>
<div class="demobox">
<h2 id="on-demand-demo" lang="de">Experience it</h2>
<p>
<b>Discover Caddy's automagic HTTPS features with our hosted demo.</b>
</p>
<p>
Point DNS records for any subdomain named <b><code>caddydemo</code></b> to either:
</p>
<p class="demo-ips">
<code>
<span class="record-type">CNAME</span>
<span class="demo-ip">demo.caddyserver.com</span>
</code>
</p>
<p class="or">
or:
</p>
<p class="demo-ips">
<code>
<span class="record-type">A</span>
<span class="demo-ip">138.68.4.62</span>
</code>
<code>
<span class="record-type">AAAA</span>
<span class="demo-ip">2604:a880:2:d0::9dd:9001</span>
</code>
</p>
<p>
Then <b>visit it</b> in your browser.
</p>
<p>
You'll notice how Caddy <b>provisions a certificate</b> for your domain <b>automatically.</b>
</p>
<div class="demo-help">
<p>
<b>Not working?</b> Make sure to use a direct subdomain of a registered domain, not a "sub-subdomain."
Verify you have created the public DNS records shown above with the correct values.
You may have to allow time for propagation. Consult your DNS provider's documentation or support for assistance.
Your browser/client must set the TLS ServerName indication (most do).
</p>
<p>
<b>Example subdomains that could work:</b> <code>caddydemo.example.net</code>, <code>caddydemo.example.com.au</code>
</p>
<p>
Caddy is capable of serving TLS for any domains and IPs. This demo is intentionally restricted.
</p>
</div>
</div>
</div>
</section>
<section class="diagonal up light gray feature">
<div class="wrapper">
<h2 id="your-own-pki">Deploy your own PKI with Caddy</h2>
<p>
Not only is Caddy the industry leader in certificate automation, it also sports a fully-featured PKI suite for your own fully-automated internal PKI and private CAs.
</p>
<!-- <p>
Caddy will serve your localhost and internal sites over HTTPS using its own CA. And you can create your own CA to issue certs across your infrastructure. It has a built-in ACME server, powered by Smallstep, to automate your private PKI reliably at scale.
</p> -->
<p>
Powered by open source <a href="https://smallstep.com/certificates/">Smallstep libraries</a>, Caddy becomes a self-managing certificate authority.
</p>
<div class="asides">
<div>
<div class="display left">
{{ markdown (include "/includes/examples/local-https.md") }}
</div>
</div>
<div>
<h3 class="purple">Internal and localhost certificates</h3>
<p>
If you configure sites with local or internal addresses, Caddy will serve them over HTTPS using a locally-trusted certificate authority with short-lived, auto-renewing certificates. It even offers to install your unique root into your local trust stores for you.
</p>
<a href="https://smallstep.com" title="Powered by Smallstep"><img src="/resources/images/sponsors/smallstep.svg" alt="Smallstep" class="smallstep"></a>
</div>
</div>
<div class="asides">
<div>
<h3 class="blue">Make and use your own CAs</h3>
<p>
Caddy lets you define as many CAs as you need. Root and intermediate keys are generated automatically, and intermediates are renewed before they expire.
</p>
<p>
Deploy an instance to act as an ACME server. Then other Caddy instances can use it for their certificates.
</p>
</div>
<div>
<div class="display right">
{{ markdown (include "/includes/examples/custom-ca.md") }}
</div>
</div>
</div>
<div class="asides">
<div>
<div class="display left">
{{ markdown (include "/includes/examples/json-automate-certs.md") }}
</div>
</div>
<div>
<h3 class="green">Keep certificates renewed</h3>
<p>
Caddy is more than just a web server. For example, this config is all it takes to obtain and renew certificates for a set of domain names.
</p>
<p>
Additional config can be written to wire up certificate maintenance events, which can then be used to integrate with external scripts and tooling.
</p>
<!-- <p>
Caddy 2 is a <a href="/docs/extending-caddy">highly extensible</a>, self-hosted platform on which you can build, configure, and deploy long-running services ("apps").
</p>
<p>
Caddy ships with apps for an <a href="/docs/modules/http">HTTPS server</a> (static files, reverse proxying, load balancing, etc.), <a href="/docs/modules/tls">TLS certificate manager</a>, and <a href="/docs/modules/pki">fully-managed internal PKI</a>. Caddy apps collaborate to make complex infrastructure just work with fewer moving parts.
</p>
<p>
<b>For example, the config shown here keeps your TLS certificates renewed for other programs to use;</b> no external tools or HTTP daemon required!
</p>
<p>
Providing a unified configuration, on-line <a href="/docs/api">config API</a>, and <a href="/docs/json/">automatic documentation</a> for all apps, Caddy is nearly infinitely extensible. Thanks to its unique <a href="/docs/architecture">modular architecture</a>, we can offer unlimited features without bloating the code base.
</p> -->
</div>
</div>
<!-- <div class="action-buttons">
<a href="/download" class="button primary">Download</a>
<a href="/docs/" class="button secondary">Docs<sh></sh></a>
</div> -->
</div>
</section>
<section class="light feature">
<div class="wrapper">
<h2 id="experts-recommend">Recommended by experts</h2>
<p>
Academic and industry experts recommend Caddy, which has been cited in peer-reviewed journals for its security defaults, best practices, and its uniquely advanced feature set.
</p>
<div class="cols">
<div class="col">
<a href="https://doi.org/10.1145/3319535.3363192"><img src="/resources/images/cites/aas.png" class="cite"></a>
<p>
"Servers running Caddy exhibit nearly ubiquitous HTTPS deployment and use modern TLS configurations. ... We hope to see other popular server software follow Caddy's lead."
</p>
<p class="cite">
&mdash;<b>Josh Aas, Richard Barnes, Benton Case, Zakir Durumeric, Peter Eckersley, Alan Flores-López, J. Alex Halderman, Jacob Hoffman-Andrews, James Kasten, Eric Rescorla, Seth Schoen, and Brad Warren.</b> 2019. <i>Let's Encrypt: An Automated Certificate Authority to Encrypt the Entire Web.</i> In Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security (CCS '19). Association for Computing Machinery, New York, NY, USA, 24732487. <a href="https://doi.org/10.1145/3319535.3363192">https://doi.org/10.1145/3319535.3363192</a>
</p>
</div>
<div class="col">
<a href="https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz"><img src="/resources/images/cites/krombholz.png" class="cite"></a>
<p>
"TLS must be enabled by default ... and the Caddy web server is a good and usable example."
</p>
<p class="cite">
&mdash;<b>Katharina Krombholz, Wilfried Mayer, Martin Schmiedecker, and Edgar Weippl.</b> 2017. <i>"I Have No Idea What I'm Doing" - On the Usability of Deploying HTTPS.</i> In 26th USENIX Security Symposium (USENIX Security 17), USENIX Association, Vancouver, BC, 1339-1356. Retrieved from <a href="https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz">https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz</a>
</p>
</div>
<div class="col">
<a href="https://doi.org/10.1145/2987443.2987480"><img src="/resources/images/cites/springall.png" class="cite"></a>
<p>
"No popular server software does [session ticket key rotation], with the exception of Caddy."
</p>
<p class="cite">
&mdash;<b>Drew Springall, Zakir Durumeric, and J. Alex Halderman.</b> 2016. <i>Measuring the Security Harm of TLS Crypto Shortcuts.</i> In Proceedings of the 2016 Internet Measurement Conference (IMC '16), Association for Computing Machinery, Santa Monica, California, USA, 33-47. <a href="https://doi.org/10.1145/2987443.2987480">https://doi.org/10.1145/2987443.2987480</a>
</p>
</div>
</div>
</div>
</section>
<section class="diagonal down dark feature">
<div class="wrapper">
<h2 id="reverse-proxy">A forward-thinking reverse proxy</h2>
<p>
Caddy's proxy was designed to be as forward-compatible as possible and has major batteries included: load balancing, active and passive health checks, dynamic upstreams, retries, pluggable transports, and of course, best-in-class TLS security.
</p>
<div class="asides asides-40-60">
<div class="spacing">
<div class="rollover" data-rollover="rollover-php">
<h3 class="green">Proxy HTTP, FastCGI, WebSockets, and more</h3>
<p>
Capable of proxying HTTP and HTTPS, but also WebSockets, gRPC, FastCGI (usually PHP), and more! The underlying transport module is extensible for any custom way to generate an HTTP response.
</p>
</div>
<div class="rollover" data-rollover="rollover-dynamic-backends">
<h3 class="purple">Dynamic backends</h3>
<p>
Provide Caddy with a static list of backends or enable a module to retrieve backends dynamically during each request: ideal for rapidly changing environments. Caddy flows with your infrastructure!
</p>
</div>
<div class="rollover" data-rollover="rollover-ha">
<h3 class="blue">High availability</h3>
<p>
Caddy comes with a whole suite of high availability (HA) features: advanced health checking, graceful (hitless) config changes, circuit breaking, load limiting, on-line retries, and more. The best part? It's all free. No enterprise-level paywalls.
</p>
</div>
</div>
<div>
<div class="display right dark">
{{ markdown (include "/includes/examples/proxy.md") }}
</div>
</div>
</div>
<div class="cols">
<div class="col">
<div class="sponsorship-primer">
<h3>software <b>assurance</b></h3>
<p>
Without sponsorships, Caddy could stop being developed at any time.
With sponsorships, you gain peace of mind knowing that the project will continue to be developed, along with tangible benefits like private support and training.
</p>
<a href="/sponsor" class="button purple">See sponsorships</a>
</div>
</div>
<div class="col">
<div class="sponsor-experience stripe">
<img src="/resources/images/sponsors/stripe.svg" class="experience-logo">
<div class="experience-content">
<div class="experience-quote">
"With its extensible architecture and on-line config API, Caddy powers many of Stripe's internal systems."
</div>
<!-- <div class="experience-credit">
<img src="https://preview.tabler.io/static/avatars/002m.jpg" class="experience-picture">
<cite>
<b>Sean Lin</b>
Example product manager
</cite>
</div> -->
</div>
</div>
</div>
</div>
<h2 id="file-server">Production-grade static file server</h2>
<p>
Serving static files is a tried-and-true method of delivering sites to numerous clients efficiently. Caddy has a robust file server that can be combined with other middleware features for the ultimate effortless website.
</p>
<div class="asides asides-40-60">
<div class="spacing">
<div class="rollover" data-rollover="rollover-compress">
<h3 class="blue">Compression</h3>
<p>
Caddy can compress files on-the-fly or serve precompressed files for extra performance. Caddy is also the first web server to support Zstandard encoding.
</p>
</div>
<div class="rollover" data-rollover="rollover-vfs">
<h3 class="green">Virtual file systems</h3>
<p>
Serve your static site from anything: the local file system, remote cloud storage, a database, or even embedded in the server binary!
</p>
</div>
<div class="rollover" data-rollover="rollover-range">
<h3 class="yellow">Range requests, Etags, and more</h3>
<p>
Unlike many ad-hoc file servers intended for temporary local development, Caddy fully supports Range requests, Etags, and a full production feature set.
</p>
</div>
<div class="rollover" data-rollover="rollover-browse">
<h3 class="purple">Directory file browser</h3>
<p>
If a directory without an index file is requested, Caddy can show an elegant file browser with breadcrumb nav, file size visualizations, filetype icons, and a grid view.
</p>
</div>
</div>
<div>
<div class="display right light">
{{ markdown (include "/includes/examples/file-server.md") }}
</div>
</div>
</div>
<div class="cols rollover" data-rollover="rollover-browse">
<div class="col">
<img src="/resources/images/file-browser/browse-themes.png" class="gallery">
</div>
<div class="col">
<img src="/resources/images/file-browser/browse-gallery-light.png" class="gallery">
</div>
</div>
</div>
</section>
<section class="light feature">
<div class="wrapper">
<h2 id="flexible-config">Flexible configuration compatible with any workflow</h2>
<p>
Configure your server your way. Caddy's native configuration format is JSON, and with Caddy's config adapters, you can use any config format you prefer. All configuration is posted through a RESTful admin API, and Caddy's CLI helps you work with config files easily.
</p>
<div class="asides">
<div>
<div class="display left">
<code class="dark">$ caddy start --config caddy.json
$ curl localhost:2019/id/my_handler \
-X PATCH \
-H "Content-Type: application/json" \
-d '{
"handler": "static_response",
"body": "Work smarter, not harder."
}'
$ curl localhost:2019/config/ | jq<div class="blinking"></div></code>
</div>
</div>
<div>
<h3>JSON config API</h3>
<p>
Caddy's native config format is JSON, giving you incredible power and flexibility for automated, large-scale deployments.
<p>
Make dynamic config changes through an <a href="/docs/api">intuitive, programmable REST API</a> that offers ACID guarantees. It is also <b>safely scoped</b>, meaning that the URI path restricts changes, making it impossible to accidentally alter other parts of your config.
</p>
<!-- <ul>
<li><b>Atomic:</b> Multiple changes in a single request are treated as a single unit; any failed change aborts all the other changes.</li>
<li><b>Consistent:</b> No invalid configurations can be loaded; your server will never break if a problem is detected at config load.</li>
<li><b>Isolated:</b> No config changes rely on another. (It helps that HTTP is a stateless protocol!)</li>
<li><b>Durable:</b> Caddy automatically persists the current, valid configuration to disk and can safely resume it after a power cycle if the <code>--resume</code> flag is used.</li>
</ul> -->
<!-- <a href="/docs/api-tutorial" class="cyan button">API <b>tutorial</b></a>
&nbsp;
<a href="/docs/api" class="gray button">API <b>reference</b></a> -->
</div>
</div>
<div class="asides">
<div>
<h3>Caddyfile</h3>
<p>
Although JSON offers ultimate control, most people prefer to use a <a href="/docs/caddyfile">Caddyfile</a> because it lets you get a production-ready site up and running in just a few hand-written lines. It's not uncommon for Caddyfiles to be <a href="https://twitter.com/bwesterb/status/1708903488426512668">just ~15-25% the size of a less-capable nginx config</a>.
</p>
</div>
<div>
<div class="display right light">
{{ markdown (include "/includes/examples/website-caddyfile.md") }}
<div class="caption">Actual config used by this site.</div>
</div>
</div>
</div>
<div class="asides">
<div>
<div class="display left">
<code class="dark">$ caddy run \
--config nginx.conf \
--adapter nginx<div class="blinking"></div></code>
</div>
</div>
<div>
<h3>Config adapters</h3>
<p>
Power Caddy with anything, even NGINX config files!
</p>
<p>
With first-class support for <a href="/docs/config-adapters">config adaptation</a>, you can configure your web server with your favorite format: YAML, TOML, CUE, NGINX, HCL, Dhall, JSON with comments, or even a MySQL database... or anything else. The Caddyfile is a built-in config adapter.
</p>
<!-- <p>
Fewer moving parts means fewer failures, lower costs, and less sunk time.
</p> -->
<!-- <a href="/docs/config-adapters" class="gray button">Config adapters</a> -->
</div>
</div>
</div>
</section>
<section class="diagonal up light gray feature">
<div class="wrapper">
<h2 id="extensibility">Unparalleled extensibility</h2>
<p>
Caddy is the only server in the world with its novel, modular architecture. At its core, Caddy is a configuration manager that runs apps like an HTTP server, internal certificate authority, TLS certificate manager, process supervisor, and more.
</p>
<p>
And because of its unique design, we can offer unlimited features without bloating the code base. Only compile in what you need.
</p>
<div class="cols">
<div class="col">
<h3 class="green"><a href="https://i.giphy.com/media/xUA7ba9aksCuKR9dgA/giphy.webp" target="_blank" title="Important visualization">Unlimited power</a></h3>
<p>
Nearly every part of the config that "does something" is pluggable. Caddy offers unlimited capabilities in such a lean package.
</p>
</div>
<div class="col">
<h3 class="purple">Native CPU performance</h3>
<p>
No RPC calls or flimsy dependency management. Plugins are compiled into the static binary, making successful deployments certain and runtimes blazing fast.
</p>
</div>
<div class="col">
<h3 class="blue">Easy to develop</h3>
<p>
Writing Caddy plugins is as easy as writing a Go package. It's a comfortable and familiar process for any Go programmer.
</p>
</div>
</div>
</div>
</section>
<section class="diagonal down light feature">
<div class="wrapper">
<h2 id="gold-standard">The <span class="gold">gold standard</span> web server</h2>
<p>
Caddy has the most robust TLS stack on the market. With stronger memory safety guarantees than OpenSSL (Apache &amp; NGINX) and more advanced certificate automation logic than any other server or utility, Caddy keeps your sites online through problems when other servers... won't.
</p>
<p>
Caddy was the first server to fully automate public certificate management&mdash;so we've been doing this longer than anyone. With more than 50 million certificates under management, Caddy has set the gold standard for other servers to live up to.
</p>
<div class="cols">
<div class="col">
<h3 class="green">OCSP stapling saves the day</h3>
<p>
Caddy automatically staples OCSP responses and caches them to weather outages. In 2018, many popular sites went down for users of mainstream browsers because crucial OCSP infrastructure had an extended outage. Only Caddy staples and caches OCSP responses by default, so all Caddy sites were unaffected.
</p>
</div>
<div class="col">
<h3 class="purple">On guard against revocation</h3>
<p>
In 2020, a mass certificate revocation event left many sysadmins scrambling to renew their certificates ahead of schedule. Caddy automatically renews certificates that get revoked, and all Caddy sites were unaffected. (This was before ARI existed.)
</p>
</div>
<div class="col">
<h3 class="blue">Stands tall during audits</h3>
<p>
Companies have deployed Caddy in front of their site just hours before important audits&mdash;potentially saving their compliance status&mdash;because of Caddy's safe defaults and "batteries included" approach.
</p>
</div>
</div>
</div>
</section>
<section class="light gray feature">
<div class="wrapper">
<h2>Take everyone's word for it</h2>
<p>
We're biased. But Caddy is widely relied upon and praised by a diverse global user base because of its ease of use, secure defaults, powerful feature set, and business-changing cost reductions.
</p>
<div class="testimonials-container">
<div class="testimonials">
<div class="testimonial-col"></div>
<div class="testimonial-col"></div>
<div class="testimonial-col"></div>
</div>
</div>
</div>
</section>
</main>
{{include "/includes/footer.html"}}
<template id="tpl-testimonial">
<div class="testimonial">
<img class="testimonial-picture">
<div class="testimonial-content">
<div class="testimonial-quote">
</div>
<a class="testimonial-name" target="_blank">
</a>
<div class="testimonial-role">
</div>
</div>
</div>
</template>
<script>
AsciinemaPlayer.create('/resources/321140.cast', $_('#video-demo'), {
preload: true,
autoPlay: true,
controls: true
});
</script>
</body>
</html>

View file

@ -1,139 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Caddy is the best web server for HTTPS</title>
{{import "/includes/head.html"}}
{{template "head"}}
<link rel="stylesheet" href="/resources/css/marketing.css">
<link rel="stylesheet" href="/resources/css/on-demand.css">
<link rel="canonical" href="https://caddyserver.com/on-demand-tls">
</head>
<body>
<div class="hero">
{{include "/includes/header.html" "dark-header"}}
<div class="wrapper">
<div class="hero-content">
<h1>
You just got served
<div class="subheading">
... a dynamically-provisioned TLS certificate by Caddy!
</div>
</h1>
</div>
</div>
</div>
<main>
<section class="diagonal up feature">
<div class="wrapper">
<h2>
What happened?
</h2>
<p>
Caddy automatically obtained a certificate for your domain, <code>{{.Req.Host}}</code>, without any change to the server's configuration. We call this technology On-Demand TLS, and it's an exclusive feature of Caddy.
</p>
<p>
With On-Demand TLS, no config changes are required to serve more domains over HTTPS. This is perfect for servers hosting content or APIs for customer-owned domains because your HTTPS deployment scales as tall and wide as your business does.
</p>
<p>
Caddy's technology is the secret sauce of many SaaS products that offer custom domains. It generates hundreds of thousands of dollars in revenue every year while saving businesses tens of thousands of dollars in development and maintenance costs.
</p>
<p>
Fun fact: this feature earned standing ovations at more than one tech demo back in 2015 and 2016 when it was first introduced.
</p>
</div>
</section>
<section class="diagonal down gray feature">
<div class="wrapper">
<h2>
Easy, self-hosted HTTPS for customer domains
</h2>
<p>
Use On-Demand TLS to grow your custom-domain SaaS business in a matter of minutes. A minimal config looks like this:
</p>
<div class="asides">
<div class="spacing">
<div class="rollover" data-rollover="rollover-abuse">
<h3 class="purple">1. Prevent abuse</h3>
<p>
First, you'll configure an internal endpoint that Caddy can "ask" if a certificate should be allowed for a domain. This endpoint usually looks up the domain in a list or database and returns <code>HTTP 200</code> if it's allowed. Make sure to reject domains you don't recognize. (This implies that customers have to tell your app what their domain is first.)
</p>
</div>
<div class="rollover" data-rollover="rollover-ondemand">
<h3 class="green">2. Enable On-Demand TLS</h3>
<p>
To finish, enable On-Demand TLS for a catch-all site.
</p>
</div>
</div>
<div>
<div class="display right">
{{ markdown (include "/includes/examples/on-demand.md") }}
</div>
</div>
</div>
<p>
Actual production configs typically have more, but this is the minimal configuration needed to serve domain names that aren't in your control. All that's left is for the domain owner to set their DNS records (described below).
</p>
</div>
</section>
<section class="diagonal up feature">
<div class="wrapper">
<h2>
Brilliant customer experience
</h2>
<p>
For domain owners, the flow is even simpler: set DNS records. The first visit to their site will provision a TLS certificate. Works like magic!
</p>
<div class="asides">
<div class="spacing">
<div>
<h3 class="purple">1. Point DNS records</h3>
<p>
The customer sets either a CNAME record or A/AAAA records on a domain or subdomain they control, so that <i>their</i> domain resolves to <i>your</i> server's IP address.
</p>
</div>
<!-- <div class="rollover" data-rollover="rollover-ondemand">
<h3 class="green">2. Visit site</h3>
<p>
Once the DNS propagates, the first request with their domain to your server will provision a TLS certificate.
</p>
</div> -->
</div>
<div>
<div class="display right">
<code class="light"><span class="comment"># Customer's DNS (example domains)</span>
your-app.customer.com CNAME -> your-app.com
<span class="comment"># Your DNS (example IPs)</span>
your-app.com A -> 198.51.100.1
your-app.com AAAA -> 2001:db8::
</code>
</div>
</div>
</div>
<p>
There is no step 2. Caddy will obtain and serve a certificate for their domain as soon as a connection is made to it. Caddy keeps the certificates renewed as long as connections keep coming in. Once they stop, Caddy will let the certificate expire and then delete it automatically.
</p>
<p>
And that is how you save tens of thousands of dollars in development and infrastructure costs every year.
</p>
</div>
</section>
</main>
{{include "/includes/footer.html"}}
</body>
</html>

View file

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

View file

@ -1,691 +0,0 @@
:root,
.light {
--body-bg: white;
--text-color: #2c2c2c;
--text-color-muted: #7087a0;
--header-bg: rgba(118, 179, 194, 0.11);
--header-border-color: #ebf0f2;
--topbar-link-color-hover: black;
--topbar-link-bg-hover: rgb(244, 249, 251);
--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);
--heading-color: var(--text-color);
--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-featured-hover-bg: rgb(223, 233, 238); /* rgb(232, 255, 254); */
--dropdown-shadow-color: rgb(0 0 0 / .25);
--box-bg: var(--header-border-color);
}
.dark {
--body-bg: #0d171a;
--text-color: #cbe2e4; /* #a4c0c2 */
--text-color-muted: #92b2d5;
--header-bg: rgba(44, 130, 164, 0.11);
--header-border-color: transparent;
--topbar-link-color-hover: white;
--topbar-link-bg-hover: rgb(255 255 255 / .1);
--main-nav-link-color: #86a7b1;
--main-nav-link-hover-color: #e2e9ec;
--link-color: #34a1e4;
--link-decoration-color: #375862;
--link-hover-color: rgb(42, 228, 98);
--heading-color: #dee8ee;
--code-bg: #1f3237;
--dropdown-bg: #152125; /* #34414b; */
--dropdown-linkbox: #1d2c32;
--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-featured-hover-bg: rgb(64, 82, 92);
--dropdown-shadow-color: black;
--box-bg: var(--header-bg);
}
.dark #logo-light,
.dark-header #logo-light,
#logo-dark {
display: none;
}
.dark #logo-dark,
.dark-header #logo-dark {
display: initial;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Inter, Figtree, Gantari, 'Albert Sans', Inter, system-ui;
font-size: 18px;
/* -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; */
tab-size: 4;
background-color: var(--body-bg);
color: var(--text-color);
}
section.dark,
footer {
background-color: #002020;
color: white;
}
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 {
max-width: 1400px;
margin-left: auto;
margin-right: auto;
padding-left: 50px;
padding-right: 50px;
}
header {
background: var(--header-bg);
position: relative;
z-index: 99;
}
header a {
text-decoration: none;
}
header nav>ul {
background: linear-gradient(to right, rgb(100 190 121), rgb(54 206 255));
background-clip: text;
-webkit-background-clip: text;
}
.topbar {
font-size: 12px;
border-bottom: 1px solid hsl(203deg 100% 79% / 20%);
}
.topbar .wrapper {
display: flex;
justify-content: flex-end;
align-items: center;
gap: 1em;
color: #777;
}
.topbar a {
display: inline-block;
padding: 10px 10px 8px;
color: #719bcc;
display: flex;
align-items: center;
}
.topbar a:hover {
background: var(--topbar-link-bg-hover);
color: var(--topbar-link-color-hover);
}
.navbar {
display: flex;
align-items: center;
gap: 2em;
}
.navbar .actions,
.navbar nav ul {
flex-wrap: wrap;
}
header nav ul {
list-style: none;
margin: 0;
padding-left: 0;
display: flex;
align-items: center;
flex: 1;
}
.navbar nav>ul>li>a {
-webkit-text-fill-color: rgba(0 0 0 / .1);
}
.navbar nav>ul>li>a:hover {
-webkit-text-fill-color: rgba(255 255 255 / .4);
}
.navbar nav {
position: relative;
}
.navbar nav>ul>li>a,
.navbar .button {
text-decoration: none;
transition: all 200ms;
font-weight: 500;
}
.navbar nav>ul>li>a {
padding: 20px 1.5em;
display: block;
font-family: Figtree, system-ui;
font-size: 16px;
}
.navbar .button {
font-size: 80%;
}
.icon {
height: 1.4em;
vertical-align: middle;
}
.logo-link {
line-height: 0; /* avoid extra space along the bottom for some reason */
}
.logo {
height: 2.25em;
}
.navbar .actions {
margin-left: auto;
display: flex;
gap: 1em;
}
button,
.button {
padding: .6em 1.5em;
border-radius: 6px;
text-decoration: none;
background: none;
cursor: pointer;
/* necessary for hoversplash: */
position: relative;
overflow: hidden;
display: inline-flex;
align-items: center;
}
.button {
color: rgb(54 206 255);
border: 1px solid rgb(54 206 255);
}
.button:hover {
color: white;
border-color: white;
}
button.primary,
.button.primary {
background: linear-gradient(135deg, white 25%, rgba(167, 183, 193) 80%);
color: #222;
font-weight: bold;
border: none;
box-shadow: 0 3px 5px rgba(0, 0, 0, 0.08);
}
button.primary:hover,
.button.primary:hover {
color: #1a71cb;
}
button:active,
.button:active {
transition: all 75ms;
transform: scale(.95);
box-shadow: 1px 1px 3px inset rgba(0, 0, 0, 0.2);
}
button.purple,
.button.purple {
border: none;
background: linear-gradient(165deg, rgba(170,81,212,1) 20%, rgba(37,159,235,1) 100%);
color: white !important; /* sigh... to prevent being stepped on by very specific link color rule on the sponsors page */
font-weight: bold;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.25)
}
button svg,
.button svg {
margin-right: .5em;
}
@keyframes hoverSplash {
0% {
opacity: 1;
transform: translate3d(-50%, -50%, 0) scale3d(0, 0, 1);
}
100% {
opacity: 0;
transform: translate3d(-50%, -50%, 0) scale3d(1, 1, 1);
}
}
.hover-splash {
pointer-events: none;
position: absolute;
/* z-index: 1; */
width: 200%;
height: 0;
padding-bottom: 200%;
border-radius: 50%;
/* transform: translate3d(-50%,-50%,0) scale3d(0,0,1); */
animation: 1s cubic-bezier(.16, 1, .3, 1) hoverSplash;
}
button .hover-splash,
.button .hover-splash {
background-color: rgba(24, 156, 233, 0.6);
}
button.primary .hover-splash,
.button.primary .hover-splash {
background-color: rgba(255, 255, 255, 0.6);
}
.dropdown {
font-size: 16px;
position: absolute;
display: inline-block;
background: var(--dropdown-bg);
border-radius: 15px;
line-height: 1.5;
overflow: hidden;
box-shadow: 0 50px 75px var(--dropdown-shadow-color);
visibility: hidden;
top: calc(100% - 5px);
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 {
display: flex;
gap: 1px;
margin-bottom: 1px;
}
.dropdown .plainbox,
.dropdown .linkbox {
display: flex;
gap: 4em;
padding: 1.5em;
}
.dropdown .plainbox {
padding-top: .5em;
width: 100%;
justify-content: space-around;
}
.dropdown .plainbox a {
color: var(--dropdown-link-color);
}
.dropdown .plainbox a:hover {
color: var(--dropdown-link-hover-color);
}
.dropdown .linkbox {
background: var(--dropdown-linkbox);
gap: 3em;
--link-padding-x: 10px;
}
.dropdown .links-header {
font-family: Poppins, ui-rounded;
font-weight: 600;
color: var(--dropdown-link-title-color);
font-size: 20px;
margin-bottom: 14px;
padding-left: var(--link-padding-x);
}
.dropdown .col {
min-width: 150px;
}
.dropdown .col a {
display: block;
color: var(--dropdown-link-color);
text-decoration: none;
padding: 5px var(--link-padding-x);
border-radius: 1.5em;
}
.dropdown .col a:hover {
color: var(--dropdown-link-hover-color);
background-color: var(--dropdown-link-hover-bg);
}
.dropdown .flatlinks a,
.dropdown .featured a {
transition: background-color 150ms;
font-size: 12px;
}
.dropdown .flatlinks a {
background: var(--dropdown-linkbox);
padding: 1em 2em;
color: var(--dropdown-link-color);
}
.dropdown .flatlinks a b,
.dropdown .featured a b {
display: block;
font-size: 16px;
font-weight: 600;
}
.dropdown .flatlinks a b {
color: var(--dropdown-link-title-color);
margin-bottom: .25em;
}
.dropdown .flatlinks a:hover {
/* background: rgb(239, 244, 248); */
background: var(--dropdown-link-hover-bg);
}
.dropdown .featured a b {
color: var(--dropdown-link-title-color);
margin-bottom: .5em;
}
.dropdown .featured a:hover b {
color: var(--dropdown-link-hover-color);
}
.dropdown .featured {
gap: 1em;
padding: 1em;
/* background: white; */
}
.dropdown .featured a {
display: block;
padding: 1em;
line-height: 1.4;
border-radius: 10px;
color: var(--dropdown-link-color);
background-color: var(--dropdown-linkbox);
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%); */
flex: 1;
box-shadow: 0 1px 2px rgb(0 0 0 / .2);
}
.dropdown .featured a:hover {
background-color: var(--dropdown-featured-hover-bg);
}
.dropdown .featured a b {
display: block;
color: var(--dropdown-link-title-color);
font-size: 16px;
margin-bottom: .5em;
font-weight: 600;
}
#current-theme {
text-transform: capitalize;
}
.construction-images {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 20px;
}
.construction img {
margin-left: 20px;
margin-right: 20px;
max-width: 100%;
}
.construction p {
width: 100%;
margin-left: auto;
margin-right: auto;
color: #e71414;
}
footer {
padding: 75px 0;
font-size: 14px;
color: #7c9393;
line-height: 1.5;
}
footer p {
margin: 1em 0;
}
footer a {
color: inherit;
font-weight: bold;
transition: .25s;
}
footer a:hover {
color: #76b8b8;
}
footer .logo-area {
margin-right: auto;
}
footer .wrapper {
display: flex;
flex-wrap: wrap;
gap: 75px;
}
footer .nostalgia {
display: block;
text-align: center;
margin-top: 40px;
}
footer .nostalgia-badges {
gap: 25px;
align-items: center;
justify-content: center;
width: 100%;
display: flex;
flex-wrap: wrap;
margin-top: 40px;
}
footer .nostalgia p {
margin: 0 auto 15px;
color: #d2f7e7;
}
footer .w3c {
width: 80px;
line-height: 0;
}
footer .logo {
display: block;
margin-bottom: 15px;
height: 40px;
}
footer .link-col {
font-size: initial;
line-height: 2;
}
footer .col-header {
font-size: 110%;
color: white;
font-weight: 700;
margin-bottom: .5em;
}
footer .link-col a {
display: block;
color: #b7c8c8;
font-weight: 500;
text-decoration: none;
}
footer .link-col a:hover {
color: #35655e;
}
@media (max-width: 1150px) {
.dropdown {
display: none;
}
.wrapper {
padding-left: 20px;
padding-right: 20px;
}
}
@media (max-width: 950px) {
header nav ul {
justify-content: space-evenly;
}
.topbar .wrapper {
justify-content: center;
flex-wrap: wrap;
gap: 0;
}
.logo {
height: 3em;
}
.navbar {
flex-direction: column;
gap: 0;
padding: 1em 0;
}
.navbar nav {
margin: .5em 0;
}
.navbar .actions {
margin: 0 auto;
}
.navbar nav > ul > li > a {
padding-top: 10px;
padding-bottom: 10px;
}
}

View file

@ -1,820 +0,0 @@
:root, .light {
--header-bg: transparent;
--button-color: rgb(64, 131, 153);
--button-border-color: rgb(198, 217, 223);
--button-color-hover: rgb(7, 86, 134);
--button-border-color-hover: rgb(155, 191, 213);
--nav-current-bg: linear-gradient(to right, #ecf1f3, transparent);
--nav-link-hover-shadow-color: rgba(0, 0, 0, 0.15);
--nav-link-hover-before-bg: #d2e5e7;
--autonav-bg: #fff;
--pagenav-hover-bg: #f4f7f9;
--cmd-bg: #333;
--tip-color: #5c50bb;
--menu-toggle-bg: #e4f1f2;
}
.dark {
--header-bg: rgba(44, 130, 164, 0.11);
--button-color: rgb(36, 166, 208);
--button-border-color: rgb(38, 116, 140);
--button-color-hover: rgb(0, 194, 255);
--button-border-color-hover: rgb(0, 194, 255);
--nav-current-bg: linear-gradient(to right, #1a3c4d, transparent);
--nav-link-hover-shadow-color: rgba(255, 255, 255, 0.15);
--nav-link-hover-before-bg: #32494f;
--autonav-bg: #34404d;
--pagenav-hover-bg: #18262f;
--cmd-bg: black;
--tip-color: #a6b2f7;
--menu-toggle-bg: #274d5c;
}
html,
body {
min-height: 100%;
}
body {
background-image:
radial-gradient(at calc(50% - min(25vw, 800px)) -10%, hsl(137.64deg, 100%, 92.42%) 0px, transparent min(15%, 500px)),
radial-gradient(at calc(50% + min(25vw, 800px)) -10%, hsl(201.2deg, 68%, 90.2%) 0px, transparent min(15%, 500px));
background-repeat: no-repeat;
}
.dark body {
background-image:
radial-gradient(at calc(50% - min(35vw, 700px)) -10%, hsl(129.5deg, 100%, 12.4%) 0px, transparent min(25%, 600px)),
radial-gradient(at calc(50% + min(35vw, 700px)) -10%, hsl(201deg, 100%, 19.33%) 0px, transparent min(25%, 600px))
}
.wrapper {
max-width: 1800px;
}
header {
border-bottom: 1px solid var(--header-border-color);
}
.topbar {
border-bottom: 0;
}
button,
.button {
color: var(--button-color);
border: 1px solid var(--button-border-color);
}
button:hover,
.button:hover {
color: var(--button-color-hover);
border: 1px solid var(--button-border-color-hover);
}
button.primary,
.button.primary {
background: linear-gradient(135deg, #7ece98 25%, rgb(49, 155, 208) 80%);
color: white;
border: none;
}
button.primary:hover,
.button.primary:hover {
color: white;
}
.button.purple:hover {
border: none;
}
main {
margin-top: 50px;
font-family: Inter, system-ui;
}
.docs {
display: flex;
font-size: 16px;
}
.docs nav,
#pagenav {
flex: 1;
}
.docs nav {
min-width: 250px;
}
#docs-menu {
background: var(--menu-toggle-bg);
padding: 1em;
cursor: pointer;
display: none;
}
#pagenav .heading {
display: none;
}
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: var(--nav-link-hover-before-bg);
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 var(--nav-link-hover-shadow-color);
}
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: var(--nav-current-bg);
}
main nav .heading {
font-weight: bold;
text-transform: uppercase;
font-size: 80%;
letter-spacing: 1px;
}
main nav ul:not(:first-child) > .heading {
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;
min-width: 0;
width: 100%;
}
/*
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, .fullspan),
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;
color: var(--heading-color);
}
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;
position: absolute;
top: 5px;
left: 0;
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: var(--cmd-bg);
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: var(--tip-color);
}
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;
}
.box {
border-radius: 10px;
padding: 1em;
margin: 1em;
font-size: 18px;
border: 2px solid var(--box-bg);
}
.box-filled {
border: none;
background: var(--box-bg);
}
.box-capped {
padding: 0;
}
.box-capped > * {
padding: 1em;
}
.box-cap {
border-bottom: 1px solid var(--box-bg);
}
.box-filled .box-cap {
border-bottom: 1px solid var(--button-border-color); /* #d0dfe6; */
}
.box > :first-child {
margin-top: 0;
}
.box > :last-child {
margin-bottom: 0;
}
.box:not(.box-capped) > :first-child {
padding-top: 0;
}
.box:not(.box-capped) > :last-child {
padding-bottom: 0;
}
.box h3 {
font-size: 125%;
margin: 0 0 .5em;
text-align: left;
}
#autonav {
position: absolute;
display: none;
left: 80%;
top: 0;
background: var(--autonav-bg);
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 {
display: block;
}
#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: var(--pagenav-hover-bg);
}
@keyframes fadeIn {
0% { opacity: 0; transform: translateY(2em); }
100% { opacity: 1; transform: translateY(0); }
}
.quick-assist-history {
font-size: 90%;
display: flex;
flex-wrap: wrap;
gap: .5em;
}
.quick-assist-history > a {
display: inline-block;
color: var(--text-color-muted);
text-decoration: none;
cursor: pointer;
}
.quick-assist-history > a:hover {
color: #216688;
text-decoration: underline;
}
.quick-assist-history > a:not(:first-child):before {
content: '>';
margin-right: .5em;
display: inline-block;
color: #809783;
}
h3.quick-assist-question {
font-size: 150%;
}
.quick-assist-options {
margin-top: 1.5em;
display: grid;
gap: 1em;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
.quick-assist-options > div {
display: contents;
}
.quick-assist button,
.quick-assist .button {
font-size: 100%;
min-height: 3.5em;
}
@media (max-width: 1400px) {
#pagenav {
display: none;
}
}
@media (max-width: 950px) {
#autonav {
display: none !important;
}
.docs {
flex-direction: column;
}
#docs-menu {
display: block;
}
#docs-menu-container {
height: 0;
overflow: hidden;
transition: height 250ms ease-out;
display: flex;
flex-wrap: wrap;
}
.docs nav ul {
min-width: 250px;
flex: 1;
}
main nav ul .heading {
margin-top: 2.5em !important;
}
}

View file

@ -1,144 +0,0 @@
h3 {
margin-left: 0;
}
/* .datagrid {
display: flex;
flex-wrap: wrap;
gap: 2em;
margin-top: 50px;
}
.datagrid h4 {
color: #668591;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: .5em;
min-width: 200px;
} */
.legend {
margin-bottom: -100px;
margin-left: auto;
margin-right: auto;
font-size: 24px;
color: var(--text-color-muted);
text-align: center;
max-width: 750px;
line-height: 1.5;
}
.legend .nonstandard {
font-weight: bold;
}
.feature-list {
font-size: 90%;
margin: 50px 0 125px;
}
.feature-list:last-child {
margin-bottom: 0;
}
.feature-row {
display: grid;
gap: 2em;
padding: 2em 0;
border-bottom: 2px dashed #a4c8ff25; /* #e6eaf0 */
}
.feature-row:last-child {
padding-bottom: 0;
}
.feature-row .benefits {
color: var(--text-color-muted);
}
.feature-row .benefits p:first-child {
margin-top: 0;
}
.feature-row .detail {
font-weight: 500;
}
.feature-row ul.detail,
.feature-row .detail ul {
margin-left: 1em;
}
.feature-row .detail ul {
margin-top: 1em;
}
.feature-row ul li {
margin-bottom: .5em;
}
.feature-row:last-child {
border-bottom: none;
}
.nonstandard {
color: #e76100; /* #005c94 */
}
.dark .nonstandard {
color: #fb8a26;
}
.split {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-bottom: 75px;
align-items: center;
}
.split > * {
flex: 1;
margin-right: 50px;
min-width: 0;
}
.split picture {
min-width: 0;
}
.split img,
.benefits img {
margin: 2em 0 0;
max-width: 100%;
box-shadow: 0 6px 10px rgb(0 0 0 / .15);
border-radius: 8px;
}
@media (min-width: 600px) and (max-width: 899px) {
.feature-row .detail {
grid-area: 1/2/span 3/2;
}
.feature-row .benefits {
grid-area: 2 / 1;
}
}
@media (min-width: 600px) {
.feature-row {
grid: repeat(3,auto) / 1fr 1fr;
}
}
@media (min-width: 900px) {
.feature-row {
grid: auto / 1fr 2fr 1fr;
}
}

View file

@ -1,423 +0,0 @@
.bgtext,
.demobox {
font-family: Poppins, ui-rounded;
}
.hero {
padding-bottom: 20vw;
}
.hero-content {
padding-bottom: 100px;
}
.demobox .or {
margin: -1em 0 1em;
}
h1 {
text-align: left;
text-transform: uppercase;
margin-bottom: 0;
line-height: .9;
background-image: unset;
-webkit-background-clip: unset;
background-clip: unset;
-webkit-text-fill-color: unset;
}
h1 .color-dodge {
mix-blend-mode: color-dodge;
}
h1 .the {
font-size: 60%;
line-height: 1;
}
h1 .subheading {
margin-top: .75em;
}
h3 a {
color: inherit;
}
.sponsors-leaders {
position: relative;
text-align: center;
margin: 75px auto;
padding: 35px;
z-index: 0;
}
.sponsors-leaders::before {
content: "";
position: absolute;
padding: 40px;
background-color: rgb(207 27 189 / .2);
filter: blur(10px);
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
pointer-events: none;
}
.sponsors-leaders h3 {
color: #EB5EDD;
font-weight: normal;
font-size: 18px;
margin-bottom: 2em;
border-left: 0;
margin-left: 0;
padding-left: 0;
}
.sponsor-logos {
display: flex;
column-gap: 50px;
row-gap: 25px;
flex-wrap: wrap;
align-items: center;
justify-content: center;
max-width: 900px;
margin: 1.5em auto;
}
.sponsors-divider {
border-top: 1px solid #634772;
max-width: 200px;
width: 100%;
margin: 0 auto;
}
.wavy-top {
background-color: #C4D5E0;
margin-top: -10vw;
position: relative;
z-index: 0;
padding-top: 14vw;
padding-bottom: 300px;
}
.wavy-top::before {
content: "";
position: absolute;
top: -16vw;
left: 0;
right: 0;
bottom: 0;
background-image: url('/resources/images/home-curvey-bg.svg');
background-repeat: no-repeat;
background-size: 100% auto;
z-index: -1;
}
.bgtext {
color: #86A6A3;
opacity: .5;
width: 90%;
min-width: 65vw;
max-width: 1200px;
font-size: min(15vw, 300px);
text-align: center;
line-height: .85;
font-weight: 800;
text-transform: uppercase;
mix-blend-mode: color-burn;
pointer-events: none;
position: absolute;
top: 5vw;
left: 50%;
transform: translateX(-50%);
}
.bgtext .site-on {
font-size: 85%;
}
.wavy-top h2 {
color: #003E4B;
font-size: min(3vw, 52px);
text-align: center;
width: 60vw;
max-width: 950px;
font-weight: normal;
margin: 0 auto 200px;
line-height: 2.5em;
}
.wavy-top h2 b,
.section-upset b {
font-weight: 800;
}
.section-upset {
background: white;
max-width: 1600px;
margin: -350px auto 0;
padding: 100px 50px 0;
border-radius: 20px;
z-index: 0;
position: relative;
box-shadow: 0 -15px 20px -2px rgb(0 0 0 / .1);
}
.section-upset h2 {
background: linear-gradient(195deg, rgb(6, 79, 107) 25%, rgba(139, 189, 224, 1) 49%, rgb(72, 129, 164)50%, rgb(8, 44, 58) 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 80px;
font-weight: 600;
text-align: center;
margin-bottom: 100px;
max-width: none;
}
.testimonials-container {
height: 80vh;
position: relative;
}
.testimonials {
--testimonial-spacing: 25px;
gap: var(--testimonial-spacing);
display: flex;
flex-wrap: wrap;
padding-top: 75px;
padding-bottom: 75px;
height: 100%;
overflow-y: auto;
margin-top: 50px;
}
.testimonial-col {
flex: 1;
min-width: 250px;
}
.testimonials-container::before {
content: "";
background: linear-gradient(0deg, #f5f8f9 0%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 75%, #f5f8f9 100%);
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
pointer-events: none;
z-index: 1;
}
.testimonial-picture {
width: 60px;
border-radius: 50%;
}
.testimonial {
display: flex;
align-items: flex-start;
gap: 1em;
border: 1px solid rgb(222, 233, 240);
border-radius: 5px;
padding: 1em;
margin: var(--testimonial-spacing) 0;
background: white;
}
.testimonial-quote {
margin-bottom: 1em;
font-size: 16px;
line-height: 1.4;
}
.testimonial-name,
.testimonial-role {
font-size: 90%;
}
.testimonial-name {
font-weight: bold;
margin-bottom: .5em;
color: inherit;
text-decoration: none;
}
.testimonial-name:hover {
color: inherit;
}
.testimonial-name[href]:hover {
text-decoration: underline;
}
.testimonial-name::before {
content: '—';
}
.testimonial-role {
color: var(--text-color-muted);
font-style: italic;
}
.smallstep {
max-width: 150px;
margin-top: 1em;
}
.gold {
color: gold;
background: linear-gradient(63deg, rgba(212,167,36,1) 8%, rgba(251,228,63,1) 50%, rgba(241,218,57,1) 75%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
.col .cite {
font-size: 75%;
}
img.cite {
width: 100%;
max-width: 600px;
display: block;
margin: 0 auto;
}
.demobox {
position: relative;
color: #003e4b;
background: radial-gradient(circle at 200px 100px, rgba(184,255,239,1) 0%, rgba(234,249,255,1) 280px);
font-size: 20px;
padding: 50px;
border-radius: 15px;
margin-top: 200px;
}
.demobox h2 {
font-size: 90px;
font-weight: 700;
max-width: 100%;
white-space: nowrap;
overflow-x: auto;
white-space: nowrap;
margin-top: -1.65em;
background: linear-gradient(0deg, rgba(27,180,186,1) 10%, rgba(0,61,75,1) 50%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
.demobox p {
margin-bottom: 2em;
}
.demo-ips {
display: flex;
flex-wrap: wrap;
gap: 2em;
}
.demo-ips code {
background: #ecffff;
display: flex;
border-radius: 5px;
box-shadow: 0 4px 16px rgb(0 0 0 / .1);
}
.record-type,
.demo-ip {
display: block;
padding: 10px 20px;
overflow-wrap: anywhere;
}
.record-type {
color: #6ea9b7;
border-right: 1px solid #cef4f1;
}
.demo-help {
border-top: 1px solid #b5d3d9;
font-size: 75%;
color: #628991;
font-family: Inter;
max-width: 800px;
}
.demo-help p {
margin: 10px 0;
}
.franken {
background-color: #b3d133;
color: #390075;
}
@media (max-width: 1350px) {
h1 {
font-size: 95px;
}
h1 .subheading {
font-size: 30px;
}
}
@media (max-width: 1000px) {
h1 {
text-align: center;
}
.action-buttons {
margin-bottom: 55px;
justify-content: center;
}
.bgtext {
font-size: 25vw;
opacity: .25;
}
.wavy-top h2 {
font-size: 5vw;
width: 80%;
max-width: 700px;
line-height: 2em;
}
.section-upset {
padding: 50px 15px 0;
}
.section-upset h2 {
font-size: 50px;
}
}
@media (max-width: 700px) {
h1 {
font-size: 55px;
}
}

View file

@ -1,662 +0,0 @@
body {
background-color: #123245;
background-image: none;
}
img.gallery {
max-width: 100%;
box-shadow: 0 6px 10px rgb(0 0 0 / .15);
border-radius: 8px;
}
h1,
h2,
h3,
h4 {
font-family: Poppins, ui-rounded;
}
h1 {
font-size: 120px;
font-weight: 800;
text-align: center;
color: #65D1C6;
margin-bottom: 1em;
background-image: linear-gradient(to right, #47E27C 25%, #4ED3FB 75%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
h1 .subheading {
margin: 1em auto 0;
text-transform: none;
font-size: 42px;
font-weight: normal;
line-height: 1.3;
font-family: Figtree;
max-width: 850px;
--subheading-color: #b1fffe;
color: var(--subheading-color);
-webkit-text-fill-color: var(--subheading-color);
}
h1 .subheading b {
font-weight: 800;
}
p,
h2 {
max-width: 950px;
}
h2 {
font-size: 50px;
font-weight: 600;
}
.feature h2:not(:first-child) {
margin-top: 175px;
}
.hero {
background-color: hsla(201,63%,15%,1);
background-image:
radial-gradient(at 50% 96%, hsla(0,100%,20%,0.35) 0px, transparent 50%),
radial-gradient(at 5% 30%, hsla(136,95%,15%,1) 0px, transparent 50%),
radial-gradient(at 91% 35%, hsla(214,83%,25%,1) 0px, transparent 75%),
radial-gradient(at 82% 73%, hsla(265,72%,20%,1) 0px, transparent 50%);
}
.hero-content {
padding-top: 100px;
margin-bottom: 0;
padding-bottom: 50px;
}
.email em {
display: none;
}
.button.cool {
position: relative;
color: rgb(226 254 214);
border: none;
/* necessary for gradient dropshadow: */
transform-style: preserve-3d;
overflow: unset;
}
.button.cool::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 8px;
border: 2px solid transparent;
background: linear-gradient(to right, #65E823,#D67FDB) border-box;
-webkit-mask:
linear-gradient(#fff 0 0) padding-box,
linear-gradient(#fff 0 0);
mask:
linear-gradient(#fff 0 0) padding-box,
linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
}
@property --a {
syntax: '<angle>';
inherits: false;
initial-value: 0deg;
}
@keyframes a {
from {
--a: 0deg;
}
to {
--a: 360deg;
}
}
.button.cool sh {
position: absolute;
inset: -100px;
border: 100px solid #0000;
border-radius: 110px; /* a little more than the inset+border+border-radius */
mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
-webkit-mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
transform: translateZ(-1px); /* hack the z-index so as to be behind the transparent element */
pointer-events: none;
}
.button.cool sh::before {
content: "";
position: absolute;
inset: 0px;
background: conic-gradient(from var(--a), rgb(207, 19, 175) 0.42%, #ee6907 59.24%, #70d52c);
filter: blur(25px);
transform: translate(0px,0px);
--a: 0deg; /* needed for firefox to have a valid output ? */
animation: a 1s linear infinite;
opacity: 0;
transition: opacity .5s;
}
.button.cool:hover sh::before {
opacity: 1;
}
section {
padding: 200px 0;
background: var(--body-bg);
color: var(--text-color);
}
.hero section.transparent {
background: none;
padding-top: 0;
color: #cbe2e4;
}
.hero section.transparent h2 {
color: #fff;
}
.hero-content a,
.hero section.transparent a {
color: #75b8c8;
}
.hero-content a:hover,
.hero section.transparent a:hover {
color: #82e7ff;
}
.dark section.gray {
background-color: #1b1c1c;
}
section.gray,
section.light.gray {
background-color: #f5f8f9;
}
.diagonal {
padding: 200px 0;
margin: 25px 0;
}
.diagonal.up { transform: skewY(-5deg); }
.diagonal.up > * { transform: skewY(5deg); }
.diagonal.down { transform: skewY(5deg); }
.diagonal.down > * { transform: skewY(-5deg); }
.feature p {
font-weight: 500;
margin-top: 2em;
line-height: 1.65;
}
.cols, .spacing {
--gap: 50px;
}
.spacing {
display: flex;
gap: var(--gap);
flex-direction: column;
}
.cols {
display: flex;
flex-wrap: wrap;
justify-content:space-around;
gap: var(--gap);
color: #424242;
margin-top: 4em;
}
section.dark .cols {
color: #aec6c3;
}
.cols .col {
min-width: 350px;
padding-left: 1em;
flex: 1;
}
h3 {
font-weight: 600;
font-size: 20px;
border-left: 2px solid;
padding-top: .15em;
padding-bottom: .15em;
/* shove the border over but leave space between border and content */
margin-left: -1em;
padding-left: calc(1em - 2px);
}
p + h3 {
margin-top: 4em;
}
h3.plain {
border-left: none;
margin-left: 0;
padding-left: 0;
}
.hero h3 {
color: white;
}
.col p {
font-family: Inter;
font-size: 90%;
line-height: 1.5;
}
.hero .col p {
color: rgb(255 255 255 / .8);
}
h3.green {
color: #23a460; border-color: #23a460;
}
h3.purple {
color: rgb(179, 80, 179); border-color: rgb(179, 80, 179);
}
h3.blue {
color: rgb(14, 110, 189); border-color: rgb(14, 110, 189);
}
section.dark h3.green {
color: #41e68f; border-color: #41e68f;
}
section.dark h3.purple {
color: rgb(238, 89, 238); border-color: rgb(238, 89, 238);
}
section.dark h3.blue {
color: rgb(113, 191, 255); border-color: rgb(113, 191, 255);
}
section.dark h3.yellow {
color: #ffcb50; border-color: #ffcb50;
}
.asides {
display: flex;
gap: 50px;
justify-content: space-between;
margin: 100px auto 150px auto;
align-items: center;
}
.hero-content .asides {
margin-top: 0;
margin-bottom: 75px;
}
.asides.top {
align-items: stretch;
}
.asides > * {
flex: 1;
min-width: 0; /* kind of a hack that allows proper sizing of pre children; see https://weblog.west-wind.com/posts/2016/feb/15/flexbox-containers-pre-tags-and-managing-overflow */
min-width: 300px;
width: 100%;
}
.asides-40-60 > :first-child { flex: 2 }
.asides-40-60 > :last-child { flex: 3 }
.asides-60-40 > :first-child { flex: 3 }
.asides-60-40 > :last-child { flex: 2 }
.asides h2 {
text-align: left;
max-width: none;
}
.asides h3 {
margin-left: 0;
}
.asides p {
margin-left: 0;
margin-right: 0;
}
.action-buttons {
display: flex;
gap: 1.5em;
margin-top: 55px;
align-items: center;
}
.caption {
margin-top: 10px;
font-size: 14px;
text-align: center;
}
.hero-content .caption {
color: #fff;
}
#video-demo {
display: block;
margin-bottom: 2em;
}
div.ap-wrapper div.ap-player {
box-shadow: 10px 10px 15px rgba(0, 0, 0, 0.25);
border-radius: 10px;
}
div.ap-wrapper:fullscreen div.ap-player {
transform: none;
}
.ap-player pre.ap-terminal {
border-color: transparent;
background-color: transparent;
}
.display {
perspective: 1500px;
}
.display .chroma,
.display.dark .chroma,
.display.light .chroma {
background: none !important;
}
.display code {
border-radius: 10px;
width: 100%;
}
.display code {
font-size: 110%;
display: block;
position: relative;
padding: 20px 40px;
white-space: pre;
font-weight: bold;
overflow-x: auto;
box-shadow: 10px 10px 25px rgba(0, 0, 0, 0.1);
}
.display.dark code {
box-shadow: 10px 10px 25px rgba(0, 0, 0, 0.5);
}
.display.left code {
box-shadow: -10px 10px 25px rgba(0, 0, 0, 0.1);
}
.display.right > * {
transform: rotateY(-25deg);
}
.display.left > * {
transform: rotateY(25deg);
}
.display code.light,
.display .chroma.light {
background: #fff linear-gradient(135deg, rgba(255,255,255,0) 0%,rgba(241,241,241,0.5) 46%,rgba(225,225,225,0.5) 46.25%,rgba(246,246,246,0) 100%);
color: #222;
}
.display code.dark,
.ap-player {
/* background: #333 linear-gradient(135deg, rgba(0, 0, 0, 0) 0%,rgba(125, 125, 125, 0.3) 46%,rgba(45, 45, 45, 0.8) 46.8%,rgba(0, 0, 0, 0) 100%); */
background: rgb(0 0 0 / .7) linear-gradient(135deg, transparent 0%, rgb(200 200 200 / 0.25) 46%, rgb(200 200 200 / .15) 46.5%, transparent 100%);
color: #fff;
}
.light .display code.dark {
background: #333 linear-gradient(135deg, rgba(0, 0, 0, 0) 0%,rgba(125, 125, 125, 0.3) 46%,rgba(45, 45, 45, 0.8) 46.8%,rgba(0, 0, 0, 0) 100%);
}
.display .comment {
color: gray;
}
.blinking {
animation: blinking 1s infinite;
background-color: #fff;
width: .5em;
height: 1.2em;
position: relative;
top: 5px;
display: inline-block;
}
@keyframes blinking {
0% { background-color: #fff; }
45% { background-color: #fff; }
60% { background-color: transparent; }
99% { background-color: transparent; }
100% { background-color: #fff; }
}
.rollover-green,
.rollover-purple,
.rollover-blue,
.rollover-yellow {
transition: background-color 250ms;
}
.rollover-green.show { background-color: #41e68fc7; }
.rollover-purple.show { background-color: #a52fa59d; }
.rollover-blue.show { background-color: #0a62aaa3; }
.rollover-yellow.show { background-color: #ffcb50; }
.dark .rollover-green.show { background-color: #41e68e7c; }
.dark .rollover-purple.show { background-color: #a52fa58c; }
.dark .rollover-blue.show { background-color: #0a62aa96; }
.dark .rollover-yellow.show { background-color: #ffcb5064; }
.light .rollover-green.show { background-color: #41e68e4b; }
.light .rollover-purple.show { background-color: rgba(230, 78, 230, 0.522); }
.light .rollover-blue.show { background-color: #65b4f586; }
.light .rollover-yellow.show { background-color: #ffcb50d5; }
.sponsor-experience,
.sponsorship-primer {
max-width: 700px; /* TODO: TEMPORARY! */
}
.sponsor-experience {
border-radius: 10px;
padding: 30px 50px 40px;
color: #fff;
display: flex;
flex-wrap: wrap;
column-gap: 50px;
}
.sponsor-experience::before {
content: "Sponsor Experience";
text-transform: uppercase;
letter-spacing: 4px;
color: rgb(255 255 255 / .7);
font-size: 12px;
font-weight: 800;
text-align: center;
display: block;
width: 100%;
}
.sponsor-experience .experience-content {
flex: 1;
margin-top: 40px;
}
.sponsor-experience .experience-quote {
margin-bottom: 1em;
}
.sponsor-experience .experience-logo {
width: 150px;
}
.sponsor-experience .experience-credit {
display: flex;
gap: 1em;
align-items: center;
}
.sponsor-experience cite {
font-style: normal;
font-size: 14px;
color: rgb(255 255 255 / .7);
}
.sponsor-experience cite b {
display: block;
font-size: 125%;
color: #fff;
}
.sponsor-experience .experience-picture {
width: 3em;
height: 3em;
border-radius: 50%;
object-fit: cover;
background-color: gray;
}
.sponsor-experience.stripe {
background: linear-gradient(to right, #635bff 30%, #d4b8ff);
}
.sponsorship-primer {
border-radius: 10px;
background: linear-gradient(50deg, #670d7f, #531cc7);
padding: 40px 50px;
margin: 50px auto;
color: #ffcffb;
}
.cols .sponsorship-primer:first-child {
margin-top: 0;
}
.sponsorship-primer h3 {
color: white;
font-size: 150%;
font-weight: normal;
border: none;
padding-left: 0;
margin-left: 0;
margin-bottom: 0;
padding-bottom: 0;
}
.sponsorship-primer p {
margin: 1em 0 1.5em;
font-weight: normal;
}
.sponsorship-primer p:last-child {
margin-bottom: 0;
}
@media (max-width: 1000px) {
h1,
h2 {
overflow-wrap: anywhere;
}
h1 {
font-size: 75px;
}
.asides {
flex-direction: column;
margin-top: 25px;
margin-bottom: 25px;
}
.display {
margin-top: 50px;
margin-bottom: 50px;
}
.display.right > * {
transform: none;
}
.display.left > * {
transform: none;
}
}

View file

@ -1,4 +0,0 @@
.hero-content {
margin-bottom: 0;
padding-bottom: 50px;
}

View file

@ -1,239 +0,0 @@
.hero-content {
padding-bottom: 0;
}
p.footnote {
margin-top: 2em;
font-size: 12px;
}
.plan {
--plan-border: 1px solid #eceff133;
border: var(--plan-border);
border-radius: 10px;
flex: 1;
display: flex;
flex-direction: column;
}
:not(.overlay) .plan {
background-image: linear-gradient(220deg, rgba(76, 170, 255, 0.31) 0%, rgba(77, 101, 141, 0.26) 52%, rgba(112, 174, 255, 0.18) 54%, rgba(13, 58, 93, 0.08) 100%);
}
.plan-header,
.plan-content {
padding: 1.5em;
}
.plan-header {
display: flex;
border-bottom: var(--plan-border);
}
.plan-name {
color: #fff;
font-size: 115%;
font-weight: bold;
}
.plan-price {
font-weight: bold;
margin-left: auto;
}
.plan-period {
font-size: 75%;
font-weight: normal;
}
.plan-content {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
font-size: 16px;
}
.plan p,
.plan li {
font-weight: normal;
font-size: 90%;
margin-top: 0;
}
.plan p {
margin-bottom: 1em;
line-height: 1.25;
}
.plan p:last-child {
margin-bottom: 0;
}
.plan-action {
margin-top: auto;
text-align: center;
font-size: 18px;
}
section ul,
section ol {
margin: 1em 0;
}
section li {
margin: .75em 0 .75em 2.5em;
}
ul.check,
ul.minus {
list-style: none;
}
ul.check li::before,
ul.minus li.check::before,
ul.minus li::before,
ul.check li.minus::before {
display: block;
position: absolute;
margin-left: -1.75em;
}
ul.check li::before,
ul.minus li.check::before {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='16' title='check' fill='%23dddddd'%3E%3Cpath d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z' /%3E%3C/svg%3E");
}
ul.minus li::before,
ul.check li.minus::before {
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-minus' width='24' height='24' viewBox='0 0 24 24' stroke-width='4' stroke='%23dddddd' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M5 8l11 0'%3E%3C/path%3E%3C/svg%3E");
}
/* Hover glowy effect taken from here: https://codepen.io/inescodes/pen/PoxMyvX */
.plans {
position: relative;
}
.plan {
--hsl: var(--hue), var(--saturation), var(--lightness);
}
.plan.indie {
--hue: 120;
--saturation: 90%;
--lightness: 40%;
}
.plan.indie .plan-price { color: #38d959; }
.plan.startup {
--hue: 290;
--saturation: 95%;
--lightness: 61%;
}
.plan.startup .plan-price { color: #e66dff; }
.plan.business {
--hue: 180;
--saturation: 100%;
--lightness: 50%;
}
.plan.business .plan-price { color: #50e6ff; }
.plan.enterprise {
--hue: 0;
--saturation: 0%;
--lightness: 50%;
}
.plan.enterprise .plan-price { color: white; }
.overlay {
position: absolute;
inset: 0;
pointer-events: none;
user-select: none;
opacity: var(--opacity, 0);
-webkit-mask: radial-gradient(25rem 25rem at var(--x) var(--y),
#000 1%,
transparent 50%);
mask: radial-gradient(25rem 25rem at var(--x) var(--y),
#000 1%,
transparent 50%);
transition: 400ms mask ease;
will-change: mask;
}
.overlay .plan {
position: absolute;
background-color: hsla(var(--hsl), 0.15); /* alpha channel here is how intense the radial gradient is */
border-color: hsla(var(--hsl), 1);
box-shadow: 0 0 0 1px inset hsl(var(--hsl));
}
:not(.overlay) > .plan {
transition: 400ms background ease;
will-change: background;
}
.overlay .plan:nth-child(2n-1):hover{
background-color: hsla(var(--hsl), 0.2);
}
.plan:nth-child(2n):hover {
--lightness: 25%;
background-color: hsla(var(--hsl), 0.4);
}
/* as a special case, the enterprise ones should go dark */
.plan.enterprise:hover {
background-color: rgb(0 0 0 / .75);
}
.button.purple {
font-size: 90%;
/* Keep the buttons above the glow effect for legibility */
position: relative;
z-index: 2;
}
.sides {
display: flex;
gap: 50px;
align-items: center;
margin: 100px 0;
}
.sides > * {
flex: 1;
}
.side-flex {
display: flex;
gap: 2em;
flex: 1.5;
}
@media (max-width: 1150px) {
.sides {
flex-direction: column;
}
}
@media (max-width: 700px) {
.side-flex {
flex-direction: column;
}
}

View file

@ -1,74 +0,0 @@
h1 {
line-height: auto;
margin-bottom: 1em;
}
.plans {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 150px;
}
.plan {
background: white;
padding: 2em;
color: #222;
border-radius: 15px;
width: 100%;
}
.plan.community {
max-width: calc(min(400px, 85%));
border-top-right-radius: 0;
border-bottom-right-radius: 0;
background: rgb(255 255 255 / .85)
}
.plan.sponsor {
max-width: 600px;
box-shadow: 0 0 25px rgb(0 0 0 / .5);
}
.plan-title {
font-size: 24px;
font-weight: bold;
color: black;
}
.plan.sponsor .plan-title {
color: #9227da;
}
.plan p,
.plan ul {
margin: 1.5em 0;
line-height: 1.4;
}
.plan ul {
margin: -1em 0 2em 2em;
}
.plan a {
color: #3465f6;
}
.plan a:hover {
color: #7134f6;
}
@media (max-width: 900px) {
.plans {
flex-direction: column-reverse;
}
.plan {
min-width: 300px;
}
.plan.community {
border-top-left-radius: 0;
border-bottom-right-radius: 15px;
}
}

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 742 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 739 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1,18 +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 939 707" 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/">
<g>
<path d="M14.129,140.755L0.105,137.072L-0,107.542L21.496,112.707C191.726,157.42 354.607,118.243 505.391,74.798C661.081,29.939 804.376,-18.996 939.021,7.472L939,9.429L939,38.78L924.043,35.849C802.463,10.237 664.073,59.257 513.42,102.664C357.863,147.485 189.747,186.883 14.129,140.755Z" style="fill:url(#topStroke);"/>
<path d="M939,33.014C792.052,-19.345 386.487,159.402 186.064,159.402C90.914,159.402 0.217,137.033 0.217,137.033L0.132,707L939,707L939,33.014Z" style="fill:url(#gradientFill);"/>
</g>
<defs>
<linearGradient id="topStroke" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(994.138,0,0,545.232,-12.3299,-13.0835)">
<stop offset="0" style="stop-color:rgb(0,83,166);stop-opacity:1"/>
<stop offset="1" style="stop-color:rgb(10,112,29);stop-opacity:1"/>
</linearGradient>
<linearGradient id="gradientFill" x1="0.31" y1="0.04" x2="0.69" y2="0.96">
<stop offset="7%" stop-color="#f7fafc"/>
<stop offset="66%" stop-color="#c4d5e0"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 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 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(255,255,255);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(255,255,255);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(255,255,255);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(255,255,255);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(255,255,255);"/>
</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(255,255,255);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(255,255,255);stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;"/>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

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 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>

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 718 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 805 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 859 B

View file

@ -1 +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 152 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><path d="M5.224,3.725c-3.134,0.444 -5.292,3.311 -4.849,6.415l3.371,24.006l14.102,-32.195l-12.624,1.774Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M39.282,23.71l-1.331,-18.448c-0.236,-3.133 -2.956,-5.469 -6.06,-5.262c-0.119,0 -0.266,0.03 -0.385,0.03l-5.439,0.768l11.973,26.874c0.887,-1.094 1.33,-2.513 1.242,-3.962Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M8.86,39.97c0.976,0.119 1.952,-0.029 2.838,-0.413l20.547,-8.692l-9.756,-21.937l-13.629,31.042Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M56.281,7.805l6.474,-0l9.076,24.361l-5.794,-0l-1.715,-4.967l-9.785,-0l-1.715,4.996l-5.647,0l9.106,-24.39Zm-0.296,15.077l6.889,0l-3.341,-9.992l-0.148,-0l-3.4,9.992Z" style="fill:#fff;fill-rule:nonzero;"/><rect x="97.877" y="7.805" width="5.499" height="24.361" style="fill:#fff;fill-rule:nonzero;"/><path d="M107.515,7.805l17.827,-0l0,4.494l-12.328,-0l0,6.829l9.934,-0l-0,4.375l-9.934,0l0,8.633l-5.499,-0l0,-24.331Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M136.606,22.942l-9.135,-15.137l6.238,-0l5.706,10.022l0.147,0l5.972,-10.022l5.854,-0l-9.253,15.077l-0,9.284l-5.529,-0l0,-9.224Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M86.081,7.805l-12.121,-0l0,24.361l5.499,-0l-0,-7.687l6.652,-0c4.612,-0 8.337,-3.725 8.337,-8.337c-0,-4.612 -3.755,-8.337 -8.367,-8.337Zm-0.591,12.387l-6.031,0l-0,-8.1l6.031,-0c2.217,0.029 4.021,1.862 3.991,4.109c-0.059,2.188 -1.833,3.932 -3.991,3.991Z" style="fill:#fff;fill-rule:nonzero;"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5 KiB

View file

@ -1 +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 65 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><g><path d="M12.023,4.86l-2.857,0c-0.052,-0.37 -0.159,-0.698 -0.32,-0.985c-0.161,-0.291 -0.367,-0.539 -0.62,-0.744c-0.252,-0.204 -0.543,-0.361 -0.874,-0.469c-0.326,-0.109 -0.68,-0.163 -1.063,-0.163c-0.692,-0 -1.294,0.171 -1.807,0.515c-0.513,0.339 -0.911,0.835 -1.194,1.487c-0.283,0.648 -0.424,1.435 -0.424,2.362c-0,0.952 0.141,1.753 0.424,2.401c0.287,0.648 0.687,1.137 1.2,1.467c0.513,0.331 1.107,0.496 1.781,0.496c0.379,0 0.729,-0.05 1.05,-0.15c0.327,-0.1 0.616,-0.246 0.868,-0.437c0.252,-0.196 0.461,-0.433 0.626,-0.711c0.17,-0.278 0.287,-0.596 0.353,-0.953l2.857,0.014c-0.074,0.613 -0.259,1.204 -0.554,1.774c-0.292,0.565 -0.685,1.072 -1.181,1.52c-0.492,0.444 -1.079,0.796 -1.762,1.057c-0.678,0.256 -1.446,0.385 -2.302,0.385c-1.192,-0 -2.258,-0.27 -3.197,-0.809c-0.935,-0.54 -1.674,-1.32 -2.218,-2.342c-0.539,-1.022 -0.809,-2.26 -0.809,-3.712c-0,-1.457 0.274,-2.697 0.822,-3.719c0.548,-1.022 1.292,-1.8 2.231,-2.335c0.939,-0.539 1.996,-0.809 3.171,-0.809c0.774,-0 1.491,0.109 2.152,0.326c0.666,0.218 1.255,0.535 1.768,0.953c0.513,0.413 0.931,0.919 1.253,1.52c0.326,0.6 0.535,1.287 0.626,2.061Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M15.49,7.75l-0,5.793l-2.78,0l0,-13.36l2.701,-0l0,5.108l0.118,-0c0.226,-0.592 0.591,-1.055 1.096,-1.39c0.504,-0.339 1.137,-0.509 1.898,-0.509c0.696,0 1.303,0.153 1.82,0.457c0.522,0.3 0.927,0.733 1.214,1.298c0.291,0.561 0.434,1.233 0.43,2.016l0,6.38l-2.779,0l0,-5.884c0.004,-0.618 -0.152,-1.098 -0.47,-1.442c-0.313,-0.344 -0.752,-0.515 -1.317,-0.515c-0.379,-0 -0.714,0.08 -1.005,0.241c-0.287,0.161 -0.513,0.396 -0.679,0.705c-0.16,0.304 -0.243,0.671 -0.247,1.102Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M27.455,13.739c-1.031,-0 -1.918,-0.209 -2.662,-0.627c-0.739,-0.421 -1.309,-1.017 -1.709,-1.787c-0.4,-0.774 -0.6,-1.69 -0.6,-2.746c-0,-1.031 0.2,-1.936 0.6,-2.714c0.4,-0.779 0.963,-1.385 1.69,-1.82c0.73,-0.435 1.587,-0.653 2.57,-0.653c0.661,0 1.276,0.107 1.846,0.32c0.574,0.209 1.074,0.524 1.5,0.946c0.431,0.422 0.766,0.952 1.005,1.592c0.239,0.635 0.359,1.378 0.359,2.231l-0,0.763l-8.461,-0l-0,-1.722l5.845,-0c-0,-0.4 -0.087,-0.755 -0.261,-1.064c-0.174,-0.308 -0.415,-0.55 -0.724,-0.724c-0.305,-0.178 -0.659,-0.267 -1.063,-0.267c-0.422,-0 -0.796,0.098 -1.123,0.293c-0.321,0.192 -0.574,0.45 -0.756,0.777c-0.183,0.321 -0.276,0.68 -0.281,1.076l0,1.638c0,0.495 0.091,0.924 0.274,1.285c0.187,0.361 0.45,0.639 0.79,0.835c0.339,0.195 0.741,0.293 1.206,0.293c0.309,0 0.592,-0.043 0.848,-0.13c0.257,-0.087 0.477,-0.218 0.659,-0.392c0.183,-0.174 0.322,-0.387 0.418,-0.639l2.57,0.17c-0.13,0.617 -0.398,1.156 -0.802,1.617c-0.4,0.457 -0.918,0.814 -1.553,1.07c-0.63,0.253 -1.359,0.379 -2.185,0.379Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M37.109,13.739c-1.026,-0 -1.909,-0.218 -2.649,-0.653c-0.735,-0.439 -1.3,-1.048 -1.696,-1.826c-0.391,-0.779 -0.587,-1.675 -0.587,-2.688c0,-1.026 0.198,-1.927 0.594,-2.701c0.4,-0.778 0.967,-1.385 1.702,-1.82c0.735,-0.439 1.61,-0.659 2.623,-0.659c0.874,0 1.639,0.159 2.296,0.477c0.657,0.317 1.177,0.763 1.559,1.337c0.383,0.574 0.594,1.248 0.633,2.022l-2.622,0c-0.074,-0.5 -0.27,-0.902 -0.587,-1.207c-0.314,-0.308 -0.725,-0.463 -1.233,-0.463c-0.431,0 -0.807,0.118 -1.129,0.352c-0.318,0.231 -0.565,0.568 -0.744,1.012c-0.178,0.443 -0.267,0.98 -0.267,1.611c-0,0.639 0.087,1.183 0.261,1.631c0.178,0.448 0.428,0.789 0.75,1.024c0.322,0.235 0.698,0.352 1.129,0.352c0.317,0 0.602,-0.065 0.854,-0.195c0.257,-0.131 0.468,-0.32 0.633,-0.568c0.17,-0.252 0.28,-0.554 0.333,-0.907l2.622,0c-0.043,0.766 -0.252,1.44 -0.626,2.023c-0.37,0.578 -0.881,1.03 -1.533,1.356c-0.653,0.327 -1.425,0.49 -2.316,0.49Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M44.596,10.66l0.006,-3.334l0.405,0l3.209,-3.803l3.19,-0l-4.312,5.036l-0.659,-0l-1.839,2.101Zm-2.518,2.883l-0,-13.36l2.779,-0l-0,13.36l-2.779,0Zm6.262,0l-2.949,-4.364l1.853,-1.964l4.351,6.328l-3.255,0Z" style="fill:#fff;fill-rule:nonzero;"/><rect x="51.484" y="0.183" width="2.779" height="13.36" style="fill:#fff;fill-rule:nonzero;"/><path d="M54.407,3.523l2.923,9.223l1.482,-4.187l-1.482,-5.036l-2.923,-0Z" style="fill:#fff;fill-rule:nonzero;"/></g><path d="M58.641,19.257l-2.926,-0l-4.528,-4.134l3.844,0l1.873,1.63l4.652,-13.268l3.099,-0l-6.014,15.772Z" style="fill:#0075ff;"/></g></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -1 +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 92 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M10,9.8l10,0l0,-9.8l-19.8,0l0,0.1l9.8,9.7Z" style="fill:#67dbff;"/><path d="M10,9.8l-10,0l0,9.8l19.8,0l0,-0.1l-9.8,-9.7Z" style="fill:#01a3ff;"/><path d="M0.1,19.5l9.9,-0l0,9.9l-9.9,-9.9Z" style="fill:#0162ff;"/><path d="M33.6,19.5l-0,-5.4l5.9,-0l0,-2.5l-5.9,-0l-0,-3.6l6.4,-0l0,-2.6l-9.3,-0l-0,14l2.9,-0l-0,0.1Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M47.4,9.3c-0.2,-0.1 -0.6,-0.2 -1.1,-0.2c-1,0 -1.8,0.5 -2.3,1.2l0,-1l-2.8,0l0,10.2l2.8,-0l0,-6.3c0.2,-0.9 1,-1.4 1.9,-1.4c0.5,-0 1,0.1 1.4,0.3l0,-2.8l0.1,0Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M56.8,19.5l-0,-6.5c-0,-2.4 -1.6,-3.9 -4.3,-3.9c-2.3,-0 -4,1.4 -4.3,3.3l2.7,-0c0.2,-0.6 0.7,-1 1.5,-1c1.1,-0 1.7,0.7 1.7,1.6l-0,0.7c-0.4,-0.3 -1.4,-0.6 -2.3,-0.6c-2.2,-0 -3.9,1.3 -3.9,3.3c0,2.1 1.7,3.3 3.8,3.3c1.1,-0 2.1,-0.4 2.5,-0.7l0,0.5l2.6,-0Zm-2.7,-2.8c-0.3,0.5 -1,0.9 -1.8,0.9c-0.9,0 -1.8,-0.4 -1.8,-1.3c-0,-0.9 0.9,-1.3 1.8,-1.3c0.8,0 1.6,0.3 1.8,0.9l-0,0.8Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M66.8,10.4c-0.6,-0.8 -1.5,-1.3 -2.7,-1.3c-1.1,-0 -2.1,0.4 -2.6,1.1l0,-0.8l-2.8,0l0,10.2l2.8,-0l0,-6.6c0.2,-0.9 0.9,-1.3 1.6,-1.3c1,-0 1.4,0.7 1.4,1.8l0,6.1l2.8,-0l0,-6.6c0.2,-0.9 0.8,-1.3 1.6,-1.3c1,-0 1.5,0.7 1.5,1.8l0,6.1l2.8,-0l0,-6.7c0,-2.3 -1.3,-3.8 -3.4,-3.8c-1.3,-0 -2.3,0.6 -3,1.3Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M81.3,16.2c-0.2,0.9 -0.9,1.3 -1.9,1.3c-1.3,-0 -2.1,-0.9 -2.2,-2.4l6.8,-0l0,-0.9c0,-3 -1.6,-5.1 -4.6,-5.1c-2.8,0 -4.9,2.3 -4.9,5.3c0,3.1 2,5.3 4.9,5.3c2.6,0 4.1,-1.4 4.5,-3.6l-2.6,0l0,0.1Zm-1.9,-4.8c1.2,0 1.8,0.8 1.8,1.9l-3.9,-0c0.3,-1.2 1,-1.9 2.1,-1.9Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M91.5,9.3c-0.2,-0.1 -0.6,-0.2 -1.1,-0.2c-1,0 -1.8,0.5 -2.3,1.2l0,-1l-2.8,0l0,10.2l2.8,-0l0,-6.3c0.2,-0.9 1,-1.4 1.9,-1.4c0.5,-0 1,0.1 1.4,0.3l0,-2.8l0.1,0Z" style="fill:#fff;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.7 KiB

View file

@ -1 +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 38 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><path id="teabag" d="M23.034,20.135l-7.491,-3.6c-0.738,-0.355 -1.056,-1.252 -0.696,-1.996l3.6,-7.49c0.354,-0.738 1.252,-1.056 1.995,-0.696c1.016,0.49 1.6,0.767 1.6,0.767l-0.006,-6.446l0.986,-0.006l0.006,6.912c-0,0 3.388,1.429 4.905,2.367c0.218,0.136 0.602,0.402 0.761,0.85c0.124,0.36 0.118,0.773 -0.059,1.139l-3.6,7.491c-0.366,0.749 -1.264,1.068 -2.001,0.708Z" style="fill:#fff;fill-rule:nonzero;"/><g><g><path d="M36.421,0.397c-0.242,-0.242 -0.567,-0.236 -0.567,-0.236c-0,-0 -6.918,0.389 -10.501,0.472c-0.785,0.018 -1.564,0.035 -2.337,0.041l-0,6.918c-0.325,-0.153 -0.655,-0.313 -0.98,-0.466c0,-2.149 -0.006,-6.446 -0.006,-6.446c-1.712,0.024 -5.265,-0.13 -5.265,-0.13c0,0 -8.346,-0.419 -9.255,-0.501c-0.579,-0.036 -1.328,-0.124 -2.302,0.088c-0.514,0.106 -1.977,0.437 -3.176,1.588c-2.656,2.367 -1.977,6.133 -1.894,6.699c0.1,0.691 0.407,2.609 1.871,4.28c2.703,3.311 8.523,3.234 8.523,3.234c0,0 0.714,1.706 1.806,3.276c1.476,1.954 2.993,3.477 4.468,3.66c3.719,-0 11.15,-0.006 11.15,-0.006c0,-0 0.709,0.006 1.671,-0.608c0.826,-0.502 1.564,-1.381 1.564,-1.381c-0,-0 0.761,-0.815 1.824,-2.674c0.324,-0.573 0.596,-1.127 0.832,-1.653c0,0 3.258,-6.912 3.258,-13.641c-0.065,-2.036 -0.566,-2.396 -0.684,-2.514Zm-29.342,12.047c-1.529,-0.502 -2.178,-1.104 -2.178,-1.104c-0,0 -1.127,-0.791 -1.694,-2.349c-0.974,-2.609 -0.083,-4.203 -0.083,-4.203c0,0 0.496,-1.328 2.273,-1.77c0.814,-0.219 1.83,-0.183 1.83,-0.183c-0,-0 0.419,3.506 0.926,5.56c0.425,1.723 1.464,4.586 1.464,4.586c0,0 -1.54,-0.183 -2.538,-0.537Zm17.725,6.351c0,0 -0.36,0.856 -1.157,0.909c-0.342,0.024 -0.607,-0.071 -0.607,-0.071c-0,0 -0.018,-0.006 -0.313,-0.124l-6.664,-3.246c-0,-0 -0.644,-0.336 -0.756,-0.921c-0.13,-0.478 0.16,-1.068 0.16,-1.068l3.205,-6.605c-0,-0 0.283,-0.573 0.72,-0.767c0.035,-0.018 0.135,-0.059 0.265,-0.089c0.478,-0.124 1.063,0.165 1.063,0.165l6.534,3.17c-0,-0 0.744,0.336 0.903,0.956c0.112,0.437 -0.029,0.827 -0.106,1.015c-0.372,0.909 -3.247,6.676 -3.247,6.676Z" style="fill:#609926;fill-rule:nonzero;"/><path d="M18.955,13.991c-0.484,0.005 -0.909,0.342 -1.021,0.814c-0.112,0.472 0.118,0.962 0.537,1.181c0.454,0.236 1.033,0.106 1.34,-0.319c0.301,-0.419 0.254,-0.998 -0.106,-1.364l1.416,-2.898c0.089,0.006 0.219,0.012 0.366,-0.029c0.242,-0.053 0.419,-0.213 0.419,-0.213c0.248,0.106 0.508,0.224 0.779,0.36c0.284,0.142 0.549,0.289 0.791,0.431c0.053,0.03 0.107,0.065 0.166,0.112c0.094,0.077 0.2,0.183 0.277,0.325c0.112,0.325 -0.112,0.879 -0.112,0.879c-0.136,0.449 -1.086,2.397 -1.086,2.397c-0.478,-0.012 -0.903,0.295 -1.045,0.738c-0.153,0.478 0.065,1.021 0.525,1.257c0.461,0.236 1.027,0.1 1.328,-0.313c0.296,-0.401 0.272,-0.962 -0.065,-1.334c0.113,-0.218 0.219,-0.437 0.331,-0.667c0.295,-0.614 0.797,-1.794 0.797,-1.794c0.053,-0.101 0.336,-0.608 0.159,-1.258c-0.147,-0.672 -0.743,-0.985 -0.743,-0.985c-0.721,-0.467 -1.724,-0.897 -1.724,-0.897c-0,-0 -0,-0.242 -0.065,-0.42c-0.065,-0.182 -0.165,-0.301 -0.23,-0.371c0.277,-0.573 0.555,-1.14 0.832,-1.712c-0.242,-0.118 -0.478,-0.236 -0.72,-0.36c-0.283,0.578 -0.573,1.163 -0.856,1.741c-0.395,-0.006 -0.761,0.207 -0.95,0.555c-0.201,0.372 -0.16,0.832 0.112,1.169c-0.484,0.991 -0.968,1.983 -1.452,2.975Z" style="fill:#609926;fill-rule:nonzero;"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -1 +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 35 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M3.066,0.267l-3.066,0l3.066,3.052l-0,-3.052l-0,0Zm-3.066,1.831l0,10.378l3.066,0l-0,-7.325l-3.066,-3.053Z" style="fill:#ff5859;fill-rule:nonzero;"/><path d="M12.262,12.475l1.533,1.527l4.292,-0l-4.599,-4.579l-5.212,0l0,-6.104l6.132,-0l-0,5.189l3.066,3.052l-0,-11.294l-12.264,0l0,12.209l7.052,0l-0,0Z" style="fill:#ffa300;fill-rule:nonzero;"/><path d="M19.621,2.098l-0,10.378l3.066,0l-0,-7.325l-3.066,-3.053Zm10.424,-1.831l-3.066,3.052l-3.066,-3.052l-4.292,0l7.358,7.325l4.292,-4.273l0,9.157l3.066,0l-0,-12.209l-4.292,0Z" style="fill:#3fd4ad;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 1,015 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 22 KiB

View file

@ -1 +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 45 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><path d="M8.037,7.398l-0,5.128l-1.91,0l-0,-4.86c-0,-1.592 -0.718,-2.277 -1.941,-2.277c-1.359,0 -2.276,0.819 -2.276,2.612l-0,4.525l-1.91,0l-0,-8.906l1.818,0l0,1.113c0.627,-0.821 1.62,-1.171 2.811,-1.171c1.956,0 3.408,1.138 3.408,3.836" style="fill:#fff;fill-rule:nonzero;"/><rect x="8.559" y="3.62" width="1.879" height="8.906" style="fill:#fff;fill-rule:nonzero;"/><path d="M14.085,3.127l-0,0.535l2.234,0l0,1.673l-2.174,-0l0,7.191l-1.9,0l-0,-7.191l-1.338,-0l0,-1.673l1.338,0l-0,-0.568c-0,-1.873 1.019,-3.094 2.904,-3.094c0.416,0 0.826,0.061 1.179,0.192c-0,0.285 0.007,1.865 0.007,1.865c-0.289,-0.217 -0.654,-0.368 -1.05,-0.368c-0.79,0 -1.2,0.485 -1.2,1.438" style="fill:#fff;fill-rule:nonzero;"/><path d="M22.176,12.379c-0.386,0.174 -0.837,0.262 -1.289,0.262c-1.779,0 -2.797,-1.038 -2.797,-3.013l-0,-4.303l-1.338,0l-0,-1.674l1.338,0l-0,-2.042l1.9,-0l0,2.042l1.511,0l0.663,1.674l-2.174,0l0,4.253c0,0.87 0.395,1.339 1.125,1.339c0.395,-0 0.775,-0.117 1.064,-0.369c0,0 -0.003,1.526 -0.003,1.831" style="fill:#fff;fill-rule:nonzero;"/><path d="M8.559,3.16c-0,-1.174 0.839,-2.126 1.875,-2.126c0,0.998 0.003,2.122 0.003,2.122c0,-0 -0.888,0.004 -1.878,0.004" style="fill:#fff;fill-rule:nonzero;"/><path d="M42.137,8.159c0,-1.694 -1.026,-2.773 -2.398,-2.773c-1.357,-0 -2.383,1.079 -2.383,2.773c-0,1.694 1.026,2.773 2.383,2.773c1.372,0 2.398,-1.079 2.398,-2.773Zm-6.682,-0c0,-2.657 1.81,-4.534 4.284,-4.534c2.504,0 4.299,1.877 4.299,4.534c-0,2.657 -1.795,4.55 -4.299,4.55c-2.474,0 -4.284,-1.893 -4.284,-4.55Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M35.417,10.333c-0.426,0.402 -0.946,0.59 -1.502,0.59c-1.382,-0 -2.433,-1.046 -2.433,-2.772c0,-1.71 1.051,-2.772 2.433,-2.772c0.557,0 1.077,0.188 1.505,0.592c0.242,-0.584 0.584,-1.097 1.006,-1.522c-0.654,-0.545 -1.513,-0.829 -2.496,-0.829c-2.538,-0 -4.34,1.875 -4.34,4.531c-0,2.655 1.802,4.547 4.34,4.547c0.98,0 1.835,-0.294 2.489,-0.841c-0.42,-0.426 -0.76,-0.94 -1.002,-1.524" style="fill:#fff;fill-rule:nonzero;"/><path d="M29.128,8.176c-0,-1.42 0.485,-2.705 1.365,-3.618c0.056,-0.058 0.113,-0.114 0.172,-0.169l0.282,-0.712l-1.825,0l-2.569,6.555l-2.554,-6.555l-1.976,0l3.542,8.912l-0.137,0.352c-0.365,0.886 -0.76,1.237 -1.429,1.237c-0.517,-0 -1.034,-0.234 -1.398,-0.619c-0,0 0.001,1.621 0.001,2.052c0.433,0.198 0.931,0.305 1.412,0.305c1.353,0 2.387,-0.618 3.132,-2.641l1.984,-5.01c-0.001,-0.029 -0.002,-0.059 -0.002,-0.089" style="fill:#fff;fill-rule:nonzero;"/></g></svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.4 KiB

View file

@ -1,77 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 312.8 55.5" style="enable-background:new 0 0 312.8 55.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FF5543;}
.st1{fill:#A112FF;}
.st2{fill:#00CBEC;}
.st3{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<path class="st0" d="M34.8,53.8c-2.8,0.5-5.5-1.3-6-4.1L21.2,8.2c-0.5-2.8,1.3-5.5,4.1-6s5.5,1.3,6,4.1l7.6,41.5
C39.4,50.6,37.5,53.3,34.8,53.8z"/>
</g>
<g>
<path class="st1" d="M14.9,46.7C13.1,47,11.3,46.4,10,45c-1.8-2.2-1.6-5.4,0.6-7.2l32.1-27.3c2.2-1.8,5.4-1.6,7.2,0.6
s1.6,5.4-0.6,7.2l-32,27.3C16.6,46.2,15.7,46.6,14.9,46.7z"/>
</g>
<g>
<g>
<path class="st2" d="M50.8,40.1c-0.9,0.2-1.8,0.1-2.6-0.2L8.4,25.8c-2.7-1-4.1-3.9-3.1-6.6s3.9-4.1,6.6-3.1l39.7,14.1
c2.7,1,4.1,3.9,3.1,6.6C54.1,38.6,52.5,39.8,50.8,40.1z"/>
</g>
</g>
</g>
<path class="st3" d="M84,35.1c0-1-0.4-1.8-1.1-2.4c-0.7-0.6-1.6-1.2-2.7-1.7s-2.3-1-3.6-1.6c-1.3-0.5-2.5-1.2-3.6-2s-2-1.8-2.7-3
s-1.1-2.7-1.1-4.5c0-1.6,0.3-3,0.8-4.1c0.5-1.2,1.3-2.1,2.3-2.9c1-0.8,2.1-1.3,3.5-1.7c1.3-0.4,2.8-0.6,4.5-0.6
c1.9,0,3.7,0.2,5.3,0.5s3.1,0.8,4.1,1.4l-2,5.3C87,17.4,86,17,84.6,16.7c-1.4-0.4-2.8-0.5-4.4-0.5c-1.5,0-2.6,0.3-3.4,0.9
s-1.2,1.4-1.2,2.4c0,0.9,0.4,1.7,1.1,2.3c0.7,0.6,1.6,1.2,2.7,1.7s2.3,1.1,3.6,1.6c1.3,0.6,2.5,1.2,3.6,2s2,1.8,2.7,2.9
c0.7,1.2,1.1,2.6,1.1,4.3s-0.3,3.2-0.9,4.5s-1.4,2.3-2.4,3.1s-2.3,1.5-3.8,1.9s-3.1,0.6-4.9,0.6c-2.3,0-4.4-0.2-6.1-0.7
c-1.8-0.4-3.1-0.9-3.9-1.3l2-5.4c0.3,0.2,0.8,0.4,1.3,0.6c0.5,0.2,1.2,0.4,1.8,0.6c0.7,0.2,1.4,0.3,2.2,0.5
c0.8,0.1,1.5,0.2,2.3,0.2c1.9,0,3.3-0.3,4.3-1C83.5,37.3,84,36.4,84,35.1z"/>
<path class="st3" d="M93.1,32.2c0-3.9,1-7,2.9-9.1s4.6-3.2,8.1-3.2c1.9,0,3.5,0.3,4.8,0.9c1.4,0.6,2.5,1.4,3.4,2.5s1.6,2.4,2,3.9
s0.7,3.2,0.7,5c0,3.9-1,7-2.9,9.1s-4.6,3.2-8.1,3.2c-1.9,0-3.5-0.3-4.8-0.9c-1.4-0.6-2.5-1.4-3.4-2.5s-1.6-2.4-2-3.9
C93.3,35.7,93.1,34,93.1,32.2z M99.3,32.2c0,1,0.1,2,0.3,2.8c0.2,0.9,0.5,1.6,0.8,2.3c0.4,0.7,0.9,1.2,1.5,1.5
c0.6,0.4,1.3,0.5,2.2,0.5c1.6,0,2.8-0.6,3.5-1.7c0.8-1.1,1.2-3,1.2-5.4c0-2.1-0.4-3.9-1.1-5.2c-0.7-1.3-1.9-2-3.6-2
c-1.5,0-2.7,0.6-3.5,1.7C99.7,27.8,99.3,29.6,99.3,32.2z"/>
<path class="st3" d="M124.1,20.6v13.2c0,1.9,0.2,3.3,0.7,4.1c0.4,0.8,1.3,1.3,2.6,1.3c1.1,0,2.1-0.3,2.9-1c0.8-0.7,1.3-1.5,1.7-2.5
v-15h6v16.2c0,1.3,0.1,2.5,0.2,3.7c0.1,1.2,0.3,2.3,0.6,3.3h-4.6l-1.1-3.4h-0.2c-0.7,1.2-1.7,2.2-3,2.9c-1.3,0.8-2.8,1.2-4.5,1.2
c-1.2,0-2.2-0.2-3.2-0.5c-0.9-0.3-1.7-0.8-2.3-1.5c-0.6-0.7-1.1-1.7-1.4-2.9S118,36.9,118,35V20.6H124.1z"/>
<path class="st3" d="M155.5,26.2c-1-0.3-1.8-0.5-2.6-0.5c-1.1,0-2,0.3-2.7,0.9s-1.2,1.3-1.5,2.2v15h-6V20.6h4.7l0.7,3.1h0.2
c0.5-1.1,1.2-2,2.1-2.7s2-0.9,3.2-0.9c0.8,0,2.5,0.4,3.4,0.8L155.5,26.2z"/>
<path class="st3" d="M175.1,42.4c-0.9,0.7-2.1,1.2-3.4,1.6c-1.3,0.4-2.7,0.5-4.1,0.5c-1.9,0-3.4-0.3-4.7-0.9
c-1.3-0.6-2.3-1.4-3.1-2.5s-1.4-2.4-1.7-3.9c-0.4-1.5-0.5-3.2-0.5-5c0-3.9,0.9-7,2.7-9.1s4.3-3.2,7.7-3.2c1.7,0,3.1,0.1,4.1,0.4
s2,0.6,2.8,1.1l-1.4,4.9c-0.7-0.3-1.4-0.6-2.1-0.8c-0.7-0.2-1.5-0.3-2.4-0.3c-1.7,0-2.9,0.6-3.8,1.7c-0.9,1.1-1.3,2.9-1.3,5.3
c0,1,0.1,1.9,0.3,2.7s0.5,1.6,1,2.2c0.4,0.6,1,1.1,1.7,1.5s1.5,0.5,2.4,0.5c1,0,1.9-0.1,2.6-0.4c0.7-0.3,1.3-0.6,1.9-1L175.1,42.4z
"/>
<path class="st3" d="M196.4,41.8c-0.9,0.7-2.2,1.4-3.8,1.9s-3.3,0.8-5.1,0.8c-3.8,0-6.5-1.1-8.2-3.3s-2.6-5.2-2.6-9
c0-4.1,1-7.2,2.9-9.2s4.7-3.1,8.2-3.1c1.2,0,2.3,0.2,3.4,0.5s2.1,0.8,3,1.5s1.6,1.7,2.1,2.9c0.5,1.2,0.8,2.7,0.8,4.5
c0,0.7,0,1.3-0.1,2.1c-0.1,0.7-0.2,1.5-0.3,2.3h-14c0.1,2,0.6,3.4,1.5,4.4s2.4,1.5,4.4,1.5c1.3,0,2.4-0.2,3.4-0.6
c1-0.4,1.8-0.8,2.3-1.2L196.4,41.8z M187.7,24.7c-1.6,0-2.8,0.5-3.5,1.4c-0.8,0.9-1.2,2.2-1.4,3.8h8.6c0.1-1.7-0.1-3-0.8-3.9
C190.1,25.2,189.1,24.7,187.7,24.7z"/>
<path class="st3" d="M220.6,43.8c0,3.4-0.9,5.9-2.7,7.5s-4.4,2.4-7.7,2.4c-2.2,0-4-0.2-5.3-0.5s-2.3-0.6-2.9-1l1.3-4.8
c0.7,0.3,1.5,0.6,2.5,0.8s2.1,0.4,3.5,0.4c2.1,0,3.5-0.5,4.3-1.4s1.1-2.2,1.1-3.8V42h-0.2c-1.1,1.5-3,2.2-5.8,2.2
c-3,0-5.2-0.9-6.7-2.8c-1.5-1.9-2.2-4.8-2.2-8.7c0-4.2,1-7.3,3-9.4s4.9-3.2,8.6-3.2c2,0,3.8,0.1,5.3,0.4s2.8,0.6,3.8,1L220.6,43.8
L220.6,43.8z M210.4,39.3c1.2,0,2.1-0.3,2.7-0.8c0.6-0.5,1.1-1.3,1.5-2.4V25.7c-1-0.4-2.2-0.6-3.6-0.6c-1.6,0-2.8,0.6-3.6,1.7
c-0.9,1.2-1.3,3-1.3,5.6c0,2.3,0.4,4,1.1,5.2C207.9,38.8,209,39.3,210.4,39.3z"/>
<path class="st3" d="M238.1,26.2c-1-0.3-1.8-0.5-2.6-0.5c-1.1,0-2,0.3-2.7,0.9s-1.2,1.3-1.5,2.2v15h-6V20.6h4.7l0.7,3.1h0.2
c0.5-1.1,1.2-2,2.1-2.7s2-0.9,3.2-0.9c0.8,0,1.7,0.2,2.7,0.5L238.1,26.2z"/>
<path class="st3" d="M241,21.7c1.2-0.6,2.1-0.8,3.8-1.1c1.7-0.3,3.5-0.5,5.3-0.5c1.6,0,3,0.2,4,0.6s1.9,0.9,2.6,1.7
c0.6,0.7,1.1,1.6,1.3,2.6c0.3,1,0.4,2.1,0.4,3.3c0,1.4,0,2.7-0.1,4.1c-0.1,1.4-0.1,2.7-0.2,4.1c0,1.3,0,2.6,0.1,3.9
s0.3,2.4,0.7,3.6H254l-1-3.2l0,0c-0.6,1-1.5,1.8-2.6,2.5s-2.5,1-4.3,1c-1.1,0-2.1-0.2-2.9-0.5c-0.9-0.3-1.6-0.8-2.2-1.4
s-1.1-1.3-1.4-2.1c-0.3-0.8-0.5-1.7-0.5-2.8c0-1.4,0.3-2.6,1-3.6s1.5-1.8,2.7-2.4s2.6-1,4.3-1.3s3.5-0.3,5.6-0.2
c0.2-1.7,0.1-3-0.4-3.7c-0.5-0.8-1.5-1.1-3.1-1.1c-1.2,0-2.5,0.1-3.8,0.4s-1.9,0.4-2.7,0.8L241,21.7z M248.1,39.2
c1.2,0,2.2-0.3,2.9-0.8s1.2-1.1,1.6-1.7v-3c-1-0.1-1.9-0.1-2.8,0c-0.9,0.1-1.7,0.2-2.3,0.4s-1.2,0.5-1.6,0.9
c-0.4,0.4-0.6,0.9-0.6,1.5c0,0.9,0.3,1.5,0.8,2C246.5,39,247.2,39.2,248.1,39.2z"/>
<path class="st3" d="M263.1,20.6h4.4l0.7,2.8h0.2c0.8-1.2,1.8-2,2.9-2.6s2.4-0.8,4-0.8c2.9,0,5.1,0.9,6.6,2.8s2.2,4.8,2.2,8.9
c0,2-0.2,3.8-0.7,5.4s-1.2,3-2.1,4.1s-2,2-3.3,2.6s-2.8,0.9-4.5,0.9c-1,0-1.8-0.1-2.4-0.2c-0.6-0.1-1.2-0.4-1.9-0.7v9.5h-6V20.6
H263.1z M273.4,25c-1.2,0-2.1,0.3-2.8,0.9s-1.2,1.5-1.6,2.7v9.7c0.4,0.3,0.9,0.6,1.4,0.8s1.2,0.3,2,0.3c1.7,0,3-0.6,3.9-1.8
s1.3-3.2,1.3-6.1c0-2-0.3-3.6-1-4.7C276,25.6,274.9,25,273.4,25z"/>
<path class="st3" d="M301.6,43.8V30.6c0-1.9-0.3-3.3-0.8-4.1s-1.5-1.3-2.9-1.3c-1,0-2,0.3-2.8,1c-0.9,0.7-1.4,1.6-1.7,2.7v14.8h-6
V11.3h6v11.9h0.2c0.7-1,1.7-1.8,2.7-2.4c1.1-0.6,2.5-0.9,4.1-0.9c1.2,0,2.2,0.2,3.1,0.5s1.7,0.8,2.3,1.5s1.1,1.7,1.3,2.9
s0.4,2.7,0.4,4.5v14.5C307.5,43.8,301.6,43.8,301.6,43.8z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6 KiB

View file

@ -1,19 +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 71 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(1,0,0,1,-3877.07,-3945.82)">
<g transform="matrix(0.875155,0,0,2.13261,3732.24,3013.56)">
<g transform="matrix(0.224703,0,0,0.0922108,153.356,433.824)">
<g>
<path d="M414,113.4C414,87.8 401.6,67.6 377.9,67.6C354.1,67.6 339.7,87.8 339.7,113.2C339.7,143.3 356.7,158.5 381.1,158.5C393,158.5 402,155.8 408.8,152L408.8,132C402,135.4 394.2,137.5 384.3,137.5C374.6,137.5 366,134.1 364.9,122.3L413.8,122.3C413.8,121 414,115.8 414,113.4ZM364.6,103.9C364.6,92.6 371.5,87.9 377.8,87.9C383.9,87.9 390.4,92.6 390.4,103.9L364.6,103.9Z" style="fill:white;"/>
<path d="M301.1,67.6C291.3,67.6 285,72.2 281.5,75.4L280.2,69.2L258.2,69.2L258.2,185.8L283.2,180.5L283.3,152.2C286.9,154.8 292.2,158.5 301,158.5C318.9,158.5 335.2,144.1 335.2,112.4C335.1,83.4 318.6,67.6 301.1,67.6ZM295.1,136.5C289.2,136.5 285.7,134.4 283.3,131.8L283.2,94.7C285.8,91.8 289.4,89.8 295.1,89.8C304.2,89.8 310.5,100 310.5,113.1C310.5,126.5 304.3,136.5 295.1,136.5Z" style="fill:white;"/>
<path d="M223.8,61.7L248.9,56.3L248.9,36L223.8,41.3L223.8,61.7Z" style="fill:white;"/>
<rect x="223.8" y="69.3" width="25.1" height="87.5" style="fill:white;"/>
<path d="M196.9,76.7L195.3,69.3L173.7,69.3L173.7,156.8L198.7,156.8L198.7,97.5C204.6,89.8 214.6,91.2 217.7,92.3L217.7,69.3C214.5,68.1 202.8,65.9 196.9,76.7Z" style="fill:white;"/>
<path d="M146.9,47.6L122.5,52.8L122.4,132.9C122.4,147.7 133.5,158.6 148.3,158.6C156.5,158.6 162.5,157.1 165.8,155.3L165.8,135C162.6,136.3 146.8,140.9 146.8,126.1L146.8,90.6L165.8,90.6L165.8,69.3L146.8,69.3L146.9,47.6Z" style="fill:white;"/>
<path d="M79.3,94.7C79.3,90.8 82.5,89.3 87.8,89.3C95.4,89.3 105,91.6 112.6,95.7L112.6,72.2C104.3,68.9 96.1,67.6 87.8,67.6C67.5,67.6 54,78.2 54,95.9C54,123.5 92,119.1 92,131C92,135.6 88,137.1 82.4,137.1C74.1,137.1 63.5,133.7 55.1,129.1L55.1,152.9C64.4,156.9 73.8,158.6 82.4,158.6C103.2,158.6 117.5,148.3 117.5,130.4C117.4,100.6 79.3,105.9 79.3,94.7Z" style="fill:white;"/>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View file

@ -1 +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 95 17" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><circle cx="2.108" cy="8.431" r="2.108" style="fill:#fff;"/><circle cx="8.431" cy="8.431" r="2.108" style="fill:#fff;"/><circle cx="2.108" cy="14.755" r="2.108" style="fill:#fff;fill-opacity:0.2;"/><circle cx="14.755" cy="14.755" r="2.108" style="fill:#fff;fill-opacity:0.2;"/><circle cx="8.431" cy="14.755" r="2.108" style="fill:#fff;"/><circle cx="14.755" cy="8.431" r="2.108" style="fill:#fff;"/><circle cx="2.108" cy="2.108" r="2.108" style="fill:#fff;fill-opacity:0.2;"/><circle cx="8.431" cy="2.108" r="2.108" style="fill:#fff;fill-opacity:0.2;"/><circle cx="14.755" cy="2.108" r="2.108" style="fill:#fff;fill-opacity:0.2;"/><path d="M29.627,15.577c0.596,0 1.081,-0.056 1.659,-0.168l0,-2.163c-0.354,0.131 -0.746,0.168 -1.119,0.168c-0.913,0 -1.249,-0.447 -1.249,-1.305l-0,-4.401l2.368,0l0,-2.163l-2.368,0l-0,-3.207l-2.611,-0l0,3.207l-1.697,0l0,2.163l1.697,0l0,4.643c0,2.052 1.082,3.226 3.32,3.226Zm5.923,0c1.398,0 2.331,-0.466 2.797,-1.193c0.037,0.317 0.149,0.746 0.298,1.007l2.35,-0c-0.131,-0.448 -0.224,-1.156 -0.224,-1.622l-0,-5.11c-0,-2.107 -1.511,-3.3 -4.065,-3.3c-1.94,-0 -3.45,0.727 -4.289,1.79l1.492,1.473c0.671,-0.746 1.529,-1.138 2.573,-1.138c1.268,0 1.827,0.429 1.827,1.063c0,0.541 -0.373,0.914 -2.386,0.914c-1.94,0 -3.898,0.802 -3.898,3.04c0,2.069 1.492,3.076 3.525,3.076Zm0.522,-1.976c-1.007,-0 -1.474,-0.429 -1.474,-1.194c0,-0.671 0.56,-1.119 1.492,-1.119c1.492,0 1.902,-0.093 2.219,-0.41l0,0.802c0,1.063 -0.895,1.921 -2.237,1.921Zm6.396,-9.305l2.722,-0l0,-2.443l-2.722,-0l-0,2.443Zm0.056,11.095l2.61,-0l0,-9.846l-2.61,0l-0,9.846Zm4.512,-0l2.611,-0l-0,-13.24l-2.611,0l0,13.24Zm8.037,0.186c2.872,0 4.345,-1.51 4.345,-3.095c-0,-1.436 -0.727,-2.499 -3.114,-2.928c-1.678,-0.298 -2.723,-0.671 -2.723,-1.249c0,-0.504 0.597,-0.858 1.604,-0.858c0.895,0 1.641,0.299 2.2,0.951l1.66,-1.398c-0.839,-1.045 -2.219,-1.641 -3.86,-1.641c-2.518,-0 -4.084,1.342 -4.084,2.983c0,1.79 1.641,2.592 3.413,2.909c1.473,0.261 2.293,0.541 2.293,1.175c0,0.541 -0.578,0.988 -1.678,0.988c-1.081,0 -1.921,-0.503 -2.312,-1.249l-2.201,1.044c0.541,1.343 2.387,2.368 4.457,2.368Zm10.181,0c1.865,0 3.208,-0.746 4.214,-2.424l-2.088,-1.063c-0.391,0.783 -1.026,1.324 -2.126,1.324c-1.659,0 -2.554,-1.342 -2.554,-2.965c-0,-1.622 0.951,-2.927 2.554,-2.927c1.007,-0 1.679,0.54 2.07,1.361l2.107,-1.119c-0.708,-1.548 -2.107,-2.405 -4.177,-2.405c-3.412,-0 -5.165,2.498 -5.165,5.09c0,2.816 2.126,5.128 5.165,5.128Zm8.373,0c1.398,0 2.331,-0.466 2.797,-1.193c0.037,0.317 0.149,0.746 0.299,1.007l2.349,-0c-0.131,-0.448 -0.224,-1.156 -0.224,-1.622l0,-5.11c0,-2.107 -1.51,-3.3 -4.065,-3.3c-1.939,-0 -3.45,0.727 -4.289,1.79l1.492,1.473c0.671,-0.746 1.529,-1.138 2.573,-1.138c1.268,0 1.828,0.429 1.828,1.063c-0,0.541 -0.373,0.914 -2.387,0.914c-1.939,0 -3.897,0.802 -3.897,3.04c-0,2.069 1.492,3.076 3.524,3.076Zm0.522,-1.976c-1.007,-0 -1.473,-0.429 -1.473,-1.194c-0,-0.671 0.559,-1.119 1.492,-1.119c1.492,0 1.902,-0.093 2.219,-0.41l-0,0.802c-0,1.063 -0.895,1.921 -2.238,1.921Zm6.234,1.79l2.61,-0l0,-13.24l-2.61,0l-0,13.24Zm8.875,0.186c1.921,0 3.469,-0.764 4.327,-2.125l-1.977,-1.268c-0.522,0.82 -1.212,1.268 -2.35,1.268c-1.286,-0 -2.218,-0.709 -2.461,-2.089l7.422,0l-0,-0.914c-0,-2.592 -1.585,-5.09 -4.979,-5.09c-3.226,-0 -4.979,2.517 -4.979,5.109c0,3.692 2.779,5.109 4.997,5.109Zm-2.368,-6.265c0.411,-1.25 1.268,-1.828 2.406,-1.828c1.287,0 2.07,0.765 2.331,1.828l-4.737,-0Z" style="fill:#fff;fill-rule:nonzero;"/></g></svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -1 +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 86 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><path d="M30.123,8.234l-0,-1.352l5.955,0l-0,1.352l-2.216,-0l0,7.527l-1.54,-0l0,-7.527l-2.199,-0Zm9.836,2.483c-0.188,-0.032 -0.408,-0.063 -0.723,-0.063c-0.99,-0 -1.571,0.644 -1.571,1.948l-0,3.143l-1.461,-0l-0,-6.223l1.43,0l-0,0.88l0.031,0c0.283,-0.534 0.911,-1.084 1.744,-1.084c0.236,0 0.393,0.016 0.55,0.031l0,1.368Zm7.008,5.028l-1.43,-0l0,-0.786l-0.031,0c-0.424,0.534 -1.1,1.022 -2.137,1.022c-1.399,-0 -2.986,-1.116 -2.986,-3.347c0,-1.98 1.399,-3.3 3.096,-3.3c1.037,-0 1.666,0.55 2.043,1.037l0.031,-0l0,-0.849l1.414,0l0,6.223Zm-3.221,-1.053c0.959,0 1.854,-0.833 1.854,-2.027c0,-1.257 -0.817,-2.09 -1.838,-2.09c-1.289,0 -1.902,1.037 -1.902,2.059c0,1.037 0.598,2.058 1.886,2.058Zm4.903,-5.17l1.445,0l0,0.786l0.032,-0c0.487,-0.707 1.21,-0.99 1.901,-0.99c1.289,0 2.42,0.849 2.42,2.844l-0,3.583l-1.461,-0l-0,-3.504c-0,-1.069 -0.503,-1.634 -1.336,-1.634c-0.911,-0 -1.54,0.644 -1.54,1.854l-0,3.3l-1.461,-0l-0,-6.239Zm10.213,1.603c-0.063,-0.456 -0.408,-0.754 -0.832,-0.754c-0.503,-0 -0.786,0.314 -0.786,0.66c-0,0.377 0.188,0.644 1.273,1.005c1.335,0.425 1.807,1.116 1.807,1.996c-0,1.147 -0.865,1.949 -2.294,1.949c-1.493,-0 -2.232,-0.818 -2.342,-1.98l1.352,-0c0.062,0.518 0.377,0.911 1.021,0.911c0.55,0 0.864,-0.346 0.864,-0.77c0,-0.471 -0.267,-0.77 -1.304,-1.116c-1.163,-0.377 -1.76,-0.958 -1.76,-1.932c0,-1.022 0.801,-1.776 2.121,-1.776c1.336,0 2.043,0.786 2.2,1.807l-1.32,0Zm2.734,-4.463l1.619,0l-0,1.478l-1.619,-0l0,-1.478Zm0.079,2.86l1.461,0l0,6.239l-1.461,-0l0,-6.239Zm5.971,1.603c-0.063,-0.456 -0.408,-0.754 -0.833,-0.754c-0.503,-0 -0.785,0.314 -0.785,0.66c-0,0.377 0.188,0.644 1.272,1.005c1.336,0.425 1.807,1.116 1.807,1.996c0,1.147 -0.864,1.949 -2.294,1.949c-1.492,-0 -2.231,-0.818 -2.341,-1.98l1.351,-0c0.063,0.518 0.377,0.911 1.022,0.911c0.55,0 0.864,-0.346 0.864,-0.77c-0,-0.471 -0.267,-0.77 -1.304,-1.116c-1.163,-0.377 -1.76,-0.958 -1.76,-1.932c-0,-1.022 0.801,-1.776 2.121,-1.776c1.336,0 2.043,0.786 2.2,1.807l-1.32,0Zm2.09,-1.603l0.786,0l-0,-1.995l1.461,-0l0,1.995l1.556,0l-0,1.226l-1.572,-0l0,2.781c0,0.849 0.267,1.084 0.865,1.084c0.251,0 0.534,-0.047 0.754,-0.11l-0,1.179c-0.33,0.094 -0.739,0.141 -1.1,0.141c-1.556,0 -1.964,-0.942 -1.964,-2.215l-0,-2.86l-0.786,-0l0,-1.226Zm7.778,-0.204c1.949,0 3.331,1.43 3.331,3.316c0,1.838 -1.398,3.347 -3.331,3.347c-1.901,-0 -3.331,-1.462 -3.331,-3.347c-0,-1.933 1.446,-3.316 3.331,-3.316Zm0,5.358c1.1,0 1.854,-0.88 1.854,-2.042c0,-1.1 -0.707,-2.027 -1.854,-2.027c-1.116,-0 -1.854,0.864 -1.854,2.027c-0,1.194 0.848,2.042 1.854,2.042Zm7.637,-4.022c-0.99,-0 -1.572,0.644 -1.572,1.948l0,3.143l-1.461,-0l0,-6.223l1.43,0l0,0.88l0.031,0c0.283,-0.534 0.912,-1.084 1.745,-1.084c0.235,0 0.393,0.016 0.55,0.031l-0,1.368c-0.189,-0.032 -0.409,-0.063 -0.723,-0.063Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M11.314,18.84c-0.409,0 -0.755,-0.33 -0.755,-0.754l0,-13.545c0,-0.408 0.33,-0.754 0.755,-0.754c0.408,-0 0.754,0.33 0.754,0.754l-0,13.545c-0,0.409 -0.346,0.754 -0.754,0.754Zm-3.143,-6.772l-3.614,-0c-0.409,-0 -0.754,-0.33 -0.754,-0.754c-0,-0.425 0.33,-0.755 0.754,-0.755l3.614,0c0.409,0 0.754,0.33 0.754,0.755c0,0.424 -0.345,0.754 -0.754,0.754Zm9.915,-0l-3.63,-0c-0.408,-0 -0.754,-0.33 -0.754,-0.754c0,-0.425 0.33,-0.755 0.754,-0.755l3.614,0c0.409,0 0.755,0.33 0.755,0.755c-0,0.424 -0.33,0.754 -0.739,0.754Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M11.314,22.627c-6.239,0 -11.314,-5.075 -11.314,-11.313c0,-6.239 5.075,-11.314 11.314,-11.314c6.238,0 11.313,5.075 11.313,11.314c0,6.238 -5.075,11.313 -11.313,11.313Zm-0,-21.119c-5.406,0 -9.806,4.4 -9.806,9.806c0,5.405 4.4,9.805 9.806,9.805c5.405,-0 9.805,-4.4 9.805,-9.805c-0,-5.406 -4.4,-9.806 -9.805,-9.806Z" style="fill:#fff;fill-rule:nonzero;"/></g></svg>

Before

Width:  |  Height:  |  Size: 4 KiB

View file

@ -1,41 +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 144 33" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(1,0,0,1,-3665.85,-3944.91)">
<g transform="matrix(0.875155,0,0,2.13261,3732.24,3013.56)">
<g transform="matrix(0.756623,0,0,0.756623,-121.263,330.154)">
<g>
<g>
<g transform="matrix(0.602377,0,0,0.247196,55.728,139.111)">
<path d="M148.9,69.1L114,69.1L114,62.2L135.2,34.6L114.6,34.6L114.6,25.6L148.4,25.6L148.4,33.8L128.7,60.1L148.9,60.1L148.9,69.1Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.602377,0,0,0.247196,55.728,139.111)">
<path d="M185.5,55.4L162.3,55.4C163.1,59.3 165.7,61.7 169.1,61.7C171.4,61.7 174.1,61.1 175.8,57.9L184.7,59.8C182,66.7 176.3,70 169.1,70C160,70 152.5,63.1 152.5,52.7C152.5,42.4 160,35.4 169.2,35.4C178.1,35.4 185.3,42 185.5,52.7L185.5,55.4ZM162.5,49.1L175.5,49.1C174.6,45.6 172,44 169.2,44C166.3,44 163.4,45.8 162.5,49.1Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.602377,0,0,0.247196,55.728,139.111)">
<path d="M213.8,36.3L213.4,46.7L211.6,46.7C204.6,46.7 200.7,50.5 200.7,58.9L200.7,69.1L190.7,69.1L190.7,36.5L200.7,36.5L200.7,42.7C203,38.8 206.4,36 211.6,36C212.4,36 213.1,36.1 213.8,36.3Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.602377,0,0,0.247196,55.728,139.111)">
<path d="M250.6,52.8C250.6,63.1 242.7,70 233.3,70C223.8,70 215.8,63.1 215.8,52.8C215.8,42.5 223.7,35.7 233.3,35.7C242.7,35.7 250.6,42.5 250.6,52.8ZM240.9,52.8C240.9,47.7 237.2,44.4 233.3,44.4C229.2,44.4 225.5,47.8 225.5,52.8C225.5,57.9 229.2,61.2 233.3,61.2C237.2,61.2 240.9,57.9 240.9,52.8Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.602377,0,0,0.247196,55.728,139.111)">
<path d="M289.7,37.2L279.5,39.3C278.7,35.2 275.5,33.2 272.2,33.2C268.7,33.2 266.5,35.1 266.5,37.6C266.5,39.4 267.3,40.7 269.9,41.2L278.6,43.2C285.9,44.9 290.2,49 290.2,55.9C290.2,65.2 282.2,70 272.9,70C263.4,70 255.6,65.3 254.5,56.8L265.2,54.7C266.3,59.2 269.3,61.1 273.5,61.1C277.4,61.1 279.7,59.3 279.7,56.6C279.7,54.7 278.8,53.4 275.8,52.8L267,50.9C261,49.5 255.7,46.2 255.7,38.3C255.7,29.9 262.5,24.6 272.3,24.6C281.5,24.6 288.1,29.3 289.7,37.2Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.602377,0,0,0.247196,55.728,139.111)">
<path d="M329.3,37.2L319.1,39.3C318.3,35.2 315.1,33.2 311.8,33.2C308.3,33.2 306.1,35.1 306.1,37.6C306.1,39.4 306.9,40.7 309.5,41.2L318.2,43.2C325.5,44.9 329.8,49 329.8,55.9C329.8,65.2 321.8,70 312.5,70C303,70 295.2,65.3 294.1,56.8L304.8,54.7C305.9,59.2 308.9,61.1 313.1,61.1C317,61.1 319.3,59.3 319.3,56.6C319.3,54.7 318.4,53.4 315.4,52.8L306.6,50.9C300.6,49.5 295.3,46.2 295.3,38.3C295.3,29.9 302.1,24.6 311.9,24.6C321,24.6 327.7,29.3 329.3,37.2Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.602377,0,0,0.247196,55.728,139.111)">
<path d="M367,69.1L335.9,69.1L335.9,25.6L346.3,25.6L346.3,59.7L367,59.7L367,69.1Z" style="fill:white;fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.602377,0,0,0.247196,55.728,139.111)">
<rect x="7.1" y="67.7" width="20.3" height="20.3" style="fill:rgb(77,112,213);"/>
</g>
<g transform="matrix(0.602377,0,0,0.247196,55.728,139.111)">
<path d="M67.8,47.4L67.8,27.2L47.6,27.2L47.6,7L27.4,7L27.4,27.2L7.1,27.2L7.1,47.4L27.4,47.4L27.4,67.7L47.6,67.7L47.6,87.9L67.8,87.9L67.8,67.7L88.1,67.7L88.1,47.4L67.8,47.4Z" style="fill:rgb(77,112,213);fill-rule:nonzero;"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -1,201 +0,0 @@
// 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);
}
// Find the first element matching a selector which contains the specified text
function findWithContent(selector, text) {
const selected = document.querySelectorAll(selector);
let found = null;
selected.forEach(element => {
if (element.textContent.includes(text)) {
found = element;
}
});
return found;
}
// Find the next element containing the specified text
function findNextText(startElement, nextText) {
let currentElement = startElement.nextSibling;
while (currentElement) {
if (currentElement.textContent.includes(nextText)) {
return currentElement;
}
currentElement = currentElement.nextSibling;
}
return null;
}
// Function to wrap the range between startElement and endElement in a new span
function wrapRangeWithSpan(startElement, endElement, className) {
// Check if startElement and endElement are the same
if (startElement === endElement) {
const span = document.createElement('span');
span.className = className;
span.appendChild(startElement.cloneNode(true));
startElement.parentNode.replaceChild(span, startElement);
return span;
}
// Create a new span element
const span = document.createElement('span');
span.className = className;
// Reference the parent node of the common ancestor
const parent = startElement.parentNode;
// Iterate through siblings and wrap them in the span
const toRemove = [];
for (var node = startElement; node; node = node.nextSibling) {
var clonedNode = node.cloneNode(true);
span.appendChild(clonedNode);
if (node === endElement) {
parent.replaceChild(span, endElement);
toRemove.forEach(node => parent.removeChild(node));
break;
}
toRemove.push(node);
}
return span;
}
// 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) {
if (theme !== "light" && theme !== "dark" && theme !== "system") {
theme = "system";
}
localStorage.setItem("theme", theme);
ready(function() { $_('#current-theme').innerText = theme; });
let lightOrDarkTheme = theme;
if (lightOrDarkTheme == "system") {
lightOrDarkTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? "dark" : "light";
}
applyTheme(lightOrDarkTheme);
}
// applyTheme simply adds or removes the 'dark' class to the HTML.
function applyTheme(lightOrDark) {
if (lightOrDark == "dark") {
$_('html').classList.add('dark');
} else {
$_('html').classList.remove('dark');
}
}
// 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);
}
// hoversplash effect!
on('mouseover', '.button:not(.cool), button:not(.cool)', (e) => {
const elem = document.createElement('span');
elem.classList.add('hover-splash');
// get coordinates relative to container
const rect = e.target.getBoundingClientRect();
const x = e.clientX - rect.left;
const y = e.clientY - rect.top;
elem.style.left = `${x}px`;
elem.style.top = `${y}px`;
e.target.append(elem);
setTimeout(function() {
elem.remove();
}, 1000);
});
// mouseover highlights for feature sections that explain config
on('mouseover', '.rollover', e => {
const target = e.target.closest('.rollover') || e.target;
$$_(`.${target.dataset.rollover}`).forEach(elem => elem.classList.add('show'));
});
on('mouseout', '.rollover', e => {
const target = e.target.closest('.rollover') || e.target;
$$_(`.${target.dataset.rollover}`).forEach(elem => elem.classList.remove('show'));
});
// immediately set the configured theme to avoid flash
setTheme(getTheme());

View file

@ -1,105 +0,0 @@
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');
// generate in-page nav before adding anchor links to headings;
// only show sidebar if there are any navigable headers
// TODO: support h3 too
const spacingMS = 50;
let delay = spacingMS;
const h2elems = $$_('main article h2');
if (h2elems.length) {
$_('#pagenav .heading').style.display = 'block';
h2elems.forEach(elem => {
const a = document.createElement('a');
a.innerText = elem.innerText;
a.href = `#${elem.id}`;
setTimeout(function() {
$_('#pagenav').append(a);
}, delay);
delay += spacingMS;
});
}
// 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);
});
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 => {
// only show the pop-out nav if not on mobile/narrow screen
if ($_('#docs-menu').offsetParent != null) {
return;
}
const response = await fetch("/temporary-markdown-proxy"+e.target.getAttribute('href'));
const markdown = await response.text();
const tokens = marked.lexer(markdown);
// empty the container
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);
autonav.style.display = ''; // unhide the container
} else {
// no links; hide the container so we don't see an empty box
autonav.style.display = 'none';
}
});
});
// toggle left-nav when menu link is clicked
on('click', '#docs-menu', e => {
const nav = $_('#docs-menu-container');
if (!nav.offsetHeight) {
nav.style.height = `${nav.scrollHeight}px`;
} else {
nav.style.height = 0;
}
});
function anchorID(text) {
return text.trim().toLowerCase().replace(/\s/g, '-').replace(/[^\w-]/g, '');
}

View file

@ -1,27 +0,0 @@
const resp = fetch("/resources/testimonials.json").then(async resp => {
const testimonials = await resp.json();
console.log(testimonials);
ready(function() {
for (let i = 0; i < testimonials.length; i++) {
const testimonial = testimonials[i];
const tpl = cloneTemplate('#tpl-testimonial');
$_('.testimonial-picture', tpl).src = testimonial.picture || "";
$_('.testimonial-quote', tpl).innerText = `"${testimonial.quote}"`;
if (testimonial.username) {
$_('.testimonial-name', tpl).innerText = ` @${testimonial.username}`;
} else {
$_('.testimonial-name', tpl).innerText = testimonial.name || "";
}
if (testimonial.link) {
$_('.testimonial-name', tpl).href = testimonial.link;
}
$_('.testimonial-role', tpl).innerText = testimonial.role || "";
if (testimonial.org) {
$_('.testimonial-role', tpl).appendChild(document.createElement("br"));
$_('.testimonial-role', tpl).appendChild(document.createTextNode(testimonial.org));
}
$_(`.testimonial-col:nth-child(${i%3 + 1})`).append(tpl);
}
});
});

View file

@ -1,82 +0,0 @@
// 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
});
}
function trigger(el, eventType) {
if (typeof el === 'string') {
el = $_(el); // assume it was a selector, for convenience
}
// from youmightnotneedjquery.com
if (typeof eventType === 'string' && typeof el[eventType] === 'function') {
el[eventType]();
} else {
const event =
typeof eventType === 'string'
? new Event(eventType, { bubbles: true, cancelable: true })
: eventType;
el.dispatchEvent(event);
}
}
// 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);
}
// isVisible returns true if elem (an element or selector) is visible.
function isVisible(elem) {
if (typeof elem === 'string') {
elem = $_(elem);
}
return elem.offsetParent !== null;
}
// queryParam returns the named query string parameter's value(s).
function queryParam(name) {
const urlSearchParams = new URLSearchParams(window.location.search);
const params = Object.fromEntries(urlSearchParams.entries());
return params[name];
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,216 +0,0 @@
[
{
"name": "Brad Warren",
"role": "Lead Engineer of Certbot",
"org": "Electronic Frontier Foundation (EFF)",
"picture": "https://sea1.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/bmw/144/7797_2.png",
"quote": "I think we should consider making Caddy the default ACME client recommendation. … It allows for better integration between the TLS server and the ACME management of those certificates. … [ACME clients with] Apache and NGINX are inherently more error prone and brittle than having the TLS server manage its certificates itself. … Caddy is written in a memory-safe language. Adoption of memory-safe programming languages is something that both ISRG and the broader computer security community have been encouraging more and more lately.",
"link": "https://community.letsencrypt.org/t/should-our-default-client-recommendation-be-caddy-if-not-why-not/199949?u=mholt"
},
{
"name": "Josh Aas",
"role": "Executive Director",
"org": "Let's Encrypt",
"picture": "https://sea1.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/josh/144/10641_2.png",
"quote": "Caddy is impressive. This is what we want, setting up a secure website.",
"link": "https://www.youtube.com/watch?v=OE5UhQGg_Fo"
},
{
"name": "Stripe",
"role": "Global Leader of Fintech",
"picture": "https://pbs.twimg.com/profile_images/1618575477781807105/iDuRlqTe_400x400.jpg",
"quote": "With its extensible architecture and on-line config API, Caddy powers many of Stripe's internal systems."
},
{
"name": "Robert M.",
"role": "Software Developer",
"quote": "Our client was in deep trouble: they were about to fail PCI compliance. We tossed Caddy in front hours before the deadline and went from 40 to 0 security errors in just minutes. … We have put over 1,000 domains on Caddy so far."
},
{
"username": "lost_RD",
"quote": "Every time I have a problem, google directs me to a \"mature\" Traefik-based solution that barely works, if at all. Then I come here and there's a Caddy solution that blows it out of the water. New plan for today then. ... It's a simple addition to an already-simple config. Traefik is complexity on complexity and a nightmare to debug.",
"link": "https://discord.com/channels/569842713239879680/569842713239879682/1161874875053527081"
},
{
"name": "(Anonymous)",
"role": "Security engineer",
"org": "Subcontractor, UK government",
"quote": "This is a brilliant piece of software. ... Even on first install, the defaults are sane. Truly, great work. … Seriously: Caddy makes it possible for hundreds of thousands of very needy folk to get treatment. It's the backbone of vital systems used by local Doctors Without Borders and local government ministries."
},
{
"name": "John Resig",
"role": "Creator of jQuery",
"picture": "https://pbs.twimg.com/profile_images/1090714620275245056/HS9xcEDk_400x400.jpg",
"quote": "Caddy is pretty incredible. A 3-line config yields a fully A-rated SSL site. Trivial!",
"link": "https://twitter.com/jeresig/status/821768122017398785"
},
{
"name": "Karim Naufal",
"role": "Tech founder",
"quote": "After working for 12 hours straight, unable to make Traefik work and almost going nuts, I switched to Caddy and was able to make it work in 3 lines of code, HTTPS included. Thank you Caddy team for this magically simple and awesome project."
},
{
"name": "owntag",
"username": "owntag",
"picture": "https://pbs.twimg.com/profile_images/1587758883048759296/kPcjpewD_400x400.jpg",
"quote": "We also use @caddyserver to provision SSL certificates for the tracking subdomains of our clients. It's such as breeze to work with, the whole on-demand-tls feature is just amazing.",
"link": "https://twitter.com/owntag/status/1716452404680327358"
},
{
"name": "Pirsch Analytics",
"username": "PirschAnalytics",
"picture": "https://pbs.twimg.com/profile_images/1514620310913486855/G3cLT-l4_400x400.png",
"quote": "Caddy (@caddyserver) is a fantastic web server, load balancer, and reverse proxy. 👍 We use it for http://pirsch.io to dynamically provision SSL certificates for our fully white-labeled customer domains. ... To reduce complexity and overhead, [we removed] Traefik from the server cluster and let Caddy handle everything.",
"link": "https://pirsch.io/blog/how-we-use-caddy-to-provide-custom-domains-for-our-clients/"
},
{
"name": "Wes Bos",
"role": "Full stack JS dev",
"picture": "https://pbs.twimg.com/profile_images/877525007185858562/7G9vGTca_400x400.jpg",
"quote": "Caddy with wildcard domains - I use it on a ton of my projects. [Easy local proxy:] `caddy reverse-proxy --to localhost:80 --from my-project.localhost`. You can also put this config in a Caddyfile. As a bonus you get proper local https without fussin' with certs.",
"link": "https://twitter.com/wesbos/status/1693624280565612982"
},
{
"name": "Zack Siri",
"username": "zacksiri",
"picture": "https://pbs.twimg.com/profile_images/1638764493005287424/q3UB6-c1_400x400.jpg",
"role": "Founder",
"org": "Instellar.app",
"quote": "It's a good thing we bet on Caddy. It's been a pleasure working with Caddy.",
"link": "https://twitter.com/zacksiri/status/1722636053939654992"
},
{
"name": "Denys Konovalov",
"username": "denyskon",
"role": "Open source maintainer",
"org": "Gitea",
"picture": "https://pbs.twimg.com/profile_images/1606649780356227073/oCZpt3gs_400x400.jpg",
"quote": "Haven't been so excited about a small piece of server software for a long time now... @caddyserver is awesome! Easiest config ever (reverse proxy in three lines per site), everything up-and-running without any problems in less than an hour for a server with many services 🤩",
"link": "https://twitter.com/denyskon/status/1729217386975273121"
},
{
"name": "Hirvesh",
"username": "hirvesh",
"picture": "https://pbs.twimg.com/profile_images/1673927322309898240/w3b5-nrN_400x400.jpg",
"role": "Indie hacker",
"quote": "Some time back I heard about @caddyserver and decided to give it a go. Setup was fast and I can now support custom domains + .assistflare.com subdomains easily with HTTPS support! This allows me to move away from Cloudflare for SaaS which charges $0.50 per custom hostname once you reach the threshold of 100 free custom hostnames. Caddy also allows me simplify my setup and provide a more straightforward way for end users to setup their custom domains. I will also be migrating @StomodHQ to use Caddy server down the line.",
"link": "https://twitter.com/hirvesh/status/1727193979211718825"
},
{
"name": "Schlez",
"username": "galstar",
"picture": "https://pbs.twimg.com/profile_images/1200413867437936640/SnCiBgrR_400x400.jpg",
"role": "Developer",
"org": "Vercel",
"quote": "Caddy is so easy it should be considered illegal at this point.",
"link": "https://twitter.com/galstar/status/1726116980082548809"
},
{
"name": "Attila Kun",
"username": "kunattila",
"picture": "https://pbs.twimg.com/profile_images/938381307809234944/Ovw5o3Zb_400x400.jpg",
"quote": "I use Caddy for Shopify app development. It's miles better than their default ngrok based solution because with Caddy, I don't have to tunnel my dev traffic through a public IP. Makes iteration a lot quicker.",
"link": "https://pbs.twimg.com/profile_images/938381307809234944/Ovw5o3Zb_400x400.jpg"
},
{
"name": "Liz Lovelace",
"username": "liz_love_lace",
"picture": "https://pbs.twimg.com/profile_images/1673859861895950336/hIv5l05W_400x400.png",
"quote": "Listen to me: i will only repeat this once: Caddy is the best thing in the world, it's a general-use server that has automatic certificate renewal. Download it, make a config (it's very simple compared to apache/nginx), and it just works forever.",
"link": "https://twitter.com/liz_love_lace/status/1716095188559417566"
},
{
"name": "Alice Maz",
"username": "alicemazzy",
"picture": "https://pbs.twimg.com/profile_images/1355382480312938499/qsJJGS5Q_400x400.jpg",
"quote": "true story I migrated from nginx to caddy after accidentally nuking my webserver and a few months later while visiting my site thought, \"wait I forgot to set up certbot why does https still work... why is this cert more recent than my migration???\" and learned [that Caddy renews it for you].",
"link": "https://twitter.com/alicemazzy/status/1716095955383291949"
},
{
"name": "Leo",
"username": "LeoVasanko",
"picture": "https://pbs.twimg.com/profile_images/1619711322488193025/oPxL0zsG_400x400.jpg",
"role": "Wizard of Code",
"quote": "I've replaced all my Nginx with Caddy. So much easier!",
"link": "https://twitter.com/LeoVasanko/status/1724336627965649232"
},
{
"name": "Schlez",
"username": "last0x00",
"picture": "https://pbs.twimg.com/profile_images/1421150986974924804/R9Ig1fn3_400x400.jpg",
"quote": "Caddy is the best reverse proxy when setting up red team exercises.",
"link": "https://twitter.com/last0x00/status/1717545355993084009"
},
{
"name": "Tom Moor",
"username": "tommoor",
"picture": "https://pbs.twimg.com/profile_images/1512150177024561158/OkpD2gRS_400x400.jpg",
"role": "Developer",
"org": "Linear",
"quote": "I, too, use Caddy in production for exactly this and would recommend over Cloudflare. Enterprise plans used to start at around $40k/year if I remember correctly.",
"link": "https://twitter.com/tommoor/status/1719389293414687018"
},
{
"name": "Shayan",
"username": "ImSh4yy",
"picture": "https://pbs.twimg.com/profile_images/1697511202908188672/hfMoNTSw_400x400.jpg",
"role": "Founder, Developer",
"org": "LogSnag",
"quote": "I was using Cloudflare for SaaS as it made generating SSL certs for vanity subdomains easy. So, I looked into their system and noticed that, yes, most domains are failing. ... I decided to entirely ditch Cloudflare and build my own setup instead. After some research, it turned out Caddy was the perfect tool for this job. It has a neat little feature called On-Demand TLS, which generates SSL certs on the fly. It also lets you specify a callback URL to verify the domain name. ... I got a solid setup up by 7 in the morning, and it worked like a charm. After a quick powernap, I pushed the fix to production, and we finally had a working product 24 hours after launch. ... The verification process is much easier and faster now; things are more reliable and cost me nothing to run. Details: https://logsnag.com/blog/setting-up-vanity-subdomains-for-your-saas-using-caddy",
"link": "https://twitter.com/ImSh4yy/status/1680646609330118657"
},
{
"name": "Tejas Dinkar",
"username": "tdinkar",
"picture": "https://dgraph.io/blog/images/people/tejas.jpg",
"role": "Developer",
"org": "Dgraph",
"quote": "Using Caddy, we were able to build an Ingress controller for Slash GraphQL in about a week. ... Nginx was really problematic, as there was no way to figure out if Nginx had picked up a new ingress or not. It often took 2-5 seconds after our code picked up a new ingress for Nginx to be ready to serve it, meaning that we had to add a lot of time.Sleep() type code, which no one ever wants to read. We briefly tried writing an Nginx module, but C++ makes me want to tear my hair out. ... I found Caddy the easiest to work with. As an added bonus, the Caddy http middleware module is very close to Go's ServeHTTP interface, and as a result, is very easy to build around and test. ... I believe Caddy and it's extensibility are a great fit if you are trying to build a smart proxy or API gateway. ... Caddy's author Matt Holt wrote that Caddy is not just a proxy, it's a powerful, extensible platform for HTTP apps. I couldn't agree more.",
"link": "https://dgraph.io/blog/post/building-a-kubernetes-ingress-controller-with-caddy/"
},
{
"name": "Bas Westerbaan",
"username": "bwesterb",
"picture": "https://pbs.twimg.com/profile_images/1361242338702557184/kL8qHOYw_400x400.jpg",
"role": "Software engineer, mathematician, post-quantum cryptographer",
"org": "Cloudflare",
"quote": "Replaced 140 lines of dense nginx config with a single 33 line Caddyfile. Caddy is great!",
"link": "https://twitter.com/bwesterb/status/1708903488426512668"
},
{
"username": "SwiftOnSecurity",
"picture": "https://pbs.twimg.com/profile_images/1710842853134315521/LImt45Gv_400x400.jpg",
"role": "Computer security person",
"quote": "Next public server I put up, I'm just sticking Caddy on it.",
"link": "https://twitter.com/bwesterb/status/1708903488426512668"
},
{
"username": "Zestyclose_Car1088",
"quote": "Caddy seems too good to be true? I just set it up and it works perfect, straight out of the box.",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/caddy_seems_to_good_to_be_true_i_just_set_it_up/"
},
{
"username": "adamshand",
"picture": "https://styles.redditmedia.com/t5_21nd5b/styles/profileIcon_cazmki08aleb1.jpeg?width=256&height=256&crop=256:256,smart&s=d79c19162ba945486d047329aaca398832a1f519",
"quote": "I switched from Traefik to Caddy a few years ago and have no ragrets.",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/comment/k94wge6/?context=3"
},
{
"username": "wtfblubby",
"picture": "https://styles.redditmedia.com/t5_ky06i/styles/profileIcon_snoob431ae32-bfaa-4d7f-8625-2f9ad077fa31-headshot.png?width=256&height=256&crop=256:256,smart&s=e7f2513f3fb3e8bc33a7a4c46d00517d14b51197",
"quote": "It just runs... Two years straight. Some more services since start of caddy... No worries. Recently added auth with authelia... Still straight forward. Easy setup, always online. That's it. Period.",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/comment/k94nizy/?context=3"
},
{
"username": "jax7778",
"picture": "https://styles.redditmedia.com/t5_cffyd/styles/profileIcon_snoo6c3d35f6-cd7a-4f46-9b32-adaa2e5856c5-headshot.png?width=256&height=256&crop=256:256,smart&s=49d1f3a914e7c91e184d415680a5efdf8c73defa",
"quote": "Caddy is a great, easy web server. It honestly has some pretty good performance too.",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/comment/k98e5ld/?context=3"
},
{
"username": "allocx",
"picture": "https://www.redditstatic.com/avatars/avatar_default_02_24A0ED.png",
"quote": "I moved over in the past year from traefik and it was well worth it. Traefik is over-abstracted and I found it to break randomly and unpredictably when using docker labels. Debugging was a PITA too with the best solution being turning it off and on again (i.e. restarting it, or the service it was proxying). Caddy, on the other hand, just works. The documentation is also orders of magnitude better than traefik (full of confusing abstractions).",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/comment/k95oss3/?utm_source=share&utm_medium=web2x&context=3"
}
]

View file

@ -1,686 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Sponsor the Caddy Project</title>
{{import "/includes/head.html"}}
{{template "head"}}
<link rel="stylesheet" href="/resources/css/marketing.css{{template "cacheBust"}}">
<link rel="stylesheet" href="/resources/css/sponsor.css{{template "cacheBust"}}">
</head>
<body>
<div class="hero">
{{include "/includes/header.html" "dark-header"}}
<div class="wrapper">
<div class="hero-content">
<h1>
<div class="color-dodge">
Lead your industry
</div>
<div class="subheading">
Open source sponsors <b>lead the way</b> to a <b>sustainable solution</b> that doesn't compromise on <b>freedom</b> or <b>functionality</b>.
</div>
</h1>
<div class="cols">
<div class="col">
<h3 class="plain">Caddy has no paywalled features</h3>
<p>
Competing products generate profits by selling commodity features with expensive* proprietary licenses. <b>Only Caddy is 100% truly open source with ALL its functionality.</b> Since nothing is proprietary, you have more control than any enterprise-licensed software.
</p>
<p class="footnote">
* Traefik is <a href="https://marketplace.redhat.com/en-us/products/traefik-enterprise-edition/pricing" target="_blank">$20,000/yr</a> for 4 proxies. NGINX Plus starts at <a href="https://www.nginx.com/pricing/" target="_blank">$3,675/yr</a> per instance.
</p>
</div>
<div class="col">
<h3 class="plain">You wouldn't purchase software that has no support</h3>
<p>
So why would you rely on free software without support? Open source licenses grant you freedom but not assurances of help. A sponsorship ensures your tech stack gets supported and stays maintained.
</p>
</div>
<div class="col">
<h3 class="plain">Sponsorships benefit businesses and the community</h3>
<p>
With sponsorships, we don't have to restrict functionality or instances. Your business exceeds its product support requirements at lower costs, and can scale indefinitely. And the technology stays <b>truly</b> open source. Everyone wins.
</p>
</div>
</div>
<h1>
<div class="subheading">
Questions? <a href="mailto:%63%61%64%64%79%40%64%79%61%6e%69%6d%2e%63%6f%6d" class="email">caddy@dya<em>antispam</em>nim<em>.nospam</em>.com</a>
</div>
</h1>
</div>
</div>
<section class="transparent feature plans">
<div class="wrapper">
<div class="sides">
<div class="left-side">
<h2>Individuals</h2>
<p>
Whether you're a hobbyist, using Caddy professionally, or you just want to support the project, the Individual tiers are designed so you can be meaningfully involved.
</p>
<p>
If you would like some basic support at this level, be sure to go with the Pro tier.
</p>
</div>
<div class="right-side side-flex">
<div class="indie plan">
<div class="plan-header">
<div class="plan-name">
Indie
</div>
<div class="plan-price">
$25<span class="plan-period">/mo.</span>
</div>
</div>
<div class="plan-content">
<p>
Perfect for the individual developer to help sustain the project's ongoing progress.
</p>
<b>Benefits:</b>
<ul class="check">
<li>Exclusive access to <a href="https://matt.life/expert-caddy/">Expert Caddy</a></li>
</ul>
<div class="plan-action">
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=9382" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" 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.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Choose Indie
</a>
</div>
</div>
</div>
<div class="indie plan">
<div class="plan-header">
<div class="plan-name">
Indie Pro
</div>
<div class="plan-price">
$50<span class="plan-period">/mo.</span>
</div>
</div>
<div class="plan-content">
<p>
Independent professionals find this valuable for private support over email.
</p>
<b>Benefits:</b>
<ul class="check">
<li>Exclusive access to <a href="https://matt.life/expert-caddy/">Expert Caddy</a></li>
<li>Occasional email support</li>
</ul>
<div class="plan-action">
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=21876" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" 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.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Choose Indie Pro
</a>
</div>
</div>
</div>
</div>
</div>
<div class="sides">
<div class="left-side">
<h2>Startups</h2>
<p>
You're a-hustlin'! We get it. And we got your backend.
</p>
<p>
These tiers are must-haves for any new business ventures. They provide extreme value to bootstrapped companies that are growing organically.
</p>
<p>
Established businesses should look into the Business tiers below for more ample support and priority response.
</p>
</div>
<div class="right-side side-flex">
<div class="startup plan">
<div class="plan-header">
<div class="plan-name">
Startup
</div>
<div class="plan-price">
$99<span class="plan-period">/mo.</span>
</div>
</div>
<div class="plan-content">
<p>
The ideal choice for bootstrapped, early-stage startups.
</p>
<b>Benefits:</b>
<ul class="check">
<li>Exclusive access to <a href="https://matt.life/expert-caddy/">Expert Caddy</a></li>
<li>Occasional email support</li>
</ul>
<b>Professional services:</b>
<ul class="minus">
<li>No discount</li>
<li class="check">Free onboarding call</li>
</ul>
<div class="plan-action">
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=9399" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" 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.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Choose Startup
</a>
</div>
</div>
</div>
<div class="startup plan">
<div class="plan-header">
<div class="plan-name">
Startup Pro
</div>
<div class="plan-price">
$249<span class="plan-period">/mo.</span>
</div>
</div>
<div class="plan-content">
<p>
Perfect if you want some extra assurance, services, and/or publicity.
</p>
<b>Benefits:</b>
<ul class="check">
<li>Exclusive access to <a href="https://matt.life/expert-caddy/">Expert Caddy</a></li>
<li>Occasional email support</li>
<li>Publicity</li>
<li>Triage priority</li>
</ul>
<b>Professional services:</b>
<ul class="check">
<li>10% discount</li>
<li>Free onboarding call</li>
</ul>
<div class="plan-action">
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=120792" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" 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.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Choose Startup Pro
</a>
</div>
</div>
</div>
</div>
</div>
<div class="sides">
<div class="left-side">
<h2>Businesses</h2>
<p>
Our professional sponsorships are prime for businesses of all sizes that count on Caddy.
</p>
<p>
With an active sponsorship, we can respond to incidents more efficiently. We can prioritize your features and patches. And you'll have stronger guarantees that your web server will continue to be maintained.
</p>
<p>
Business+ covers more services resulting in fewer bills, and offers a bigger discount on custom development.
</p>
</div>
<div class="right-side side-flex">
<div class="business plan">
<div class="plan-header">
<div class="plan-name">
Business
</div>
<div class="plan-price">
$999<span class="plan-period">/mo.</span>
</div>
</div>
<div class="plan-content">
<p>
A must-have plan for any use of Caddy within companies.
</p>
<b>Benefits:</b>
<ul class="check">
<li>Exclusive access to <a href="https://matt.life/expert-caddy/">Expert Caddy</a> for everyone on your team</li>
<li>Exclusive access to private development chat</li>
<li>Email support</li>
<li>Marketing</li>
</ul>
<b>Professional services:</b>
<ul class="check">
<li>20% discount (with 6 mo. commitment)</li>
<li>Free onboarding call</li>
</ul>
<div class="plan-action">
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=9401" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" 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.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Choose Business
</a>
</div>
</div>
</div>
<div class="business plan">
<div class="plan-header">
<div class="plan-name">
Business+
</div>
<div class="plan-price">
$2,999<span class="plan-period">/mo.</span>
</div>
</div>
<div class="plan-content">
<p>
The must-have plan for any serious use of Caddy within companies. Covers support, patches, and onboarding.
</p>
<b>Benefits:</b>
<ul class="check">
<li>Exclusive access to <a href="https://matt.life/expert-caddy/">Expert Caddy</a> for everyone on your team</li>
<li>Exclusive access to private development chat</li>
<li>Limited dedicated support (email, chat, phone and video calls)</li>
<li>Marketing</li>
<li>Triage priority</li>
<li>Development priority</li>
<li>Custom branches/patches</li>
</ul>
<b>Professional services:</b>
<ul class="check">
<li>35% discount (with 6 mo. commitment)</li>
<li>Free onboarding calls</li>
<li>Custom legal (extra)</li>
<li>Custom billing and invoicing</li>
</ul>
<div class="plan-action">
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=120793" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" 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.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Choose Business+
</a>
</div>
</div>
</div>
</div>
</div>
<div class="sides">
<div class="left-side">
<h2>Enterprises</h2>
<p>
You have enterprise requirements&mdash;and we have enterprise solutions. These are our ultimate support and development offerings which provide peace of mind that no other open source plan does.
</p>
<p>
We advise that all large companies and enterprise organizations using Caddy should have an active plan which can mitigate costly incidents, train relevant teams, and provide the assurance of ongoing project maintenance.
</p>
<p>
<b>Enterpise+ is the only plan that guarantees continued development without other sponsors.</b>
</p>
<p>
⚠️ Limited stock. These tiers can sell-out in order to preserve service quality for existing customers.
</p>
</div>
<div class="right-side side-flex">
<div class="enterprise plan">
<div class="plan-header">
<div class="plan-name">
Enterprise
</div>
<div class="plan-price">
$5,900<span class="plan-period">/mo.</span>
</div>
</div>
<div class="plan-content">
<p>
This premium sponsorship package offers everything most organizations need, and can be customized for your company.
</p>
<p>
⚠️ Only <del>2</del> <strong>1</strong> remaining.
</p>
<b>Benefits:</b>
<ul class="check">
<li>Exclusive access to <a href="https://matt.life/expert-caddy/">Expert Caddy</a> for everyone in your company</li>
<li>Exclusive access to private development chat</li>
<li>Limited dedicated support (email, chat, phone and video calls)</li>
<li>Marketing</li>
<li>Triage priority</li>
<li>Development priority</li>
<li>Custom branches/patches</li>
<li>Guaranteed response within 2 business days (excluding vacation)</li>
</ul>
<b>Professional services:</b>
<ul class="check">
<li>50-100% discount (with 6 mo. commitment)</li>
<li>Free onboarding calls</li>
<li>Custom legal (extra)</li>
<li>Custom billing and invoicing</li>
</ul>
<div class="plan-action">
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=120794" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" 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.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Choose Enterprise
</a>
</div>
</div>
</div>
<div class="enterprise plan">
<div class="plan-header">
<div class="plan-name">
Enterprise+
</div>
<div class="plan-price">
$11,900<span class="plan-period">/mo.</span>
</div>
</div>
<div class="plan-content">
<p>
The ultimate plan to support the Caddy project, and the ONLY one that does not rely on other sponsors.
</p>
<p>
⚠️ Only <strong>1</strong> available.
</p>
<b>Benefits:</b>
<ul class="check">
<li>Exclusive access to <a href="https://matt.life/expert-caddy/">Expert Caddy</a> for everyone in your company</li>
<li>Exclusive access to private development chat</li>
<li>Dedicated support (email, chat, phone and video calls)</li>
<li>Marketing</li>
<li>Top triage priority</li>
<li>Top development priority</li>
<li>Custom branches/patches</li>
<li>Guaranteed response within 1 business day (excluding vacation)</li>
<li>Regular check-ins/standups</li>
<li>Influence over project roadmap</li>
<li>Custom supply chain controls</li>
<li>On-sites</li>
</ul>
<b>Professional services:</b>
<ul class="check">
<li><b>Included</b> (except on-call or extreme cases; with 1 year commitment)</li>
<li>Free onboarding calls</li>
<li>Custom legal (most without extra fee)</li>
<li>Custom billing and invoicing</li>
</ul>
<div class="plan-action">
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=334058" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" 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.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Choose Enterprise+
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="overlay cards__inner"></div>
</section>
</div>
<main>
<section class="diagonal down dark feature">
<div class="wrapper">
<h2>
Sponsorship answers
</h2>
<p>
Too often we see the catastrophic results of deploying a web server haphazardly in a commercial environment, only to appeal to the community too late with too little information for a problem that takes too long to solve at that point&mdash;an incident that could have been mitigated with proper training and support.
</p>
<p>
Our take on sponsorships is that all professional and business users of Caddy are expected to invest in a sponsorship, just as we expect tree branches to provide nutrition to their trunk and roots. Our sponsorships are not just feel-good donations. They provide crucial value to companies while sustaining ongoing maintenance.
</p>
<p>
The original author of Caddy, Matt Holt, operates Dyanim, LLC to maintain the project and direct development alongside a global community. Sponsorships are fulfilled by Dyanim, LLC.
</p>
<div class="cols">
<div class="col">
<h3 class="green">Are these software licenses?</h3>
<p>
<b>NO.</b> Sponsorships are separate products which provide support, development and training services, marketing, and various project management features for individuals, organizations, and companies. Your license to the software remains the same regardless of sponsorship status.
</p>
<h3 class="blue">What are professional services?</h3>
<p>
These include any services that are supplemental to routine project maintenance, such as onboarding, training, presenting, and custom development work.
</p>
<h3 class="purple">I need something not listed above.</h3>
<p>
That's OK - contact us and tell us what you need!
</p>
<h3 class="green">Is the only way to pay through GitHub?</h3>
<p>
Nope, our higher tiers can accommodate various forms of payment such as invoices, ACH, wire transfer, or even physical check if needed.
</p>
<h3 class="blue">Will we have to approve a new vendor?</h3>
<p>
Not likely! Our sponsorship subscriptions are managed by GitHub, which is often already an approved vendor for most businesses.
</p>
</div>
<div class="col">
<h3 class="purple">Why sponsorships?</h3>
<p>
Professionals and businesses have numerous requirements that are not satisfied by open source licenses, but the wider community has numerous requirements that are not satisfied by proprietary licenses. For example, companies require support and advanced features that are simply too difficult to provide or develop without a business relationship.
</p>
<p>
To bridge that gap, we offer sponsorships so that our software can remain freely usable while providing businesses the assurances they need when committing to such a crucial technology choice.
</p>
<p>
We also have a lower tier for individuals who just want to support the project without the means of company funding.
</p>
<p>
Our software is compelling because sponsorships keep it fully open without expensive, paid-only features that segment and divide the community. Instead, everyone running Caddy for their homelab or school project is using the same version of the software deployed by large enterprises around the world. That's really amazing, and sponsors make it possible.
</p>
<h3 class="blue">What if we fall into a category we can't budget for?</h3>
<p>
We would ask your product manager why they are deploying software without the means to support it. That said, a well-established business, for example, could sign up for a Startup-tier sponsorship if that is all the budget allows; it would be better than no safety net at all. However, your overall satisfaction will be higher with an appropriate sponsorship tier since we will be able to accommodate your situation better.
</p>
<h3 class="purple">Can we do a one-time sponsorship?</h3>
<p>
Yes! We call those donations, and welcome them warmly with gratitude.
</p>
</div>
</div>
</div>
</section>
<section class="light feature">
<div class="wrapper">
<h2>
Sponsorships are better
</h2>
<p>
Neither companies nor projects are sustainable at scale by open source licenses alone. Some sort of business relationship must be entered to support the company's operations as well as the project's ongoing development.
</p>
<p>
Typically this is solved by charging for the software or specific features, purchasing insurance, hiring a consultant, or tasking an in-house developer to learn and maintain the technology.
</p>
<p>
Sponsorships offer a simple and profound solution to this problem with many advantages over the alternatives:
</p>
<div class="cols">
<div class="col">
<h3 class="green">Consultants</h3>
<p>
Consulting fees are high ($250-500/hr.) to offset the variable nature of the profession, and typically billed hourly, which can be stressful for customers trying to minimize their costs.
</p>
<p>
Consultants vary and may have mixed skill sets rather than expertise in the topic at hand, for example a specific web server. You may also need to approve them as a vendor before doing business.
</p>
<p>
Sponsorships have an affordable regular rate without a hard limit of hours to dispell stress lower your costs. You'll get direct access to the world experts on the software, and you can pay through a known vendor, GitHub.
</p>
</div>
<div class="col">
<h3 class="purple">Insurance</h3>
<p>
Sponsorships are not insurance -- they don't pay back money when there's an incident and can't legally be classified as any kind of coverage. Instead, they help reduce the likelihood and magnitude of incidents in the first place with a comprehensive integration strategy. We'll get to know your setup and help you deploy in the best way possible.
</p>
<p>
Working with insurance is tedious and expensive, but sponsorships are much easier with less paperwork and legal complications.
</p>
</div>
<div class="col">
<h3 class="blue">In-house hire</h3>
<p>
The math is simple: a skilled, in-house developer salary may be $180,000/year. A sponsorship is one or two orders of magnitude less, usually $3k-12k/year, and it gives you access to the world experts.
</p>
<p>
Sponsorships circumvent HR and hiring processes, and because of their ability to train your existing employees, you can still retain that knowledge in-house.
</p>
<p>
If a hire leaves your company, so often does that knowledge. A sponsorship ensures that the skills can persist with your organization through turnover.
</p>
</div>
<div class="col">
<h3 class="purple">Nothing</h3>
<p>
It should go without saying that having <a href="https://words.filippo.io/dispatches/reciprocal/">direct access to the maintainers</a> of the software you rely on is better than having no support, no safety net, and no influence over the project's priorities.
</p>
<p>
With open source software, you're solely on your own. You can appeal to the community, but you won't have a high-attention relationship that can adjust the priorities of the maintainers.
</p>
</div>
</div>
</div>
</section>
<section class="diagonal up light gray feature">
<div class="wrapper">
<h2>
Tangible business results
</h2>
<p>
Sponsorships help you keep your competitive edge, reduce your costs, and may even increase customer loyalty. You'll be able to meet requirements you never thought possible with pure open source.
</p>
<div class="cols">
<div class="col">
<h3 class="purple">Software assurance</h3>
<p>
It's not insurance. <b>It's better</b>. Gain the peace of mind knowing that your sponsorship helps sustain continued development of the project and that you have direct access to the maintainer.
</p>
</div>
<div class="col">
<h3 class="green">Increased customer loyalty</h3>
<p>
Customers feel more loyal toward companies that openly sponsor projects, especially those they use. <b>Tens of thousands</b> of Caddy users are more likely to become and stay your customers when you sponsor the project.
</p>
</div>
<div class="col">
<h3 class="blue">Lower costs, higher margins</h3>
<p>
Operate more efficiently with a Caddy sponsorship, which can prevent consulting fees, hiring expenses, catastrophic production failures, and inefficient configurations.
</p>
</div>
</div>
</div>
</section>
</main>
{{include "/includes/footer.html"}}
<script>
// Original hover glowy effect code from here:
// https://codepen.io/inescodes/pen/PoxMyvX
const cardsContainer = $_(".plans");
const cards = Array.from($$_(".plan"));
const overlay = $_(".overlay");
function applyOverlayMask(e) {
const overlayEl = e.currentTarget;
const x = e.pageX - cardsContainer.offsetLeft;
const y = e.pageY - cardsContainer.offsetTop;
overlayEl.style = `--opacity: 1; --x: ${x}px; --y:${y}px;`;
}
// when the card container resizes, adjust the sizes and positions of all the cards
const observer = new ResizeObserver(entries => {
entries.forEach(entry => {
cards.forEach((cardEl, idx) => {
overlay.children[idx].style.width = `${cardEl.offsetWidth}px`;
overlay.children[idx].style.height = `${cardEl.offsetHeight+1}px`; // not sure why +1 is needed, but anyway...
overlay.children[idx].style.top = `${cardEl.offsetTop}px`;
overlay.children[idx].style.left = `${cardEl.offsetLeft}px`;
});
});
});
observer.observe(cardsContainer);
function initOverlayCard(cardEl) {
const overlayCard = document.createElement("div");
overlayCard.classList = cardEl.classList;
overlay.append(overlayCard);
}
cards.forEach(initOverlayCard);
cardsContainer.addEventListener("pointermove", applyOverlayMask);
</script>
</body>
</html>

View file

@ -1,78 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Caddy help &amp; support</title>
{{import "/includes/head.html"}}
{{template "head"}}
<link rel="stylesheet" href="/resources/css/marketing.css{{template "cacheBust"}}">
<link rel="stylesheet" href="/resources/css/support.css{{template "cacheBust"}}">
</head>
<body>
<div class="hero">
{{include "/includes/header.html" "dark-header"}}
<div class="wrapper">
<div class="hero-content">
<h1>
Support
</h1>
<div class="plans">
<div class="plan community">
<div class="plan-title">Community help</div>
<p>
Participate as volunteers in our forum to exchange free help in our open source community.
</p>
<p>
We welcome your contributions to our community and look forward to meeting you!
</p>
<a href="https://caddy.community" class="button primary">Caddy forum</a>
</div>
<div class="plan sponsor">
<div class="plan-title">Business support</div>
<p>
We offer private and dedicated support for professionals and businesses through most <a href="/sponsor">sponsorship tiers</a>.
</p>
<p>
Sponsors can then email us for expert support: <b><a href="mailto:%63%61%64%64%79%40%64%79%61%6e%69%6d%2e%63%6f%6d" class="email">caddy@dya<em>antispam</em>nim<em>.nospam</em>.com</a></b>
</p>
<p>
Higher tiers enable other forms of support such as chats and phone/video calls.
</p>
<p>
Depending on tier, additional benefits and services include:
</p>
<ul>
<li>Onboarding</li>
<li>Training</li>
<li>Presentations</li>
<li>On-sites</li>
<li>Custom patches and branches</li>
<li>Prioritization</li>
<li>Publicity/marketing</li>
</ul>
<p>
We work with businesses and teams of all sizes, from startups to enterprises, non-profits and government agencies.
</p>
<a href="/sponsor" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" 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.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Sponsor Caddy
</a>
</div>
</div>
</h1>
</div>
</div>
</div>
{{include "/includes/footer.html"}}
</body>
</html>