diff --git a/Caddyfile b/Caddyfile index 84fffc5..35de961 100644 --- a/Caddyfile +++ b/Caddyfile @@ -3,15 +3,22 @@ localhost root * src file_server -templates -encode gzip +templates { + extensions { + hitCounter { + style bright_green + pad_digits 6 + } + } +} +encode zstd gzip try_files {path}.html {path} -redir /docs/json /docs/json/ -redir /docs/modules /docs/modules/ -rewrite /docs/json/* /docs/json/index.html +redir /docs/json /docs/json/ +redir /docs/modules /docs/modules/ +rewrite /docs/json/* /docs/json/index.html rewrite /docs/modules/* /docs/modules/index.html -rewrite /docs/* /docs/index.html +rewrite /docs/* /docs/index.html reverse_proxy /api/* localhost:4444 diff --git a/README.md b/README.md index 088718e..d805baa 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ This is the source of the Caddy website, [caddyserver.com](https://caddyserver.c ## Requirements -- Caddy 2 (installed in your PATH as `caddy`) +- Caddy v2.7.6 or newer (installed in your PATH as `caddy`) +- To display the retro hit counter (just for fun), the [caddy-hitcounter](https://github.com/mholt/caddy-hitcounter) plugin. ## Quick start diff --git a/new/Caddyfile b/new/Caddyfile index 34d48ac..f0d0ffc 100644 --- a/new/Caddyfile +++ b/new/Caddyfile @@ -4,7 +4,14 @@ localhost { file_server - templates + templates { + extensions { + hitCounter { + style bright_green + pad_digits 6 + } + } + } try_files {path}.html {path} diff --git a/new/includes/footer.html b/new/includes/footer.html deleted file mode 100644 index 326609c..0000000 --- a/new/includes/footer.html +++ /dev/null @@ -1,49 +0,0 @@ - \ No newline at end of file diff --git a/new/index.html b/new/index.html deleted file mode 100644 index 578f88f..0000000 --- a/new/index.html +++ /dev/null @@ -1,715 +0,0 @@ - - - - Caddy - The Ultimate Server with Automatic HTTPS - {{import "/includes/head.html"}} - {{template "head"}} - - - - - - - - - - -
- {{include "/includes/header.html" "dark-header"}} - -
-
-
-
-

-
-
The
- Ultimate Server -
-
- makes your sites more secure, more reliable, and more scalable than any other solution. -
-

- -
- Download - Docs - -
-
-
-
-
-
- Play screencast to see Caddy serve HTTPS in < 1 minute. -
-
-
-
- - -
-
-
- - -
- -
-
- Every
- site on
- HTTPS -
-

- By default, Caddy automatically obtains and renews TLS certificates for all your sites. -

- -
-
-

HTTPS/TLS for custom domains

-

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

-
-
-

Dynamically provision certificates

-

- With On-Demand TLS, only Caddy obtains, renews, and maintains certificates on-the-fly during TLS handshakes. Perfect for customer-owned domains. -

-
-
-

Massively scale your TLS

-

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

-
-
- -
-
-

sponsored by users like you

-

- Caddy is free software and relies on sponsorships to survive. Not just donations: sponsorships ensure ongoing development and provide your business with tangible benefits. -

- See sponsorships -
-
-
- -
-
-
-

The most advanced HTTPS server in the world

-
-
-
- -
-
-

All you need for TLS and PKI ๐Ÿ”

-

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

-
-
-

On-line config API โšก๏ธ

-

- Caddy's native configuration is a JSON document that you can export and manipulate with a RESTful config API. -

-
-
-

PCI, HIPAA, and NIST compliant โœ…

-

- Caddy's TLS defaults are secure and pass PCI, HIPAA, and NIST compliance requirements. Yes, defaults: no hassle required. -

-
-
-

HTTPS for localhost ๐Ÿ 

-

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

-
-
-

Cluster coordination ๐ŸŒ

-

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

-
-
-

Fewer moving parts โš™๏ธ

-

- Simplify your infrastructure! Caddy saves money, increases developer productivity, and reduces problems in production. -

-
-
- -
-

Experience it

-

- Discover Caddy's automagic HTTPS features with our hosted demo. -

-

- Point DNS records for any subdomain named caddydemo to either: -

-

- - CNAME - demo.caddyserver.com - -

-

- or: -

-

- - A - 138.68.4.62 - - - AAAA - 2604:a880:2:d0::9dd:9001 - -

-

- Then visit it in your browser. -

-

- You'll notice how Caddy provisions a certificate for your domain automatically. -

-
-

- Not working? 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). -

-

- Example subdomains that could work: caddydemo.example.net, caddydemo.example.com.au -

-

- Caddy is capable of serving TLS for any domains and IPs. This demo is intentionally restricted. -

-
-
-
-
- -
-
- -

Deploy your own PKI with Caddy

-

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

- -

- Powered by open source Smallstep libraries, Caddy becomes a self-managing certificate authority. -

- - -
-
-
- {{ markdown (include "/includes/examples/local-https.md") }} -
-
-
-

Internal and localhost certificates

-

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

- Smallstep -
-
- -
-
-

Make and use your own CAs

-

- Caddy lets you define as many CAs as you need. Root and intermediate keys are generated automatically, and intermediates are renewed before they expire. -

-

- Deploy an instance to act as an ACME server. Then other Caddy instances can use it for their certificates. -

-
-
-
- {{ markdown (include "/includes/examples/custom-ca.md") }} -
-
-
- -
-
-
- {{ markdown (include "/includes/examples/json-automate-certs.md") }} -
-
-
-

Keep certificates renewed

-

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

-

- Additional config can be written to wire up certificate maintenance events, which can then be used to integrate with external scripts and tooling. -

- -
-
- - - - -
-
- -
-
-

Recommended by experts

-

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

-
-
- -

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

-

- —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. 2019. Let's Encrypt: An Automated Certificate Authority to Encrypt the Entire Web. In Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security (CCS '19). Association for Computing Machinery, New York, NY, USA, 2473โ€“2487. https://doi.org/10.1145/3319535.3363192 -

-
-
- -

- "TLS must be enabled by default ... and the Caddy web server is a good and usable example." -

-

- —Katharina Krombholz, Wilfried Mayer, Martin Schmiedecker, and Edgar Weippl. 2017. "I Have No Idea What I'm Doing" - On the Usability of Deploying HTTPS. In 26th USENIX Security Symposium (USENIX Security 17), USENIX Association, Vancouver, BC, 1339-1356. Retrieved from https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz -

-
-
- -

- "No popular server software does [session ticket key rotation], with the exception of Caddy." -

-

- —Drew Springall, Zakir Durumeric, and J. Alex Halderman. 2016. Measuring the Security Harm of TLS Crypto Shortcuts. In Proceedings of the 2016 Internet Measurement Conference (IMC '16), Association for Computing Machinery, Santa Monica, California, USA, 33-47. https://doi.org/10.1145/2987443.2987480 -

-
-
-
-
- -
-
-

A forward-thinking reverse proxy

-

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

- - -
-
-
-

Proxy HTTP, FastCGI, WebSockets, and more

-

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

-
-
-

Dynamic backends

-

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

-
-
-

High availability

-

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

-
-
-
-
- {{ markdown (include "/includes/examples/proxy.md") }} -
-
-
- -
-
-
-

software assurance

-

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

- See sponsorships -
-
-
- -
-
- - -

Production-grade static file server

-

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

- - -
-
-
-

Compression

-

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

-
-
-

Virtual file systems

-

- Serve your static site from anything: the local file system, remote cloud storage, a database, or even embedded in the server binary! -

-
-
-

Range requests, Etags, and more

-

- Unlike many ad-hoc file servers intended for temporary local development, Caddy fully supports Range requests, Etags, and a full production feature set. -

-
-
-

Directory file browser

-

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

-
-
-
-
- {{ markdown (include "/includes/examples/file-server.md") }} -
-
-
- -
-
- -
-
- -
-
-
-
- -
-
-

Flexible configuration compatible with any workflow

-

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

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

JSON config API

-

- Caddy's native config format is JSON, giving you incredible power and flexibility for automated, large-scale deployments. -

- Make dynamic config changes through an intuitive, programmable REST API that offers ACID guarantees. It is also safely scoped, meaning that the URI path restricts changes, making it impossible to accidentally alter other parts of your config. -

- - -
-
- - -
-
-

Caddyfile

-

- Although JSON offers ultimate control, most people prefer to use a Caddyfile 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 just ~15-25% the size of a less-capable nginx config. -

-
-
-
- {{ markdown (include "/includes/examples/website-caddyfile.md") }} -
Actual config used by this site.
-
-
-
- - -
-
-
- $ caddy run \ - --config nginx.conf \ - --adapter nginx
-
-
-
-

Config adapters

-

- Power Caddy with anything, even NGINX config files! -

-

- With first-class support for config adaptation, 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. -

- - -
-
-
-
- - - -
-
-

Unparalleled extensibility

-

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

-

- And because of its unique design, we can offer unlimited features without bloating the code base. Only compile in what you need. -

-
-
-

Unlimited power

-

- Nearly every part of the config that "does something" is pluggable. Caddy offers unlimited capabilities in such a lean package. -

-
-
-

Native CPU performance

-

- No RPC calls or flimsy dependency management. Plugins are compiled into the static binary, making successful deployments certain and runtimes blazing fast. -

-
-
-

Easy to develop

-

- Writing Caddy plugins is as easy as writing a Go package. It's a comfortable and familiar process for any Go programmer. -

-
-
-
-
- - -
-
-

The gold standard web server

-

- Caddy has the most robust TLS stack on the market. With stronger memory safety guarantees than OpenSSL (Apache & 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. -

-

- Caddy was the first server to fully automate public certificate management—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. -

-
-
-

OCSP stapling saves the day

-

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

-
-
-

On guard against revocation

-

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

-
-
-

Stands tall during audits

-

- Companies have deployed Caddy in front of their site just hours before important audits—potentially saving their compliance status—because of Caddy's safe defaults and "batteries included" approach. -

-
-
-
-
- -
-
-

Take everyone's word for it

-

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

-
-
-
-
-
-
-
-
-
- -
- - - {{include "/includes/footer.html"}} - - - - - - - diff --git a/new/resources/css/chroma.css b/new/resources/css/chroma.css deleted file mode 100644 index d0df757..0000000 --- a/new/resources/css/chroma.css +++ /dev/null @@ -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 */ diff --git a/new/resources/css/common.css b/new/resources/css/common.css deleted file mode 100644 index b1ab01b..0000000 --- a/new/resources/css/common.css +++ /dev/null @@ -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; - } -} \ No newline at end of file diff --git a/new/resources/css/docs.css b/new/resources/css/docs.css deleted file mode 100644 index f42dca8..0000000 --- a/new/resources/css/docs.css +++ /dev/null @@ -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; - } -} diff --git a/new/resources/css/home.css b/new/resources/css/home.css deleted file mode 100644 index 9ade01c..0000000 --- a/new/resources/css/home.css +++ /dev/null @@ -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; - } -} \ No newline at end of file diff --git a/new/resources/images/favicon.png b/new/resources/images/favicon.png deleted file mode 100644 index b29a285..0000000 Binary files a/new/resources/images/favicon.png and /dev/null differ diff --git a/new/resources/js/common.js b/new/resources/js/common.js deleted file mode 100644 index 5fa4233..0000000 --- a/new/resources/js/common.js +++ /dev/null @@ -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