diff --git a/404.html b/404.html new file mode 100644 index 0000000..f8414f0 --- /dev/null +++ b/404.html @@ -0,0 +1,3 @@ + +404 Not Found +

404 Not Found

diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..6b89bf3 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +rustic.cli.rs \ No newline at end of file diff --git a/assets/GitHub_Logo_White.png b/assets/GitHub_Logo_White.png new file mode 100644 index 0000000..c61ab9d Binary files /dev/null and b/assets/GitHub_Logo_White.png differ diff --git a/assets/discord-mark-white.svg b/assets/discord-mark-white.svg new file mode 100644 index 0000000..22ee27b --- /dev/null +++ b/assets/discord-mark-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/github-mark-white.svg b/assets/github-mark-white.svg new file mode 100644 index 0000000..d5e6491 --- /dev/null +++ b/assets/github-mark-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/rustic.svg b/assets/rustic.svg new file mode 100644 index 0000000..94d4367 --- /dev/null +++ b/assets/rustic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/community.toml b/community.toml new file mode 100644 index 0000000..f29bfe1 --- /dev/null +++ b/community.toml @@ -0,0 +1,14 @@ +[[items]] +url = "https://discord.gg/WRUWENZnzQ" +image = "/assets/discord-mark-white.svg" +title = "Discord" + +[[items]] +url = "https://github.com/rustic-rs/rustic/discussions" +image = "/assets/GitHub_Logo_White.png" +title = "Discussions" + +[[items]] +url = "https://github.com/rustic-rs/rustic/issues" +image = "/assets/GitHub_Logo_White.png" +title = "Issues" diff --git a/community/index.html b/community/index.html new file mode 100644 index 0000000..68114b8 --- /dev/null +++ b/community/index.html @@ -0,0 +1,238 @@ + + + + + + Community | rustic - fast, encrypted, and deduplicated backups + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ + +
+ + + + + + + + +
+ +
📣 Community
+

You can ask questions in the Discussions or have a look at the +FAQ.

+ + +
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/doc-resources.toml b/doc-resources.toml new file mode 100644 index 0000000..475875b --- /dev/null +++ b/doc-resources.toml @@ -0,0 +1,14 @@ +[[items]] +url = "https://rustic.cli.rs/docs" +image = "https://raw.githubusercontent.com/rustic-rs/assets/main/logos/readme_header_docs.png" +title = "User Documentation" + +[[items]] +url = "https://rustic.cli.rs/dev-docs" +image = "https://raw.githubusercontent.com/rustic-rs/assets/main/logos/readme_header_dev.png" +title = "Developer Documentation" + +[[items]] +url = "https://github.com/rustic-rs/rustic/blob/main/config/README.md" +image = "https://raw.githubusercontent.com/rustic-rs/assets/main/logos/readme_header_config.png" +title = "Config File Documentation" diff --git a/ecosystem/rustic-core/index.html b/ecosystem/rustic-core/index.html new file mode 100644 index 0000000..5d4f42d --- /dev/null +++ b/ecosystem/rustic-core/index.html @@ -0,0 +1,423 @@ + + + + + + rustic_core | rustic - fast, encrypted, and deduplicated backups + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ + +
+ + + + + + + + + + + + +
+ +
rustic core
+

+ +

+

Library for fast, encrypted, and deduplicated backups

+

+ + + + +

+

About

+

This library is powering rustic-rs. A +backup tool that provides fast, encrypted, deduplicated backups. It reads and +writes the restic repository format, which is described in their design +document.

+

Note: rustic_core is in an early development stage and its API is subject +to change in the next releases. If you want to give feedback on that, please +open a thread in our +discussions.

+

Usage

+

Add this to your Cargo.toml:

+
[dependencies]
+rustic_core = "0.1"
+
+

Crate features

+

This crate exposes a few features for controlling dependency usage:

+
    +
  • cli - Enables support for CLI features by enabling merge and clap +features. This feature is disabled by default.
  • +
  • merge - Enables support for merging multiple values into one, which +enables the merge dependency. This is needed for parsing commandline +arguments and merging them into one (e.g. config). This feature is disabled +by default.
  • +
  • clap - Enables a dependency on the clap crate and enables parsing from +the commandline. This feature is disabled by default.
  • +
+

Examples

+

Example: Initializing a new repository

+
use rustic_core::{ConfigOptions, KeyOptions, Repository, RepositoryOptions};
+use simplelog::{Config, LevelFilter, SimpleLogger};
+use std::error::Error;
+
+fn main() -> Result<(), Box<dyn Error>> {
+    // Display info logs
+    let _ = SimpleLogger::init(LevelFilter::Info, Config::default());
+
+    // Init repository
+    let repo_opts = RepositoryOptions::default()
+        .repository("/tmp/repo")
+        .password("test");
+    let key_opts = KeyOptions::default();
+    let config_opts = ConfigOptions::default();
+    let _repo = Repository::new(&repo_opts)?.init(&key_opts, &config_opts)?;
+
+    // -> use _repo for any operation on an open repository
+    Ok(())
+}
+
+

Example: Creating a new snapshot

+
use rustic_core::{BackupOptions, PathList, Repository, RepositoryOptions, SnapshotOptions};
+use simplelog::{Config, LevelFilter, SimpleLogger};
+use std::error::Error;
+
+fn main() -> Result<(), Box<dyn Error>> {
+    // Display info logs
+    let _ = SimpleLogger::init(LevelFilter::Info, Config::default());
+
+    // Open repository
+    let repo_opts = RepositoryOptions::default()
+        .repository("/tmp/repo")
+        .password("test");
+    let repo = Repository::new(&repo_opts)?.open()?.to_indexed_ids()?;
+
+    let backup_opts = BackupOptions::default();
+    let source = PathList::from_string(".")?.sanitize()?;
+    let snap = SnapshotOptions::default()
+        .add_tags("tag1,tag2")?
+        .to_snapshot()?;
+
+    // Create snapshot
+    let snap = repo.backup(&backup_opts, source, snap)?;
+
+    println!("successfully created snapshot:\n{snap:#?}");
+    Ok(())
+}
+
+

Example: Restoring a snapshot

+
use rustic_core::{LocalDestination, LsOptions, Repository, RepositoryOptions, RestoreOptions};
+use simplelog::{Config, LevelFilter, SimpleLogger};
+use std::error::Error;
+
+fn main() -> Result<(), Box<dyn Error>> {
+    // Display info logs
+    let _ = SimpleLogger::init(LevelFilter::Info, Config::default());
+
+    // Open repository
+    let repo_opts = RepositoryOptions::default()
+        .repository("/tmp/repo")
+        .password("test");
+    let repo = Repository::new(&repo_opts)?.open()?.to_indexed()?;
+
+    // use latest snapshot without filtering snapshots
+    let node = repo.node_from_snapshot_path("latest", |_| true)?;
+
+    // use list of the snapshot contents using no additional filtering
+    let streamer_opts = LsOptions::default();
+    let ls = repo.ls(&node, &streamer_opts)?;
+
+    let destination = "./restore/"; // restore to this destination dir
+    let create = true; // create destination dir, if it doesn't exist
+    let dest = LocalDestination::new(destination, create, !node.is_dir())?;
+
+    let opts = RestoreOptions::default();
+    let dry_run = false;
+    // create restore infos. Note: this also already creates needed dirs in the destination
+    let restore_infos = repo.prepare_restore(&opts, ls.clone(), &dest, dry_run)?;
+
+    repo.restore(restore_infos, &opts, ls, &dest)?;
+    Ok(())
+}
+
+

Example: Checking a repository

+
use rustic_core::{CheckOptions, Repository, RepositoryOptions};
+use simplelog::{Config, LevelFilter, SimpleLogger};
+use std::error::Error;
+
+fn main() -> Result<(), Box<dyn Error>> {
+    // Display info logs
+    let _ = SimpleLogger::init(LevelFilter::Info, Config::default());
+
+    // Open repository
+    let repo_opts = RepositoryOptions::default()
+        .repository("/tmp/repo")
+        .password("test");
+    let repo = Repository::new(&repo_opts)?.open()?;
+
+    // Check repository with standard options but omitting cache checks
+    let opts = CheckOptions::default().trust_cache(true);
+    repo.check(opts)?;
+    Ok(())
+}
+
+

Minimum Rust version policy

+

This crate's minimum supported rustc version is 1.68.2.

+

The current policy is that the minimum Rust version required to use this crate +can be increased in minor version updates. For example, if crate 1.0 requires +Rust 1.20.0, then crate 1.0.z for all values of z will also require Rust +1.20.0 or newer. However, crate 1.y for y > 0 may require a newer minimum +version of Rust.

+

In general, this crate will be conservative with respect to the minimum +supported version of Rust.

+

License

+

Licensed under either of:

+ + + +
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/ecosystem/rustic-scheduler/index.html b/ecosystem/rustic-scheduler/index.html new file mode 100644 index 0000000..74f3823 --- /dev/null +++ b/ecosystem/rustic-scheduler/index.html @@ -0,0 +1,300 @@ + + + + + + rustic_scheduler | rustic - fast, encrypted, and deduplicated backups + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ + +
+ + + + + + + + +
+
+ +
+ About +
+ + + + + + + + + + + + +
+ License +
+ + +
+
+ + + +
+ +
rustic scheduler
+

+ +

+

centrally schedule rustic backups

+ +

+ +

+

About

+

rustic scheduler is a client/server application to schedule regular backups on +many clients to one identical repository controlled by a central scheduling +server.

+

It allows to define client groups which are all backed up the same way.

+

Note: rustic scheduler is in an early development stage.

+

Installation

+

From binaries

+

rustic-scheduler is in an early development stage. Please use the nightly builds from here.

+

Getting started

+
    +
  • +

    Copy the rustic-scheduler-server binary to your backup schedule server and +the rustic-scheduler-client binary to all your clients.

    +
  • +
  • +

    Create a config file rustic_schedulder.toml on your backup schedule server.

    +
  • +
  • +

    Run the rustic-scheduler-server binary on your server in the dir containing +the config.

    +
  • +
  • +

    On each client, run

    +
    rustic-scheduler-client <ADDR>
    +
    +

    where <ADDR> is the +websocket address to connect, e.g.

    +
    rustic-scheduler-client http://server.localdomain:3012/ws
    +
    +
  • +
  • +

    Backups on your clients are automatically started based on the configured +schedule(s).

    +
  • +
+

License

+

Licensed under either of:

+ +

at your option.

+ + +
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/ecosystem/rustic-server/index.html b/ecosystem/rustic-server/index.html new file mode 100644 index 0000000..aac7dcb --- /dev/null +++ b/ecosystem/rustic-server/index.html @@ -0,0 +1,281 @@ + + + + + + rustic_server | rustic - fast, encrypted, and deduplicated backups + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ + +
+ + + + + + + + +
+
+ +
+ About +
+ + + + + + + + + +
+ Features +
+ + +
+ License +
+ + +
+
+ + + +
+ +
rustic server
+

+ +

+

REST server for rustic

+ +

+ + +

+

About

+

A REST server built in rust for use with rustic and restic.

+

Works pretty similar to rest-server. +Most features are already implemented.

+

Installation

+

From binaries

+

rustic-server is in an early development stage. Please use the nightly builds from here.

+

Features

+

Allows to give ACLs im TOML format, use option --acl

+

Example TOML file:

+
# default sets ACL for the repo without explicit path
+# (and for the repo under path "default", if exists)
+[default]
+alex = "Read"
+admin = "Modify"
+
+[alex]
+alex = "Modify"
+bob = "Append"
+
+

License

+

rustic-server is open-sourced software licensed under the +GNU Affero General Public License v3.0 or later.

+ + +
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/ecosystem/rustic/index.html b/ecosystem/rustic/index.html new file mode 100644 index 0000000..eafe2cc --- /dev/null +++ b/ecosystem/rustic/index.html @@ -0,0 +1,342 @@ + + + + + + rustic | rustic - fast, encrypted, and deduplicated backups + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ + +
+ + + + + + + + +
+
+ +
+ About +
+ + +
+ Features +
+ + + + + + + + + + + + + + + + + + + + +
+ License +
+ + +
+
+ + + +
+ +
rustic
+

rustic logo

+

fast, encrypted, and deduplicated backups

+

+ + + + + +

+

About

+

rustic is a backup tool that provides fast, encrypted, deduplicated backups.

+

It reads and writes the restic repo format described in the +design document and can be used as a restic replacement in most cases.

+

It is implemented in Rust, a performant, +memory-efficient, and reliable cross-platform systems programming language.

+

Hence rustic supports all major operating systems (Linux, MacOs, *BSD), with +Windows support still being experimental.

+

Features

+
    +
  • Backup data is deduplicated and encrypted.
  • +
  • Backup storage can be local or cloud storages, including cold storages.
  • +
  • Allows multiple clients to concurrently access a backup repository using +lock-free operations.
  • +
  • Backups by default are append-only on the repository.
  • +
  • The operations are robustly designed and can be safely aborted and +efficiently resumed.
  • +
  • Snapshot organization is possible by hostname, backup paths, label and tags. +Also a rich set of metadata is saved with each snapshot.
  • +
  • Retention policies and cleaning of old backups can be highly customized.
  • +
  • Follow-up backups only process changed files, but still create a complete +backup snapshot.
  • +
  • In-place restore only modifies files which are changed.
  • +
  • Uses config files for easy configuration of all every-day commands, see +example config files.
  • +
+

Differences to restic

+

We have collected some improvements of rustic over restic +here.

+

Installation

+

From binaries

+

cargo-binstall

+
cargo binstall rustic-rs
+
+

Windows

+

Scoop

+
scoop install rustic
+
+

Or you can check out the +releases.

+

Nightly binaries are available +here.

+

From source

+

Beware: This installs the latest development version, which might be +unstable.

+
cargo install --git https://github.com/rustic-rs/rustic.git rustic-rs
+
+

crates.io

+
cargo install rustic-rs
+
+

Getting started

+

Please check our +documentation for more +information on how to get started.

+

Minimum Rust version policy

+

This crate's minimum supported rustc version is 1.70.0.

+

The current policy is that the minimum Rust version required to use this crate +can be increased in minor version updates. For example, if crate 1.0 requires +Rust 1.20.0, then crate 1.0.z for all values of z will also require Rust +1.20.0 or newer. However, crate 1.y for y > 0 may require a newer minimum +version of Rust.

+

In general, this crate will be conservative with respect to the minimum +supported version of Rust.

+

License

+

Licensed under either of:

+ +

at your option.

+ + +
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000..79dad65 --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o + + + + + rustic - fast, encrypted, and deduplicated backups + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + +
+ Backups how they should be. +
+
+ The rustic ecosystem contains various tools that make creating backups easier for you. +
+ +
+ Read More ⇩ +
+
+ +
+ + + + + + +
+
+ +
+ Ecosystem +
+ + + + + +
+ Stability +
+ + +
+
+ + + +
+ +
Overview
+

Ecosystem

+

The rustic ecosystem currently consists of the following products:

+

Contributing

+

Tried tools from our ecosystem and not satisfied? Don't just walk away! You can help:

+ +

Do you know how to code or got an idea for an improvement? Don't keep it to +yourself!

+ +

Please make sure, that you read the +contribution guide.

+

Stability

+

Currently our tools are in beta state and miss regression tests. It is not recommended to use them in production backups, yet.

+ + +
+ + + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/js/buttons.js b/js/buttons.js new file mode 100644 index 0000000..2c6e19d --- /dev/null +++ b/js/buttons.js @@ -0,0 +1,6 @@ +/*! + * github-buttons v2.27.0 + * (c) 2023 なつき + * @license BSD-2-Clause + */ +!function(){"use strict";var o=window.document,e=o.location,t=window.Math,r=window.HTMLElement,a=window.XMLHttpRequest,n="github-button",i="https://buttons.github.io/buttons.html",c="github.com",l="https://api."+c,d=a&&"prototype"in a&&"withCredentials"in a.prototype,s=d&&r&&"attachShadow"in r.prototype&&!("prototype"in r.prototype.attachShadow),u=function(o,e){for(var t=0,r=o.length;t'}}},download:{heights:{16:{width:16,path:''}}},eye:{heights:{16:{width:16,path:''}}},heart:{heights:{16:{width:16,path:''}}},"issue-opened":{heights:{16:{width:16,path:''}}},"mark-github":{heights:{16:{width:16,path:''}}},package:{heights:{16:{width:16,path:''}}},play:{heights:{16:{width:16,path:''}}},"repo-forked":{heights:{16:{width:16,path:''}}},"repo-template":{heights:{16:{width:16,path:''}}},star:{heights:{16:{width:16,path:''}}}},Z=function(o,e){o=p(o).replace(/^octicon-/,""),b(M,o)||(o="mark-github");var t=e>=24&&24 in M[o].heights?24:16,r=M[o].heights[t];return'"},A={},F=function(o,e){var t=A[o]||(A[o]=[]);if(!(t.push(e)>1)){var r=g((function(){for(delete A[o];e=t.shift();)e.apply(null,arguments)}));if(d){var n=new a;m(n,"abort",r),m(n,"error",r),m(n,"load",(function(){var o;try{o=JSON.parse(this.responseText)}catch(o){return void r(o)}r(200!==this.status,o)})),n.open("GET",o),n.send()}else{var i=this||window;i._=function(o){i._=null,r(200!==o.meta.status,o.data)};var c=f(i.document)("script",{async:!0,src:o+(-1!==o.indexOf("?")?"&":"?")+"callback=_"}),l=function(){i._&&i._({meta:{}})};m(c,"load",l),m(c,"error",l),x(c,/de|m/,l),i.document.getElementsByTagName("head")[0].appendChild(c)}}},L=function(o,e,t){var r=f(o.ownerDocument),a=o.appendChild(r("style",{type:"text/css"})),n="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;line-height:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;display:inline-flex;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:16px;padding:5px 10px;font-size:12px;line-height:16px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor;overflow:visible}"+function(o){if(null==o)return y.light;if(b(y,o))return y[o];var e=v(o,";",":",(function(o){return o.replace(/^[ \t\n\f\r]+|[ \t\n\f\r]+$/g,"")}));return y[b(y,e["no-preference"])?e["no-preference"]:"light"]+C("light",e.light)+C("dark",e.dark)}(e["data-color-scheme"]);a.styleSheet?a.styleSheet.cssText=n:a.appendChild(o.ownerDocument.createTextNode(n));var i="large"===p(e["data-size"]),d=r("a",{className:"btn",href:e.href,rel:"noopener",target:"_blank",title:e.title||void 0,"aria-label":e["aria-label"]||void 0,innerHTML:Z(e["data-icon"],i?16:14)+" "},[r("span",{},[e["data-text"]||""])]),s=o.appendChild(r("div",{className:"widget"+(i?" widget-lg":"")},[d])),u=d.hostname.replace(/\.$/,"");if(("."+u).substring(u.length-c.length)!=="."+c)return d.removeAttribute("href"),void t(s);var h=(" /"+d.pathname).split(/\/+/);if(((u===c||u==="gist."+c)&&"archive"===h[3]||u===c&&"releases"===h[3]&&("download"===h[4]||"latest"===h[4]&&"download"===h[5])||u==="codeload."+c)&&(d.target="_top"),"true"===p(e["data-show-count"])&&u===c&&"marketplace"!==h[1]&&"sponsors"!==h[1]&&"orgs"!==h[1]&&"users"!==h[1]&&"-"!==h[1]){var g,m;if(!h[2]&&h[1])m="followers",g="?tab=followers";else if(!h[3]&&h[2])m="stargazers_count",g="/stargazers";else if(h[4]||"subscription"!==h[3])if(h[4]||"fork"!==h[3]){if("issues"!==h[3])return void t(s);m="open_issues_count",g="/issues"}else m="forks_count",g="/forks";else m="subscribers_count",g="/watchers";var w=h[2]?"/repos/"+h[1]+"/"+h[2]:"/users/"+h[1];F.call(this,l+w,(function(o,e){if(!o){var a=e[m];s.appendChild(r("a",{className:"social-count",href:e.html_url+g,rel:"noopener",target:"_blank","aria-label":a+" "+m.replace(/_count$/,"").replace("_"," ").slice(0,a<2?-1:void 0)+" on GitHub"},[(""+a).replace(/\B(?=(\d{3})+(?!\d))/g,",")]))}t(s)}))}else t(s)},_=window.devicePixelRatio||1,E=function(o){return(_>1?t.ceil(t.round(o*_)/_*2)/2:t.ceil(o))||0},G=function(o,e){o.style.width=e[0]+"px",o.style.height=e[1]+"px"},T=function(e,r){if(null!=e&&null!=r)if(e.getAttribute&&(e=function(o){var e={href:o.href,title:o.title,"aria-label":o.getAttribute("aria-label")};return u(["icon","color-scheme","text","size","show-count"],(function(t){var r="data-"+t;e[r]=o.getAttribute(r)})),null==e["data-text"]&&(e["data-text"]=o.textContent||o.innerText),e}(e)),s){var a=h("span");L(a.attachShadow({mode:"closed"}),e,(function(){r(a)}))}else{var n=h("iframe",{src:"javascript:0",title:e.title||void 0,allowtransparency:!0,scrolling:"no",frameBorder:0});G(n,[0,0]),n.style.border="none";var c=function(){var a,l=n.contentWindow;try{a=l.document.body}catch(e){return void o.body.appendChild(n.parentNode.removeChild(n))}w(n,"load",c),L.call(l,a,e,(function(o){var a=function(o){var e=o.offsetWidth,r=o.offsetHeight;if(o.getBoundingClientRect){var a=o.getBoundingClientRect();e=t.max(e,E(a.width)),r=t.max(r,E(a.height))}return[e,r]}(o);n.parentNode.removeChild(n),k(n,"load",(function(){G(n,a)})),n.src=i+"#"+(n.name=function(o,e,t,r){null==e&&(e="&"),null==t&&(t="="),null==r&&(r=window.encodeURIComponent);var a=[];for(var n in o){var i=o[n];null!=i&&a.push(r(n)+t+r(i))}return a.join(e)}(e)),r(n)}))};m(n,"load",c),o.body.appendChild(n)}};e.protocol+"//"+e.host+e.pathname===i?L(o.body,v(window.name||e.hash.replace(/^#/,"")),(function(){})):function(e){if("complete"===o.readyState||"loading"!==o.readyState&&!o.documentElement.doScroll)setTimeout(e);else if(o.addEventListener){var t=g(e);k(o,"DOMContentLoaded",t),k(window,"load",t)}else x(o,/m/,e)}((function(){var e,t=o.querySelectorAll?o.querySelectorAll("a."+n):(e=[],u(o.getElementsByTagName("a"),(function(o){-1!==(" "+o.className+" ").replace(/[ \t\n\f\r]+/g," ").indexOf(" "+n+" ")&&e.push(o)})),e);u(t,(function(o){T(o,(function(e){o.parentNode.replaceChild(e,o)}))}))}))}(); \ No newline at end of file diff --git a/learn/index.html b/learn/index.html new file mode 100644 index 0000000..f03bdf9 --- /dev/null +++ b/learn/index.html @@ -0,0 +1,237 @@ + + + + + + Learn | rustic - fast, encrypted, and deduplicated backups + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ + +
+ + + + + + + + +
+ +
📚 Documentation
+

To help you find your way around the rustic ecosystem, we have compiled the following resources:

+ + +
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/products.toml b/products.toml new file mode 100644 index 0000000..488eb84 --- /dev/null +++ b/products.toml @@ -0,0 +1,23 @@ +[[items]] +url = "ecosystem/rustic" +image = "https://raw.githubusercontent.com/rustic-rs/assets/main/logos/readme_header.png" +title = "rustic" +subtitle = "deduplicated, encrypted backups" + +[[items]] +url = "ecosystem/rustic-scheduler" +image = "https://raw.githubusercontent.com/rustic-rs/assets/main/logos/readme_header_scheduler.png" +title = "rustic scheduler" +subtitle = "centrally schedule rustic backups" + +[[items]] +url = "ecosystem/rustic-server" +image = "https://raw.githubusercontent.com/rustic-rs/assets/main/logos/readme_header_server.png" +title = "rustic server" +subtitle = "REST server for rustic and restic" + +[[items]] +url = "ecosystem/rustic-core" +image = "https://raw.githubusercontent.com/rustic-rs/assets/main/logos/readme_header_core.png" +title = "rustic core" +subtitle = "the library powering rustic" diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..16adbb0 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://rustic.cli.rs/sitemap.xml diff --git a/rustic.css b/rustic.css new file mode 100644 index 0000000..fd61fea --- /dev/null +++ b/rustic.css @@ -0,0 +1 @@ +.heading-text{font-family:var(--header-font-family);font-size:var(--font-size-5);font-weight:var(--font-weight-7);padding:var(--size-5) var(--size-000) var(--size-1) var(--size-000);color:var(--primary-text-color);margin-bottom:var(--size-3)}h1,.title-text{font-family:var(--header-font-family);font-size:var(--font-size-4);font-weight:var(--font-weight-7);color:var(--primary-text-color);border-left:var(--primary-color) var(--border-size-3) solid;padding-top:var(--size-2);padding-left:var(--size-3)}h2,.subtitle-text{font-family:var(--header-font-family);font-size:var(--font-size-2);font-weight:var(--font-weight-7);color:var(--primary-text-color)}.text{font-family:var(--text-font-family);font-size:var(--font-size-5);font-weight:var(--font-weight-2);line-height:var(--size-5);letter-spacing:var(--font-letterspacing-1);color:var(--primary-text-color)}.subtext{font-family:var(--text-font-family);font-size:var(--size-relative-7);font-weight:var(--font-weight-4);letter-spacing:var(--font-letterspacing-0)}.remark{font-family:var(--text-font-family);font-size:var(--size-relative-3);font-weight:var(--font-weight-4);color:var(--primary-text-color)}.content{display:flex;flex-flow:column wrap;word-wrap:break-word;margin:var(--size-3) 0 var(--size-000) 0}.content *{word-wrap:break-word}.content ul{max-width:80vw}.content p{display:block;margin:var(--size-1) var(--size-1) var(--size-3) var(--size-1);max-width:90vw}.content p>img{height:auto}.content h1,.content h2{font-family:var(--header-font-family);font-weight:var(--font-weight-7);color:var(--primary-text-color);margin:var(--size-1) var(--size-1) var(--size-3) var(--size-1)}.content>h3,.content h4,.content h5,.content h6{font-family:var(--header-font-family);font-weight:var(--font-weight-4);font-size:var(--font-size-2);color:var(--primary-text-color);margin:var(--size-1) var(--size-1) var(--size-3) var(--size-1)}.content pre{overflow-x:auto;padding:var(--size-3) var(--size-4);white-space:pre;word-wrap:normal;background-color:var(--code-background-color);color:var(--code-color);font-size:var(--font-size-1);font-family:monospace;border-radius:var(--size-1);margin:var(--size-1) var(--size-1) var(--size-3) var(--size-1)}.content code{background-color:var(--code-background-color);color:var(--code-color);font-size:var(--font-size-1);font-weight:normal;padding:.25em .5em;font-family:monospace}.content pre{max-width:90vw}.content pre code{padding:0}.content a{color:var(--primary-link-color)}.content a:hover{text-decoration:underline}.content blockquote{border-left:#e2dede 8px solid;margin:0;background-color:#f2f1f0;padding:0 20px}:where(html){--font-sans:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;--font-serif:ui-serif,serif;--font-mono:Dank Mono,Operator Mono,Inconsolata,Fira Mono,ui-monospace,SF Mono,Monaco,Droid Sans Mono,Source Code Pro,monospace;--font-weight-1:100;--font-weight-2:200;--font-weight-3:300;--font-weight-4:400;--font-weight-5:500;--font-weight-6:600;--font-weight-7:700;--font-weight-8:800;--font-weight-9:900;--font-lineheight-00:.95;--font-lineheight-0:1.1;--font-lineheight-1:1.25;--font-lineheight-2:1.375;--font-lineheight-3:1.5;--font-lineheight-4:1.75;--font-lineheight-5:2;--font-letterspacing-0:-.05em;--font-letterspacing-1:.025em;--font-letterspacing-2:.050em;--font-letterspacing-3:.075em;--font-letterspacing-4:.150em;--font-letterspacing-5:.500em;--font-letterspacing-6:.750em;--font-letterspacing-7:1em;--font-size-00:.5rem;--font-size-0:.75rem;--font-size-1:1rem;--font-size-2:1.1rem;--font-size-3:1.25rem;--font-size-4:1.5rem;--font-size-5:2rem;--font-size-6:2.5rem;--font-size-7:3rem;--font-size-8:3.5rem;--font-size-fluid-0:clamp(.75rem,2vw,1rem);--font-size-fluid-1:clamp(1rem,4vw,1.5rem);--font-size-fluid-2:clamp(1.5rem,6vw,2.5rem);--font-size-fluid-3:clamp(2rem,9vw,3.5rem);--size-000:-.5rem;--size-00:-.25rem;--size-1:.25rem;--size-2:.5rem;--size-3:1rem;--size-4:1.25rem;--size-5:1.5rem;--size-6:1.75rem;--size-7:2rem;--size-8:3rem;--size-9:4rem;--size-10:5rem;--size-11:7.5rem;--size-12:10rem;--size-13:15rem;--size-14:20rem;--size-15:30rem;--size-fluid-1:clamp(.5rem,1vw,1rem);--size-fluid-2:clamp(1rem,2vw,1.5rem);--size-fluid-3:clamp(1.5rem,3vw,2rem);--size-fluid-4:clamp(2rem,4vw,3rem);--size-fluid-5:clamp(4rem,5vw,5rem);--size-fluid-6:clamp(5rem,7vw,7.5rem);--size-fluid-7:clamp(7.5rem,10vw,10rem);--size-fluid-8:clamp(10rem,20vw,15rem);--size-fluid-9:clamp(15rem,30vw,20rem);--size-fluid-10:clamp(20rem,40vw,30rem);--size-content-1:20ch;--size-content-2:45ch;--size-content-3:60ch;--size-header-1:20ch;--size-header-2:25ch;--size-header-3:35ch;--size-xxs:240px;--size-xs:360px;--size-sm:480px;--size-md:768px;--size-lg:1024px;--size-xl:1440px;--size-xxl:1920px;--size-relative-000:-.5ch;--size-relative-00:-.25ch;--size-relative-1:.25ch;--size-relative-2:.5ch;--size-relative-3:1ch;--size-relative-4:1.25ch;--size-relative-5:1.5ch;--size-relative-6:1.75ch;--size-relative-7:2ch;--size-relative-8:3ch;--size-relative-9:4ch;--size-relative-10:5ch;--size-relative-11:7.5ch;--size-relative-12:10ch;--size-relative-13:15ch;--size-relative-14:20ch;--size-relative-15:30ch;--ease-1:cubic-bezier(.25,0,.5,1);--ease-2:cubic-bezier(.25,0,.4,1);--ease-3:cubic-bezier(.25,0,.3,1);--ease-4:cubic-bezier(.25,0,.2,1);--ease-5:cubic-bezier(.25,0,.1,1);--ease-in-1:cubic-bezier(.25,0,1,1);--ease-in-2:cubic-bezier(.50,0,1,1);--ease-in-3:cubic-bezier(.70,0,1,1);--ease-in-4:cubic-bezier(.90,0,1,1);--ease-in-5:cubic-bezier(1,0,1,1);--ease-out-1:cubic-bezier(0,0,.75,1);--ease-out-2:cubic-bezier(0,0,.50,1);--ease-out-3:cubic-bezier(0,0,.3,1);--ease-out-4:cubic-bezier(0,0,.1,1);--ease-out-5:cubic-bezier(0,0,0,1);--ease-in-out-1:cubic-bezier(.1,0,.9,1);--ease-in-out-2:cubic-bezier(.3,0,.7,1);--ease-in-out-3:cubic-bezier(.5,0,.5,1);--ease-in-out-4:cubic-bezier(.7,0,.3,1);--ease-in-out-5:cubic-bezier(.9,0,.1,1);--ease-elastic-out-1:cubic-bezier(.5,.75,.75,1.25);--ease-elastic-out-2:cubic-bezier(.5,1,.75,1.25);--ease-elastic-out-3:cubic-bezier(.5,1.25,.75,1.25);--ease-elastic-out-4:cubic-bezier(.5,1.5,.75,1.25);--ease-elastic-out-5:cubic-bezier(.5,1.75,.75,1.25);--ease-elastic-in-1:cubic-bezier(.5,-0.25,.75,1);--ease-elastic-in-2:cubic-bezier(.5,-0.50,.75,1);--ease-elastic-in-3:cubic-bezier(.5,-0.75,.75,1);--ease-elastic-in-4:cubic-bezier(.5,-1.00,.75,1);--ease-elastic-in-5:cubic-bezier(.5,-1.25,.75,1);--ease-elastic-in-out-1:cubic-bezier(.5,-.1,.1,1.5);--ease-elastic-in-out-2:cubic-bezier(.5,-.3,.1,1.5);--ease-elastic-in-out-3:cubic-bezier(.5,-.5,.1,1.5);--ease-elastic-in-out-4:cubic-bezier(.5,-.7,.1,1.5);--ease-elastic-in-out-5:cubic-bezier(.5,-.9,.1,1.5);--ease-step-1:steps(2);--ease-step-2:steps(3);--ease-step-3:steps(4);--ease-step-4:steps(7);--ease-step-5:steps(10);--ease-elastic-1:var(--ease-elastic-out-1);--ease-elastic-2:var(--ease-elastic-out-2);--ease-elastic-3:var(--ease-elastic-out-3);--ease-elastic-4:var(--ease-elastic-out-4);--ease-elastic-5:var(--ease-elastic-out-5);--ease-squish-1:var(--elastic-in-out-1);--ease-squish-2:var(--elastic-in-out-2);--ease-squish-3:var(--elastic-in-out-3);--ease-squish-4:var(--elastic-in-out-4);--ease-squish-5:var(--elastic-in-out-5);--ease-spring-1:linear(0,0.006,0.025 2.8%,0.101 6.1%,0.539 18.9%,0.721 25.3%,0.849 31.5%,0.937 38.1%,0.968 41.8%,0.991 45.7%,1.006 50.1%,1.015 55%,1.017 63.9%,1.001);--ease-spring-2:linear(0,0.007,0.029 2.2%,0.118 4.7%,0.625 14.4%,0.826 19%,0.902,0.962,1.008 26.1%,1.041 28.7%,1.064 32.1%,1.07 36%,1.061 40.5%,1.015 53.4%,0.999 61.6%,0.995 71.2%,1);--ease-spring-3:linear(0,0.009,0.035 2.1%,0.141 4.4%,0.723 12.9%,0.938 16.7%,1.017,1.077,1.121,1.149 24.3%,1.159,1.163,1.161,1.154 29.9%,1.129 32.8%,1.051 39.6%,1.017 43.1%,0.991,0.977 51%,0.974 53.8%,0.975 57.1%,0.997 69.8%,1.003 76.9%,1);--ease-spring-4:linear(0,0.009,0.037 1.7%,0.153 3.6%,0.776 10.3%,1.001,1.142 16%,1.185,1.209 19%,1.215 19.9% 20.8%,1.199,1.165 25%,1.056 30.3%,1.008 33%,0.973,0.955 39.2%,0.953 41.1%,0.957 43.3%,0.998 53.3%,1.009 59.1% 63.7%,0.998 78.9%,1);--ease-spring-5:linear(0,0.01,0.04 1.6%,0.161 3.3%,0.816 9.4%,1.046,1.189 14.4%,1.231,1.254 17%,1.259,1.257 18.6%,1.236,1.194 22.3%,1.057 27%,0.999 29.4%,0.955 32.1%,0.942,0.935 34.9%,0.933,0.939 38.4%,1 47.3%,1.011,1.017 52.6%,1.016 56.4%,1 65.2%,0.996 70.2%,1.001 87.2%,1);--layer-1:1;--layer-2:2;--layer-3:3;--layer-4:4;--layer-5:5;--layer-important:2147483647;--shadow-color:220 3% 15%;--shadow-strength:1%;--inner-shadow-highlight:inset 0 -.5px 0 0 hsla(0,0%,100%,.133),inset 0 .5px 0 0 rgba(0,0,0,.467);--shadow-1:0 1px 2px -1px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--shadow-2:0 3px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 14px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%));--shadow-3:0 -1px 3px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 2px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 5px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 4px 12px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 12px 15px -5px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-4:0 -2px 5px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 1px 1px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 2px 2px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 9px 9px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 16px 16px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 6%));--shadow-5:0 -1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 2px 1px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 5px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 10px 10px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 20px 20px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 40px 40px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--shadow-6:0 -1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 2%)),0 3px 2px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 7px 5px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 3%)),0 12px 10px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 4%)),0 22px 18px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 5%)),0 41px 33px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 6%)),0 100px 80px -2px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 7%));--inner-shadow-0:inset 0 0 0 1px hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%));--inner-shadow-1:inset 0 1px 2px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-2:inset 0 1px 4px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-3:inset 0 2px 8px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--inner-shadow-4:inset 0 2px 14px 0 hsl(var(--shadow-color)/calc(var(--shadow-strength) + 9%)),var(--inner-shadow-highlight);--ratio-square:1;--ratio-landscape:4/3;--ratio-portrait:3/4;--ratio-widescreen:16/9;--ratio-ultrawide:18/5;--ratio-golden:1.6180/1;--gray-0:#f8f9fa;--gray-1:#f1f3f5;--gray-2:#e9ecef;--gray-3:#dee2e6;--gray-4:#ced4da;--gray-5:#adb5bd;--gray-6:#868e96;--gray-7:#495057;--gray-8:#343a40;--gray-9:#212529;--gray-10:#16191d;--gray-11:#0d0f12;--gray-12:#030507;--stone-0:#f8fafb;--stone-1:#f2f4f6;--stone-2:#ebedef;--stone-3:#e0e4e5;--stone-4:#d1d6d8;--stone-5:#b1b6b9;--stone-6:#979b9d;--stone-7:#7e8282;--stone-8:#666968;--stone-9:#50514f;--stone-10:#3a3a37;--stone-11:#252521;--stone-12:#121210;--red-0:#fff5f5;--red-1:#ffe3e3;--red-2:#ffc9c9;--red-3:#ffa8a8;--red-4:#ff8787;--red-5:#ff6b6b;--red-6:#fa5252;--red-7:#f03e3e;--red-8:#e03131;--red-9:#c92a2a;--red-10:#b02525;--red-11:#962020;--red-12:#7d1a1a;--pink-0:#fff0f6;--pink-1:#ffdeeb;--pink-2:#fcc2d7;--pink-3:#faa2c1;--pink-4:#f783ac;--pink-5:#f06595;--pink-6:#e64980;--pink-7:#d6336c;--pink-8:#c2255c;--pink-9:#a61e4d;--pink-10:#8c1941;--pink-11:#731536;--pink-12:#59102a;--purple-0:#f8f0fc;--purple-1:#f3d9fa;--purple-2:#eebefa;--purple-3:#e599f7;--purple-4:#da77f2;--purple-5:#cc5de8;--purple-6:#be4bdb;--purple-7:#ae3ec9;--purple-8:#9c36b5;--purple-9:#862e9c;--purple-10:#702682;--purple-11:#5a1e69;--purple-12:#44174f;--violet-0:#f3f0ff;--violet-1:#e5dbff;--violet-2:#d0bfff;--violet-3:#b197fc;--violet-4:#9775fa;--violet-5:#845ef7;--violet-6:#7950f2;--violet-7:#7048e8;--violet-8:#6741d9;--violet-9:#5f3dc4;--violet-10:#5235ab;--violet-11:#462d91;--violet-12:#3a2578;--indigo-0:#edf2ff;--indigo-1:#dbe4ff;--indigo-2:#bac8ff;--indigo-3:#91a7ff;--indigo-4:#748ffc;--indigo-5:#5c7cfa;--indigo-6:#4c6ef5;--indigo-7:#4263eb;--indigo-8:#3b5bdb;--indigo-9:#364fc7;--indigo-10:#2f44ad;--indigo-11:#283a94;--indigo-12:#21307a;--blue-0:#e7f5ff;--blue-1:#d0ebff;--blue-2:#a5d8ff;--blue-3:#74c0fc;--blue-4:#4dabf7;--blue-5:#339af0;--blue-6:#228be6;--blue-7:#1c7ed6;--blue-8:#1971c2;--blue-9:#1864ab;--blue-10:#145591;--blue-11:#114678;--blue-12:#0d375e;--cyan-0:#e3fafc;--cyan-1:#c5f6fa;--cyan-2:#99e9f2;--cyan-3:#66d9e8;--cyan-4:#3bc9db;--cyan-5:#22b8cf;--cyan-6:#15aabf;--cyan-7:#1098ad;--cyan-8:#0c8599;--cyan-9:#0b7285;--cyan-10:#095c6b;--cyan-11:#074652;--cyan-12:#053038;--teal-0:#e6fcf5;--teal-1:#c3fae8;--teal-2:#96f2d7;--teal-3:#63e6be;--teal-4:#38d9a9;--teal-5:#20c997;--teal-6:#12b886;--teal-7:#0ca678;--teal-8:#099268;--teal-9:#087f5b;--teal-10:#066649;--teal-11:#054d37;--teal-12:#033325;--green-0:#ebfbee;--green-1:#d3f9d8;--green-2:#b2f2bb;--green-3:#8ce99a;--green-4:#69db7c;--green-5:#51cf66;--green-6:#40c057;--green-7:#37b24d;--green-8:#2f9e44;--green-9:#2b8a3e;--green-10:#237032;--green-11:#1b5727;--green-12:#133d1b;--lime-0:#f4fce3;--lime-1:#e9fac8;--lime-2:#d8f5a2;--lime-3:#c0eb75;--lime-4:#a9e34b;--lime-5:#94d82d;--lime-6:#82c91e;--lime-7:#74b816;--lime-8:#66a80f;--lime-9:#5c940d;--lime-10:#4c7a0b;--lime-11:#3c6109;--lime-12:#2c4706;--yellow-0:#fff9db;--yellow-1:#fff3bf;--yellow-2:#ffec99;--yellow-3:#ffe066;--yellow-4:#ffd43b;--yellow-5:#fcc419;--yellow-6:#fab005;--yellow-7:#f59f00;--yellow-8:#f08c00;--yellow-9:#e67700;--yellow-10:#b35c00;--yellow-11:#804200;--yellow-12:#663500;--orange-0:#fff4e6;--orange-1:#ffe8cc;--orange-2:#ffd8a8;--orange-3:#ffc078;--orange-4:#ffa94d;--orange-5:#ff922b;--orange-6:#fd7e14;--orange-7:#f76707;--orange-8:#e8590c;--orange-9:#d9480f;--orange-10:#bf400d;--orange-11:#99330b;--orange-12:#802b09;--choco-0:#fff8dc;--choco-1:#fce1bc;--choco-2:#f7ca9e;--choco-3:#f1b280;--choco-4:#e99b62;--choco-5:#df8545;--choco-6:#d46e25;--choco-7:#bd5f1b;--choco-8:#a45117;--choco-9:#8a4513;--choco-10:#703a13;--choco-11:#572f12;--choco-12:#3d210d;--brown-0:#faf4eb;--brown-1:#ede0d1;--brown-2:#e0cab7;--brown-3:#d3b79e;--brown-4:#c5a285;--brown-5:#b78f6d;--brown-6:#a87c56;--brown-7:#956b47;--brown-8:#825b3a;--brown-9:#6f4b2d;--brown-10:#5e3a21;--brown-11:#4e2b15;--brown-12:#422412;--sand-0:#f8fafb;--sand-1:#e6e4dc;--sand-2:#d5cfbd;--sand-3:#c2b9a0;--sand-4:#aea58c;--sand-5:#9a9178;--sand-6:#867c65;--sand-7:#736a53;--sand-8:#5f5746;--sand-9:#4b4639;--sand-10:#38352d;--sand-11:#252521;--sand-12:#121210;--camo-0:#f9fbe7;--camo-1:#e8ed9c;--camo-2:#d2df4e;--camo-3:#c2ce34;--camo-4:#b5bb2e;--camo-5:#a7a827;--camo-6:#999621;--camo-7:#8c851c;--camo-8:#7e7416;--camo-9:#6d6414;--camo-10:#5d5411;--camo-11:#4d460e;--camo-12:#36300a;--jungle-0:#ecfeb0;--jungle-1:#def39a;--jungle-2:#d0e884;--jungle-3:#c2dd6e;--jungle-4:#b5d15b;--jungle-5:#a8c648;--jungle-6:#9bbb36;--jungle-7:#8fb024;--jungle-8:#84a513;--jungle-9:#7a9908;--jungle-10:#658006;--jungle-11:#516605;--jungle-12:#3d4d04;--gradient-1:linear-gradient(to bottom right,#1f005c,#5b0060,#870160,#ac255e,#ca485c,#e16b5c,#f39060,#ffb56b);--gradient-2:linear-gradient(to bottom right,#48005c,#8300e2,#a269ff);--gradient-3:radial-gradient(circle at top right,#0ff,rgba(0,255,255,0)),radial-gradient(circle at bottom left,#ff1492,rgba(255,20,146,0));--gradient-4:linear-gradient(to bottom right,#00f5a0,#00d9f5);--gradient-5:conic-gradient(from -270deg at 75% 110%,#f0f,#fffaf0);--gradient-6:conic-gradient(from -90deg at top left,#000,#fff);--gradient-7:linear-gradient(to bottom right,#72c6ef,#004e8f);--gradient-8:conic-gradient(from 90deg at 50% 0%,#111,50%,#222,#111);--gradient-9:conic-gradient(from .5turn at bottom center,#add8e6,#fff);--gradient-10:conic-gradient(from 90deg at 40% -25%,gold,#f79d03,#ee6907,#e6390a,#de0d0d,#d61039,#cf1261,#c71585,#cf1261,#d61039,#de0d0d,#ee6907,#f79d03,gold,gold,gold);--gradient-11:conic-gradient(at bottom left,#ff1493,cyan);--gradient-12:conic-gradient(from 90deg at 25% -10%,#ff4500,#d3f340,#7bee85,#afeeee,#7bee85);--gradient-13:radial-gradient(circle at 50% 200%,#000142,#3b0083,#b300c3,#ff059f,#ff4661,#ffad86,#fff3c7);--gradient-14:conic-gradient(at top right,lime,cyan);--gradient-15:linear-gradient(to bottom right,#c7d2fe,#fecaca,#fef3c7);--gradient-16:radial-gradient(circle at 50% -250%,#374151,#111827,#000);--gradient-17:conic-gradient(from -90deg at 50% -25%,blue,#8a2be2);--gradient-18:linear-gradient(0deg,rgba(255,0,0,.8),rgba(255,0,0,0) 75%),linear-gradient(60deg,rgba(255,255,0,.8),rgba(255,255,0,0) 75%),linear-gradient(120deg,rgba(0,255,0,.8),rgba(0,255,0,0) 75%),linear-gradient(180deg,rgba(0,255,255,.8),rgba(0,255,255,0) 75%),linear-gradient(240deg,rgba(0,0,255,.8),rgba(0,0,255,0) 75%),linear-gradient(300deg,rgba(255,0,255,.8),rgba(255,0,255,0) 75%);--gradient-19:linear-gradient(to bottom right,#ffe259,#ffa751);--gradient-20:conic-gradient(from -135deg at -10% center,orange,#ff7715,#ff522a,#ff3f47,#ff5482,#ff69b4);--gradient-21:conic-gradient(from -90deg at 25% 115%,red,#f06,#f0c,#c0f,#60f,#00f,#00f,#00f,#00f);--gradient-22:linear-gradient(to bottom right,#acb6e5,#86fde8);--gradient-23:linear-gradient(to bottom right,#536976,#292e49);--gradient-24:conic-gradient(from .5turn at 0% 0%,#00c476,10%,#82b0ff,90%,#00c476);--gradient-25:conic-gradient(at 125% 50%,#b78cf7,#ff7c94,#ffcf0d,#ff7c94,#b78cf7);--gradient-26:linear-gradient(to bottom right,#9796f0,#fbc7d4);--gradient-27:conic-gradient(from .5turn at bottom left,#ff1493,#639);--gradient-28:conic-gradient(from -90deg at 50% 105%,#fff,orchid);--gradient-29:radial-gradient(circle at top right,#bfb3ff,rgba(191,179,255,0)),radial-gradient(circle at bottom left,#86acf9,rgba(134,172,249,0));--gradient-30:radial-gradient(circle at top right,#00ff80,rgba(0,255,128,0)),radial-gradient(circle at bottom left,#adffd6,rgba(173,255,214,0));--noise-1:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.005' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-2:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 300 300' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.05' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-3:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.25' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-4:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-5:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.75' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");--noise-filter-1:contrast(300%) brightness(100%);--noise-filter-2:contrast(200%) brightness(150%);--noise-filter-3:contrast(200%) brightness(250%);--noise-filter-4:contrast(200%) brightness(500%);--noise-filter-5:contrast(200%) brightness(1000%);--animation-fade-in:fade-in .5s var(--ease-3);--animation-fade-in-bloom:fade-in-bloom 2s var(--ease-3);--animation-fade-out:fade-out .5s var(--ease-3);--animation-fade-out-bloom:fade-out-bloom 2s var(--ease-3);--animation-scale-up:scale-up .5s var(--ease-3);--animation-scale-down:scale-down .5s var(--ease-3);--animation-slide-out-up:slide-out-up .5s var(--ease-3);--animation-slide-out-down:slide-out-down .5s var(--ease-3);--animation-slide-out-right:slide-out-right .5s var(--ease-3);--animation-slide-out-left:slide-out-left .5s var(--ease-3);--animation-slide-in-up:slide-in-up .5s var(--ease-3);--animation-slide-in-down:slide-in-down .5s var(--ease-3);--animation-slide-in-right:slide-in-right .5s var(--ease-3);--animation-slide-in-left:slide-in-left .5s var(--ease-3);--animation-shake-x:shake-x .75s var(--ease-out-5);--animation-shake-y:shake-y .75s var(--ease-out-5);--animation-spin:spin 2s linear infinite;--animation-ping:ping 5s var(--ease-out-3) infinite;--animation-blink:blink 1s var(--ease-out-3) infinite;--animation-float:float 3s var(--ease-in-out-3) infinite;--animation-bounce:bounce 2s var(--ease-squish-2) infinite;--animation-pulse:pulse 2s var(--ease-out-3) infinite;--border-size-1:1px;--border-size-2:2px;--border-size-3:5px;--border-size-4:10px;--border-size-5:25px;--radius-1:2px;--radius-2:5px;--radius-3:1rem;--radius-4:2rem;--radius-5:4rem;--radius-6:8rem;--radius-round:1e5px;--radius-blob-1:30% 70% 70% 30%/53% 30% 70% 47%;--radius-blob-2:53% 47% 34% 66%/63% 46% 54% 37%;--radius-blob-3:37% 63% 56% 44%/49% 56% 44% 51%;--radius-blob-4:63% 37% 37% 63%/43% 37% 63% 57%;--radius-blob-5:49% 51% 48% 52%/57% 44% 56% 43%;--radius-conditional-1:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-1));--radius-conditional-2:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-2));--radius-conditional-3:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-3));--radius-conditional-4:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-4));--radius-conditional-5:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-5));--radius-conditional-6:clamp(0px,calc(100vw - 100%) * 1e5,var(--radius-6)) }@media (prefers-color-scheme: dark){:where(html){--shadow-color:220 40% 2%;--shadow-strength:25% }}@keyframes fade-in{to{opacity:1}}@keyframes fade-in-bloom{0%{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(2) blur(10px);opacity:1}to{filter:brightness(1) blur(0);opacity:1}}@keyframes fade-out{to{opacity:0}}@keyframes fade-out-bloom{to{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(2) blur(10px);opacity:1}0%{filter:brightness(1) blur(0);opacity:1}}@keyframes scale-up{to{transform:scale(1.25)}}@keyframes scale-down{to{transform:scale(.75)}}@keyframes slide-out-up{to{transform:translateY(-100%)}}@keyframes slide-out-down{to{transform:translateY(100%)}}@keyframes slide-out-right{to{transform:translateX(100%)}}@keyframes slide-out-left{to{transform:translateX(-100%)}}@keyframes slide-in-up{0%{transform:translateY(100%)}}@keyframes slide-in-down{0%{transform:translateY(-100%)}}@keyframes slide-in-right{0%{transform:translateX(-100%)}}@keyframes slide-in-left{0%{transform:translateX(100%)}}@keyframes shake-x{0%, to{transform:translateX(0)}20%{transform:translateX(-5%)}40%{transform:translateX(5%)}60%{transform:translateX(-5%)}80%{transform:translateX(5%)}}@keyframes shake-y{0%, to{transform:translateY(0)}20%{transform:translateY(-5%)}40%{transform:translateY(5%)}60%{transform:translateY(-5%)}80%{transform:translateY(5%)}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes ping{90%, to{opacity:0;transform:scale(2)}}@keyframes blink{0%, to{opacity:1}50%{opacity:.5}}@keyframes float{50%{transform:translateY(-25%)}}@keyframes bounce{25%{transform:translateY(-20%)}40%{transform:translateY(-3%)}0%, 60%, to{transform:translateY(0)}}@keyframes pulse{50%{transform:scale(.9)}}@media (prefers-color-scheme: dark){@keyframes fade-in-bloom{0%{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(.5) blur(10px);opacity:1}to{filter:brightness(1) blur(0);opacity:1}}}@media (prefers-color-scheme: dark){@keyframes fade-out-bloom{to{filter:brightness(1) blur(20px);opacity:0}10%{filter:brightness(.5) blur(10px);opacity:1}0%{filter:brightness(1) blur(0);opacity:1}}}@custom-media --motionOK (prefers-reduced-motion: no-preference);@custom-media --motionNotOK (prefers-reduced-motion: reduce);@custom-media --opacityOK (prefers-reduced-transparency: no-preference);@custom-media --opacityNotOK (prefers-reduced-transparency: reduce);@custom-media --useDataOK (prefers-reduced-data: no-preference);@custom-media --useDataNotOK (prefers-reduced-data: reduce);@custom-media --OSdark (prefers-color-scheme: dark);@custom-media --OSlight (prefers-color-scheme: light);@custom-media --highContrast (prefers-contrast: more);@custom-media --lowContrast (prefers-contrast: less);@custom-media --portrait (orientation: portrait);@custom-media --landscape (orientation: landscape);@custom-media --HDcolor (dynamic-range: high);@custom-media --touch (hover: none) and (pointer: coarse);@custom-media --stylus (hover: none) and (pointer: fine);@custom-media --pointer (hover) and (pointer: coarse);@custom-media --mouse (hover) and (pointer: fine);@custom-media --xxs-only (min-width: 0px) and (max-width: 240px);@custom-media --xxs-n-above (min-width: 240px);@custom-media --xxs-n-below (max-width: 239px);@custom-media --xxs-phone (--xxs-only) and (--portrait);@custom-media --xs-only (min-width: 240px) and (max-width: 360px);@custom-media --xs-n-above (min-width: 360px);@custom-media --xs-n-below (max-width: 359px);@custom-media --xs-phone (--xs-only) and (--portrait);@custom-media --sm-only (min-width: 360px) and (max-width: 480px);@custom-media --sm-n-above (min-width: 480px);@custom-media --sm-n-below (max-width: 479px);@custom-media --sm-phone (--sm-only) and (--portrait);@custom-media --md-only (min-width: 480px) and (max-width: 768px);@custom-media --md-n-above (min-width: 768px);@custom-media --md-n-below (max-width: 767px);@custom-media --md-phone (--md-only) and (--portrait);@custom-media --lg-only (min-width: 768px) and (max-width: 1024px);@custom-media --lg-n-above (min-width: 1024px);@custom-media --lg-n-below (max-width: 1023px);@custom-media --lg-phone (--lg-only) and (--portrait);@custom-media --xl-only (min-width: 1024px) and (max-width: 1440px);@custom-media --xl-n-above (min-width: 1440px);@custom-media --xl-n-below (max-width: 1439px);@custom-media --xxl-only (min-width: 1440px) and (max-width: 1920px);@custom-media --xxl-n-above (min-width: 1920px);@custom-media --xxl-n-below (max-width: 1919px);:where(html){--link:var(--indigo-7);--link-visited:var(--purple-7);--text-1:var(--gray-9);--text-2:var(--gray-7);--surface-1:var(--gray-0);--surface-2:var(--gray-2);--surface-3:var(--gray-3);--surface-4:var(--gray-4);--scrollthumb-color:var(--gray-7);-webkit-text-size-adjust:none;accent-color:var(--brand, var(--link));background-color:var(--surface-1);block-size:100%;caret-color:var(--brand, var(--link));color:var(--text-2);color-scheme:light;font-family:var(--font-sans);line-height:var(--font-lineheight-3);scrollbar-color:var(--scrollthumb-color) rgba(0,0,0,0)}@media (dynamic-range: high){@supports (color: color(display-p3 0 0 0)){:where(html){--link:color(display-p3 .1 .4 1);--link-visited:color(display-p3 .6 .2 1)}}}:where(html) :where(dialog){background-color:var(--surface-1)}:where(html) :where(button,.btn){--_highlight:var(--_highlight-light);--_bg:var(--_bg-light);--_ink-shadow:var(--_ink-shadow-light)}:where(html) :where(button,.btn) :where([type=reset]){--_text:var(--red-6);--_border:var(--red-3)}:where(html) :where(button,.btn,input:is([type=button],[type=submit],[type=reset]))[disabled]{--_text:var(--gray-6)}:where(html) :where(textarea,select,input:not([type=button],[type=submit],[type=reset])){background-color:var(--surface-2)}@media (prefers-color-scheme: dark){:where(html){--link:var(--indigo-3);--link-visited:var(--purple-3);--text-1:var(--gray-1);--text-2:var(--gray-4);--surface-1:var(--gray-9);--surface-2:var(--gray-8);--surface-3:var(--gray-7);--surface-4:var(--gray-6);--scrollthumb-color:var(--gray-6);--shadow-strength:10%;--shadow-color:220 40% 2%;color-scheme:dark}}:where(h1,h2,h3,h4,h5,h6,dt){color:var(--text-1)}:where(a[href]){color:var(--brand, var(--link))}:where(a[href]):visited{color:var(--link-visited)}:focus-visible{outline-color:var(--brand, var(--link))}*,:after,:before{box-sizing:border-box}:where(:not(dialog)){margin:0}:where(:not(fieldset,progress,meter)){background-origin:border-box;background-repeat:no-repeat;border-style:solid;border-width:0}@media (prefers-reduced-motion: no-preference){:where(html){scroll-behavior:smooth}}@media (prefers-reduced-motion: no-preference){:where(:focus-visible){transition:outline-offset 145ms var(--ease-2)}:where(:not(:active):focus-visible){transition-duration:.25s}}:where(:not(:active):focus-visible){outline-offset:5px}:where(body){min-block-size:100%}:where(h1,h2,h3,h4,h5,h6){text-wrap:balance;font-weight:var(--font-weight-9);line-height:var(--font-lineheight-1)}:where(h1){font-size:var(--font-size-8);max-inline-size:var(--size-header-1)}:where(h2){font-size:var(--font-size-6);max-inline-size:var(--size-header-2)}:where(h3){font-size:var(--font-size-5)}:where(h4){font-size:var(--font-size-4)}:where(h5){font-size:var(--font-size-3)}:where(h3,h4,h5,h6,dt){max-inline-size:var(--size-header-3)}:where(p,ul,ol,dl,h6){font-size:var(--font-size-2)}:where(a,u,ins,abbr){text-underline-offset:1px}@supports (-moz-appearance: none){:where(a,u,ins,abbr){text-underline-offset:2px}}:where(a[href],area,button,input:not([type=text],[type=email],[type=number],[type=password],[type=""],[type=tel],[type=url]),label[for],select,summary,[tabindex]:not([tabindex*="-"])){cursor:pointer}:where(a[href],area,button,input,label[for],select,summary,textarea,[tabindex]:not([tabindex*="-"])){-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:manipulation}:where(a){margin-block:calc(var(--size-1)*-1);margin-inline:calc(var(--size-1)*-1);padding-block:var(--size-1);padding-inline:var(--size-1)}:where(a):where([href]){text-decoration-color:var(--indigo-2)}:where(a):where([href]):where(:visited){text-decoration-color:var(--purple-2)}:where(a):where(:not(:hover)){text-decoration:inherit}:where(img,svg,video,canvas,audio,iframe,embed,object){display:block}:where(img,svg,video){block-size:auto;max-inline-size:100%}:where(input,button,textarea,select),:where(input[type=file])::-webkit-file-upload-button{color:inherit;font:inherit;font-size:inherit;letter-spacing:inherit}::placeholder{color:var(--gray-7);opacity:.75}:where(input:not([type=range]),textarea){padding-block:var(--size-1);padding-inline:var(--size-2)}:where(select){padding-block:.75ch;padding-inline:var(--size-relative-4) 0}:where(textarea,select,input:not([type=button],[type=submit],[type=reset])){background-color:var(--surface-2);border-radius:var(--radius-2)}:where(textarea){resize:block}:where(input[type=checkbox],input[type=radio]){block-size:var(--size-3);inline-size:var(--size-3)}:where(svg:not([width])){inline-size:var(--size-10)}:where(code,kbd,samp,pre){font-family:var(--font-mono)}:where(:not(pre)>code,kbd){white-space:nowrap}:where(pre){direction:ltr;max-inline-size:max-content;min-inline-size:0;white-space:pre;writing-mode:lr}:where(:not(pre)>code){background:var(--surface-2);border-radius:var(--radius-2);padding:var(--size-1) var(--size-2);writing-mode:lr}:where(kbd,var){border-color:var(--surface-4);border-radius:var(--radius-2);border-width:var(--border-size-1);padding:var(--size-1) var(--size-2)}:where(mark){border-radius:var(--radius-2);padding-inline:var(--size-1)}:where(ol,ul){padding-inline-start:var(--size-8)}:where(li){padding-inline-start:var(--size-2)}:where(li,dd,figcaption){max-inline-size:var(--size-content-2)}:where(p){text-wrap:pretty;max-inline-size:var(--size-content-3)}:where(dt,summary){font-weight:var(--font-weight-7)}:where(dt:not(:first-of-type)){margin-block-start:var(--size-5)}:where(small){font-size:max(.5em,var(--font-size-0));max-inline-size:var(--size-content-1)}:where(hr){background-color:var(--surface-3);height:var(--border-size-2);margin-block:var(--size-fluid-5)}:where(figure){display:grid;gap:var(--size-2);place-items:center}:where(figure)>:where(figcaption){text-wrap:balance;font-size:var(--font-size-1)}:where(blockquote,:not(blockquote)>cite){border-inline-start-width:var(--border-size-3)}:where(blockquote){display:grid;gap:var(--size-3);max-inline-size:var(--size-content-2);padding-block:var(--size-3);padding-inline:var(--size-4)}:where(:not(blockquote)>cite){padding-inline-start:var(--size-2)}:where(summary){background:var(--surface-3);border-radius:var(--radius-2);margin:calc(var(--size-2)*-1) calc(var(--size-3)*-1);padding:var(--size-2) var(--size-3)}:where(details){background:var(--surface-2);border-radius:var(--radius-2);padding-block:var(--size-2);padding-inline:var(--size-3)}:where(details[open]>summary){border-end-end-radius:0;border-end-start-radius:0;margin-bottom:var(--size-2)}:where(fieldset){border:var(--border-size-1) solid var(--surface-4);border-radius:var(--radius-2)}:where(del){background:var(--red-9);color:var(--red-2)}:where(ins){background:var(--green-9);color:var(--green-1)}:where(abbr){text-decoration-color:var(--blue-5)}:where(dialog){background-color:var(--surface-1);border-radius:var(--radius-3);box-shadow:var(--shadow-6);color:inherit}:where(dialog)::backdrop{backdrop-filter:blur(25px)}:where(html[\:has\(dialog\[open\]\)]){overflow:hidden}:where(html:has(dialog[open])){overflow:hidden}:where(menu){display:flex;gap:var(--size-3);padding-inline-start:0}:where(sup){font-size:.5em}:where(table){--nice-inner-radius:calc(var(--radius-3) - 2px);background:var(--surface-2);border:1px solid var(--surface-2);border-radius:var(--radius-3);width:fit-content}:where(table[\:not-has\(tfoot\)] tr:last-child td:first-child){border-bottom-left-radius:var(--nice-inner-radius)}:where(table:not(:has(tfoot)) tr:last-child td:first-child){border-bottom-left-radius:var(--nice-inner-radius)}:where(table[\:not-has\(tfoot\)] tr:last-child td:last-child){border-bottom-right-radius:var(--nice-inner-radius)}:where(table:not(:has(tfoot)) tr:last-child td:last-child){border-bottom-right-radius:var(--nice-inner-radius)}:where(table thead th:first-child){border-top-left-radius:var(--nice-inner-radius)}:where(table thead th:last-child){border-top-right-radius:var(--nice-inner-radius)}:where(tfoot th:first-of-type){border-end-start-radius:var(--nice-inner-radius)}:where(tfoot th:last-of-type){border-end-end-radius:var(--nice-inner-radius)}:where(th){background-color:var(--surface-2);color:var(--text-1)}:where(table :is(a,button,[contenteditable]):is(:focus-visible)){outline-offset:-2px}:where(td){text-wrap:pretty;background:var(--surface-1);max-inline-size:var(--size-content-2)}:where(td,th){padding:var(--size-2);text-align:left}:where(:is(td,th):not([align])){text-align:center}:where(thead){border-collapse:collapse}:where(table tr:hover td),:where(tbody tr:nth-child(2n):hover td){background-color:var(--gray-10)}@media (prefers-color-scheme: light){:where(table tr:hover td),:where(tbody tr:nth-child(2n):hover td){background-color:#fff}}:where(table>caption){margin:var(--size-3)}:where(tfoot button){padding-block:var(--size-1);padding-inline:var(--size-3)}@media (prefers-color-scheme: dark){:where(textarea,select,input:not([type=button],[type=submit],[type=reset])){background-color:#171a1c}:where(dialog){background-color:var(--surface-2)}::placeholder{color:var(--gray-6)}}:where(html){--gray-0-hsl:210 17% 98%;--gray-1-hsl:210 17% 95%;--gray-2-hsl:210 16% 93%;--gray-3-hsl:210 14% 89%;--gray-4-hsl:210 14% 83%;--gray-5-hsl:210 11% 71%;--gray-6-hsl:210 7% 56%;--gray-7-hsl:210 9% 31%;--gray-8-hsl:210 10% 23%;--gray-9-hsl:210 11% 15%;--gray-10-hsl:214 14% 10%;--gray-11-hsl:216 16% 6%;--gray-12-hsl:210 40% 2%}:where(.btn,button,input:is([type=button],[type=submit],[type=reset])),:where(input[type=file])::-webkit-file-upload-button,:where(input[type=file])::file-selector-button{--_accent:initial;--_text:initial;--_size:initial;--_bg-light:#fff;--_bg-dark:var(--surface-3);--_bg:var(--_bg-light);--_border:var(--surface-3);--_highlight-size:0;--_highlight-light:hsl(var(--gray-5-hsl)/25%);--_highlight-dark:hsl(var(--gray-12-hsl)/25%);--_highlight:var(--_highlight-light);--_ink-shadow-light:0 1px 0 var(--gray-3);--_ink-shadow-dark:0 1px 0 var(--surface-1);--_ink-shadow:var(--_ink-shadow-light);--_icon-size:var(--size-relative-7);--_icon-color:var(--_accent,var(--link));-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-touch-callout:none;align-items:center;background:var(--_bg);border:var(--border-size-2) solid var(--_border);border-radius:var(--radius-2);box-shadow:var(--shadow-2),0 1px var(--surface-3),0 0 0 var(--_highlight-size) var(--_highlight);color:var(--_text);display:inline-flex;font-size:var(--_size);font-weight:var(--font-weight-7);gap:var(--size-2);justify-content:center;padding-block:.75ch;padding-inline:var(--size-relative-6);text-align:center;text-shadow:var(--_ink-shadow);transition:border-color .5s var(--ease-3);user-select:none}@media (prefers-color-scheme: dark){:where(.btn,button,input:is([type=button],[type=submit],[type=reset])),:where(input[type=file])::-webkit-file-upload-button,:where(input[type=file])::file-selector-button{--_highlight:var(--_highlight-dark);--_bg:var(--_bg-dark);--_ink-shadow:var(--_ink-shadow-dark)}}@media (prefers-reduced-motion: no-preference){:where(.btn,button,input:is([type=button],[type=submit],[type=reset])),:where(input[type=file])::-webkit-file-upload-button,:where(input[type=file])::file-selector-button{transition:border-color .5s var(--ease-3),box-shadow 145ms var(--ease-4),outline-offset 145ms var(--ease-4)}}:where(.btn,button,input:is([type=button],[type=submit],[type=reset]))[disabled]{--_bg:none;--_text:var(--gray-6);box-shadow:var(--shadow-1);cursor:not-allowed}@media (prefers-color-scheme: dark){:where(.btn,button,input:is([type=button],[type=submit],[type=reset]))[disabled]{--_text:var(--gray-5)}}:where(.btn,button,input:is([type=button],[type=submit],[type=reset])):where(:not(:active):hover){--_highlight-size:var(--size-2);transition-duration:.25s}:where(.btn,button,input:is([type=button],[type=submit],[type=reset]))>:where(svg){block-size:var(--_icon-size);filter:drop-shadow(var(--_ink-shadow));flex-shrink:0;inline-size:var(--_icon-size)}:where(.btn,button,input:is([type=button],[type=submit],[type=reset]))>:where(svg>*){stroke:var(--_icon-color);stroke-width:var(--border-size-2)}:where([type=submit],form button:not([type],[disabled])){--_text:var(--_accent,var(--link))}:where([type=reset]){--_text:var(--red-6);--_border:var(--red-3)}:where([type=reset]):focus-visible{outline-color:var(--red-6)}@media (prefers-color-scheme: dark){:where([type=reset]){--_text:var(--red-2);--_border:var(--surface-3)}}:where([type=submit],[type=reset],form button:not([type])):is(:hover,:focus-visible):not([disabled]){--_border:currentColor}:where(input[type=file]){align-self:flex-start;border:var(--border-size-1) solid var(--surface-2);border-radius:var(--radius-2);box-shadow:var(--inner-shadow-4);color:var(--text-2);cursor:auto;max-inline-size:100%;padding:0}:where(input[type=file])::-webkit-file-upload-button,:where(input[type=file])::file-selector-button{cursor:pointer;margin-inline-end:var(--size-relative-6)}@media (prefers-color-scheme: dark){:where([disabled]),:where([type=reset]),:where([type=submit]),:where(form button:not([type=button])){--_bg:var(--surface-1)}}html{scroll-padding-top:var(--size-10)}.layout{min-height:100vh;display:grid;grid-template-rows:auto 1fr auto;min-height:100vh}header{position:sticky;position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;top:0;z-index:var(--layer-important)}.header-menu{display:flex;grid-area:1;align-items:center;background-color:var(--primary-color);justify-content:space-between;border-bottom:var(--shadow-color) var(--border-size-2) solid;box-shadow:var(--shadow-4);height:var(--size-9)}.header-menu .navbar-logo{font-family:"Alfa Slab One",serif;font-size:var(--font-size-5);color:var(--primary-text-color);margin:0 var(--size-3)}.header-menu .navbar-logo img{width:var(--size-8);margin:0 var(--size-5)}.header-menu .navbar-logo a{display:flex;color:var(--white)}.header-menu nav{display:flex;align-items:center;justify-content:flex-end;padding-right:var(--size-fluid-1)}.header-menu nav .hamburger{margin:var(--size-3);color:var(--primary-text-color);cursor:pointer}.header-menu nav .hamburger .hamburg{display:flex;flex-direction:column;width:var(--size-6);height:var(--size-6);border-radius:var(--border-size-1);transition:.5s}.header-menu nav .hamburger .line{display:block;margin-top:var(--size-1);padding-top:var(--size-1);height:var(--size-1);width:var(--size-5);background:#fff;border-radius:var(--border-size-1);transition:.5s;transform-origin:center}.header-menu nav .hamburger .line:nth-child(1){top:var(--size-1)}.header-menu nav .hamburger .line:nth-child(2){top:var(--size-2)}.header-menu nav .hamburger .line:nth-child(3){top:var(--size-3)}.header-menu nav .hamburger .hamburg.checked .line:nth-child(1){transform:translateY(.5em) rotate(-45deg)}.header-menu nav .hamburger .hamburg.checked .line:nth-child(2){opacity:0}.header-menu nav .hamburger .hamburg.checked .line:nth-child(3){transform:translateY(-.5em) rotate(45deg)}.header-menu nav .menu-items-hamburger{display:none;flex-flow:column wrap;background-color:var(--stone-10);position:absolute;top:var(--size-9);border:var(--border-size-2) solid var(--gray-3)}.header-menu nav .menu-items-hamburger .nav-item{border:var(--border-size-1) solid var(--gray-1);text-decoration:none;padding:0 var(--size-fluid-3) 0 var(--size-fluid-3);font-weight:var(--font-weight-9);width:100%;height:var(--size-8);display:flex;align-items:center}.header-menu nav .menu-items-hamburger .nav-item:hover{text-decoration:underline;background-size:cover;border-radius:var(--border-size-3);transition:.3s}.header-menu nav .menu-items-hamburger .nav-item a:active,.header-menu nav .menu-items-hamburger .nav-item a:visited{text-decoration:none;color:var(--white)}.header-menu nav .menu-items{flex-flow:row;text-decoration:none;font-weight:var(--font-weight-9)}.header-menu nav .menu-items .nav-item{padding:0 var(--size-fluid-2) 0 var(--size-fluid-2)}.header-menu nav .menu-items .nav-item:hover{background-color:var(--gray-6);border-radius:var(--border-size-3);transition:.7s}.header-menu nav .menu-items .nav-item:hover a:hover{color:var(--gray-12)}.header-menu nav .menu-items .nav-item a:hover,.header-menu nav .menu-items .nav-item a:active,.header-menu nav .menu-items .nav-item a:visited,.header-menu nav .menu-items .nav-item a:link,.header-menu nav .menu-items .nav-item a:focus{text-decoration:none;color:var(--white)}.hero{display:flex;align-content:center;height:calc(100vh - var(--size-9));align-items:center;background-color:var(--primary-color);justify-content:center;padding-left:var(--size-5);padding-right:var(--size-5)}.hero .hero-message{color:var(--white);line-height:var(--font-lineheight-0);font-size:var(--font-size-6);font-weight:var(--font-weight-8);margin-block-end:var(--size-3);text-align:center}.hero .under-hero{text-align:center;color:var(--white);font-size:var(--font-size-3);margin-block-end:var(--size-3);font-weight:var(--font-weight-4)}.hero .hero-image{justify-content:center;align-items:center;align-self:center}.hero .hero-image .hero-image>img{aspect-ratio:var(--ratio-square);height:auto;object-fit:fill;block-size:100%}.hero .gh-buttons{display:flex;flex-flow:row wrap;align-items:center;justify-content:center}.hero .explore-more{cursor:pointer;color:var(--white);font-size:var(--font-size-4);font-weight:var(--font-weight-5);margin-block-end:var(--size-3);justify-content:center}.hero .explore-more:hover{text-decoration:underline}.main-content{grid-area:2;background-color:var(--grey-6);display:flex;flex-direction:row;margin-bottom:var(--size-5)}.main-content .content{padding-left:var(--size-fluid-1)}.main-content .toc{max-width:var(--size-content-2);min-width:var(--size-content-1)}.main-content .toc-item{padding:var(--size-fluid-1) var(--size-fluid-2);color:var(--white)}.main-content .toc-item a,.main-content .toc-item-child a{color:var(--secondary-text-color)}.main-content .toc-item a:hover,.main-content .toc-item-child a:hover{cursor:pointer;text-decoration:underline}.main-content .toc-item a.active,.main-content .toc-item-child a.active{color:var(--toc-highlight-text-color)}.main-content .toc-item-child{padding:0 var(--size-fluid-3) var(--size-fluid-1);color:var(--white)}.main-content .toc-sticky{border-radius:var(--radius-conditional-3);border-top:var(--border-size-3) solid var(--primary-color);background-color:var(--toc-background-color);position:sticky;position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;top:var(--size-11);padding:var(--size-fluid-2) 0 var(--size-fluid-2);max-height:100vh;overflow:auto}.main-content ul{margin-top:var(--size-fluid-1)}.main-content ul>li{padding:var(--size-fluid-1) 0}.main-content p>img{width:100%;height:auto}footer{grid-area:3;display:block;text-align:center;background-color:var(--primary-color);color:var(--white);font-weight:var(--font-weight-7);margin-bottom:var(--size-1);padding-top:var(--size-1)}footer a:link,footer a:visited,footer a:hover,footer a:active{text-decoration:none;color:var(--white)}.flex-row{display:flex;flex-flow:row wrap;justify-content:center}.flex-row img{vertical-align:middle}.flex-row a:link,.flex-row a:visited,.flex-row a:hover,.flex-row a:active{text-decoration:none}.ecosystem-gallery{display:grid;justify-content:center;text-align:center;grid-template-rows:2fr repeat(2, 1fr);aspect-ratio:var(--ratio-portrait);border:var(--border-size-2) solid var(--gray-1);background-color:var(--stone-5);height:auto;margin:var(--size-1);width:var(--size-13)}.ecosystem-gallery:hover{animation:var(--animation-scale-down)}.ecosystem-gallery img{align-items:center;justify-content:center;justify-self:center;align-self:center;aspect-ratio:var(--ratio-square);width:var(--size-12);height:auto;object-fit:scale-down}.ecosystem-gallery .desc{align-self:flex-end;font-size:var(--font-size-4);font-weight:var(--font-weight-8);color:var(--stone-12)}.ecosystem-gallery .desc-sub{align-content:flex-start;font-size:var(--font-size-2);color:var(--stone-12)}*{box-sizing:border-box}a{text-decoration:none}@media only screen and (min-width: 1200px){.menu-items{display:flex}.hamburger{display:none}.content{max-width:80%}.content p{display:block;max-width:fit-content}}@media only screen and (min-width: 768px){.hero{max-height:calc(100vh - var(--size-9));display:grid;align-items:center;justify-content:center;grid-template-columns:60% 40%;grid-template-rows:2fr repeat(3, 1fr)}.hero .hero-image{align-self:center;justify-self:center;grid-area:1/2/-1/2;min-width:var(--size-15);scale:1.25;height:auto}.hero .hero-message{font-size:var(--size-8);grid-area:1;align-self:end;justify-self:center;max-width:var(--size-content-2)}.hero .under-hero{grid-area:2;font-size:var(--size-6);align-self:start;justify-self:center;padding-left:var(--size-fluid-1);max-width:var(--size-content-2)}.hero .gh-buttons{grid-area:3;align-self:start}.hero .explore-more{font-size:var(--size-5);place-self:center;grid-area:4/1/4/-1}.content{max-width:var(--size-content-3)}p>img{max-width:var(--size-13)}.menu-items{display:flex}.hamburger{display:none}.toc-sticky,.toc{display:inline-block}}@media only screen and (max-width: 810px){.hamburger{display:block}.hero{display:flex;flex-direction:column;align-items:center;justify-content:space-between;flex-wrap:wrap}.hero .hero-image{min-width:var(--size-13);height:auto}.flex-row{flex-direction:row;justify-content:center;align-items:center;width:var(--size-content-2)}.ecosystem-gallery{aspect-ratio:var(--ratio-wide);height:auto;width:var(--size-14)}.gh-buttons{display:flex}.menu-items{display:none}.content{padding:0;max-width:var(--size-content-2)}p>img{max-width:var(--size-13)}.toc-sticky,.toc{display:none}}@media only screen and (max-width: 768px){.hamburger{display:block}.flex-row{flex-direction:row;align-items:center;justify-content:center;width:var(--size-content-1)}.ecosystem-gallery{aspect-ratio:var(--ratio-wide);height:auto;width:var(--size-14)}.gh-buttons{display:flex}.menu-items{display:none}.content{padding:0;max-width:var(--size-content-2)}p>img{max-width:var(--size-13)}.toc-sticky,.toc{display:none}}@media only screen and (max-width: 375px){.content{max-width:var(--size-content-1)}.flex-row{flex-direction:column;align-items:center}.menu-items{display:none}.hero{display:grid;grid-template-rows:1fr .5fr 1fr 1fr .5fr;align-items:center;justify-content:space-between}.hero picture{grid-area:1;justify-self:center;align-self:center}.hero .hero-message{grid-area:2;font-size:var(--font-size-5)}.hero .under-hero{grid-area:3;font-size:var(--font-size-3)}.hero .gh-buttons{grid-area:4}.hero .explore-more{grid-area:5;align-self:self-end;justify-self:center}.ecosystem-gallery{aspect-ratio:var(--ratio-wide);height:auto;width:var(--size-14)}p>img{max-width:var(--size-13)}.toc-sticky,.toc{display:none}} \ No newline at end of file diff --git a/search_index.en.js b/search_index.en.js new file mode 100644 index 0000000..8e1c35b --- /dev/null +++ b/search_index.en.js @@ -0,0 +1 @@ +window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://rustic.cli.rs/community/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://rustic.cli.rs/":{"tf":1.7320508075688772}},"df":1}}}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://rustic.cli.rs/community/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.7320508075688772}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.4142135623730951}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://rustic.cli.rs/":{"tf":1.0},"https://rustic.cli.rs/community/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://rustic.cli.rs/community/":{"tf":1.4142135623730951}},"df":1}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.7320508075688772}},"df":1}}}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://rustic.cli.rs/":{"tf":1.7320508075688772},"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":2}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"q":{"docs":{"https://rustic.cli.rs/community/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://rustic.cli.rs/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://rustic.cli.rs/":{"tf":1.0},"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":2}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{"https://rustic.cli.rs/":{"tf":1.0},"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://rustic.cli.rs/":{"tf":1.4142135623730951},"https://rustic.cli.rs/community/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://rustic.cli.rs/community/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://rustic.cli.rs/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.4142135623730951}},"df":1}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://rustic.cli.rs/community/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://rustic.cli.rs/":{"tf":3.0},"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":2}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://rustic.cli.rs/":{"tf":1.4142135623730951}},"df":1}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://rustic.cli.rs/":{"tf":1.7320508075688772}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://rustic.cli.rs/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://rustic.cli.rs/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"k":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}}}}}}},"title":{"root":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://rustic.cli.rs/community/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://rustic.cli.rs/learn/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://rustic.cli.rs/":{"tf":1.0}},"df":1}}}}}}}}},"documentStore":{"save":true,"docs":{"https://rustic.cli.rs/":{"body":"Ecosystem\nThe rustic ecosystem currently consists of the following products:\n\n \n \n \n \n rustic\n \n deduplicated, encrypted backups\n \n \n \n \n \n \n \n rustic core\n \n the library powering rustic\n \n \n \n \n \n \n \n rustic scheduler\n \n centrally schedule rustic backups\n \n \n \n \n \n \n \n rustic server\n \n REST server for rustic and restic\n \n \n \n \nContributing\nTried tools from our ecosystem and not satisfied? Don't just walk away! You can help:\n\nYou can report issues or suggest new features on our\nDiscord server or using\nGithub Issues!\n\nDo you know how to code or got an idea for an improvement? Don't keep it to\nyourself!\n\nContribute fixes or new\nfeatures via a pull requests!\n\nPlease make sure, that you read the\ncontribution guide.\nStability\nCurrently our tools are in beta state and miss regression tests. It is not recommended to use them in production backups, yet.\n","id":"https://rustic.cli.rs/","title":"rustic"},"https://rustic.cli.rs/community/":{"body":"You can ask questions in the Discussions or have a look at the\nFAQ.\n\n \n \n \n \n Discord\n \n \n \n \n \n \n \n Discussions\n \n \n \n \n \n \n \n Issues\n \n \n \n \n","id":"https://rustic.cli.rs/community/","title":"Community"},"https://rustic.cli.rs/learn/":{"body":"To help you find your way around the rustic ecosystem, we have compiled the following resources:\n\n \n \n \n \n Config File Documentation\n \n \n \n \n \n \n \n Developer Documentation\n \n \n \n \n \n \n \n User Documentation\n \n \n \n \n","id":"https://rustic.cli.rs/learn/","title":"Learn"}},"docInfo":{"https://rustic.cli.rs/":{"body":79,"title":1},"https://rustic.cli.rs/community/":{"body":8,"title":1},"https://rustic.cli.rs/learn/":{"body":16,"title":1}},"length":3},"lang":"English"}; \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..3192ed7 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,24 @@ + + + + https://rustic.cli.rs/ + + + https://rustic.cli.rs/community/ + + + https://rustic.cli.rs/ecosystem/rustic-core/ + + + https://rustic.cli.rs/ecosystem/rustic-scheduler/ + + + https://rustic.cli.rs/ecosystem/rustic-server/ + + + https://rustic.cli.rs/ecosystem/rustic/ + + + https://rustic.cli.rs/learn/ + +