From add96f921b4046aaec72e2e844eed51ad1daa37d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Lecrenier?= Date: Tue, 13 Sep 2022 10:46:56 +0200 Subject: [PATCH] Remove unused infos/ http-ui/ and fuzz/ crates --- CONTRIBUTING.md | 13 - Cargo.toml | 2 +- README.md | 4 +- http-ui/Cargo.toml | 47 - http-ui/public/bulma-prefers-dark.min.css | 1 - http-ui/public/bulma.min.css | 1 - http-ui/public/filesize.min.js | 5 - http-ui/public/jquery-3.4.1.min.js | 2 - http-ui/public/logo-black.svg | 6 - http-ui/public/logo-white.svg | 6 - http-ui/public/script.js | 154 --- http-ui/public/style.css | 144 --- http-ui/public/updates-script.js | 102 -- http-ui/src/main.rs | 1176 -------------------- http-ui/src/update_store.rs | 362 ------ http-ui/templates/index.html | 102 -- http-ui/templates/updates.html | 95 -- infos/Cargo.toml | 17 - infos/src/main.rs | 1221 --------------------- milli/README.md | 26 - milli/fuzz/.gitignore | 5 - milli/fuzz/Cargo.toml | 34 - milli/fuzz/fuzz_targets/indexing.rs | 114 -- 23 files changed, 2 insertions(+), 3637 deletions(-) delete mode 100644 http-ui/Cargo.toml delete mode 100644 http-ui/public/bulma-prefers-dark.min.css delete mode 100644 http-ui/public/bulma.min.css delete mode 100644 http-ui/public/filesize.min.js delete mode 100644 http-ui/public/jquery-3.4.1.min.js delete mode 100644 http-ui/public/logo-black.svg delete mode 100644 http-ui/public/logo-white.svg delete mode 100644 http-ui/public/script.js delete mode 100644 http-ui/public/style.css delete mode 100644 http-ui/public/updates-script.js delete mode 100644 http-ui/src/main.rs delete mode 100644 http-ui/src/update_store.rs delete mode 100644 http-ui/templates/index.html delete mode 100644 http-ui/templates/updates.html delete mode 100644 infos/Cargo.toml delete mode 100644 infos/src/main.rs delete mode 100644 milli/README.md delete mode 100644 milli/fuzz/.gitignore delete mode 100644 milli/fuzz/Cargo.toml delete mode 100644 milli/fuzz/fuzz_targets/indexing.rs diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9e7ff8c90..daf2a8892 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -45,19 +45,6 @@ We recommend using the `--release` flag to test the full performance. cargo test ``` -### Querying the engine via the web interface - -To help you develop your feature you might need to use a web interface! You can query the engine by going to [the HTML page itself](http://127.0.0.1:9700). - -### Compile and run the HTTP debug server - -You can specify the number of threads to use to index documents and many other settings too. - -```bash -cd http-ui -cargo run --release -- --db my-database.mdb -vvv --indexing-jobs 8 -``` - ### Index your documents It can index a massive amount of documents in not much time, I already achieved to index: diff --git a/Cargo.toml b/Cargo.toml index f0fc59499..6a618c381 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "2" -members = ["milli", "filter-parser", "flatten-serde-json", "json-depth-checker", "http-ui", "benchmarks", "infos", "helpers", "cli"] +members = ["milli", "filter-parser", "flatten-serde-json", "json-depth-checker", "benchmarks", "helpers", "cli"] default-members = ["milli"] [profile.dev] diff --git a/README.md b/README.md index 5e916905d..93f4b2e6c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- the milli logo + the milli logo

a concurrent indexer combined with fast and relevant search algorithms

@@ -19,8 +19,6 @@ This repository contains crates to quickly debug the engine: - The `filter-parser` crate contains the parser for the Meilisearch filter syntax. - The `flatten-serde-json` crate contains the library that flattens serde-json `Value` objects like Elasticsearch does. - The `helpers` crate is only used to do operations on the database. - - The `http-ui` crate is a simple HTTP dashboard to test the features like for real! - - The `infos` crate is used to dump the internal data-structure and ensure correctness. - The `json-depth-checker` crate is used to indicate if a JSON must be flattened. ## How to use it? diff --git a/http-ui/Cargo.toml b/http-ui/Cargo.toml deleted file mode 100644 index 8d4db3a04..000000000 --- a/http-ui/Cargo.toml +++ /dev/null @@ -1,47 +0,0 @@ -[package] -name = "http-ui" -description = "The HTTP user interface of the milli search engine" -version = "0.33.4" -authors = ["Clément Renault "] -edition = "2018" -publish = false - -[dependencies] -anyhow = "1.0.56" -byte-unit = { version = "4.0.14", default-features = false, features = ["std"] } -crossbeam-channel = "0.5.2" -memmap2 = "0.5.3" -milli = { path = "../milli" } -mimalloc = { version = "0.1.29", default-features = false } -once_cell = "1.10.0" -rayon = "1.5.1" -structopt = { version = "0.3.26", default-features = false, features = ["wrap_help"] } -tempfile = "3.3.0" - -# http server -askama = "0.11.1" -askama_warp = "0.12.0" -bytes = "1.1.0" -either = "1.6.1" -flate2 = "1.0.22" -futures = "0.3.21" -serde = { version = "1.0.136", features = ["derive"] } -serde_json = { version = "1.0.79", features = ["preserve_order"] } -tokio = { version = "1.17.0", features = ["full"] } -tokio-stream = { version = "0.1.8", default-features = false, features = ["sync"] } -warp = "0.3.2" - -# logging -fst = "0.4.7" -log = "0.4.17" -stderrlog = "0.5.1" - -# Temporary fix for bitvec, remove once fixed. (https://github.com/bitvecto-rs/bitvec/issues/105) -bimap = "0.6.2" -csv = "1.1.6" -funty = "2.0.0" - -[dev-dependencies] -maplit = "1.0.2" -serde_test = "1.0.136" - diff --git a/http-ui/public/bulma-prefers-dark.min.css b/http-ui/public/bulma-prefers-dark.min.css deleted file mode 100644 index 7ebab0105..000000000 --- a/http-ui/public/bulma-prefers-dark.min.css +++ /dev/null @@ -1 +0,0 @@ -@media (prefers-color-scheme:dark){html{background-color:#17181c}body{color:#b5b5b5}a{color:#5ea3e4}a:hover{color:#dbdbdb}code{background-color:#242424;color:#eb002f}hr{background-color:#242424}strong{color:#dbdbdb}pre{background-color:#242424;color:#b5b5b5}table th{color:#dbdbdb}.has-text-white-dark{color:#fff!important}a.has-text-white-dark:focus,a.has-text-white-dark:hover{color:#fff!important}.has-background-white-dark{background-color:#fff!important}.has-text-black-dark{color:#0a0a0a!important}a.has-text-black-dark:focus,a.has-text-black-dark:hover{color:#242424!important}.has-background-black-dark{background-color:#0a0a0a!important}.has-text-light-dark{color:#f5f5f5!important}a.has-text-light-dark:focus,a.has-text-light-dark:hover{color:#fff!important}.has-background-light-dark{background-color:#f5f5f5!important}.has-text-dark-dark{color:#363636!important}a.has-text-dark-dark:focus,a.has-text-dark-dark:hover{color:#4f4f4f!important}.has-background-dark-dark{background-color:#363636!important}.has-text-primary-dark{color:#00d1b2!important}a.has-text-primary-dark:focus,a.has-text-primary-dark:hover{color:#05ffda!important}.has-background-primary-dark{background-color:#00d1b2!important}.has-text-link-dark{color:#3273dc!important}a.has-text-link-dark:focus,a.has-text-link-dark:hover{color:#5e91e4!important}.has-background-link-dark{background-color:#3273dc!important}.has-text-info-dark{color:#209cee!important}a.has-text-info-dark:focus,a.has-text-info-dark:hover{color:#50b1f2!important}.has-background-info-dark{background-color:#209cee!important}.has-text-success-dark{color:#23d160!important}a.has-text-success-dark:focus,a.has-text-success-dark:hover{color:#48e07d!important}.has-background-success-dark{background-color:#23d160!important}.has-text-warning-dark{color:#ffdd57!important}a.has-text-warning-dark:focus,a.has-text-warning-dark:hover{color:#ffe88a!important}.has-background-warning-dark{background-color:#ffdd57!important}.has-text-danger-dark{color:#ff3860!important}a.has-text-danger-dark:focus,a.has-text-danger-dark:hover{color:#ff6b89!important}.has-background-danger-dark{background-color:#ff3860!important}.has-text-black-bis-dark{color:#121212!important}.has-background-black-bis-dark{background-color:#121212!important}.has-text-black-ter-dark{color:#242424!important}.has-background-black-ter-dark{background-color:#242424!important}.has-text-grey-darker-dark{color:#363636!important}.has-background-grey-darker-dark{background-color:#363636!important}.has-text-grey-dark-dark{color:#4a4a4a!important}.has-background-grey-dark-dark{background-color:#4a4a4a!important}.has-text-grey-dark{color:#7a7a7a!important}.has-background-grey-dark{background-color:#7a7a7a!important}.has-text-grey-light-dark{color:#b5b5b5!important}.has-background-grey-light-dark{background-color:#b5b5b5!important}.has-text-grey-lighter-dark{color:#dbdbdb!important}.has-background-grey-lighter-dark{background-color:#dbdbdb!important}.has-text-white-ter-dark{color:#f5f5f5!important}.has-background-white-ter-dark{background-color:#f5f5f5!important}.has-text-white-bis-dark{color:#fafafa!important}.has-background-white-bis-dark{background-color:#fafafa!important}.box{background-color:#0a0a0a;box-shadow:0 2px 3px rgba(255,255,255,.1),0 0 0 1px rgba(255,255,255,.1);color:#b5b5b5}a.box:focus,a.box:hover{box-shadow:0 2px 3px rgba(255,255,255,.1),0 0 0 1px #5ea3e4}a.box:active{box-shadow:inset 0 1px 2px rgba(255,255,255,.2),0 0 0 1px #5ea3e4}.button{background-color:#0a0a0a;border-color:#363636;color:#dbdbdb}.button.is-hovered,.button:hover{border-color:#4a4a4a;color:#dbdbdb}.button.is-focused,.button:focus{border-color:#5ea3e4;color:#dbdbdb}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(94,163,228,.25)}.button.is-active,.button:active{border-color:#b5b5b5;color:#dbdbdb}.button.is-text{color:#b5b5b5}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:#242424;color:#dbdbdb}.button.is-text.is-active,.button.is-text:active{background-color:#171717;color:#dbdbdb}.button.is-white{background-color:#e6e6e6;border-color:transparent;color:#0a0a0a}.button.is-white.is-hovered,.button.is-white:hover{background-color:#dfdfdf;border-color:transparent;color:#0a0a0a}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:#0a0a0a}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(230,230,230,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#d9d9d9;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#e6e6e6;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#e6e6e6}.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#e6e6e6}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined{background-color:transparent;border-color:#e6e6e6;color:#e6e6e6}.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:#e6e6e6;border-color:#e6e6e6;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #e6e6e6 #e6e6e6!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#e6e6e6;box-shadow:none;color:#e6e6e6}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#e6e6e6}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#000;border-color:transparent;color:#fff}.button.is-black.is-hovered,.button.is-black:hover{background-color:#000;border-color:transparent;color:#fff}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:#fff}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,0,0,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#000;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#000}.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#000}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined{background-color:transparent;border-color:#000;color:#000}.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:#000;border-color:#000;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #000 #000!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#000;box-shadow:none;color:#000}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:#fff;color:#000}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#dbdbdb;border-color:transparent;color:#363636}.button.is-light.is-hovered,.button.is-light:hover{background-color:#d5d5d5;border-color:transparent;color:#363636}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:#363636}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(219,219,219,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#cfcfcf;border-color:transparent;color:#363636}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#dbdbdb;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:#dbdbdb}.button.is-light.is-inverted:hover{background-color:#292929}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:#dbdbdb}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-light.is-outlined{background-color:transparent;border-color:#dbdbdb;color:#dbdbdb}.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:#dbdbdb;border-color:#dbdbdb;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #dbdbdb #dbdbdb!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#dbdbdb;box-shadow:none;color:#dbdbdb}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:#363636;color:#dbdbdb}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark{background-color:#1c1c1c;border-color:transparent;color:#f5f5f5}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#161616;border-color:transparent;color:#f5f5f5}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#f5f5f5}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(28,28,28,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#0f0f0f;border-color:transparent;color:#f5f5f5}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:#1c1c1c;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted{background-color:#f5f5f5;color:#1c1c1c}.button.is-dark.is-inverted:hover{background-color:#e8e8e8}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#f5f5f5;border-color:transparent;box-shadow:none;color:#1c1c1c}.button.is-dark.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-dark.is-outlined{background-color:transparent;border-color:#1c1c1c;color:#1c1c1c}.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:#1c1c1c;border-color:#1c1c1c;color:#f5f5f5}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #1c1c1c #1c1c1c!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:#1c1c1c;box-shadow:none;color:#1c1c1c}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#f5f5f5;color:#1c1c1c}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-primary{background-color:#009e86;border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00917c;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,158,134,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#008571;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:#009e86;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:#009e86}.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#009e86}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:#009e86;color:#009e86}.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:#009e86;border-color:#009e86;color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent #009e86 #009e86!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:#009e86;box-shadow:none;color:#009e86}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:#009e86}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link{background-color:#205bbc;border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#1e56b1;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(32,91,188,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#1c51a6;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#205bbc;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#205bbc}.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#205bbc}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:#205bbc;color:#205bbc}.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:#205bbc;border-color:#205bbc;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #205bbc #205bbc!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#205bbc;box-shadow:none;color:#205bbc}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:#205bbc}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info{background-color:#0f81cc;border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#0e79c0;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(15,129,204,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#0e72b4;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#0f81cc;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#0f81cc}.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0f81cc}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:#0f81cc;color:#0f81cc}.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:#0f81cc;border-color:#0f81cc;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #0f81cc #0f81cc!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#0f81cc;box-shadow:none;color:#0f81cc}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:#0f81cc}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success{background-color:#1ca64c;border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#1a9b47;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(28,166,76,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#189042;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#1ca64c;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#1ca64c}.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1ca64c}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:#1ca64c;color:#1ca64c}.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:#1ca64c;border-color:#1ca64c;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #1ca64c #1ca64c!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#1ca64c;box-shadow:none;color:#1ca64c}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:#1ca64c}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning{background-color:#ffd324;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffd117;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,211,36,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffce0a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffd324;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:#ffd324}.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffd324}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffd324;color:#ffd324}.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:#ffd324;border-color:#ffd324;color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffd324 #ffd324!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffd324;box-shadow:none;color:#ffd324}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffd324}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-danger{background-color:#ff0537;border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f70031;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,5,55,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#eb002f;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#ff0537;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#ff0537}.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ff0537}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:#ff0537;color:#ff0537}.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:#ff0537;border-color:#ff0537;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #ff0537 #ff0537!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#ff0537;box-shadow:none;color:#ff0537}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:#ff0537}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white-dark{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white-dark.is-hovered,.button.is-white-dark:hover{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white-dark.is-focused,.button.is-white-dark:focus{border-color:transparent;color:#0a0a0a}.button.is-white-dark.is-focused:not(:active),.button.is-white-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white-dark.is-active,.button.is-white-dark:active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white-dark[disabled],fieldset[disabled] .button.is-white-dark{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white-dark.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white-dark.is-inverted:hover{background-color:#000}.button.is-white-dark.is-inverted[disabled],fieldset[disabled] .button.is-white-dark.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white-dark.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white-dark.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white-dark.is-outlined:focus,.button.is-white-dark.is-outlined:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white-dark.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-white-dark.is-outlined[disabled],fieldset[disabled] .button.is-white-dark.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white-dark.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white-dark.is-inverted.is-outlined:focus,.button.is-white-dark.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#fff}.button.is-white-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white-dark.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black-dark{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black-dark.is-hovered,.button.is-black-dark:hover{background-color:#040404;border-color:transparent;color:#fff}.button.is-black-dark.is-focused,.button.is-black-dark:focus{border-color:transparent;color:#fff}.button.is-black-dark.is-focused:not(:active),.button.is-black-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black-dark.is-active,.button.is-black-dark:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black-dark[disabled],fieldset[disabled] .button.is-black-dark{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black-dark.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-black-dark.is-inverted[disabled],fieldset[disabled] .button.is-black-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black-dark.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black-dark.is-outlined:focus,.button.is-black-dark.is-outlined:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black-dark.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black-dark.is-outlined[disabled],fieldset[disabled] .button.is-black-dark.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black-dark.is-inverted.is-outlined:focus,.button.is-black-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#0a0a0a}.button.is-black-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light-dark{background-color:#f5f5f5;border-color:transparent;color:#363636}.button.is-light-dark.is-hovered,.button.is-light-dark:hover{background-color:#eee;border-color:transparent;color:#363636}.button.is-light-dark.is-focused,.button.is-light-dark:focus{border-color:transparent;color:#363636}.button.is-light-dark.is-focused:not(:active),.button.is-light-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light-dark.is-active,.button.is-light-dark:active{background-color:#e8e8e8;border-color:transparent;color:#363636}.button.is-light-dark[disabled],fieldset[disabled] .button.is-light-dark{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light-dark.is-inverted{background-color:#363636;color:#f5f5f5}.button.is-light-dark.is-inverted:hover{background-color:#292929}.button.is-light-dark.is-inverted[disabled],fieldset[disabled] .button.is-light-dark.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light-dark.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-light-dark.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light-dark.is-outlined:focus,.button.is-light-dark.is-outlined:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.button.is-light-dark.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light-dark.is-outlined[disabled],fieldset[disabled] .button.is-light-dark.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light-dark.is-inverted.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-light-dark.is-inverted.is-outlined:focus,.button.is-light-dark.is-inverted.is-outlined:hover{background-color:#363636;color:#f5f5f5}.button.is-light-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light-dark.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark-dark{background-color:#363636;border-color:transparent;color:#f5f5f5}.button.is-dark-dark.is-hovered,.button.is-dark-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#f5f5f5}.button.is-dark-dark.is-focused,.button.is-dark-dark:focus{border-color:transparent;color:#f5f5f5}.button.is-dark-dark.is-focused:not(:active),.button.is-dark-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark-dark.is-active,.button.is-dark-dark:active{background-color:#292929;border-color:transparent;color:#f5f5f5}.button.is-dark-dark[disabled],fieldset[disabled] .button.is-dark-dark{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark-dark.is-inverted{background-color:#f5f5f5;color:#363636}.button.is-dark-dark.is-inverted:hover{background-color:#e8e8e8}.button.is-dark-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark-dark.is-inverted{background-color:#f5f5f5;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark-dark.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-dark-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark-dark.is-outlined:focus,.button.is-dark-dark.is-outlined:hover{background-color:#363636;border-color:#363636;color:#f5f5f5}.button.is-dark-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark-dark.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark-dark.is-inverted.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-dark-dark.is-inverted.is-outlined:focus,.button.is-dark-dark.is-inverted.is-outlined:hover{background-color:#f5f5f5;color:#363636}.button.is-dark-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark-dark.is-inverted.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-primary-dark{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary-dark.is-hovered,.button.is-primary-dark:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary-dark.is-focused,.button.is-primary-dark:focus{border-color:transparent;color:#fff}.button.is-primary-dark.is-focused:not(:active),.button.is-primary-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary-dark.is-active,.button.is-primary-dark:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary-dark[disabled],fieldset[disabled] .button.is-primary-dark{background-color:#00d1b2;border-color:transparent;box-shadow:none}.button.is-primary-dark.is-inverted{background-color:#fff;color:#00d1b2}.button.is-primary-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-primary-dark.is-inverted[disabled],fieldset[disabled] .button.is-primary-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#00d1b2}.button.is-primary-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary-dark.is-outlined{background-color:transparent;border-color:#00d1b2;color:#00d1b2}.button.is-primary-dark.is-outlined:focus,.button.is-primary-dark.is-outlined:hover{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.button.is-primary-dark.is-outlined.is-loading::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary-dark.is-outlined[disabled],fieldset[disabled] .button.is-primary-dark.is-outlined{background-color:transparent;border-color:#00d1b2;box-shadow:none;color:#00d1b2}.button.is-primary-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary-dark.is-inverted.is-outlined:focus,.button.is-primary-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#00d1b2}.button.is-primary-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link-dark{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link-dark.is-hovered,.button.is-link-dark:hover{background-color:#276cda;border-color:transparent;color:#fff}.button.is-link-dark.is-focused,.button.is-link-dark:focus{border-color:transparent;color:#fff}.button.is-link-dark.is-focused:not(:active),.button.is-link-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-link-dark.is-active,.button.is-link-dark:active{background-color:#2366d1;border-color:transparent;color:#fff}.button.is-link-dark[disabled],fieldset[disabled] .button.is-link-dark{background-color:#3273dc;border-color:transparent;box-shadow:none}.button.is-link-dark.is-inverted{background-color:#fff;color:#3273dc}.button.is-link-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-link-dark.is-inverted[disabled],fieldset[disabled] .button.is-link-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3273dc}.button.is-link-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link-dark.is-outlined{background-color:transparent;border-color:#3273dc;color:#3273dc}.button.is-link-dark.is-outlined:focus,.button.is-link-dark.is-outlined:hover{background-color:#3273dc;border-color:#3273dc;color:#fff}.button.is-link-dark.is-outlined.is-loading::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link-dark.is-outlined[disabled],fieldset[disabled] .button.is-link-dark.is-outlined{background-color:transparent;border-color:#3273dc;box-shadow:none;color:#3273dc}.button.is-link-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link-dark.is-inverted.is-outlined:focus,.button.is-link-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#3273dc}.button.is-link-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info-dark{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info-dark.is-hovered,.button.is-info-dark:hover{background-color:#1496ed;border-color:transparent;color:#fff}.button.is-info-dark.is-focused,.button.is-info-dark:focus{border-color:transparent;color:#fff}.button.is-info-dark.is-focused:not(:active),.button.is-info-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(32,156,238,.25)}.button.is-info-dark.is-active,.button.is-info-dark:active{background-color:#118fe4;border-color:transparent;color:#fff}.button.is-info-dark[disabled],fieldset[disabled] .button.is-info-dark{background-color:#209cee;border-color:transparent;box-shadow:none}.button.is-info-dark.is-inverted{background-color:#fff;color:#209cee}.button.is-info-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-info-dark.is-inverted[disabled],fieldset[disabled] .button.is-info-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info-dark.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info-dark.is-outlined:focus,.button.is-info-dark.is-outlined:hover{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info-dark.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee!important}.button.is-info-dark.is-outlined[disabled],fieldset[disabled] .button.is-info-dark.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info-dark.is-inverted.is-outlined:focus,.button.is-info-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#209cee}.button.is-info-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success-dark{background-color:#23d160;border-color:transparent;color:#fff}.button.is-success-dark.is-hovered,.button.is-success-dark:hover{background-color:#22c65b;border-color:transparent;color:#fff}.button.is-success-dark.is-focused,.button.is-success-dark:focus{border-color:transparent;color:#fff}.button.is-success-dark.is-focused:not(:active),.button.is-success-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(35,209,96,.25)}.button.is-success-dark.is-active,.button.is-success-dark:active{background-color:#20bc56;border-color:transparent;color:#fff}.button.is-success-dark[disabled],fieldset[disabled] .button.is-success-dark{background-color:#23d160;border-color:transparent;box-shadow:none}.button.is-success-dark.is-inverted{background-color:#fff;color:#23d160}.button.is-success-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-success-dark.is-inverted[disabled],fieldset[disabled] .button.is-success-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#23d160}.button.is-success-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success-dark.is-outlined{background-color:transparent;border-color:#23d160;color:#23d160}.button.is-success-dark.is-outlined:focus,.button.is-success-dark.is-outlined:hover{background-color:#23d160;border-color:#23d160;color:#fff}.button.is-success-dark.is-outlined.is-loading::after{border-color:transparent transparent #23d160 #23d160!important}.button.is-success-dark.is-outlined[disabled],fieldset[disabled] .button.is-success-dark.is-outlined{background-color:transparent;border-color:#23d160;box-shadow:none;color:#23d160}.button.is-success-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success-dark.is-inverted.is-outlined:focus,.button.is-success-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#23d160}.button.is-success-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning-dark{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning-dark.is-hovered,.button.is-warning-dark:hover{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning-dark.is-focused,.button.is-warning-dark:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning-dark.is-focused:not(:active),.button.is-warning-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.button.is-warning-dark.is-active,.button.is-warning-dark:active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning-dark[disabled],fieldset[disabled] .button.is-warning-dark{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning-dark.is-inverted{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning-dark.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning-dark.is-inverted[disabled],fieldset[disabled] .button.is-warning-dark.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning-dark.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning-dark.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning-dark.is-outlined:focus,.button.is-warning-dark.is-outlined:hover{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.button.is-warning-dark.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning-dark.is-outlined[disabled],fieldset[disabled] .button.is-warning-dark.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning-dark.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning-dark.is-inverted.is-outlined:focus,.button.is-warning-dark.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning-dark.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-danger-dark{background-color:#ff3860;border-color:transparent;color:#fff}.button.is-danger-dark.is-hovered,.button.is-danger-dark:hover{background-color:#ff2b56;border-color:transparent;color:#fff}.button.is-danger-dark.is-focused,.button.is-danger-dark:focus{border-color:transparent;color:#fff}.button.is-danger-dark.is-focused:not(:active),.button.is-danger-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,56,96,.25)}.button.is-danger-dark.is-active,.button.is-danger-dark:active{background-color:#ff1f4b;border-color:transparent;color:#fff}.button.is-danger-dark[disabled],fieldset[disabled] .button.is-danger-dark{background-color:#ff3860;border-color:transparent;box-shadow:none}.button.is-danger-dark.is-inverted{background-color:#fff;color:#ff3860}.button.is-danger-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-danger-dark.is-inverted[disabled],fieldset[disabled] .button.is-danger-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ff3860}.button.is-danger-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger-dark.is-outlined{background-color:transparent;border-color:#ff3860;color:#ff3860}.button.is-danger-dark.is-outlined:focus,.button.is-danger-dark.is-outlined:hover{background-color:#ff3860;border-color:#ff3860;color:#fff}.button.is-danger-dark.is-outlined.is-loading::after{border-color:transparent transparent #ff3860 #ff3860!important}.button.is-danger-dark.is-outlined[disabled],fieldset[disabled] .button.is-danger-dark.is-outlined{background-color:transparent;border-color:#ff3860;box-shadow:none;color:#ff3860}.button.is-danger-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger-dark.is-inverted.is-outlined:focus,.button.is-danger-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#ff3860}.button.is-danger-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button[disabled],fieldset[disabled] .button{background-color:#0a0a0a;border-color:#363636}.button.is-static{background-color:#f5f5f5;border-color:#363636;color:#7a7a7a}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#dbdbdb}.content blockquote{background-color:#242424;border-left:5px solid #363636}.content table td,.content table th{border:1px solid #363636}.content table th{color:#dbdbdb}.content table thead td,.content table thead th{color:#dbdbdb}.content table tfoot td,.content table tfoot th{color:#dbdbdb}.input,.textarea{background-color:#0a0a0a;border-color:#363636;color:#dbdbdb;box-shadow:inset 0 1px 2px rgba(255,255,255,.1)}.input::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(219,219,219,.3)}.input::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(219,219,219,.3)}.input:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(219,219,219,.3)}.input:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(219,219,219,.3)}.input.is-hovered,.input:hover,.textarea.is-hovered,.textarea:hover{border-color:#4a4a4a}.input.is-active,.input.is-focused,.input:active,.input:focus,.textarea.is-active,.textarea.is-focused,.textarea:active,.textarea:focus{border-color:#5ea3e4;box-shadow:0 0 0 .125em rgba(94,163,228,.25)}.input[disabled],.textarea[disabled],fieldset[disabled] .input,fieldset[disabled] .textarea{background-color:#242424;border-color:#242424;color:#b5b5b5}.input[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(181,181,181,.3)}.input[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(181,181,181,.3)}.input[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(181,181,181,.3)}.input[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(181,181,181,.3)}.input.is-white,.textarea.is-white{border-color:#e6e6e6}.input.is-white.is-active,.input.is-white.is-focused,.input.is-white:active,.input.is-white:focus,.textarea.is-white.is-active,.textarea.is-white.is-focused,.textarea.is-white:active,.textarea.is-white:focus{box-shadow:0 0 0 .125em rgba(230,230,230,.25)}.input.is-black,.textarea.is-black{border-color:#000}.input.is-black.is-active,.input.is-black.is-focused,.input.is-black:active,.input.is-black:focus,.textarea.is-black.is-active,.textarea.is-black.is-focused,.textarea.is-black:active,.textarea.is-black:focus{box-shadow:0 0 0 .125em rgba(0,0,0,.25)}.input.is-light,.textarea.is-light{border-color:#dbdbdb}.input.is-light.is-active,.input.is-light.is-focused,.input.is-light:active,.input.is-light:focus,.textarea.is-light.is-active,.textarea.is-light.is-focused,.textarea.is-light:active,.textarea.is-light:focus{box-shadow:0 0 0 .125em rgba(219,219,219,.25)}.input.is-dark,.textarea.is-dark{border-color:#1c1c1c}.input.is-dark.is-active,.input.is-dark.is-focused,.input.is-dark:active,.input.is-dark:focus,.textarea.is-dark.is-active,.textarea.is-dark.is-focused,.textarea.is-dark:active,.textarea.is-dark:focus{box-shadow:0 0 0 .125em rgba(28,28,28,.25)}.input.is-primary,.textarea.is-primary{border-color:#009e86}.input.is-primary.is-active,.input.is-primary.is-focused,.input.is-primary:active,.input.is-primary:focus,.textarea.is-primary.is-active,.textarea.is-primary.is-focused,.textarea.is-primary:active,.textarea.is-primary:focus{box-shadow:0 0 0 .125em rgba(0,158,134,.25)}.input.is-link,.textarea.is-link{border-color:#205bbc}.input.is-link.is-active,.input.is-link.is-focused,.input.is-link:active,.input.is-link:focus,.textarea.is-link.is-active,.textarea.is-link.is-focused,.textarea.is-link:active,.textarea.is-link:focus{box-shadow:0 0 0 .125em rgba(32,91,188,.25)}.input.is-info,.textarea.is-info{border-color:#0f81cc}.input.is-info.is-active,.input.is-info.is-focused,.input.is-info:active,.input.is-info:focus,.textarea.is-info.is-active,.textarea.is-info.is-focused,.textarea.is-info:active,.textarea.is-info:focus{box-shadow:0 0 0 .125em rgba(15,129,204,.25)}.input.is-success,.textarea.is-success{border-color:#1ca64c}.input.is-success.is-active,.input.is-success.is-focused,.input.is-success:active,.input.is-success:focus,.textarea.is-success.is-active,.textarea.is-success.is-focused,.textarea.is-success:active,.textarea.is-success:focus{box-shadow:0 0 0 .125em rgba(28,166,76,.25)}.input.is-warning,.textarea.is-warning{border-color:#ffd324}.input.is-warning.is-active,.input.is-warning.is-focused,.input.is-warning:active,.input.is-warning:focus,.textarea.is-warning.is-active,.textarea.is-warning.is-focused,.textarea.is-warning:active,.textarea.is-warning:focus{box-shadow:0 0 0 .125em rgba(255,211,36,.25)}.input.is-danger,.textarea.is-danger{border-color:#ff0537}.input.is-danger.is-active,.input.is-danger.is-focused,.input.is-danger:active,.input.is-danger:focus,.textarea.is-danger.is-active,.textarea.is-danger.is-focused,.textarea.is-danger:active,.textarea.is-danger:focus{box-shadow:0 0 0 .125em rgba(255,5,55,.25)}.input.is-white-dark,.textarea.is-white-dark{border-color:#fff}.input.is-white-dark.is-active,.input.is-white-dark.is-focused,.input.is-white-dark:active,.input.is-white-dark:focus,.textarea.is-white-dark.is-active,.textarea.is-white-dark.is-focused,.textarea.is-white-dark:active,.textarea.is-white-dark:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.input.is-black-dark,.textarea.is-black-dark{border-color:#0a0a0a}.input.is-black-dark.is-active,.input.is-black-dark.is-focused,.input.is-black-dark:active,.input.is-black-dark:focus,.textarea.is-black-dark.is-active,.textarea.is-black-dark.is-focused,.textarea.is-black-dark:active,.textarea.is-black-dark:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.input.is-light-dark,.textarea.is-light-dark{border-color:#f5f5f5}.input.is-light-dark.is-active,.input.is-light-dark.is-focused,.input.is-light-dark:active,.input.is-light-dark:focus,.textarea.is-light-dark.is-active,.textarea.is-light-dark.is-focused,.textarea.is-light-dark:active,.textarea.is-light-dark:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.input.is-dark-dark,.textarea.is-dark-dark{border-color:#363636}.input.is-dark-dark.is-active,.input.is-dark-dark.is-focused,.input.is-dark-dark:active,.input.is-dark-dark:focus,.textarea.is-dark-dark.is-active,.textarea.is-dark-dark.is-focused,.textarea.is-dark-dark:active,.textarea.is-dark-dark:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.input.is-primary-dark,.textarea.is-primary-dark{border-color:#00d1b2}.input.is-primary-dark.is-active,.input.is-primary-dark.is-focused,.input.is-primary-dark:active,.input.is-primary-dark:focus,.textarea.is-primary-dark.is-active,.textarea.is-primary-dark.is-focused,.textarea.is-primary-dark:active,.textarea.is-primary-dark:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.input.is-link-dark,.textarea.is-link-dark{border-color:#3273dc}.input.is-link-dark.is-active,.input.is-link-dark.is-focused,.input.is-link-dark:active,.input.is-link-dark:focus,.textarea.is-link-dark.is-active,.textarea.is-link-dark.is-focused,.textarea.is-link-dark:active,.textarea.is-link-dark:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.input.is-info-dark,.textarea.is-info-dark{border-color:#209cee}.input.is-info-dark.is-active,.input.is-info-dark.is-focused,.input.is-info-dark:active,.input.is-info-dark:focus,.textarea.is-info-dark.is-active,.textarea.is-info-dark.is-focused,.textarea.is-info-dark:active,.textarea.is-info-dark:focus{box-shadow:0 0 0 .125em rgba(32,156,238,.25)}.input.is-success-dark,.textarea.is-success-dark{border-color:#23d160}.input.is-success-dark.is-active,.input.is-success-dark.is-focused,.input.is-success-dark:active,.input.is-success-dark:focus,.textarea.is-success-dark.is-active,.textarea.is-success-dark.is-focused,.textarea.is-success-dark:active,.textarea.is-success-dark:focus{box-shadow:0 0 0 .125em rgba(35,209,96,.25)}.input.is-warning-dark,.textarea.is-warning-dark{border-color:#ffdd57}.input.is-warning-dark.is-active,.input.is-warning-dark.is-focused,.input.is-warning-dark:active,.input.is-warning-dark:focus,.textarea.is-warning-dark.is-active,.textarea.is-warning-dark.is-focused,.textarea.is-warning-dark:active,.textarea.is-warning-dark:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.input.is-danger-dark,.textarea.is-danger-dark{border-color:#ff3860}.input.is-danger-dark.is-active,.input.is-danger-dark.is-focused,.input.is-danger-dark:active,.input.is-danger-dark:focus,.textarea.is-danger-dark.is-active,.textarea.is-danger-dark.is-focused,.textarea.is-danger-dark:active,.textarea.is-danger-dark:focus{box-shadow:0 0 0 .125em rgba(255,56,96,.25)}.checkbox:hover,.radio:hover{color:#dbdbdb}.checkbox[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#b5b5b5}.select:not(.is-multiple):not(.is-loading)::after{border-color:#5ea3e4}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#242424}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#dbdbdb}.select.is-white:not(:hover)::after{border-color:#e6e6e6}.select.is-white select{border-color:#e6e6e6}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#d9d9d9}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(230,230,230,.25)}.select.is-black:not(:hover)::after{border-color:#000}.select.is-black select{border-color:#000}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(0,0,0,.25)}.select.is-light:not(:hover)::after{border-color:#dbdbdb}.select.is-light select{border-color:#dbdbdb}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#cfcfcf}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(219,219,219,.25)}.select.is-dark:not(:hover)::after{border-color:#1c1c1c}.select.is-dark select{border-color:#1c1c1c}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#0f0f0f}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(28,28,28,.25)}.select.is-primary:not(:hover)::after{border-color:#009e86}.select.is-primary select{border-color:#009e86}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#008571}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,158,134,.25)}.select.is-link:not(:hover)::after{border-color:#205bbc}.select.is-link select{border-color:#205bbc}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#1c51a6}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(32,91,188,.25)}.select.is-info:not(:hover)::after{border-color:#0f81cc}.select.is-info select{border-color:#0f81cc}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#0e72b4}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(15,129,204,.25)}.select.is-success:not(:hover)::after{border-color:#1ca64c}.select.is-success select{border-color:#1ca64c}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#189042}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(28,166,76,.25)}.select.is-warning:not(:hover)::after{border-color:#ffd324}.select.is-warning select{border-color:#ffd324}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffce0a}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,211,36,.25)}.select.is-danger:not(:hover)::after{border-color:#ff0537}.select.is-danger select{border-color:#ff0537}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#eb002f}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(255,5,55,.25)}.select.is-white-dark:not(:hover)::after{border-color:#fff}.select.is-white-dark select{border-color:#fff}.select.is-white-dark select.is-hovered,.select.is-white-dark select:hover{border-color:#f2f2f2}.select.is-white-dark select.is-active,.select.is-white-dark select.is-focused,.select.is-white-dark select:active,.select.is-white-dark select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black-dark:not(:hover)::after{border-color:#0a0a0a}.select.is-black-dark select{border-color:#0a0a0a}.select.is-black-dark select.is-hovered,.select.is-black-dark select:hover{border-color:#000}.select.is-black-dark select.is-active,.select.is-black-dark select.is-focused,.select.is-black-dark select:active,.select.is-black-dark select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light-dark:not(:hover)::after{border-color:#f5f5f5}.select.is-light-dark select{border-color:#f5f5f5}.select.is-light-dark select.is-hovered,.select.is-light-dark select:hover{border-color:#e8e8e8}.select.is-light-dark select.is-active,.select.is-light-dark select.is-focused,.select.is-light-dark select:active,.select.is-light-dark select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark-dark:not(:hover)::after{border-color:#363636}.select.is-dark-dark select{border-color:#363636}.select.is-dark-dark select.is-hovered,.select.is-dark-dark select:hover{border-color:#292929}.select.is-dark-dark select.is-active,.select.is-dark-dark select.is-focused,.select.is-dark-dark select:active,.select.is-dark-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary-dark:not(:hover)::after{border-color:#00d1b2}.select.is-primary-dark select{border-color:#00d1b2}.select.is-primary-dark select.is-hovered,.select.is-primary-dark select:hover{border-color:#00b89c}.select.is-primary-dark select.is-active,.select.is-primary-dark select.is-focused,.select.is-primary-dark select:active,.select.is-primary-dark select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link-dark:not(:hover)::after{border-color:#3273dc}.select.is-link-dark select{border-color:#3273dc}.select.is-link-dark select.is-hovered,.select.is-link-dark select:hover{border-color:#2366d1}.select.is-link-dark select.is-active,.select.is-link-dark select.is-focused,.select.is-link-dark select:active,.select.is-link-dark select:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.select.is-info-dark:not(:hover)::after{border-color:#209cee}.select.is-info-dark select{border-color:#209cee}.select.is-info-dark select.is-hovered,.select.is-info-dark select:hover{border-color:#118fe4}.select.is-info-dark select.is-active,.select.is-info-dark select.is-focused,.select.is-info-dark select:active,.select.is-info-dark select:focus{box-shadow:0 0 0 .125em rgba(32,156,238,.25)}.select.is-success-dark:not(:hover)::after{border-color:#23d160}.select.is-success-dark select{border-color:#23d160}.select.is-success-dark select.is-hovered,.select.is-success-dark select:hover{border-color:#20bc56}.select.is-success-dark select.is-active,.select.is-success-dark select.is-focused,.select.is-success-dark select:active,.select.is-success-dark select:focus{box-shadow:0 0 0 .125em rgba(35,209,96,.25)}.select.is-warning-dark:not(:hover)::after{border-color:#ffdd57}.select.is-warning-dark select{border-color:#ffdd57}.select.is-warning-dark select.is-hovered,.select.is-warning-dark select:hover{border-color:#ffd83d}.select.is-warning-dark select.is-active,.select.is-warning-dark select.is-focused,.select.is-warning-dark select:active,.select.is-warning-dark select:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.select.is-danger-dark:not(:hover)::after{border-color:#ff3860}.select.is-danger-dark select{border-color:#ff3860}.select.is-danger-dark select.is-hovered,.select.is-danger-dark select:hover{border-color:#ff1f4b}.select.is-danger-dark select.is-active,.select.is-danger-dark select.is-focused,.select.is-danger-dark select:active,.select.is-danger-dark select:focus{box-shadow:0 0 0 .125em rgba(255,56,96,.25)}.select.is-disabled::after{border-color:#b5b5b5}.file.is-white .file-cta{background-color:#e6e6e6;color:#0a0a0a}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#dfdfdf;color:#0a0a0a}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{box-shadow:0 0 .5em rgba(230,230,230,.25);color:#0a0a0a}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#d9d9d9;color:#0a0a0a}.file.is-black .file-cta{background-color:#000;color:#fff}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#000;color:#fff}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{box-shadow:0 0 .5em rgba(0,0,0,.25);color:#fff}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;color:#fff}.file.is-light .file-cta{background-color:#dbdbdb;color:#363636}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#d5d5d5;color:#363636}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{box-shadow:0 0 .5em rgba(219,219,219,.25);color:#363636}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#cfcfcf;color:#363636}.file.is-dark .file-cta{background-color:#1c1c1c;color:#f5f5f5}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#161616;color:#f5f5f5}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{box-shadow:0 0 .5em rgba(28,28,28,.25);color:#f5f5f5}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#0f0f0f;color:#f5f5f5}.file.is-primary .file-cta{background-color:#009e86;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00917c;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{box-shadow:0 0 .5em rgba(0,158,134,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#008571;color:#fff}.file.is-link .file-cta{background-color:#205bbc;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#1e56b1;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{box-shadow:0 0 .5em rgba(32,91,188,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#1c51a6;color:#fff}.file.is-info .file-cta{background-color:#0f81cc;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#0e79c0;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{box-shadow:0 0 .5em rgba(15,129,204,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#0e72b4;color:#fff}.file.is-success .file-cta{background-color:#1ca64c;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#1a9b47;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{box-shadow:0 0 .5em rgba(28,166,76,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#189042;color:#fff}.file.is-warning .file-cta{background-color:#ffd324;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffd117;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{box-shadow:0 0 .5em rgba(255,211,36,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffce0a;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:#ff0537;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f70031;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{box-shadow:0 0 .5em rgba(255,5,55,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#eb002f;color:#fff}.file.is-white-dark .file-cta{background-color:#fff;color:#0a0a0a}.file.is-white-dark.is-hovered .file-cta,.file.is-white-dark:hover .file-cta{background-color:#f9f9f9;color:#0a0a0a}.file.is-white-dark.is-focused .file-cta,.file.is-white-dark:focus .file-cta{box-shadow:0 0 .5em rgba(255,255,255,.25);color:#0a0a0a}.file.is-white-dark.is-active .file-cta,.file.is-white-dark:active .file-cta{background-color:#f2f2f2;color:#0a0a0a}.file.is-black-dark .file-cta{background-color:#0a0a0a;color:#fff}.file.is-black-dark.is-hovered .file-cta,.file.is-black-dark:hover .file-cta{background-color:#040404;color:#fff}.file.is-black-dark.is-focused .file-cta,.file.is-black-dark:focus .file-cta{box-shadow:0 0 .5em rgba(10,10,10,.25);color:#fff}.file.is-black-dark.is-active .file-cta,.file.is-black-dark:active .file-cta{background-color:#000;color:#fff}.file.is-light-dark .file-cta{background-color:#f5f5f5;color:#363636}.file.is-light-dark.is-hovered .file-cta,.file.is-light-dark:hover .file-cta{background-color:#eee;color:#363636}.file.is-light-dark.is-focused .file-cta,.file.is-light-dark:focus .file-cta{box-shadow:0 0 .5em rgba(245,245,245,.25);color:#363636}.file.is-light-dark.is-active .file-cta,.file.is-light-dark:active .file-cta{background-color:#e8e8e8;color:#363636}.file.is-dark-dark .file-cta{background-color:#363636;color:#f5f5f5}.file.is-dark-dark.is-hovered .file-cta,.file.is-dark-dark:hover .file-cta{background-color:#2f2f2f;color:#f5f5f5}.file.is-dark-dark.is-focused .file-cta,.file.is-dark-dark:focus .file-cta{box-shadow:0 0 .5em rgba(54,54,54,.25);color:#f5f5f5}.file.is-dark-dark.is-active .file-cta,.file.is-dark-dark:active .file-cta{background-color:#292929;color:#f5f5f5}.file.is-primary-dark .file-cta{background-color:#00d1b2;color:#fff}.file.is-primary-dark.is-hovered .file-cta,.file.is-primary-dark:hover .file-cta{background-color:#00c4a7;color:#fff}.file.is-primary-dark.is-focused .file-cta,.file.is-primary-dark:focus .file-cta{box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary-dark.is-active .file-cta,.file.is-primary-dark:active .file-cta{background-color:#00b89c;color:#fff}.file.is-link-dark .file-cta{background-color:#3273dc;color:#fff}.file.is-link-dark.is-hovered .file-cta,.file.is-link-dark:hover .file-cta{background-color:#276cda;color:#fff}.file.is-link-dark.is-focused .file-cta,.file.is-link-dark:focus .file-cta{box-shadow:0 0 .5em rgba(50,115,220,.25);color:#fff}.file.is-link-dark.is-active .file-cta,.file.is-link-dark:active .file-cta{background-color:#2366d1;color:#fff}.file.is-info-dark .file-cta{background-color:#209cee;color:#fff}.file.is-info-dark.is-hovered .file-cta,.file.is-info-dark:hover .file-cta{background-color:#1496ed;color:#fff}.file.is-info-dark.is-focused .file-cta,.file.is-info-dark:focus .file-cta{box-shadow:0 0 .5em rgba(32,156,238,.25);color:#fff}.file.is-info-dark.is-active .file-cta,.file.is-info-dark:active .file-cta{background-color:#118fe4;color:#fff}.file.is-success-dark .file-cta{background-color:#23d160;color:#fff}.file.is-success-dark.is-hovered .file-cta,.file.is-success-dark:hover .file-cta{background-color:#22c65b;color:#fff}.file.is-success-dark.is-focused .file-cta,.file.is-success-dark:focus .file-cta{box-shadow:0 0 .5em rgba(35,209,96,.25);color:#fff}.file.is-success-dark.is-active .file-cta,.file.is-success-dark:active .file-cta{background-color:#20bc56;color:#fff}.file.is-warning-dark .file-cta{background-color:#ffdd57;color:rgba(0,0,0,.7)}.file.is-warning-dark.is-hovered .file-cta,.file.is-warning-dark:hover .file-cta{background-color:#ffdb4a;color:rgba(0,0,0,.7)}.file.is-warning-dark.is-focused .file-cta,.file.is-warning-dark:focus .file-cta{box-shadow:0 0 .5em rgba(255,221,87,.25);color:rgba(0,0,0,.7)}.file.is-warning-dark.is-active .file-cta,.file.is-warning-dark:active .file-cta{background-color:#ffd83d;color:rgba(0,0,0,.7)}.file.is-danger-dark .file-cta{background-color:#ff3860;color:#fff}.file.is-danger-dark.is-hovered .file-cta,.file.is-danger-dark:hover .file-cta{background-color:#ff2b56;color:#fff}.file.is-danger-dark.is-focused .file-cta,.file.is-danger-dark:focus .file-cta{box-shadow:0 0 .5em rgba(255,56,96,.25);color:#fff}.file.is-danger-dark.is-active .file-cta,.file.is-danger-dark:active .file-cta{background-color:#ff1f4b;color:#fff}.file-label:hover .file-cta{background-color:#1d1d1d;color:#dbdbdb}.file-label:hover .file-name{border-color:#2f2f2f}.file-label:active .file-cta{background-color:#171717;color:#dbdbdb}.file-label:active .file-name{border-color:#292929}.file-cta,.file-name{border-color:#363636}.file-cta{background-color:#242424;color:#b5b5b5}.file-name{border-color:#363636}.label{color:#dbdbdb}.help.is-white{color:#e6e6e6}.help.is-black{color:#000}.help.is-light{color:#dbdbdb}.help.is-dark{color:#1c1c1c}.help.is-primary{color:#009e86}.help.is-link{color:#205bbc}.help.is-info{color:#0f81cc}.help.is-success{color:#1ca64c}.help.is-warning{color:#ffd324}.help.is-danger{color:#ff0537}.help.is-white-dark{color:#fff}.help.is-black-dark{color:#0a0a0a}.help.is-light-dark{color:#f5f5f5}.help.is-dark-dark{color:#363636}.help.is-primary-dark{color:#00d1b2}.help.is-link-dark{color:#3273dc}.help.is-info-dark{color:#209cee}.help.is-success-dark{color:#23d160}.help.is-warning-dark{color:#ffdd57}.help.is-danger-dark{color:#ff3860}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#363636}.notification{background-color:#242424}.notification code,.notification pre{background:#0a0a0a}.notification.is-white{background-color:#e6e6e6;color:#0a0a0a}.notification.is-black{background-color:#000;color:#fff}.notification.is-light{background-color:#dbdbdb;color:#363636}.notification.is-dark{background-color:#1c1c1c;color:#f5f5f5}.notification.is-primary{background-color:#009e86;color:#fff}.notification.is-link{background-color:#205bbc;color:#fff}.notification.is-info{background-color:#0f81cc;color:#fff}.notification.is-success{background-color:#1ca64c;color:#fff}.notification.is-warning{background-color:#ffd324;color:rgba(0,0,0,.7)}.notification.is-danger{background-color:#ff0537;color:#fff}.notification.is-white-dark{background-color:#fff;color:#0a0a0a}.notification.is-black-dark{background-color:#0a0a0a;color:#fff}.notification.is-light-dark{background-color:#f5f5f5;color:#363636}.notification.is-dark-dark{background-color:#363636;color:#f5f5f5}.notification.is-primary-dark{background-color:#00d1b2;color:#fff}.notification.is-link-dark{background-color:#3273dc;color:#fff}.notification.is-info-dark{background-color:#209cee;color:#fff}.notification.is-success-dark{background-color:#23d160;color:#fff}.notification.is-warning-dark{background-color:#ffdd57;color:rgba(0,0,0,.7)}.notification.is-danger-dark{background-color:#ff3860;color:#fff}.progress::-webkit-progress-bar{background-color:#363636}.progress::-webkit-progress-value{background-color:#b5b5b5}.progress::-moz-progress-bar{background-color:#b5b5b5}.progress::-ms-fill{background-color:#b5b5b5}.progress:indeterminate{background-color:#363636;background-image:linear-gradient(to right,#4a4a4a 30%,#363636 30%)}.progress.is-white::-webkit-progress-value{background-color:#e6e6e6}.progress.is-white::-moz-progress-bar{background-color:#e6e6e6}.progress.is-white::-ms-fill{background-color:#e6e6e6}.progress.is-white:indeterminate{background-image:linear-gradient(to right,#e6e6e6 30%,#363636 30%)}.progress.is-black::-webkit-progress-value{background-color:#000}.progress.is-black::-moz-progress-bar{background-color:#000}.progress.is-black::-ms-fill{background-color:#000}.progress.is-black:indeterminate{background-image:linear-gradient(to right,#000 30%,#363636 30%)}.progress.is-light::-webkit-progress-value{background-color:#dbdbdb}.progress.is-light::-moz-progress-bar{background-color:#dbdbdb}.progress.is-light::-ms-fill{background-color:#dbdbdb}.progress.is-light:indeterminate{background-image:linear-gradient(to right,#dbdbdb 30%,#363636 30%)}.progress.is-dark::-webkit-progress-value{background-color:#1c1c1c}.progress.is-dark::-moz-progress-bar{background-color:#1c1c1c}.progress.is-dark::-ms-fill{background-color:#1c1c1c}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,#1c1c1c 30%,#363636 30%)}.progress.is-primary::-webkit-progress-value{background-color:#009e86}.progress.is-primary::-moz-progress-bar{background-color:#009e86}.progress.is-primary::-ms-fill{background-color:#009e86}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,#009e86 30%,#363636 30%)}.progress.is-link::-webkit-progress-value{background-color:#205bbc}.progress.is-link::-moz-progress-bar{background-color:#205bbc}.progress.is-link::-ms-fill{background-color:#205bbc}.progress.is-link:indeterminate{background-image:linear-gradient(to right,#205bbc 30%,#363636 30%)}.progress.is-info::-webkit-progress-value{background-color:#0f81cc}.progress.is-info::-moz-progress-bar{background-color:#0f81cc}.progress.is-info::-ms-fill{background-color:#0f81cc}.progress.is-info:indeterminate{background-image:linear-gradient(to right,#0f81cc 30%,#363636 30%)}.progress.is-success::-webkit-progress-value{background-color:#1ca64c}.progress.is-success::-moz-progress-bar{background-color:#1ca64c}.progress.is-success::-ms-fill{background-color:#1ca64c}.progress.is-success:indeterminate{background-image:linear-gradient(to right,#1ca64c 30%,#363636 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffd324}.progress.is-warning::-moz-progress-bar{background-color:#ffd324}.progress.is-warning::-ms-fill{background-color:#ffd324}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,#ffd324 30%,#363636 30%)}.progress.is-danger::-webkit-progress-value{background-color:#ff0537}.progress.is-danger::-moz-progress-bar{background-color:#ff0537}.progress.is-danger::-ms-fill{background-color:#ff0537}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,#ff0537 30%,#363636 30%)}.progress.is-white-dark::-webkit-progress-value{background-color:#fff}.progress.is-white-dark::-moz-progress-bar{background-color:#fff}.progress.is-white-dark::-ms-fill{background-color:#fff}.progress.is-white-dark:indeterminate{background-image:linear-gradient(to right,#fff 30%,#363636 30%)}.progress.is-black-dark::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black-dark::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black-dark::-ms-fill{background-color:#0a0a0a}.progress.is-black-dark:indeterminate{background-image:linear-gradient(to right,#0a0a0a 30%,#363636 30%)}.progress.is-light-dark::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light-dark::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light-dark::-ms-fill{background-color:#f5f5f5}.progress.is-light-dark:indeterminate{background-image:linear-gradient(to right,#f5f5f5 30%,#363636 30%)}.progress.is-dark-dark::-webkit-progress-value{background-color:#363636}.progress.is-dark-dark::-moz-progress-bar{background-color:#363636}.progress.is-dark-dark::-ms-fill{background-color:#363636}.progress.is-dark-dark:indeterminate{background-image:linear-gradient(to right,#363636 30%,#363636 30%)}.progress.is-primary-dark::-webkit-progress-value{background-color:#00d1b2}.progress.is-primary-dark::-moz-progress-bar{background-color:#00d1b2}.progress.is-primary-dark::-ms-fill{background-color:#00d1b2}.progress.is-primary-dark:indeterminate{background-image:linear-gradient(to right,#00d1b2 30%,#363636 30%)}.progress.is-link-dark::-webkit-progress-value{background-color:#3273dc}.progress.is-link-dark::-moz-progress-bar{background-color:#3273dc}.progress.is-link-dark::-ms-fill{background-color:#3273dc}.progress.is-link-dark:indeterminate{background-image:linear-gradient(to right,#3273dc 30%,#363636 30%)}.progress.is-info-dark::-webkit-progress-value{background-color:#209cee}.progress.is-info-dark::-moz-progress-bar{background-color:#209cee}.progress.is-info-dark::-ms-fill{background-color:#209cee}.progress.is-info-dark:indeterminate{background-image:linear-gradient(to right,#209cee 30%,#363636 30%)}.progress.is-success-dark::-webkit-progress-value{background-color:#23d160}.progress.is-success-dark::-moz-progress-bar{background-color:#23d160}.progress.is-success-dark::-ms-fill{background-color:#23d160}.progress.is-success-dark:indeterminate{background-image:linear-gradient(to right,#23d160 30%,#363636 30%)}.progress.is-warning-dark::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning-dark::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning-dark::-ms-fill{background-color:#ffdd57}.progress.is-warning-dark:indeterminate{background-image:linear-gradient(to right,#ffdd57 30%,#363636 30%)}.progress.is-danger-dark::-webkit-progress-value{background-color:#ff3860}.progress.is-danger-dark::-moz-progress-bar{background-color:#ff3860}.progress.is-danger-dark::-ms-fill{background-color:#ff3860}.progress.is-danger-dark:indeterminate{background-image:linear-gradient(to right,#ff3860 30%,#363636 30%)}.table{background-color:#0a0a0a;color:#dbdbdb}.table td,.table th{border:1px solid #363636}.table td.is-white,.table th.is-white{background-color:#e6e6e6;border-color:#e6e6e6;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#000;border-color:#000;color:#fff}.table td.is-light,.table th.is-light{background-color:#dbdbdb;border-color:#dbdbdb;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#1c1c1c;border-color:#1c1c1c;color:#f5f5f5}.table td.is-primary,.table th.is-primary{background-color:#009e86;border-color:#009e86;color:#fff}.table td.is-link,.table th.is-link{background-color:#205bbc;border-color:#205bbc;color:#fff}.table td.is-info,.table th.is-info{background-color:#0f81cc;border-color:#0f81cc;color:#fff}.table td.is-success,.table th.is-success{background-color:#1ca64c;border-color:#1ca64c;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffd324;border-color:#ffd324;color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:#ff0537;border-color:#ff0537;color:#fff}.table td.is-white-dark,.table th.is-white-dark{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black-dark,.table th.is-black-dark{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light-dark,.table th.is-light-dark{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.table td.is-dark-dark,.table th.is-dark-dark{background-color:#363636;border-color:#363636;color:#f5f5f5}.table td.is-primary-dark,.table th.is-primary-dark{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.table td.is-link-dark,.table th.is-link-dark{background-color:#3273dc;border-color:#3273dc;color:#fff}.table td.is-info-dark,.table th.is-info-dark{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success-dark,.table th.is-success-dark{background-color:#23d160;border-color:#23d160;color:#fff}.table td.is-warning-dark,.table th.is-warning-dark{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.table td.is-danger-dark,.table th.is-danger-dark{background-color:#ff3860;border-color:#ff3860;color:#fff}.table td.is-selected,.table th.is-selected{background-color:#009e86;color:#e6e6e6}.table th{color:#dbdbdb}.table tr.is-selected{background-color:#009e86;color:#e6e6e6}.table tr.is-selected td,.table tr.is-selected th{border-color:#e6e6e6}.table thead td,.table thead th{color:#dbdbdb}.table tfoot td,.table tfoot th{color:#dbdbdb}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#121212}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#121212}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#242424}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#121212}.tag:not(body){background-color:#242424;color:#b5b5b5}.tag:not(body).is-white{background-color:#e6e6e6;color:#0a0a0a}.tag:not(body).is-black{background-color:#000;color:#fff}.tag:not(body).is-light{background-color:#dbdbdb;color:#363636}.tag:not(body).is-dark{background-color:#1c1c1c;color:#f5f5f5}.tag:not(body).is-primary{background-color:#009e86;color:#fff}.tag:not(body).is-link{background-color:#205bbc;color:#fff}.tag:not(body).is-info{background-color:#0f81cc;color:#fff}.tag:not(body).is-success{background-color:#1ca64c;color:#fff}.tag:not(body).is-warning{background-color:#ffd324;color:rgba(0,0,0,.7)}.tag:not(body).is-danger{background-color:#ff0537;color:#fff}.tag:not(body).is-white-dark{background-color:#fff;color:#0a0a0a}.tag:not(body).is-black-dark{background-color:#0a0a0a;color:#fff}.tag:not(body).is-light-dark{background-color:#f5f5f5;color:#363636}.tag:not(body).is-dark-dark{background-color:#363636;color:#f5f5f5}.tag:not(body).is-primary-dark{background-color:#00d1b2;color:#fff}.tag:not(body).is-link-dark{background-color:#3273dc;color:#fff}.tag:not(body).is-info-dark{background-color:#209cee;color:#fff}.tag:not(body).is-success-dark{background-color:#23d160;color:#fff}.tag:not(body).is-warning-dark{background-color:#ffdd57;color:rgba(0,0,0,.7)}.tag:not(body).is-danger-dark{background-color:#ff3860;color:#fff}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#171717}.tag:not(body).is-delete:active{background-color:#0a0a0a}.title{color:#dbdbdb}.subtitle{color:#b5b5b5}.subtitle strong{color:#dbdbdb}.number{background-color:#242424}.breadcrumb a{color:#5ea3e4}.breadcrumb a:hover{color:#dbdbdb}.breadcrumb li.is-active a{color:#dbdbdb}.breadcrumb li+li::before{color:#4a4a4a}.card{background-color:#0a0a0a;box-shadow:0 2px 3px rgba(255,255,255,.1),0 0 0 1px rgba(255,255,255,.1);color:#b5b5b5}.card-header{box-shadow:0 1px 2px rgba(255,255,255,.1)}.card-header-title{color:#dbdbdb}.card-footer{border-top:1px solid #363636}.card-footer-item:not(:last-child){border-right:1px solid #363636}.dropdown-content{background-color:#0a0a0a;box-shadow:0 2px 3px rgba(255,255,255,.1),0 0 0 1px rgba(255,255,255,.1)}.dropdown-item{color:#b5b5b5}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#242424;color:#fff}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#5ea3e4;color:#fff}.dropdown-divider{background-color:#363636}.list{background-color:#0a0a0a;box-shadow:0 2px 3px rgba(255,255,255,.1),0 0 0 1px rgba(255,255,255,.1)}.list-item:not(a){color:#b5b5b5}.list-item:not(:last-child){border-bottom:1px solid #363636}.list-item.is-active{background-color:#5ea3e4;color:#fff}a.list-item{background-color:#242424}.media .media{border-top:1px solid rgba(54,54,54,.5)}.media+.media{border-top:1px solid rgba(54,54,54,.5)}.menu-list a{color:#b5b5b5}.menu-list a:hover{background-color:#242424;color:#dbdbdb}.menu-list a.is-active{background-color:#5ea3e4;color:#fff}.menu-list li ul{border-left:1px solid #363636}.message{background-color:#242424}.message.is-white{background-color:#242424}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff;color:#b5b5b5}.message.is-black{background-color:#242424}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a;color:#b5b5b5}.message.is-light{background-color:#242424}.message.is-light .message-header{background-color:#f5f5f5;color:#363636}.message.is-light .message-body{border-color:#f5f5f5;color:#b5b5b5}.message.is-dark{background-color:#242424}.message.is-dark .message-header{background-color:#363636;color:#f5f5f5}.message.is-dark .message-body{border-color:#363636;color:#b5b5b5}.message.is-primary{background-color:#242424}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#b5b5b5}.message.is-link{background-color:#242424}.message.is-link .message-header{background-color:#3273dc;color:#fff}.message.is-link .message-body{border-color:#3273dc;color:#b5b5b5}.message.is-info{background-color:#242424}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#b5b5b5}.message.is-success{background-color:#242424}.message.is-success .message-header{background-color:#23d160;color:#fff}.message.is-success .message-body{border-color:#23d160;color:#b5b5b5}.message.is-warning{background-color:#242424}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#b5b5b5}.message.is-danger{background-color:#242424}.message.is-danger .message-header{background-color:#ff3860;color:#fff}.message.is-danger .message-body{border-color:#ff3860;color:#b5b5b5}.message.is-white-dark{background-color:#242424}.message.is-white-dark .message-header{background-color:#fff;color:#0a0a0a}.message.is-white-dark .message-body{border-color:#fff;color:#b5b5b5}.message.is-black-dark{background-color:#242424}.message.is-black-dark .message-header{background-color:#0a0a0a;color:#fff}.message.is-black-dark .message-body{border-color:#0a0a0a;color:#b5b5b5}.message.is-light-dark{background-color:#242424}.message.is-light-dark .message-header{background-color:#f5f5f5;color:#363636}.message.is-light-dark .message-body{border-color:#f5f5f5;color:#b5b5b5}.message.is-dark-dark{background-color:#242424}.message.is-dark-dark .message-header{background-color:#363636;color:#f5f5f5}.message.is-dark-dark .message-body{border-color:#363636;color:#b5b5b5}.message.is-primary-dark{background-color:#242424}.message.is-primary-dark .message-header{background-color:#00d1b2;color:#fff}.message.is-primary-dark .message-body{border-color:#00d1b2;color:#b5b5b5}.message.is-link-dark{background-color:#242424}.message.is-link-dark .message-header{background-color:#3273dc;color:#fff}.message.is-link-dark .message-body{border-color:#3273dc;color:#b5b5b5}.message.is-info-dark{background-color:#242424}.message.is-info-dark .message-header{background-color:#209cee;color:#fff}.message.is-info-dark .message-body{border-color:#209cee;color:#b5b5b5}.message.is-success-dark{background-color:#242424}.message.is-success-dark .message-header{background-color:#23d160;color:#fff}.message.is-success-dark .message-body{border-color:#23d160;color:#b5b5b5}.message.is-warning-dark{background-color:#242424}.message.is-warning-dark .message-header{background-color:#ffdd57;color:rgba(0,0,0,.7)}.message.is-warning-dark .message-body{border-color:#ffdd57;color:#b5b5b5}.message.is-danger-dark{background-color:#242424}.message.is-danger-dark .message-header{background-color:#ff3860;color:#fff}.message.is-danger-dark .message-body{border-color:#ff3860;color:#b5b5b5}.message-header{background-color:#b5b5b5;color:#fff}.message-body{border-color:#363636;color:#b5b5b5}.message-body code,.message-body pre{background-color:#0a0a0a}.modal-background{background-color:rgba(255,255,255,.86)}.modal-card-foot,.modal-card-head{background-color:#242424}.modal-card-head{border-bottom:1px solid #363636}.modal-card-title{color:#dbdbdb}.modal-card-foot{border-top:1px solid #363636}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff}.navbar{background-color:#17181c}.navbar.is-white{background-color:#e6e6e6;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#d9d9d9;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#d9d9d9;color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#d9d9d9;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#e6e6e6;color:#0a0a0a}}@media (prefers-color-scheme:dark){.navbar.is-black{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:#fff}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:#fff}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#000;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-light{background-color:#dbdbdb;color:#363636}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:#363636}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#cfcfcf;color:#363636}.navbar.is-light .navbar-brand .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-burger{color:#363636}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:#363636}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#cfcfcf;color:#363636}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#cfcfcf;color:#363636}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#dbdbdb;color:#363636}}@media (prefers-color-scheme:dark){.navbar.is-dark{background-color:#1c1c1c;color:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#0f0f0f;color:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-burger{color:#f5f5f5}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#f5f5f5}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#0f0f0f;color:#f5f5f5}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#0f0f0f;color:#f5f5f5}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#1c1c1c;color:#f5f5f5}}@media (prefers-color-scheme:dark){.navbar.is-primary{background-color:#009e86;color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#008571;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#008571;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#008571;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:#009e86;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-link{background-color:#205bbc;color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#1c51a6;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#1c51a6;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#1c51a6;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#205bbc;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-info{background-color:#0f81cc;color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#0e72b4;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#0e72b4;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#0e72b4;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#0f81cc;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-success{background-color:#1ca64c;color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#189042;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#189042;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#189042;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#1ca64c;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-warning{background-color:#ffd324;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffce0a;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffce0a;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffce0a;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffd324;color:rgba(0,0,0,.7)}}@media (prefers-color-scheme:dark){.navbar.is-danger{background-color:#ff0537;color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#eb002f;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#eb002f;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#eb002f;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#ff0537;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-white-dark{background-color:#fff;color:#0a0a0a}.navbar.is-white-dark .navbar-brand .navbar-link,.navbar.is-white-dark .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white-dark .navbar-brand .navbar-link.is-active,.navbar.is-white-dark .navbar-brand .navbar-link:hover,.navbar.is-white-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-white-dark .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white-dark .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white-dark .navbar-burger{color:#0a0a0a}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-white-dark .navbar-end .navbar-link,.navbar.is-white-dark .navbar-end>.navbar-item,.navbar.is-white-dark .navbar-start .navbar-link,.navbar.is-white-dark .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white-dark .navbar-end .navbar-link.is-active,.navbar.is-white-dark .navbar-end .navbar-link:hover,.navbar.is-white-dark .navbar-end>a.navbar-item.is-active,.navbar.is-white-dark .navbar-end>a.navbar-item:hover,.navbar.is-white-dark .navbar-start .navbar-link.is-active,.navbar.is-white-dark .navbar-start .navbar-link:hover,.navbar.is-white-dark .navbar-start>a.navbar-item.is-active,.navbar.is-white-dark .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white-dark .navbar-end .navbar-link::after,.navbar.is-white-dark .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white-dark .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}@media (prefers-color-scheme:dark){.navbar.is-black-dark{background-color:#0a0a0a;color:#fff}.navbar.is-black-dark .navbar-brand .navbar-link,.navbar.is-black-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-black-dark .navbar-brand .navbar-link.is-active,.navbar.is-black-dark .navbar-brand .navbar-link:hover,.navbar.is-black-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-black-dark .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black-dark .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-black-dark .navbar-end .navbar-link,.navbar.is-black-dark .navbar-end>.navbar-item,.navbar.is-black-dark .navbar-start .navbar-link,.navbar.is-black-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-black-dark .navbar-end .navbar-link.is-active,.navbar.is-black-dark .navbar-end .navbar-link:hover,.navbar.is-black-dark .navbar-end>a.navbar-item.is-active,.navbar.is-black-dark .navbar-end>a.navbar-item:hover,.navbar.is-black-dark .navbar-start .navbar-link.is-active,.navbar.is-black-dark .navbar-start .navbar-link:hover,.navbar.is-black-dark .navbar-start>a.navbar-item.is-active,.navbar.is-black-dark .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black-dark .navbar-end .navbar-link::after,.navbar.is-black-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black-dark .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-light-dark{background-color:#f5f5f5;color:#363636}.navbar.is-light-dark .navbar-brand .navbar-link,.navbar.is-light-dark .navbar-brand>.navbar-item{color:#363636}.navbar.is-light-dark .navbar-brand .navbar-link.is-active,.navbar.is-light-dark .navbar-brand .navbar-link:hover,.navbar.is-light-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-light-dark .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:#363636}.navbar.is-light-dark .navbar-brand .navbar-link::after{border-color:#363636}.navbar.is-light-dark .navbar-burger{color:#363636}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-light-dark .navbar-end .navbar-link,.navbar.is-light-dark .navbar-end>.navbar-item,.navbar.is-light-dark .navbar-start .navbar-link,.navbar.is-light-dark .navbar-start>.navbar-item{color:#363636}.navbar.is-light-dark .navbar-end .navbar-link.is-active,.navbar.is-light-dark .navbar-end .navbar-link:hover,.navbar.is-light-dark .navbar-end>a.navbar-item.is-active,.navbar.is-light-dark .navbar-end>a.navbar-item:hover,.navbar.is-light-dark .navbar-start .navbar-link.is-active,.navbar.is-light-dark .navbar-start .navbar-link:hover,.navbar.is-light-dark .navbar-start>a.navbar-item.is-active,.navbar.is-light-dark .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:#363636}.navbar.is-light-dark .navbar-end .navbar-link::after,.navbar.is-light-dark .navbar-start .navbar-link::after{border-color:#363636}.navbar.is-light-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:#363636}.navbar.is-light-dark .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#363636}}@media (prefers-color-scheme:dark){.navbar.is-dark-dark{background-color:#363636;color:#f5f5f5}.navbar.is-dark-dark .navbar-brand .navbar-link,.navbar.is-dark-dark .navbar-brand>.navbar-item{color:#f5f5f5}.navbar.is-dark-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark-dark .navbar-brand .navbar-link:hover,.navbar.is-dark-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#f5f5f5}.navbar.is-dark-dark .navbar-brand .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark-dark .navbar-burger{color:#f5f5f5}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-dark-dark .navbar-end .navbar-link,.navbar.is-dark-dark .navbar-end>.navbar-item,.navbar.is-dark-dark .navbar-start .navbar-link,.navbar.is-dark-dark .navbar-start>.navbar-item{color:#f5f5f5}.navbar.is-dark-dark .navbar-end .navbar-link.is-active,.navbar.is-dark-dark .navbar-end .navbar-link:hover,.navbar.is-dark-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark-dark .navbar-start .navbar-link.is-active,.navbar.is-dark-dark .navbar-start .navbar-link:hover,.navbar.is-dark-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#f5f5f5}.navbar.is-dark-dark .navbar-end .navbar-link::after,.navbar.is-dark-dark .navbar-start .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#f5f5f5}.navbar.is-dark-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#f5f5f5}}@media (prefers-color-scheme:dark){.navbar.is-primary-dark{background-color:#00d1b2;color:#fff}.navbar.is-primary-dark .navbar-brand .navbar-link,.navbar.is-primary-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary-dark .navbar-brand .navbar-link.is-active,.navbar.is-primary-dark .navbar-brand .navbar-link:hover,.navbar.is-primary-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-primary-dark .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary-dark .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-primary-dark .navbar-end .navbar-link,.navbar.is-primary-dark .navbar-end>.navbar-item,.navbar.is-primary-dark .navbar-start .navbar-link,.navbar.is-primary-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-primary-dark .navbar-end .navbar-link.is-active,.navbar.is-primary-dark .navbar-end .navbar-link:hover,.navbar.is-primary-dark .navbar-end>a.navbar-item.is-active,.navbar.is-primary-dark .navbar-end>a.navbar-item:hover,.navbar.is-primary-dark .navbar-start .navbar-link.is-active,.navbar.is-primary-dark .navbar-start .navbar-link:hover,.navbar.is-primary-dark .navbar-start>a.navbar-item.is-active,.navbar.is-primary-dark .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary-dark .navbar-end .navbar-link::after,.navbar.is-primary-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary-dark .navbar-dropdown a.navbar-item.is-active{background-color:#00d1b2;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-link-dark{background-color:#3273dc;color:#fff}.navbar.is-link-dark .navbar-brand .navbar-link,.navbar.is-link-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-link-dark .navbar-brand .navbar-link.is-active,.navbar.is-link-dark .navbar-brand .navbar-link:hover,.navbar.is-link-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-link-dark .navbar-brand>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link-dark .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-link-dark .navbar-end .navbar-link,.navbar.is-link-dark .navbar-end>.navbar-item,.navbar.is-link-dark .navbar-start .navbar-link,.navbar.is-link-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-link-dark .navbar-end .navbar-link.is-active,.navbar.is-link-dark .navbar-end .navbar-link:hover,.navbar.is-link-dark .navbar-end>a.navbar-item.is-active,.navbar.is-link-dark .navbar-end>a.navbar-item:hover,.navbar.is-link-dark .navbar-start .navbar-link.is-active,.navbar.is-link-dark .navbar-start .navbar-link:hover,.navbar.is-link-dark .navbar-start>a.navbar-item.is-active,.navbar.is-link-dark .navbar-start>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link-dark .navbar-end .navbar-link::after,.navbar.is-link-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#2366d1;color:#fff}.navbar.is-link-dark .navbar-dropdown a.navbar-item.is-active{background-color:#3273dc;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-info-dark{background-color:#209cee;color:#fff}.navbar.is-info-dark .navbar-brand .navbar-link,.navbar.is-info-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-info-dark .navbar-brand .navbar-link.is-active,.navbar.is-info-dark .navbar-brand .navbar-link:hover,.navbar.is-info-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-info-dark .navbar-brand>a.navbar-item:hover{background-color:#118fe4;color:#fff}.navbar.is-info-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info-dark .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-info-dark .navbar-end .navbar-link,.navbar.is-info-dark .navbar-end>.navbar-item,.navbar.is-info-dark .navbar-start .navbar-link,.navbar.is-info-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-info-dark .navbar-end .navbar-link.is-active,.navbar.is-info-dark .navbar-end .navbar-link:hover,.navbar.is-info-dark .navbar-end>a.navbar-item.is-active,.navbar.is-info-dark .navbar-end>a.navbar-item:hover,.navbar.is-info-dark .navbar-start .navbar-link.is-active,.navbar.is-info-dark .navbar-start .navbar-link:hover,.navbar.is-info-dark .navbar-start>a.navbar-item.is-active,.navbar.is-info-dark .navbar-start>a.navbar-item:hover{background-color:#118fe4;color:#fff}.navbar.is-info-dark .navbar-end .navbar-link::after,.navbar.is-info-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#118fe4;color:#fff}.navbar.is-info-dark .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-success-dark{background-color:#23d160;color:#fff}.navbar.is-success-dark .navbar-brand .navbar-link,.navbar.is-success-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-success-dark .navbar-brand .navbar-link.is-active,.navbar.is-success-dark .navbar-brand .navbar-link:hover,.navbar.is-success-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-success-dark .navbar-brand>a.navbar-item:hover{background-color:#20bc56;color:#fff}.navbar.is-success-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success-dark .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-success-dark .navbar-end .navbar-link,.navbar.is-success-dark .navbar-end>.navbar-item,.navbar.is-success-dark .navbar-start .navbar-link,.navbar.is-success-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-success-dark .navbar-end .navbar-link.is-active,.navbar.is-success-dark .navbar-end .navbar-link:hover,.navbar.is-success-dark .navbar-end>a.navbar-item.is-active,.navbar.is-success-dark .navbar-end>a.navbar-item:hover,.navbar.is-success-dark .navbar-start .navbar-link.is-active,.navbar.is-success-dark .navbar-start .navbar-link:hover,.navbar.is-success-dark .navbar-start>a.navbar-item.is-active,.navbar.is-success-dark .navbar-start>a.navbar-item:hover{background-color:#20bc56;color:#fff}.navbar.is-success-dark .navbar-end .navbar-link::after,.navbar.is-success-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#20bc56;color:#fff}.navbar.is-success-dark .navbar-dropdown a.navbar-item.is-active{background-color:#23d160;color:#fff}}@media (prefers-color-scheme:dark){.navbar.is-warning-dark{background-color:#ffdd57;color:rgba(0,0,0,.7)}.navbar.is-warning-dark .navbar-brand .navbar-link,.navbar.is-warning-dark .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning-dark .navbar-brand .navbar-link.is-active,.navbar.is-warning-dark .navbar-brand .navbar-link:hover,.navbar.is-warning-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-warning-dark .navbar-brand>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning-dark .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning-dark .navbar-burger{color:rgba(0,0,0,.7)}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-warning-dark .navbar-end .navbar-link,.navbar.is-warning-dark .navbar-end>.navbar-item,.navbar.is-warning-dark .navbar-start .navbar-link,.navbar.is-warning-dark .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning-dark .navbar-end .navbar-link.is-active,.navbar.is-warning-dark .navbar-end .navbar-link:hover,.navbar.is-warning-dark .navbar-end>a.navbar-item.is-active,.navbar.is-warning-dark .navbar-end>a.navbar-item:hover,.navbar.is-warning-dark .navbar-start .navbar-link.is-active,.navbar.is-warning-dark .navbar-start .navbar-link:hover,.navbar.is-warning-dark .navbar-start>a.navbar-item.is-active,.navbar.is-warning-dark .navbar-start>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning-dark .navbar-end .navbar-link::after,.navbar.is-warning-dark .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning-dark .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,.7)}}@media (prefers-color-scheme:dark){.navbar.is-danger-dark{background-color:#ff3860;color:#fff}.navbar.is-danger-dark .navbar-brand .navbar-link,.navbar.is-danger-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger-dark .navbar-brand .navbar-link.is-active,.navbar.is-danger-dark .navbar-brand .navbar-link:hover,.navbar.is-danger-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-danger-dark .navbar-brand>a.navbar-item:hover{background-color:#ff1f4b;color:#fff}.navbar.is-danger-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger-dark .navbar-burger{color:#fff}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-danger-dark .navbar-end .navbar-link,.navbar.is-danger-dark .navbar-end>.navbar-item,.navbar.is-danger-dark .navbar-start .navbar-link,.navbar.is-danger-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-danger-dark .navbar-end .navbar-link.is-active,.navbar.is-danger-dark .navbar-end .navbar-link:hover,.navbar.is-danger-dark .navbar-end>a.navbar-item.is-active,.navbar.is-danger-dark .navbar-end>a.navbar-item:hover,.navbar.is-danger-dark .navbar-start .navbar-link.is-active,.navbar.is-danger-dark .navbar-start .navbar-link:hover,.navbar.is-danger-dark .navbar-start>a.navbar-item.is-active,.navbar.is-danger-dark .navbar-start>a.navbar-item:hover{background-color:#ff1f4b;color:#fff}.navbar.is-danger-dark .navbar-end .navbar-link::after,.navbar.is-danger-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#ff1f4b;color:#fff}.navbar.is-danger-dark .navbar-dropdown a.navbar-item.is-active{background-color:#ff3860;color:#fff}}@media (prefers-color-scheme:dark){.navbar.has-shadow{box-shadow:0 2px 0 0 #242424}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #242424}.navbar-burger{color:#b5b5b5}.navbar-item,.navbar-link{color:#b5b5b5}.navbar-link.is-active,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:hover{background-color:#121212;color:#5ea3e4}.navbar-item:hover{border-bottom-color:#5ea3e4}.navbar-item.is-active{border-bottom-color:#5ea3e4;color:#5ea3e4}.navbar-link:not(.is-arrowless)::after{border-color:#5ea3e4}.navbar-divider{background-color:#242424}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.navbar-menu{background-color:#17181c;box-shadow:0 8px 16px rgba(255,255,255,.1)}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(255,255,255,.1)}}@media screen and (prefers-color-scheme:dark) and (min-width:1088px){.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#242424;color:#fff}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#242424;color:#5ea3e4}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #363636;box-shadow:0 -8px 8px rgba(255,255,255,.1)}.navbar-dropdown{background-color:#0a0a0a;border-top:2px solid #363636;box-shadow:0 8px 8px rgba(255,255,255,.1)}.navbar-dropdown a.navbar-item:hover{background-color:#242424;color:#fff}.navbar-dropdown a.navbar-item.is-active{background-color:#242424;color:#5ea3e4}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{box-shadow:0 8px 8px rgba(255,255,255,.1),0 0 0 1px rgba(255,255,255,.1)}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(255,255,255,.1)}.navbar-link.is-active,a.navbar-item.is-active{color:#fff}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:#121212}}@media (prefers-color-scheme:dark){.pagination-link,.pagination-next,.pagination-previous{border-color:#363636;color:#dbdbdb}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:#4a4a4a;color:#dbdbdb}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:#5ea3e4}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(255,255,255,.2)}.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled]{background-color:#363636;border-color:#363636;color:#7a7a7a}.pagination-link.is-current{background-color:#5ea3e4;border-color:#5ea3e4;color:#fff}.pagination-ellipsis{color:#4a4a4a}.panel-block,.panel-heading,.panel-tabs{border-bottom:1px solid #363636;border-left:1px solid #363636;border-right:1px solid #363636}.panel-block:first-child,.panel-heading:first-child,.panel-tabs:first-child{border-top:1px solid #363636}.panel-heading{background-color:#242424;color:#dbdbdb}.panel-tabs a{border-bottom:1px solid #363636}.panel-tabs a.is-active{border-bottom-color:#b5b5b5;color:#dbdbdb}.panel-list a{color:#b5b5b5}.panel-list a:hover{color:#5ea3e4}.panel-block{color:#dbdbdb}.panel-block.is-active{border-left-color:#5ea3e4;color:#dbdbdb}.panel-block.is-active .panel-icon{color:#5ea3e4}a.panel-block:hover,label.panel-block:hover{background-color:#242424}.tabs a{border-bottom-color:#363636;color:#b5b5b5}.tabs a:hover{border-bottom-color:#dbdbdb;color:#dbdbdb}.tabs li.is-active a{border-bottom-color:#5ea3e4;color:#5ea3e4}.tabs ul{border-bottom-color:#363636}.tabs.is-boxed a:hover{background-color:#242424;border-bottom-color:#363636}.tabs.is-boxed li.is-active a{background-color:#0a0a0a;border-color:#363636}.tabs.is-toggle a{border-color:#363636}.tabs.is-toggle a:hover{background-color:#242424;border-color:#4a4a4a}.tabs.is-toggle li.is-active a{background-color:#5ea3e4;border-color:#5ea3e4;color:#fff}.hero.is-white,.hero.is-white-dark{background-color:#e6e6e6;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag),.hero.is-white strong,.hero.is-white-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-white-dark strong{color:inherit}.hero.is-white .title,.hero.is-white-dark .title{color:#0a0a0a}.hero.is-white .subtitle,.hero.is-white-dark .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong,.hero.is-white-dark .subtitle a:not(.button),.hero.is-white-dark .subtitle strong{color:#0a0a0a}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-white .navbar-menu,.hero.is-white-dark .navbar-menu{background-color:#e6e6e6}}@media (prefers-color-scheme:dark){.hero.is-white .navbar-item,.hero.is-white .navbar-link,.hero.is-white-dark .navbar-item,.hero.is-white-dark .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover,.hero.is-white-dark .navbar-link.is-active,.hero.is-white-dark .navbar-link:hover,.hero.is-white-dark a.navbar-item.is-active,.hero.is-white-dark a.navbar-item:hover{background-color:#d9d9d9;color:#0a0a0a}.hero.is-white .tabs a,.hero.is-white-dark .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white .tabs a:hover,.hero.is-white-dark .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a,.hero.is-white-dark .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a,.hero.is-white-dark .tabs.is-boxed a,.hero.is-white-dark .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover,.hero.is-white-dark .tabs.is-boxed a:hover,.hero.is-white-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover,.hero.is-white-dark .tabs.is-boxed li.is-active a,.hero.is-white-dark .tabs.is-boxed li.is-active a:hover,.hero.is-white-dark .tabs.is-toggle li.is-active a,.hero.is-white-dark .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#e6e6e6}.hero.is-white-dark.is-bold,.hero.is-white.is-bold{background-image:linear-gradient(141deg,#d1c7c9 0,#e6e6e6 71%,#f3f2f2 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-white-dark.is-bold .navbar-menu,.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#d1c7c9 0,#e6e6e6 71%,#f3f2f2 100%)}}@media (prefers-color-scheme:dark){.hero.is-black,.hero.is-black-dark{background-color:#000;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag),.hero.is-black strong,.hero.is-black-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-black-dark strong{color:inherit}.hero.is-black .title,.hero.is-black-dark .title{color:#fff}.hero.is-black .subtitle,.hero.is-black-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong,.hero.is-black-dark .subtitle a:not(.button),.hero.is-black-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-black .navbar-menu,.hero.is-black-dark .navbar-menu{background-color:#000}}@media (prefers-color-scheme:dark){.hero.is-black .navbar-item,.hero.is-black .navbar-link,.hero.is-black-dark .navbar-item,.hero.is-black-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover,.hero.is-black-dark .navbar-link.is-active,.hero.is-black-dark .navbar-link:hover,.hero.is-black-dark a.navbar-item.is-active,.hero.is-black-dark a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black .tabs a,.hero.is-black-dark .tabs a{color:#fff;opacity:.9}.hero.is-black .tabs a:hover,.hero.is-black-dark .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a,.hero.is-black-dark .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a,.hero.is-black-dark .tabs.is-boxed a,.hero.is-black-dark .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover,.hero.is-black-dark .tabs.is-boxed a:hover,.hero.is-black-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover,.hero.is-black-dark .tabs.is-boxed li.is-active a,.hero.is-black-dark .tabs.is-boxed li.is-active a:hover,.hero.is-black-dark .tabs.is-toggle li.is-active a,.hero.is-black-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#000}.hero.is-black-dark.is-bold,.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,#000 71%,#0d0d0d 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-black-dark.is-bold .navbar-menu,.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#000 71%,#0d0d0d 100%)}}@media (prefers-color-scheme:dark){.hero.is-light,.hero.is-light-dark{background-color:#dbdbdb;color:#363636}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag),.hero.is-light strong,.hero.is-light-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-light-dark strong{color:inherit}.hero.is-light .title,.hero.is-light-dark .title{color:#363636}.hero.is-light .subtitle,.hero.is-light-dark .subtitle{color:rgba(54,54,54,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong,.hero.is-light-dark .subtitle a:not(.button),.hero.is-light-dark .subtitle strong{color:#363636}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-light .navbar-menu,.hero.is-light-dark .navbar-menu{background-color:#dbdbdb}}@media (prefers-color-scheme:dark){.hero.is-light .navbar-item,.hero.is-light .navbar-link,.hero.is-light-dark .navbar-item,.hero.is-light-dark .navbar-link{color:rgba(54,54,54,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover,.hero.is-light-dark .navbar-link.is-active,.hero.is-light-dark .navbar-link:hover,.hero.is-light-dark a.navbar-item.is-active,.hero.is-light-dark a.navbar-item:hover{background-color:#cfcfcf;color:#363636}.hero.is-light .tabs a,.hero.is-light-dark .tabs a{color:#363636;opacity:.9}.hero.is-light .tabs a:hover,.hero.is-light-dark .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a,.hero.is-light-dark .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a,.hero.is-light-dark .tabs.is-boxed a,.hero.is-light-dark .tabs.is-toggle a{color:#363636}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover,.hero.is-light-dark .tabs.is-boxed a:hover,.hero.is-light-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover,.hero.is-light-dark .tabs.is-boxed li.is-active a,.hero.is-light-dark .tabs.is-boxed li.is-active a:hover,.hero.is-light-dark .tabs.is-toggle li.is-active a,.hero.is-light-dark .tabs.is-toggle li.is-active a:hover{background-color:#363636;border-color:#363636;color:#dbdbdb}.hero.is-light-dark.is-bold,.hero.is-light.is-bold{background-image:linear-gradient(141deg,#c8bcbe 0,#dbdbdb 71%,#e9e7e7 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-light-dark.is-bold .navbar-menu,.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#c8bcbe 0,#dbdbdb 71%,#e9e7e7 100%)}}@media (prefers-color-scheme:dark){.hero.is-dark,.hero.is-dark-dark{background-color:#1c1c1c;color:#f5f5f5}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-dark strong,.hero.is-dark-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-dark-dark strong{color:inherit}.hero.is-dark .title,.hero.is-dark-dark .title{color:#f5f5f5}.hero.is-dark .subtitle,.hero.is-dark-dark .subtitle{color:rgba(245,245,245,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong,.hero.is-dark-dark .subtitle a:not(.button),.hero.is-dark-dark .subtitle strong{color:#f5f5f5}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-dark .navbar-menu,.hero.is-dark-dark .navbar-menu{background-color:#1c1c1c}}@media (prefers-color-scheme:dark){.hero.is-dark .navbar-item,.hero.is-dark .navbar-link,.hero.is-dark-dark .navbar-item,.hero.is-dark-dark .navbar-link{color:rgba(245,245,245,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover,.hero.is-dark-dark .navbar-link.is-active,.hero.is-dark-dark .navbar-link:hover,.hero.is-dark-dark a.navbar-item.is-active,.hero.is-dark-dark a.navbar-item:hover{background-color:#0f0f0f;color:#f5f5f5}.hero.is-dark .tabs a,.hero.is-dark-dark .tabs a{color:#f5f5f5;opacity:.9}.hero.is-dark .tabs a:hover,.hero.is-dark-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.hero.is-dark-dark .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.hero.is-dark-dark .tabs.is-boxed a,.hero.is-dark-dark .tabs.is-toggle a{color:#f5f5f5}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.hero.is-dark-dark .tabs.is-boxed a:hover,.hero.is-dark-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover,.hero.is-dark-dark .tabs.is-boxed li.is-active a,.hero.is-dark-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark-dark .tabs.is-toggle li.is-active a,.hero.is-dark-dark .tabs.is-toggle li.is-active a:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:#1c1c1c}.hero.is-dark-dark.is-bold,.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#030202 0,#1c1c1c 71%,#2b2727 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-dark-dark.is-bold .navbar-menu,.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#030202 0,#1c1c1c 71%,#2b2727 100%)}}@media (prefers-color-scheme:dark){.hero.is-primary,.hero.is-primary-dark{background-color:#009e86;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag),.hero.is-primary strong,.hero.is-primary-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-primary-dark strong{color:inherit}.hero.is-primary .title,.hero.is-primary-dark .title{color:#fff}.hero.is-primary .subtitle,.hero.is-primary-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong,.hero.is-primary-dark .subtitle a:not(.button),.hero.is-primary-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-primary .navbar-menu,.hero.is-primary-dark .navbar-menu{background-color:#009e86}}@media (prefers-color-scheme:dark){.hero.is-primary .navbar-item,.hero.is-primary .navbar-link,.hero.is-primary-dark .navbar-item,.hero.is-primary-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover,.hero.is-primary-dark .navbar-link.is-active,.hero.is-primary-dark .navbar-link:hover,.hero.is-primary-dark a.navbar-item.is-active,.hero.is-primary-dark a.navbar-item:hover{background-color:#008571;color:#fff}.hero.is-primary .tabs a,.hero.is-primary-dark .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover,.hero.is-primary-dark .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.hero.is-primary-dark .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.hero.is-primary-dark .tabs.is-boxed a,.hero.is-primary-dark .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.hero.is-primary-dark .tabs.is-boxed a:hover,.hero.is-primary-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover,.hero.is-primary-dark .tabs.is-boxed li.is-active a,.hero.is-primary-dark .tabs.is-boxed li.is-active a:hover,.hero.is-primary-dark .tabs.is-toggle li.is-active a,.hero.is-primary-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#009e86}.hero.is-primary-dark.is-bold,.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#006b49 0,#009e86 71%,#00b5b8 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-primary-dark.is-bold .navbar-menu,.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#006b49 0,#009e86 71%,#00b5b8 100%)}}@media (prefers-color-scheme:dark){.hero.is-link,.hero.is-link-dark{background-color:#205bbc;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag),.hero.is-link strong,.hero.is-link-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-link-dark strong{color:inherit}.hero.is-link .title,.hero.is-link-dark .title{color:#fff}.hero.is-link .subtitle,.hero.is-link-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong,.hero.is-link-dark .subtitle a:not(.button),.hero.is-link-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-link .navbar-menu,.hero.is-link-dark .navbar-menu{background-color:#205bbc}}@media (prefers-color-scheme:dark){.hero.is-link .navbar-item,.hero.is-link .navbar-link,.hero.is-link-dark .navbar-item,.hero.is-link-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover,.hero.is-link-dark .navbar-link.is-active,.hero.is-link-dark .navbar-link:hover,.hero.is-link-dark a.navbar-item.is-active,.hero.is-link-dark a.navbar-item:hover{background-color:#1c51a6;color:#fff}.hero.is-link .tabs a,.hero.is-link-dark .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover,.hero.is-link-dark .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a,.hero.is-link-dark .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a,.hero.is-link-dark .tabs.is-boxed a,.hero.is-link-dark .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover,.hero.is-link-dark .tabs.is-boxed a:hover,.hero.is-link-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover,.hero.is-link-dark .tabs.is-boxed li.is-active a,.hero.is-link-dark .tabs.is-boxed li.is-active a:hover,.hero.is-link-dark .tabs.is-toggle li.is-active a,.hero.is-link-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#205bbc}.hero.is-link-dark.is-bold,.hero.is-link.is-bold{background-image:linear-gradient(141deg,#105b98 0,#205bbc 71%,#1d46d7 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-link-dark.is-bold .navbar-menu,.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#105b98 0,#205bbc 71%,#1d46d7 100%)}}@media (prefers-color-scheme:dark){.hero.is-info,.hero.is-info-dark{background-color:#0f81cc;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag),.hero.is-info strong,.hero.is-info-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-info-dark strong{color:inherit}.hero.is-info .title,.hero.is-info-dark .title{color:#fff}.hero.is-info .subtitle,.hero.is-info-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong,.hero.is-info-dark .subtitle a:not(.button),.hero.is-info-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-info .navbar-menu,.hero.is-info-dark .navbar-menu{background-color:#0f81cc}}@media (prefers-color-scheme:dark){.hero.is-info .navbar-item,.hero.is-info .navbar-link,.hero.is-info-dark .navbar-item,.hero.is-info-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover,.hero.is-info-dark .navbar-link.is-active,.hero.is-info-dark .navbar-link:hover,.hero.is-info-dark a.navbar-item.is-active,.hero.is-info-dark a.navbar-item:hover{background-color:#0e72b4;color:#fff}.hero.is-info .tabs a,.hero.is-info-dark .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover,.hero.is-info-dark .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a,.hero.is-info-dark .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a,.hero.is-info-dark .tabs.is-boxed a,.hero.is-info-dark .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover,.hero.is-info-dark .tabs.is-boxed a:hover,.hero.is-info-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover,.hero.is-info-dark .tabs.is-boxed li.is-active a,.hero.is-info-dark .tabs.is-boxed li.is-active a:hover,.hero.is-info-dark .tabs.is-toggle li.is-active a,.hero.is-info-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0f81cc}.hero.is-info-dark.is-bold,.hero.is-info.is-bold{background-image:linear-gradient(141deg,#037fa5 0,#0f81cc 71%,#0b6cea 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-info-dark.is-bold .navbar-menu,.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#037fa5 0,#0f81cc 71%,#0b6cea 100%)}}@media (prefers-color-scheme:dark){.hero.is-success,.hero.is-success-dark{background-color:#1ca64c;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag),.hero.is-success strong,.hero.is-success-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-success-dark strong{color:inherit}.hero.is-success .title,.hero.is-success-dark .title{color:#fff}.hero.is-success .subtitle,.hero.is-success-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong,.hero.is-success-dark .subtitle a:not(.button),.hero.is-success-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-success .navbar-menu,.hero.is-success-dark .navbar-menu{background-color:#1ca64c}}@media (prefers-color-scheme:dark){.hero.is-success .navbar-item,.hero.is-success .navbar-link,.hero.is-success-dark .navbar-item,.hero.is-success-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover,.hero.is-success-dark .navbar-link.is-active,.hero.is-success-dark .navbar-link:hover,.hero.is-success-dark a.navbar-item.is-active,.hero.is-success-dark a.navbar-item:hover{background-color:#189042;color:#fff}.hero.is-success .tabs a,.hero.is-success-dark .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover,.hero.is-success-dark .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a,.hero.is-success-dark .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a,.hero.is-success-dark .tabs.is-boxed a,.hero.is-success-dark .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover,.hero.is-success-dark .tabs.is-boxed a:hover,.hero.is-success-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover,.hero.is-success-dark .tabs.is-boxed li.is-active a,.hero.is-success-dark .tabs.is-boxed li.is-active a:hover,.hero.is-success-dark .tabs.is-toggle li.is-active a,.hero.is-success-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1ca64c}.hero.is-success-dark.is-bold,.hero.is-success.is-bold{background-image:linear-gradient(141deg,#0e8123 0,#1ca64c 71%,#1ac170 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-success-dark.is-bold .navbar-menu,.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#0e8123 0,#1ca64c 71%,#1ac170 100%)}}@media (prefers-color-scheme:dark){.hero.is-warning,.hero.is-warning-dark{background-color:#ffd324;color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag),.hero.is-warning strong,.hero.is-warning-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-warning-dark strong{color:inherit}.hero.is-warning .title,.hero.is-warning-dark .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle,.hero.is-warning-dark .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong,.hero.is-warning-dark .subtitle a:not(.button),.hero.is-warning-dark .subtitle strong{color:rgba(0,0,0,.7)}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-warning .navbar-menu,.hero.is-warning-dark .navbar-menu{background-color:#ffd324}}@media (prefers-color-scheme:dark){.hero.is-warning .navbar-item,.hero.is-warning .navbar-link,.hero.is-warning-dark .navbar-item,.hero.is-warning-dark .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover,.hero.is-warning-dark .navbar-link.is-active,.hero.is-warning-dark .navbar-link:hover,.hero.is-warning-dark a.navbar-item.is-active,.hero.is-warning-dark a.navbar-item:hover{background-color:#ffce0a;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a,.hero.is-warning-dark .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover,.hero.is-warning-dark .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a,.hero.is-warning-dark .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a,.hero.is-warning-dark .tabs.is-boxed a,.hero.is-warning-dark .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover,.hero.is-warning-dark .tabs.is-boxed a:hover,.hero.is-warning-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover,.hero.is-warning-dark .tabs.is-boxed li.is-active a,.hero.is-warning-dark .tabs.is-boxed li.is-active a:hover,.hero.is-warning-dark .tabs.is-toggle li.is-active a,.hero.is-warning-dark .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffd324}.hero.is-warning-dark.is-bold,.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#f09800 0,#ffd324 71%,#fff93d 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-warning-dark.is-bold .navbar-menu,.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#f09800 0,#ffd324 71%,#fff93d 100%)}}@media (prefers-color-scheme:dark){.hero.is-danger,.hero.is-danger-dark{background-color:#ff0537;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag),.hero.is-danger strong,.hero.is-danger-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-danger-dark strong{color:inherit}.hero.is-danger .title,.hero.is-danger-dark .title{color:#fff}.hero.is-danger .subtitle,.hero.is-danger-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong,.hero.is-danger-dark .subtitle a:not(.button),.hero.is-danger-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-danger .navbar-menu,.hero.is-danger-dark .navbar-menu{background-color:#ff0537}}@media (prefers-color-scheme:dark){.hero.is-danger .navbar-item,.hero.is-danger .navbar-link,.hero.is-danger-dark .navbar-item,.hero.is-danger-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover,.hero.is-danger-dark .navbar-link.is-active,.hero.is-danger-dark .navbar-link:hover,.hero.is-danger-dark a.navbar-item.is-active,.hero.is-danger-dark a.navbar-item:hover{background-color:#eb002f;color:#fff}.hero.is-danger .tabs a,.hero.is-danger-dark .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover,.hero.is-danger-dark .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a,.hero.is-danger-dark .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a,.hero.is-danger-dark .tabs.is-boxed a,.hero.is-danger-dark .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover,.hero.is-danger-dark .tabs.is-boxed a:hover,.hero.is-danger-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover,.hero.is-danger-dark .tabs.is-boxed li.is-active a,.hero.is-danger-dark .tabs.is-boxed li.is-active a:hover,.hero.is-danger-dark .tabs.is-toggle li.is-active a,.hero.is-danger-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ff0537}.hero.is-danger-dark.is-bold,.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#d1004d 0,#ff0537 71%,#ff1f26 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-danger-dark.is-bold .navbar-menu,.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#d1004d 0,#ff0537 71%,#ff1f26 100%)}}@media (prefers-color-scheme:dark){.hero.is-white-dark{background-color:#fff;color:#0a0a0a}.hero.is-white-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-white-dark strong{color:inherit}.hero.is-white-dark .title{color:#0a0a0a}.hero.is-white-dark .subtitle{color:rgba(10,10,10,.9)}.hero.is-white-dark .subtitle a:not(.button),.hero.is-white-dark .subtitle strong{color:#0a0a0a}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-white-dark .navbar-menu{background-color:#fff}}@media (prefers-color-scheme:dark){.hero.is-white-dark .navbar-item,.hero.is-white-dark .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white-dark .navbar-link.is-active,.hero.is-white-dark .navbar-link:hover,.hero.is-white-dark a.navbar-item.is-active,.hero.is-white-dark a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white-dark .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white-dark .tabs a:hover{opacity:1}.hero.is-white-dark .tabs li.is-active a{opacity:1}.hero.is-white-dark .tabs.is-boxed a,.hero.is-white-dark .tabs.is-toggle a{color:#0a0a0a}.hero.is-white-dark .tabs.is-boxed a:hover,.hero.is-white-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white-dark .tabs.is-boxed li.is-active a,.hero.is-white-dark .tabs.is-boxed li.is-active a:hover,.hero.is-white-dark .tabs.is-toggle li.is-active a,.hero.is-white-dark .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white-dark.is-bold{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-white-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}@media (prefers-color-scheme:dark){.hero.is-black-dark{background-color:#0a0a0a;color:#fff}.hero.is-black-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-black-dark strong{color:inherit}.hero.is-black-dark .title{color:#fff}.hero.is-black-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-black-dark .subtitle a:not(.button),.hero.is-black-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-black-dark .navbar-menu{background-color:#0a0a0a}}@media (prefers-color-scheme:dark){.hero.is-black-dark .navbar-item,.hero.is-black-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black-dark .navbar-link.is-active,.hero.is-black-dark .navbar-link:hover,.hero.is-black-dark a.navbar-item.is-active,.hero.is-black-dark a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black-dark .tabs a{color:#fff;opacity:.9}.hero.is-black-dark .tabs a:hover{opacity:1}.hero.is-black-dark .tabs li.is-active a{opacity:1}.hero.is-black-dark .tabs.is-boxed a,.hero.is-black-dark .tabs.is-toggle a{color:#fff}.hero.is-black-dark .tabs.is-boxed a:hover,.hero.is-black-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black-dark .tabs.is-boxed li.is-active a,.hero.is-black-dark .tabs.is-boxed li.is-active a:hover,.hero.is-black-dark .tabs.is-toggle li.is-active a,.hero.is-black-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black-dark.is-bold{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-black-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}@media (prefers-color-scheme:dark){.hero.is-light-dark{background-color:#f5f5f5;color:#363636}.hero.is-light-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-light-dark strong{color:inherit}.hero.is-light-dark .title{color:#363636}.hero.is-light-dark .subtitle{color:rgba(54,54,54,.9)}.hero.is-light-dark .subtitle a:not(.button),.hero.is-light-dark .subtitle strong{color:#363636}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-light-dark .navbar-menu{background-color:#f5f5f5}}@media (prefers-color-scheme:dark){.hero.is-light-dark .navbar-item,.hero.is-light-dark .navbar-link{color:rgba(54,54,54,.7)}.hero.is-light-dark .navbar-link.is-active,.hero.is-light-dark .navbar-link:hover,.hero.is-light-dark a.navbar-item.is-active,.hero.is-light-dark a.navbar-item:hover{background-color:#e8e8e8;color:#363636}.hero.is-light-dark .tabs a{color:#363636;opacity:.9}.hero.is-light-dark .tabs a:hover{opacity:1}.hero.is-light-dark .tabs li.is-active a{opacity:1}.hero.is-light-dark .tabs.is-boxed a,.hero.is-light-dark .tabs.is-toggle a{color:#363636}.hero.is-light-dark .tabs.is-boxed a:hover,.hero.is-light-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light-dark .tabs.is-boxed li.is-active a,.hero.is-light-dark .tabs.is-boxed li.is-active a:hover,.hero.is-light-dark .tabs.is-toggle li.is-active a,.hero.is-light-dark .tabs.is-toggle li.is-active a:hover{background-color:#363636;border-color:#363636;color:#f5f5f5}.hero.is-light-dark.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-light-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}@media (prefers-color-scheme:dark){.hero.is-dark-dark{background-color:#363636;color:#f5f5f5}.hero.is-dark-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-dark-dark strong{color:inherit}.hero.is-dark-dark .title{color:#f5f5f5}.hero.is-dark-dark .subtitle{color:rgba(245,245,245,.9)}.hero.is-dark-dark .subtitle a:not(.button),.hero.is-dark-dark .subtitle strong{color:#f5f5f5}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-dark-dark .navbar-menu{background-color:#363636}}@media (prefers-color-scheme:dark){.hero.is-dark-dark .navbar-item,.hero.is-dark-dark .navbar-link{color:rgba(245,245,245,.7)}.hero.is-dark-dark .navbar-link.is-active,.hero.is-dark-dark .navbar-link:hover,.hero.is-dark-dark a.navbar-item.is-active,.hero.is-dark-dark a.navbar-item:hover{background-color:#292929;color:#f5f5f5}.hero.is-dark-dark .tabs a{color:#f5f5f5;opacity:.9}.hero.is-dark-dark .tabs a:hover{opacity:1}.hero.is-dark-dark .tabs li.is-active a{opacity:1}.hero.is-dark-dark .tabs.is-boxed a,.hero.is-dark-dark .tabs.is-toggle a{color:#f5f5f5}.hero.is-dark-dark .tabs.is-boxed a:hover,.hero.is-dark-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark-dark .tabs.is-boxed li.is-active a,.hero.is-dark-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark-dark .tabs.is-toggle li.is-active a,.hero.is-dark-dark .tabs.is-toggle li.is-active a:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.hero.is-dark-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-dark-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}@media (prefers-color-scheme:dark){.hero.is-primary-dark{background-color:#00d1b2;color:#fff}.hero.is-primary-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-primary-dark strong{color:inherit}.hero.is-primary-dark .title{color:#fff}.hero.is-primary-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary-dark .subtitle a:not(.button),.hero.is-primary-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-primary-dark .navbar-menu{background-color:#00d1b2}}@media (prefers-color-scheme:dark){.hero.is-primary-dark .navbar-item,.hero.is-primary-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary-dark .navbar-link.is-active,.hero.is-primary-dark .navbar-link:hover,.hero.is-primary-dark a.navbar-item.is-active,.hero.is-primary-dark a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary-dark .tabs a{color:#fff;opacity:.9}.hero.is-primary-dark .tabs a:hover{opacity:1}.hero.is-primary-dark .tabs li.is-active a{opacity:1}.hero.is-primary-dark .tabs.is-boxed a,.hero.is-primary-dark .tabs.is-toggle a{color:#fff}.hero.is-primary-dark .tabs.is-boxed a:hover,.hero.is-primary-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary-dark .tabs.is-boxed li.is-active a,.hero.is-primary-dark .tabs.is-boxed li.is-active a:hover,.hero.is-primary-dark .tabs.is-toggle li.is-active a,.hero.is-primary-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#00d1b2}.hero.is-primary-dark.is-bold{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-primary-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}@media (prefers-color-scheme:dark){.hero.is-link-dark{background-color:#3273dc;color:#fff}.hero.is-link-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-link-dark strong{color:inherit}.hero.is-link-dark .title{color:#fff}.hero.is-link-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-link-dark .subtitle a:not(.button),.hero.is-link-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-link-dark .navbar-menu{background-color:#3273dc}}@media (prefers-color-scheme:dark){.hero.is-link-dark .navbar-item,.hero.is-link-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link-dark .navbar-link.is-active,.hero.is-link-dark .navbar-link:hover,.hero.is-link-dark a.navbar-item.is-active,.hero.is-link-dark a.navbar-item:hover{background-color:#2366d1;color:#fff}.hero.is-link-dark .tabs a{color:#fff;opacity:.9}.hero.is-link-dark .tabs a:hover{opacity:1}.hero.is-link-dark .tabs li.is-active a{opacity:1}.hero.is-link-dark .tabs.is-boxed a,.hero.is-link-dark .tabs.is-toggle a{color:#fff}.hero.is-link-dark .tabs.is-boxed a:hover,.hero.is-link-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link-dark .tabs.is-boxed li.is-active a,.hero.is-link-dark .tabs.is-boxed li.is-active a:hover,.hero.is-link-dark .tabs.is-toggle li.is-active a,.hero.is-link-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3273dc}.hero.is-link-dark.is-bold{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-link-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}}@media (prefers-color-scheme:dark){.hero.is-info-dark{background-color:#209cee;color:#fff}.hero.is-info-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-info-dark strong{color:inherit}.hero.is-info-dark .title{color:#fff}.hero.is-info-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-info-dark .subtitle a:not(.button),.hero.is-info-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-info-dark .navbar-menu{background-color:#209cee}}@media (prefers-color-scheme:dark){.hero.is-info-dark .navbar-item,.hero.is-info-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info-dark .navbar-link.is-active,.hero.is-info-dark .navbar-link:hover,.hero.is-info-dark a.navbar-item.is-active,.hero.is-info-dark a.navbar-item:hover{background-color:#118fe4;color:#fff}.hero.is-info-dark .tabs a{color:#fff;opacity:.9}.hero.is-info-dark .tabs a:hover{opacity:1}.hero.is-info-dark .tabs li.is-active a{opacity:1}.hero.is-info-dark .tabs.is-boxed a,.hero.is-info-dark .tabs.is-toggle a{color:#fff}.hero.is-info-dark .tabs.is-boxed a:hover,.hero.is-info-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info-dark .tabs.is-boxed li.is-active a,.hero.is-info-dark .tabs.is-boxed li.is-active a:hover,.hero.is-info-dark .tabs.is-toggle li.is-active a,.hero.is-info-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info-dark.is-bold{background-image:linear-gradient(141deg,#04a6d7 0,#209cee 71%,#3287f5 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-info-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#04a6d7 0,#209cee 71%,#3287f5 100%)}}@media (prefers-color-scheme:dark){.hero.is-success-dark{background-color:#23d160;color:#fff}.hero.is-success-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-success-dark strong{color:inherit}.hero.is-success-dark .title{color:#fff}.hero.is-success-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-success-dark .subtitle a:not(.button),.hero.is-success-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-success-dark .navbar-menu{background-color:#23d160}}@media (prefers-color-scheme:dark){.hero.is-success-dark .navbar-item,.hero.is-success-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success-dark .navbar-link.is-active,.hero.is-success-dark .navbar-link:hover,.hero.is-success-dark a.navbar-item.is-active,.hero.is-success-dark a.navbar-item:hover{background-color:#20bc56;color:#fff}.hero.is-success-dark .tabs a{color:#fff;opacity:.9}.hero.is-success-dark .tabs a:hover{opacity:1}.hero.is-success-dark .tabs li.is-active a{opacity:1}.hero.is-success-dark .tabs.is-boxed a,.hero.is-success-dark .tabs.is-toggle a{color:#fff}.hero.is-success-dark .tabs.is-boxed a:hover,.hero.is-success-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success-dark .tabs.is-boxed li.is-active a,.hero.is-success-dark .tabs.is-boxed li.is-active a:hover,.hero.is-success-dark .tabs.is-toggle li.is-active a,.hero.is-success-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#23d160}.hero.is-success-dark.is-bold{background-image:linear-gradient(141deg,#12af2f 0,#23d160 71%,#2ce28a 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-success-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#12af2f 0,#23d160 71%,#2ce28a 100%)}}@media (prefers-color-scheme:dark){.hero.is-warning-dark{background-color:#ffdd57;color:rgba(0,0,0,.7)}.hero.is-warning-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-warning-dark strong{color:inherit}.hero.is-warning-dark .title{color:rgba(0,0,0,.7)}.hero.is-warning-dark .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning-dark .subtitle a:not(.button),.hero.is-warning-dark .subtitle strong{color:rgba(0,0,0,.7)}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-warning-dark .navbar-menu{background-color:#ffdd57}}@media (prefers-color-scheme:dark){.hero.is-warning-dark .navbar-item,.hero.is-warning-dark .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning-dark .navbar-link.is-active,.hero.is-warning-dark .navbar-link:hover,.hero.is-warning-dark a.navbar-item.is-active,.hero.is-warning-dark a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.hero.is-warning-dark .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning-dark .tabs a:hover{opacity:1}.hero.is-warning-dark .tabs li.is-active a{opacity:1}.hero.is-warning-dark .tabs.is-boxed a,.hero.is-warning-dark .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning-dark .tabs.is-boxed a:hover,.hero.is-warning-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning-dark .tabs.is-boxed li.is-active a,.hero.is-warning-dark .tabs.is-boxed li.is-active a:hover,.hero.is-warning-dark .tabs.is-toggle li.is-active a,.hero.is-warning-dark .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffdd57}.hero.is-warning-dark.is-bold{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-warning-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}}@media (prefers-color-scheme:dark){.hero.is-danger-dark{background-color:#ff3860;color:#fff}.hero.is-danger-dark a:not(.button):not(.dropdown-item):not(.tag),.hero.is-danger-dark strong{color:inherit}.hero.is-danger-dark .title{color:#fff}.hero.is-danger-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger-dark .subtitle a:not(.button),.hero.is-danger-dark .subtitle strong{color:#fff}}@media screen and (prefers-color-scheme:dark) and (max-width:1087px){.hero.is-danger-dark .navbar-menu{background-color:#ff3860}}@media (prefers-color-scheme:dark){.hero.is-danger-dark .navbar-item,.hero.is-danger-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger-dark .navbar-link.is-active,.hero.is-danger-dark .navbar-link:hover,.hero.is-danger-dark a.navbar-item.is-active,.hero.is-danger-dark a.navbar-item:hover{background-color:#ff1f4b;color:#fff}.hero.is-danger-dark .tabs a{color:#fff;opacity:.9}.hero.is-danger-dark .tabs a:hover{opacity:1}.hero.is-danger-dark .tabs li.is-active a{opacity:1}.hero.is-danger-dark .tabs.is-boxed a,.hero.is-danger-dark .tabs.is-toggle a{color:#fff}.hero.is-danger-dark .tabs.is-boxed a:hover,.hero.is-danger-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger-dark .tabs.is-boxed li.is-active a,.hero.is-danger-dark .tabs.is-boxed li.is-active a:hover,.hero.is-danger-dark .tabs.is-toggle li.is-active a,.hero.is-danger-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ff3860}.hero.is-danger-dark.is-bold{background-image:linear-gradient(141deg,#ff0561 0,#ff3860 71%,#ff5257 100%)}}@media screen and (prefers-color-scheme:dark) and (max-width:768px){.hero.is-danger-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ff0561 0,#ff3860 71%,#ff5257 100%)}}@media (prefers-color-scheme:dark){.footer{background-color:#121212}} diff --git a/http-ui/public/bulma.min.css b/http-ui/public/bulma.min.css deleted file mode 100644 index 8340d7fba..000000000 --- a/http-ui/public/bulma.min.css +++ /dev/null @@ -1 +0,0 @@ -/*! bulma.io v0.9.0 | MIT License | github.com/jgthms/bulma */@-webkit-keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}.breadcrumb,.button,.delete,.file,.is-unselectable,.modal-close,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:.625em;margin-top:-.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:.625em}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.highlight:not(:last-child),.level:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.pagination:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.tabs:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top;width:20px}.delete::after,.delete::before,.modal-close::after,.modal-close::before{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:focus,.delete:hover,.modal-close:focus,.modal-close:hover{background-color:rgba(10,10,10,.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,.4)}.is-small.delete,.is-small.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after{-webkit-animation:spinAround .5s infinite linear;animation:spinAround .5s infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img,.is-overlay,.modal,.modal-background{bottom:0;left:0;position:absolute;right:0;top:0}.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(.5em - 1px);padding-left:calc(.75em - 1px);padding-right:calc(.75em - 1px);padding-top:calc(.5em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.file-cta:active,.file-cta:focus,.file-name:active,.file-name:focus,.input:active,.input:focus,.is-active.button,.is-active.file-cta,.is-active.file-name,.is-active.input,.is-active.pagination-ellipsis,.is-active.pagination-link,.is-active.pagination-next,.is-active.pagination-previous,.is-active.textarea,.is-focused.button,.is-focused.file-cta,.is-focused.file-name,.is-focused.input,.is-focused.pagination-ellipsis,.is-focused.pagination-link,.is-focused.pagination-next,.is-focused.pagination-previous,.is-focused.textarea,.pagination-ellipsis:active,.pagination-ellipsis:focus,.pagination-link:active,.pagination-link:focus,.pagination-next:active,.pagination-next:focus,.pagination-previous:active,.pagination-previous:focus,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{outline:0}.button[disabled],.file-cta[disabled],.file-name[disabled],.input[disabled],.pagination-ellipsis[disabled],.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .button,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .input,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-previous,fieldset[disabled] .select select,fieldset[disabled] .textarea{cursor:not-allowed}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,::after,::before{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#4a4a4a;font-size:1em;font-weight:400;line-height:1.5}a{color:#3273dc;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#f14668;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#4a4a4a;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#363636}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px #3273dc}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-right:calc(-.5em - 1px);margin-left:.25em}.button .icon:last-child:not(:first-child){margin-right:.25em;margin-left:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:#b5b5b5;color:#363636}.button.is-focused,.button:focus{border-color:#3273dc;color:#363636}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#4a4a4a;text-decoration:underline}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:#f5f5f5;color:#363636}.button.is-text.is-active,.button.is-text:active{background-color:#e8e8e8;color:#363636}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white.is-hovered,.button.is-white:hover{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:#0a0a0a}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-hovered,.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined.is-focused,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-outlined.is-loading.is-focused::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined.is-focused,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black.is-hovered,.button.is-black:hover{background-color:#040404;border-color:transparent;color:#fff}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:#fff}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-hovered,.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined.is-focused,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-outlined.is-loading.is-focused::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined.is-focused,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-hovered,.button.is-light:hover{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-hovered,.button.is-light.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined.is-focused,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-outlined.is-loading.is-focused::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-light.is-inverted.is-outlined.is-focused,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-dark{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#fff}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-hovered,.button.is-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined.is-focused,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-outlined.is-loading.is-focused::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined.is-focused,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:#00d1b2;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-hovered,.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#00d1b2}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;color:#00d1b2}.button.is-primary.is-outlined.is-focused,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-outlined.is-loading.is-focused::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-outlined.is-loading:focus::after,.button.is-primary.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;box-shadow:none;color:#00d1b2}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined.is-focused,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light{background-color:#ebfffc;color:#00947e}.button.is-primary.is-light.is-hovered,.button.is-primary.is-light:hover{background-color:#defffa;border-color:transparent;color:#00947e}.button.is-primary.is-light.is-active,.button.is-primary.is-light:active{background-color:#d1fff8;border-color:transparent;color:#00947e}.button.is-link{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#276cda;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#2366d1;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#3273dc;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-hovered,.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3273dc}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;color:#3273dc}.button.is-link.is-outlined.is-focused,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:#3273dc;border-color:#3273dc;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-outlined.is-loading.is-focused::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;box-shadow:none;color:#3273dc}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined.is-focused,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eef3fc;color:#2160c4}.button.is-link.is-light.is-hovered,.button.is-link.is-light:hover{background-color:#e3ecfa;border-color:transparent;color:#2160c4}.button.is-link.is-light.is-active,.button.is-link.is-light:active{background-color:#d8e4f8;border-color:transparent;color:#2160c4}.button.is-info{background-color:#3298dc;border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#2793da;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#238cd1;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3298dc;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-hovered,.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3298dc}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;color:#3298dc}.button.is-info.is-outlined.is-focused,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:#3298dc;border-color:#3298dc;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-outlined.is-loading.is-focused::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;box-shadow:none;color:#3298dc}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined.is-focused,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.button.is-info.is-light.is-hovered,.button.is-info.is-light:hover{background-color:#e3f1fa;border-color:transparent;color:#1d72aa}.button.is-info.is-light.is-active,.button.is-info.is-light:active{background-color:#d8ebf8;border-color:transparent;color:#1d72aa}.button.is-success{background-color:#48c774;border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#3ec46d;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#3abb67;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#48c774;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-hovered,.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#48c774}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:#48c774;color:#48c774}.button.is-success.is-outlined.is-focused,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:#48c774;border-color:#48c774;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-outlined.is-loading.is-focused::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#48c774;box-shadow:none;color:#48c774}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined.is-focused,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effaf3;color:#257942}.button.is-success.is-light.is-hovered,.button.is-success.is-light:hover{background-color:#e6f7ec;border-color:transparent;color:#257942}.button.is-success.is-light.is-active,.button.is-success.is-light:active{background-color:#dcf4e4;border-color:transparent;color:#257942}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-hovered,.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined.is-focused,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-outlined.is-loading.is-focused::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined.is-focused,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light.is-hovered,.button.is-warning.is-light:hover{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light.is-active,.button.is-warning.is-light:active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#f14668;border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f03a5f;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#ef2e55;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#f14668;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-hovered,.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f14668}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;color:#f14668}.button.is-danger.is-outlined.is-focused,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:#f14668;border-color:#f14668;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-outlined.is-loading.is-focused::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;box-shadow:none;color:#f14668}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined.is-focused,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.button.is-danger.is-light.is-hovered,.button.is-danger.is-light:hover{background-color:#fde0e6;border-color:transparent;color:#cc0f35}.button.is-danger.is-light.is-active,.button.is-danger.is-light:active{background-color:#fcd4dc;border-color:transparent;color:#cc0f35}.button.is-small{border-radius:2px;font-size:.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent!important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute!important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded{border-radius:290486px;padding-left:calc(1em + .25em);padding-right:calc(1em + .25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-left:.5rem}.buttons:last-child{margin-bottom:-.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-left:-1px}.buttons.has-addons .button:last-child{margin-left:0}.buttons.has-addons .button.is-hovered,.buttons.has-addons .button:hover{z-index:2}.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-focused,.buttons.has-addons .button.is-selected,.buttons.has-addons .button:active,.buttons.has-addons .button:focus{z-index:3}.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button.is-selected:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button:focus:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (max-width:1215px){.container.is-widescreen{max-width:1152px}}@media screen and (max-width:1407px){.container.is-fullhd{max-width:1344px}}@media screen and (min-width:1216px){.container{max-width:1152px}}@media screen and (min-width:1408px){.container{max-width:1344px}}.content li+li{margin-top:.25em}.content blockquote:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content p:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#363636;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content h5{font-size:1.125em;margin-bottom:.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-right:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-right:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol:not([type]).is-lower-alpha{list-style-type:lower-alpha}.content ol:not([type]).is-lower-roman{list-style-type:lower-roman}.content ol:not([type]).is-upper-alpha{list-style-type:upper-alpha}.content ol:not([type]).is-upper-roman{list-style-type:upper-roman}.content ul{list-style:disc outside;margin-right:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.content dd{margin-right:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal}.content sub,.content sup{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.content table th{color:#363636}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#363636}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#363636}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small{font-size:.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.image img.is-rounded{border-radius:290486px}.image.is-fullwidth{width:100%}.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img{height:100%;width:100%}.image.is-1by1,.image.is-square{padding-top:100%}.image.is-5by4{padding-top:80%}.image.is-4by3{padding-top:75%}.image.is-3by2{padding-top:66.6666%}.image.is-5by3{padding-top:60%}.image.is-16by9{padding-top:56.25%}.image.is-2by1{padding-top:50%}.image.is-3by1{padding-top:33.3333%}.image.is-4by5{padding-top:125%}.image.is-3by4{padding-top:133.3333%}.image.is-2by3{padding-top:150%}.image.is-3by5{padding-top:166.6666%}.image.is-9by16{padding-top:177.7777%}.image.is-1by2{padding-top:200%}.image.is-1by3{padding-top:300%}.image.is-16x16{height:16px;width:16px}.image.is-24x24{height:24px;width:24px}.image.is-32x32{height:32px;width:32px}.image.is-48x48{height:48px;width:48px}.image.is-64x64{height:64px;width:64px}.image.is-96x96{height:96px;width:96px}.image.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 1.5rem 1.25rem 2.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:0 0}.notification>.delete{left:.5rem;position:absolute;top:.5rem}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.notification.is-dark{background-color:#363636;color:#fff}.notification.is-primary{background-color:#00d1b2;color:#fff}.notification.is-primary.is-light{background-color:#ebfffc;color:#00947e}.notification.is-link{background-color:#3273dc;color:#fff}.notification.is-link.is-light{background-color:#eef3fc;color:#2160c4}.notification.is-info{background-color:#3298dc;color:#fff}.notification.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.notification.is-success{background-color:#48c774;color:#fff}.notification.is-success.is-light{background-color:#effaf3;color:#257942}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#f14668;color:#fff}.notification.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#4a4a4a}.progress::-moz-progress-bar{background-color:#4a4a4a}.progress::-ms-fill{background-color:#4a4a4a;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right,#fff 30%,#ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right,#0a0a0a 30%,#ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right,#f5f5f5 30%,#ededed 30%)}.progress.is-dark::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,#363636 30%,#ededed 30%)}.progress.is-primary::-webkit-progress-value{background-color:#00d1b2}.progress.is-primary::-moz-progress-bar{background-color:#00d1b2}.progress.is-primary::-ms-fill{background-color:#00d1b2}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,#00d1b2 30%,#ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#3273dc}.progress.is-link::-moz-progress-bar{background-color:#3273dc}.progress.is-link::-ms-fill{background-color:#3273dc}.progress.is-link:indeterminate{background-image:linear-gradient(to right,#3273dc 30%,#ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3298dc}.progress.is-info::-moz-progress-bar{background-color:#3298dc}.progress.is-info::-ms-fill{background-color:#3298dc}.progress.is-info:indeterminate{background-image:linear-gradient(to right,#3298dc 30%,#ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#48c774}.progress.is-success::-moz-progress-bar{background-color:#48c774}.progress.is-success::-ms-fill{background-color:#48c774}.progress.is-success:indeterminate{background-image:linear-gradient(to right,#48c774 30%,#ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,#ffdd57 30%,#ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#f14668}.progress.is-danger::-moz-progress-bar{background-color:#f14668}.progress.is-danger::-ms-fill{background-color:#f14668}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,#f14668 30%,#ededed 30%)}.progress:indeterminate{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moveIndeterminate;animation-name:moveIndeterminate;-webkit-animation-timing-function:linear;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right,#4a4a4a 30%,#ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress.is-small{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@-webkit-keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.table td.is-link,.table th.is-link{background-color:#3273dc;border-color:#3273dc;color:#fff}.table td.is-info,.table th.is-info{background-color:#3298dc;border-color:#3298dc;color:#fff}.table td.is-success,.table th.is-success{background-color:#48c774;border-color:#48c774;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:#f14668;border-color:#f14668;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#00d1b2;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#363636}.table th:not([align]){text-align:inherit}.table tr.is-selected{background-color:#00d1b2;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#363636}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#363636}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:.25em .5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-left:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag{margin-right:.25rem;margin-left:.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:.5rem}.tags.is-right .tag:not(:last-child){margin-right:0}.tags.has-addons .tag{margin-left:0}.tags.has-addons .tag:not(:first-child){margin-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.tags.has-addons .tag:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.tag:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#4a4a4a;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body) .delete{margin-right:.25rem;margin-left:-.375rem}.tag:not(body).is-white{background-color:#fff;color:#0a0a0a}.tag:not(body).is-black{background-color:#0a0a0a;color:#fff}.tag:not(body).is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.tag:not(body).is-dark{background-color:#363636;color:#fff}.tag:not(body).is-primary{background-color:#00d1b2;color:#fff}.tag:not(body).is-primary.is-light{background-color:#ebfffc;color:#00947e}.tag:not(body).is-link{background-color:#3273dc;color:#fff}.tag:not(body).is-link.is-light{background-color:#eef3fc;color:#2160c4}.tag:not(body).is-info{background-color:#3298dc;color:#fff}.tag:not(body).is-info.is-light{background-color:#eef6fc;color:#1d72aa}.tag:not(body).is-success{background-color:#48c774;color:#fff}.tag:not(body).is-success.is-light{background-color:#effaf3;color:#257942}.tag:not(body).is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.tag:not(body).is-warning.is-light{background-color:#fffbeb;color:#947600}.tag:not(body).is-danger{background-color:#f14668;color:#fff}.tag:not(body).is-danger.is-light{background-color:#feecf0;color:#cc0f35}.tag:not(body).is-normal{font-size:.75rem}.tag:not(body).is-medium{font-size:1rem}.tag:not(body).is-large{font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child){margin-right:-.375em;margin-left:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-right:.1875em;margin-left:-.375em}.tag:not(body) .icon:first-child:last-child{margin-right:-.375em;margin-left:-.375em}.tag:not(body).is-delete{margin-right:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::after,.tag:not(body).is-delete::before{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag:not(body).is-delete::before{height:1px;width:50%}.tag:not(body).is-delete::after{height:50%;width:1px}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#e8e8e8}.tag:not(body).is-delete:active{background-color:#dbdbdb}.tag:not(body).is-rounded{border-radius:290486px}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle em,.subtitle span,.title em,.title span{font-weight:inherit}.subtitle sub,.title sub{font-size:.75em}.subtitle sup,.title sup{font-size:.75em}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:#f5f5f5;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:.25rem .5rem;text-align:center;vertical-align:top}.input,.select select,.textarea{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.select select::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.select select:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered,.select select:hover,.textarea:hover{border-color:#b5b5b5}.input:active,.input:focus,.is-active.input,.is-active.textarea,.is-focused.input,.is-focused.textarea,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{border-color:#3273dc;box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.input[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .input,fieldset[disabled] .select select,fieldset[disabled] .textarea{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(122,122,122,.3)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);max-width:100%;width:100%}.input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,.is-white.textarea{border-color:#fff}.is-white.input:active,.is-white.input:focus,.is-white.is-active.input,.is-white.is-active.textarea,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.textarea:active,.is-white.textarea:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.is-black.input,.is-black.textarea{border-color:#0a0a0a}.is-black.input:active,.is-black.input:focus,.is-black.is-active.input,.is-black.is-active.textarea,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.textarea:active,.is-black.textarea:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.is-light.input,.is-light.textarea{border-color:#f5f5f5}.is-light.input:active,.is-light.input:focus,.is-light.is-active.input,.is-light.is-active.textarea,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.textarea:active,.is-light.textarea:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.is-dark.input,.is-dark.textarea{border-color:#363636}.is-dark.input:active,.is-dark.input:focus,.is-dark.is-active.input,.is-dark.is-active.textarea,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.textarea:active,.is-dark.textarea:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.is-primary.input,.is-primary.textarea{border-color:#00d1b2}.is-primary.input:active,.is-primary.input:focus,.is-primary.is-active.input,.is-primary.is-active.textarea,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.textarea:active,.is-primary.textarea:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.is-link.input,.is-link.textarea{border-color:#3273dc}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.is-info.input,.is-info.textarea{border-color:#3298dc}.is-info.input:active,.is-info.input:focus,.is-info.is-active.input,.is-info.is-active.textarea,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.textarea:active,.is-info.textarea:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.is-success.input,.is-success.textarea{border-color:#48c774}.is-success.input:active,.is-success.input:focus,.is-success.is-active.input,.is-success.is-active.textarea,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.textarea:active,.is-success.textarea:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.is-warning.input,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:active,.is-warning.input:focus,.is-warning.is-active.input,.is-warning.is-active.textarea,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.textarea:active,.is-warning.textarea:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.is-danger.input,.is-danger.textarea{border-color:#f14668}.is-danger.input:active,.is-danger.input:focus,.is-danger.is-active.input,.is-danger.is-active.textarea,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.textarea:active,.is-danger.textarea:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.is-small.input,.is-small.textarea{border-radius:2px;font-size:.75rem}.is-medium.input,.is-medium.textarea{font-size:1.25rem}.is-large.input,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,.is-inline.textarea{display:inline;width:auto}.input.is-rounded{border-radius:290486px;padding-left:calc(calc(.75em - 1px) + .375em);padding-right:calc(calc(.75em - 1px) + .375em)}.input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-right:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#3273dc;left:1.125em;z-index:4}.select.is-rounded select{border-radius:290486px;padding-right:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:0}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-left:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#f2f2f2}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#e8e8e8}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark:not(:hover)::after{border-color:#363636}.select.is-dark select{border-color:#363636}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#292929}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary:not(:hover)::after{border-color:#00d1b2}.select.is-primary select{border-color:#00d1b2}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#00b89c}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link:not(:hover)::after{border-color:#3273dc}.select.is-link select{border-color:#3273dc}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#2366d1}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.select.is-info:not(:hover)::after{border-color:#3298dc}.select.is-info select{border-color:#3298dc}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#238cd1}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.select.is-success:not(:hover)::after{border-color:#48c774}.select.is-success select{border-color:#48c774}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#3abb67}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffd83d}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.select.is-danger:not(:hover)::after{border-color:#f14668}.select.is-danger select{border-color:#f14668}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#ef2e55}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.select.is-small{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;left:.625em;top:.625em;transform:none}.select.is-loading.is-small:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,255,255,.25);color:#0a0a0a}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(10,10,10,.25);color:#fff}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(245,245,245,.25);color:rgba(0,0,0,.7)}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-dark .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(54,54,54,.25);color:#fff}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta{background-color:#00d1b2;border-color:transparent;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#00b89c;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#3273dc;border-color:transparent;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#276cda;border-color:transparent;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,115,220,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#2366d1;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3298dc;border-color:transparent;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#2793da;border-color:transparent;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,152,220,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#238cd1;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#48c774;border-color:transparent;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#3ec46d;border-color:transparent;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,199,116,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#3abb67;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,221,87,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:#f14668;border-color:transparent;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f03a5f;border-color:transparent;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(241,70,104,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#ef2e55;border-color:transparent;color:#fff}.file.is-small{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:0;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-left:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.label.is-small{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark{color:#363636}.help.is-primary{color:#00d1b2}.help.is-link{color:#3273dc}.help.is-info{color:#3298dc}.help.is-success{color:#48c774}.help.is-warning{color:#ffdd57}.help.is-danger{color:#f14668}.field:not(:last-child){margin-bottom:.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-left:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover{z-index:2}.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .select select:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]).is-focused,.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select:not([disabled]):focus{z-index:3}.field.has-addons .control .button:not([disabled]).is-active:hover,.field.has-addons .control .button:not([disabled]).is-focused:hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .input:not([disabled]).is-active:hover,.field.has-addons .control .input:not([disabled]).is-focused:hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control .select select:not([disabled]).is-active:hover,.field.has-addons .control .select select:not([disabled]).is-focused:hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select:not([disabled]):focus:hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-left:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width:769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width:768px){.field-label{margin-bottom:.5rem}}@media screen and (min-width:769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-left:1.5rem;text-align:right}.field-label.is-small{font-size:.75rem;padding-top:.375em}.field-label.is-normal{padding-top:.375em}.field-label.is-medium{font-size:1.25rem;padding-top:.375em}.field-label.is-large{font-size:1.5rem;padding-top:.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width:769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-left:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#4a4a4a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute!important;left:.625em;top:.625em;z-index:4}.control.is-loading.is-small:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#3273dc;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-right:0}.breadcrumb li.is-active a{color:#363636;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ol,.breadcrumb ul{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-left:.5em}.breadcrumb .icon:last-child{margin-right:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;max-width:100%;position:relative}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 .125em .25em rgba(10,10,10,.1);display:flex}.card-header-title{align-items:center;color:#363636;display:flex;flex-grow:1;font-weight:700;padding:.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem 1rem}.card-image{display:block;position:relative}.card-content{background-color:transparent;padding:1.5rem}.card-footer{background-color:transparent;border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-left:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;right:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:.875rem;line-height:1.5;padding:.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-left:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#3273dc;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-left:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width:769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .subtitle,.level-item .title{margin-bottom:0}@media screen and (max-width:768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width:769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-left:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width:768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width:769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width:769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-left:1rem}.media-right{margin-right:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width:768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#4a4a4a;display:block;padding:.5em .75em}.menu-list a:hover{background-color:#f5f5f5;color:#363636}.menu-list a.is-active{background-color:#3273dc;color:#fff}.menu-list li ul{border-right:1px solid #dbdbdb;margin:.75em;padding-right:.75em}.menu-label{color:#7a7a7a;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body{border-color:#363636}.message.is-primary{background-color:#ebfffc}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#00947e}.message.is-link{background-color:#eef3fc}.message.is-link .message-header{background-color:#3273dc;color:#fff}.message.is-link .message-body{border-color:#3273dc;color:#2160c4}.message.is-info{background-color:#eef6fc}.message.is-info .message-header{background-color:#3298dc;color:#fff}.message.is-info .message-body{border-color:#3298dc;color:#1d72aa}.message.is-success{background-color:#effaf3}.message.is-success .message-header{background-color:#48c774;color:#fff}.message.is-success .message-body{border-color:#48c774;color:#257942}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#feecf0}.message.is-danger .message-header{background-color:#f14668;color:#fff}.message.is-danger .message-body{border-color:#f14668;color:#cc0f35}.message-header{align-items:center;background-color:#4a4a4a;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-right:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#4a4a4a;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,.86)}.modal-card,.modal-content{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width:769px),print{.modal-card,.modal-content{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:0 0;height:40px;position:fixed;left:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-foot,.modal-card-head{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#363636;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-left:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width:1024px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:#fff}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:#fff}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,.7)}}.navbar.is-dark{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary{background-color:#00d1b2;color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:#00d1b2;color:#fff}}.navbar.is-link{background-color:#3273dc;color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#3273dc;color:#fff}}.navbar.is-info{background-color:#3298dc;color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3298dc;color:#fff}}.navbar.is-success{background-color:#48c774;color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#48c774;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,.7)}}.navbar.is-danger{background-color:#f14668;color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f14668;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}body.has-navbar-fixed-top,html.has-navbar-fixed-top{padding-top:3.25rem}body.has-navbar-fixed-bottom,html.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-right:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}.navbar-link,a.navbar-item{cursor:pointer}.navbar-link.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:#fafafa;color:#3273dc}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#3273dc}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#3273dc;border-bottom-style:solid;border-bottom-width:3px;color:#3273dc;padding-bottom:calc(.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-left:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#3273dc;margin-top:-.375em;left:1.125em}.navbar-dropdown{font-size:.875rem;padding-bottom:.5rem;padding-top:.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:.5rem 0}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}body.has-navbar-fixed-top-touch,html.has-navbar-fixed-top-touch{padding-top:3.25rem}body.has-navbar-fixed-bottom-touch,html.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-end,.navbar.is-spaced .navbar-start{align-items:center}.navbar.is-spaced .navbar-link,.navbar.is-spaced a.navbar-item{border-radius:4px}.navbar.is-transparent .navbar-link.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent!important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(.25em,-.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-left:auto}.navbar-end{justify-content:flex-end;margin-right:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,.1);display:none;font-size:.875rem;right:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-left:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity,transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-right:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-left:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-desktop{top:0}body.has-navbar-fixed-top-desktop,html.has-navbar-fixed-top-desktop{padding-top:3.25rem}body.has-navbar-fixed-bottom-desktop,html.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}body.has-spaced-navbar-fixed-top,html.has-spaced-navbar-fixed-top{padding-top:5.25rem}body.has-spaced-navbar-fixed-bottom,html.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}.navbar-link.is-active,a.navbar-item.is-active{color:#0a0a0a}.navbar-link.is-active:not(:focus):not(:hover),a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-next,.pagination.is-rounded .pagination-previous{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-link,.pagination-next,.pagination-previous{border-color:#dbdbdb;color:#363636;min-width:2.5em}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:#b5b5b5;color:#363636}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:#3273dc}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2)}.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:.5}.pagination-next,.pagination-previous{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#3273dc;border-color:#3273dc;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width:768px){.pagination{flex-wrap:wrap}.pagination-next,.pagination-previous{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width:769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading{background-color:#00d1b2;color:#fff}.panel.is-primary .panel-tabs a.is-active{border-bottom-color:#00d1b2}.panel.is-primary .panel-block.is-active .panel-icon{color:#00d1b2}.panel.is-link .panel-heading{background-color:#3273dc;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#3273dc}.panel.is-link .panel-block.is-active .panel-icon{color:#3273dc}.panel.is-info .panel-heading{background-color:#3298dc;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3298dc}.panel.is-info .panel-block.is-active .panel-icon{color:#3298dc}.panel.is-success .panel-heading{background-color:#48c774;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#48c774}.panel.is-success .panel-block.is-active .panel-icon{color:#48c774}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#f14668;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f14668}.panel.is-danger .panel-block.is-active .panel-icon{color:#f14668}.panel-block:not(:last-child),.panel-tabs:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#363636;font-size:1.25em;font-weight:700;line-height:1.25;padding:.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#4a4a4a}.panel-list a:hover{color:#3273dc}.panel-block{align-items:center;color:#363636;display:flex;justify-content:flex-start;padding:.5em .75em}.panel-block input[type=checkbox]{margin-left:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#3273dc;color:#363636}.panel-block.is-active .panel-icon{color:#3273dc}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-left:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#4a4a4a;display:flex;justify-content:center;margin-bottom:-1px;padding:.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#363636;color:#363636}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#3273dc;color:#3273dc}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:.75em;padding-right:.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:.75em}.tabs .icon:first-child{margin-left:.5em}.tabs .icon:last-child{margin-right:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:0 0 4px 4px}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:transparent!important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-right:-1px}.tabs.is-toggle li:first-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li:last-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li.is-active a{background-color:#3273dc;border-color:#3273dc;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-small{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width:768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width:769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width:1023px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width:1024px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width:1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width:1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0!important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width:769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width:1024px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap:0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap:0rem}@media screen and (max-width:768px){.columns.is-variable.is-0-mobile{--columnGap:0rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-0-tablet{--columnGap:0rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-0-tablet-only{--columnGap:0rem}}@media screen and (max-width:1023px){.columns.is-variable.is-0-touch{--columnGap:0rem}}@media screen and (min-width:1024px){.columns.is-variable.is-0-desktop{--columnGap:0rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-0-desktop-only{--columnGap:0rem}}@media screen and (min-width:1216px){.columns.is-variable.is-0-widescreen{--columnGap:0rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-0-widescreen-only{--columnGap:0rem}}@media screen and (min-width:1408px){.columns.is-variable.is-0-fullhd{--columnGap:0rem}}.columns.is-variable.is-1{--columnGap:0.25rem}@media screen and (max-width:768px){.columns.is-variable.is-1-mobile{--columnGap:0.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-1-tablet{--columnGap:0.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-1-tablet-only{--columnGap:0.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-1-touch{--columnGap:0.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-1-desktop{--columnGap:0.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-1-desktop-only{--columnGap:0.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-1-widescreen{--columnGap:0.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-1-widescreen-only{--columnGap:0.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-1-fullhd{--columnGap:0.25rem}}.columns.is-variable.is-2{--columnGap:0.5rem}@media screen and (max-width:768px){.columns.is-variable.is-2-mobile{--columnGap:0.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-2-tablet{--columnGap:0.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-2-tablet-only{--columnGap:0.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-2-touch{--columnGap:0.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-2-desktop{--columnGap:0.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-2-desktop-only{--columnGap:0.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-2-widescreen{--columnGap:0.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-2-widescreen-only{--columnGap:0.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-2-fullhd{--columnGap:0.5rem}}.columns.is-variable.is-3{--columnGap:0.75rem}@media screen and (max-width:768px){.columns.is-variable.is-3-mobile{--columnGap:0.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-3-tablet{--columnGap:0.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-3-tablet-only{--columnGap:0.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-3-touch{--columnGap:0.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-3-desktop{--columnGap:0.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-3-desktop-only{--columnGap:0.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-3-widescreen{--columnGap:0.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-3-widescreen-only{--columnGap:0.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-3-fullhd{--columnGap:0.75rem}}.columns.is-variable.is-4{--columnGap:1rem}@media screen and (max-width:768px){.columns.is-variable.is-4-mobile{--columnGap:1rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-4-tablet{--columnGap:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-4-tablet-only{--columnGap:1rem}}@media screen and (max-width:1023px){.columns.is-variable.is-4-touch{--columnGap:1rem}}@media screen and (min-width:1024px){.columns.is-variable.is-4-desktop{--columnGap:1rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-4-desktop-only{--columnGap:1rem}}@media screen and (min-width:1216px){.columns.is-variable.is-4-widescreen{--columnGap:1rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-4-widescreen-only{--columnGap:1rem}}@media screen and (min-width:1408px){.columns.is-variable.is-4-fullhd{--columnGap:1rem}}.columns.is-variable.is-5{--columnGap:1.25rem}@media screen and (max-width:768px){.columns.is-variable.is-5-mobile{--columnGap:1.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-5-tablet{--columnGap:1.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-5-tablet-only{--columnGap:1.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-5-touch{--columnGap:1.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-5-desktop{--columnGap:1.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-5-desktop-only{--columnGap:1.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-5-widescreen{--columnGap:1.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-5-widescreen-only{--columnGap:1.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-5-fullhd{--columnGap:1.25rem}}.columns.is-variable.is-6{--columnGap:1.5rem}@media screen and (max-width:768px){.columns.is-variable.is-6-mobile{--columnGap:1.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-6-tablet{--columnGap:1.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-6-tablet-only{--columnGap:1.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-6-touch{--columnGap:1.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-6-desktop{--columnGap:1.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-6-desktop-only{--columnGap:1.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-6-widescreen{--columnGap:1.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-6-widescreen-only{--columnGap:1.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-6-fullhd{--columnGap:1.5rem}}.columns.is-variable.is-7{--columnGap:1.75rem}@media screen and (max-width:768px){.columns.is-variable.is-7-mobile{--columnGap:1.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-7-tablet{--columnGap:1.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-7-tablet-only{--columnGap:1.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-7-touch{--columnGap:1.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-7-desktop{--columnGap:1.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-7-desktop-only{--columnGap:1.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-7-widescreen{--columnGap:1.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-7-widescreen-only{--columnGap:1.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-7-fullhd{--columnGap:1.75rem}}.columns.is-variable.is-8{--columnGap:2rem}@media screen and (max-width:768px){.columns.is-variable.is-8-mobile{--columnGap:2rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-8-tablet{--columnGap:2rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-8-tablet-only{--columnGap:2rem}}@media screen and (max-width:1023px){.columns.is-variable.is-8-touch{--columnGap:2rem}}@media screen and (min-width:1024px){.columns.is-variable.is-8-desktop{--columnGap:2rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-8-desktop-only{--columnGap:2rem}}@media screen and (min-width:1216px){.columns.is-variable.is-8-widescreen{--columnGap:2rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-8-widescreen-only{--columnGap:2rem}}@media screen and (min-width:1408px){.columns.is-variable.is-8-fullhd{--columnGap:2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media screen and (min-width:769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.has-text-white{color:#fff!important}a.has-text-white:focus,a.has-text-white:hover{color:#e6e6e6!important}.has-background-white{background-color:#fff!important}.has-text-black{color:#0a0a0a!important}a.has-text-black:focus,a.has-text-black:hover{color:#000!important}.has-background-black{background-color:#0a0a0a!important}.has-text-light{color:#f5f5f5!important}a.has-text-light:focus,a.has-text-light:hover{color:#dbdbdb!important}.has-background-light{background-color:#f5f5f5!important}.has-text-dark{color:#363636!important}a.has-text-dark:focus,a.has-text-dark:hover{color:#1c1c1c!important}.has-background-dark{background-color:#363636!important}.has-text-primary{color:#00d1b2!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#009e86!important}.has-background-primary{background-color:#00d1b2!important}.has-text-primary-light{color:#ebfffc!important}a.has-text-primary-light:focus,a.has-text-primary-light:hover{color:#b8fff4!important}.has-background-primary-light{background-color:#ebfffc!important}.has-text-primary-dark{color:#00947e!important}a.has-text-primary-dark:focus,a.has-text-primary-dark:hover{color:#00c7a9!important}.has-background-primary-dark{background-color:#00947e!important}.has-text-link{color:#3273dc!important}a.has-text-link:focus,a.has-text-link:hover{color:#205bbc!important}.has-background-link{background-color:#3273dc!important}.has-text-link-light{color:#eef3fc!important}a.has-text-link-light:focus,a.has-text-link-light:hover{color:#c2d5f5!important}.has-background-link-light{background-color:#eef3fc!important}.has-text-link-dark{color:#2160c4!important}a.has-text-link-dark:focus,a.has-text-link-dark:hover{color:#3b79de!important}.has-background-link-dark{background-color:#2160c4!important}.has-text-info{color:#3298dc!important}a.has-text-info:focus,a.has-text-info:hover{color:#207dbc!important}.has-background-info{background-color:#3298dc!important}.has-text-info-light{color:#eef6fc!important}a.has-text-info-light:focus,a.has-text-info-light:hover{color:#c2e0f5!important}.has-background-info-light{background-color:#eef6fc!important}.has-text-info-dark{color:#1d72aa!important}a.has-text-info-dark:focus,a.has-text-info-dark:hover{color:#248fd6!important}.has-background-info-dark{background-color:#1d72aa!important}.has-text-success{color:#48c774!important}a.has-text-success:focus,a.has-text-success:hover{color:#34a85c!important}.has-background-success{background-color:#48c774!important}.has-text-success-light{color:#effaf3!important}a.has-text-success-light:focus,a.has-text-success-light:hover{color:#c8eed6!important}.has-background-success-light{background-color:#effaf3!important}.has-text-success-dark{color:#257942!important}a.has-text-success-dark:focus,a.has-text-success-dark:hover{color:#31a058!important}.has-background-success-dark{background-color:#257942!important}.has-text-warning{color:#ffdd57!important}a.has-text-warning:focus,a.has-text-warning:hover{color:#ffd324!important}.has-background-warning{background-color:#ffdd57!important}.has-text-warning-light{color:#fffbeb!important}a.has-text-warning-light:focus,a.has-text-warning-light:hover{color:#fff1b8!important}.has-background-warning-light{background-color:#fffbeb!important}.has-text-warning-dark{color:#947600!important}a.has-text-warning-dark:focus,a.has-text-warning-dark:hover{color:#c79f00!important}.has-background-warning-dark{background-color:#947600!important}.has-text-danger{color:#f14668!important}a.has-text-danger:focus,a.has-text-danger:hover{color:#ee1742!important}.has-background-danger{background-color:#f14668!important}.has-text-danger-light{color:#feecf0!important}a.has-text-danger-light:focus,a.has-text-danger-light:hover{color:#fabdc9!important}.has-background-danger-light{background-color:#feecf0!important}.has-text-danger-dark{color:#cc0f35!important}a.has-text-danger-dark:focus,a.has-text-danger-dark:hover{color:#ee2049!important}.has-background-danger-dark{background-color:#cc0f35!important}.has-text-black-bis{color:#121212!important}.has-background-black-bis{background-color:#121212!important}.has-text-black-ter{color:#242424!important}.has-background-black-ter{background-color:#242424!important}.has-text-grey-darker{color:#363636!important}.has-background-grey-darker{background-color:#363636!important}.has-text-grey-dark{color:#4a4a4a!important}.has-background-grey-dark{background-color:#4a4a4a!important}.has-text-grey{color:#7a7a7a!important}.has-background-grey{background-color:#7a7a7a!important}.has-text-grey-light{color:#b5b5b5!important}.has-background-grey-light{background-color:#b5b5b5!important}.has-text-grey-lighter{color:#dbdbdb!important}.has-background-grey-lighter{background-color:#dbdbdb!important}.has-text-white-ter{color:#f5f5f5!important}.has-background-white-ter{background-color:#f5f5f5!important}.has-text-white-bis{color:#fafafa!important}.has-background-white-bis{background-color:#fafafa!important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left!important}.is-pulled-right{float:right!important}.is-radiusless{border-radius:0!important}.is-shadowless{box-shadow:none!important}.is-clipped{overflow:hidden!important}.is-relative{position:relative!important}.is-marginless{margin:0!important}.is-paddingless{padding:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}.is-size-6{font-size:1rem!important}.is-size-7{font-size:.75rem!important}@media screen and (max-width:768px){.is-size-1-mobile{font-size:3rem!important}.is-size-2-mobile{font-size:2.5rem!important}.is-size-3-mobile{font-size:2rem!important}.is-size-4-mobile{font-size:1.5rem!important}.is-size-5-mobile{font-size:1.25rem!important}.is-size-6-mobile{font-size:1rem!important}.is-size-7-mobile{font-size:.75rem!important}}@media screen and (min-width:769px),print{.is-size-1-tablet{font-size:3rem!important}.is-size-2-tablet{font-size:2.5rem!important}.is-size-3-tablet{font-size:2rem!important}.is-size-4-tablet{font-size:1.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}.is-size-6-tablet{font-size:1rem!important}.is-size-7-tablet{font-size:.75rem!important}}@media screen and (max-width:1023px){.is-size-1-touch{font-size:3rem!important}.is-size-2-touch{font-size:2.5rem!important}.is-size-3-touch{font-size:2rem!important}.is-size-4-touch{font-size:1.5rem!important}.is-size-5-touch{font-size:1.25rem!important}.is-size-6-touch{font-size:1rem!important}.is-size-7-touch{font-size:.75rem!important}}@media screen and (min-width:1024px){.is-size-1-desktop{font-size:3rem!important}.is-size-2-desktop{font-size:2.5rem!important}.is-size-3-desktop{font-size:2rem!important}.is-size-4-desktop{font-size:1.5rem!important}.is-size-5-desktop{font-size:1.25rem!important}.is-size-6-desktop{font-size:1rem!important}.is-size-7-desktop{font-size:.75rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-2-widescreen{font-size:2.5rem!important}.is-size-3-widescreen{font-size:2rem!important}.is-size-4-widescreen{font-size:1.5rem!important}.is-size-5-widescreen{font-size:1.25rem!important}.is-size-6-widescreen{font-size:1rem!important}.is-size-7-widescreen{font-size:.75rem!important}}@media screen and (min-width:1408px){.is-size-1-fullhd{font-size:3rem!important}.is-size-2-fullhd{font-size:2.5rem!important}.is-size-3-fullhd{font-size:2rem!important}.is-size-4-fullhd{font-size:1.5rem!important}.is-size-5-fullhd{font-size:1.25rem!important}.is-size-6-fullhd{font-size:1rem!important}.is-size-7-fullhd{font-size:.75rem!important}}.has-text-centered{text-align:center!important}.has-text-justified{text-align:justify!important}.has-text-left{text-align:left!important}.has-text-right{text-align:right!important}@media screen and (max-width:768px){.has-text-centered-mobile{text-align:center!important}}@media screen and (min-width:769px),print{.has-text-centered-tablet{text-align:center!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-centered-tablet-only{text-align:center!important}}@media screen and (max-width:1023px){.has-text-centered-touch{text-align:center!important}}@media screen and (min-width:1024px){.has-text-centered-desktop{text-align:center!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-centered-desktop-only{text-align:center!important}}@media screen and (min-width:1216px){.has-text-centered-widescreen{text-align:center!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-centered-widescreen-only{text-align:center!important}}@media screen and (min-width:1408px){.has-text-centered-fullhd{text-align:center!important}}@media screen and (max-width:768px){.has-text-justified-mobile{text-align:justify!important}}@media screen and (min-width:769px),print{.has-text-justified-tablet{text-align:justify!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-justified-tablet-only{text-align:justify!important}}@media screen and (max-width:1023px){.has-text-justified-touch{text-align:justify!important}}@media screen and (min-width:1024px){.has-text-justified-desktop{text-align:justify!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-justified-desktop-only{text-align:justify!important}}@media screen and (min-width:1216px){.has-text-justified-widescreen{text-align:justify!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-justified-widescreen-only{text-align:justify!important}}@media screen and (min-width:1408px){.has-text-justified-fullhd{text-align:justify!important}}@media screen and (max-width:768px){.has-text-left-mobile{text-align:left!important}}@media screen and (min-width:769px),print{.has-text-left-tablet{text-align:left!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-left-tablet-only{text-align:left!important}}@media screen and (max-width:1023px){.has-text-left-touch{text-align:left!important}}@media screen and (min-width:1024px){.has-text-left-desktop{text-align:left!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-left-desktop-only{text-align:left!important}}@media screen and (min-width:1216px){.has-text-left-widescreen{text-align:left!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-left-widescreen-only{text-align:left!important}}@media screen and (min-width:1408px){.has-text-left-fullhd{text-align:left!important}}@media screen and (max-width:768px){.has-text-right-mobile{text-align:right!important}}@media screen and (min-width:769px),print{.has-text-right-tablet{text-align:right!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-right-tablet-only{text-align:right!important}}@media screen and (max-width:1023px){.has-text-right-touch{text-align:right!important}}@media screen and (min-width:1024px){.has-text-right-desktop{text-align:right!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-right-desktop-only{text-align:right!important}}@media screen and (min-width:1216px){.has-text-right-widescreen{text-align:right!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-right-widescreen-only{text-align:right!important}}@media screen and (min-width:1408px){.has-text-right-fullhd{text-align:right!important}}.is-capitalized{text-transform:capitalize!important}.is-lowercase{text-transform:lowercase!important}.is-uppercase{text-transform:uppercase!important}.is-italic{font-style:italic!important}.has-text-weight-light{font-weight:300!important}.has-text-weight-normal{font-weight:400!important}.has-text-weight-medium{font-weight:500!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-family-primary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-secondary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-sans-serif{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-monospace{font-family:monospace!important}.is-family-code{font-family:monospace!important}.is-block{display:block!important}@media screen and (max-width:768px){.is-block-mobile{display:block!important}}@media screen and (min-width:769px),print{.is-block-tablet{display:block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-block-tablet-only{display:block!important}}@media screen and (max-width:1023px){.is-block-touch{display:block!important}}@media screen and (min-width:1024px){.is-block-desktop{display:block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-block-desktop-only{display:block!important}}@media screen and (min-width:1216px){.is-block-widescreen{display:block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-block-widescreen-only{display:block!important}}@media screen and (min-width:1408px){.is-block-fullhd{display:block!important}}.is-flex{display:flex!important}@media screen and (max-width:768px){.is-flex-mobile{display:flex!important}}@media screen and (min-width:769px),print{.is-flex-tablet{display:flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-flex-tablet-only{display:flex!important}}@media screen and (max-width:1023px){.is-flex-touch{display:flex!important}}@media screen and (min-width:1024px){.is-flex-desktop{display:flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-flex-desktop-only{display:flex!important}}@media screen and (min-width:1216px){.is-flex-widescreen{display:flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-flex-widescreen-only{display:flex!important}}@media screen and (min-width:1408px){.is-flex-fullhd{display:flex!important}}.is-inline{display:inline!important}@media screen and (max-width:768px){.is-inline-mobile{display:inline!important}}@media screen and (min-width:769px),print{.is-inline-tablet{display:inline!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-tablet-only{display:inline!important}}@media screen and (max-width:1023px){.is-inline-touch{display:inline!important}}@media screen and (min-width:1024px){.is-inline-desktop{display:inline!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-desktop-only{display:inline!important}}@media screen and (min-width:1216px){.is-inline-widescreen{display:inline!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-widescreen-only{display:inline!important}}@media screen and (min-width:1408px){.is-inline-fullhd{display:inline!important}}.is-inline-block{display:inline-block!important}@media screen and (max-width:768px){.is-inline-block-mobile{display:inline-block!important}}@media screen and (min-width:769px),print{.is-inline-block-tablet{display:inline-block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-block-tablet-only{display:inline-block!important}}@media screen and (max-width:1023px){.is-inline-block-touch{display:inline-block!important}}@media screen and (min-width:1024px){.is-inline-block-desktop{display:inline-block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-block-desktop-only{display:inline-block!important}}@media screen and (min-width:1216px){.is-inline-block-widescreen{display:inline-block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-block-widescreen-only{display:inline-block!important}}@media screen and (min-width:1408px){.is-inline-block-fullhd{display:inline-block!important}}.is-inline-flex{display:inline-flex!important}@media screen and (max-width:768px){.is-inline-flex-mobile{display:inline-flex!important}}@media screen and (min-width:769px),print{.is-inline-flex-tablet{display:inline-flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-flex-tablet-only{display:inline-flex!important}}@media screen and (max-width:1023px){.is-inline-flex-touch{display:inline-flex!important}}@media screen and (min-width:1024px){.is-inline-flex-desktop{display:inline-flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-flex-desktop-only{display:inline-flex!important}}@media screen and (min-width:1216px){.is-inline-flex-widescreen{display:inline-flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-flex-widescreen-only{display:inline-flex!important}}@media screen and (min-width:1408px){.is-inline-flex-fullhd{display:inline-flex!important}}.is-hidden{display:none!important}.is-sr-only{border:none!important;clip:rect(0,0,0,0)!important;height:.01em!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:.01em!important}@media screen and (max-width:768px){.is-hidden-mobile{display:none!important}}@media screen and (min-width:769px),print{.is-hidden-tablet{display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-hidden-tablet-only{display:none!important}}@media screen and (max-width:1023px){.is-hidden-touch{display:none!important}}@media screen and (min-width:1024px){.is-hidden-desktop{display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-hidden-desktop-only{display:none!important}}@media screen and (min-width:1216px){.is-hidden-widescreen{display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-hidden-widescreen-only{display:none!important}}@media screen and (min-width:1408px){.is-hidden-fullhd{display:none!important}}.is-invisible{visibility:hidden!important}@media screen and (max-width:768px){.is-invisible-mobile{visibility:hidden!important}}@media screen and (min-width:769px),print{.is-invisible-tablet{visibility:hidden!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-invisible-tablet-only{visibility:hidden!important}}@media screen and (max-width:1023px){.is-invisible-touch{visibility:hidden!important}}@media screen and (min-width:1024px){.is-invisible-desktop{visibility:hidden!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-invisible-desktop-only{visibility:hidden!important}}@media screen and (min-width:1216px){.is-invisible-widescreen{visibility:hidden!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-invisible-widescreen-only{visibility:hidden!important}}@media screen and (min-width:1408px){.is-invisible-fullhd{visibility:hidden!important}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:0 0}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width:1023px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}@media screen and (max-width:768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,.7)}.hero.is-light .subtitle{color:rgba(0,0,0,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.hero.is-light .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}.hero.is-dark{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong{color:inherit}.hero.is-dark .title{color:#fff}.hero.is-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-dark .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.hero.is-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover{background-color:#292929;color:#fff}.hero.is-dark .tabs a{color:#fff;opacity:.9}.hero.is-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}@media screen and (max-width:768px){.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}.hero.is-primary{background-color:#00d1b2;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong{color:inherit}.hero.is-primary .title{color:#fff}.hero.is-primary .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-primary .navbar-menu{background-color:#00d1b2}}.hero.is-primary .navbar-item,.hero.is-primary .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#00d1b2}.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}@media screen and (max-width:768px){.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}.hero.is-link{background-color:#3273dc;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-link .navbar-menu{background-color:#3273dc}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover{background-color:#2366d1;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3273dc}.hero.is-link.is-bold{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}@media screen and (max-width:768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}}.hero.is-info{background-color:#3298dc;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-info .navbar-menu{background-color:#3298dc}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover{background-color:#238cd1;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3298dc}.hero.is-info.is-bold{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}@media screen and (max-width:768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}}.hero.is-success{background-color:#48c774;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-success .navbar-menu{background-color:#48c774}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover{background-color:#3abb67;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#48c774}.hero.is-success.is-bold{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}@media screen and (max-width:768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}@media screen and (max-width:768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}}.hero.is-danger{background-color:#f14668;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-danger .navbar-menu{background-color:#f14668}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover{background-color:#ef2e55;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f14668}.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}@media screen and (max-width:768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}}.hero.is-small .hero-body{padding:1.5rem}@media screen and (min-width:769px),print{.hero.is-medium .hero-body{padding:9rem 1.5rem}}@media screen and (min-width:769px),print{.hero.is-large .hero-body{padding:18rem 1.5rem}}.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body,.hero.is-halfheight .hero-body{align-items:center;display:flex}.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container,.hero.is-halfheight .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.hero-video.is-transparent{opacity:.3}@media screen and (max-width:768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width:768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:.75rem}}@media screen and (min-width:769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-left:1.5rem}}.hero-foot,.hero-head{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width:1024px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem} diff --git a/http-ui/public/filesize.min.js b/http-ui/public/filesize.min.js deleted file mode 100644 index f84992b72..000000000 --- a/http-ui/public/filesize.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - 2020 Jason Mulligan - @version 6.1.0 -*/ -"use strict";!function(e){var x=/^(b|B)$/,M={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},w={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};function t(e){var i,t,o,n,b,r,a,l,s,d,u,c,f,p,B,y=1+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0 - - - - - diff --git a/http-ui/public/logo-white.svg b/http-ui/public/logo-white.svg deleted file mode 100644 index 58bfd5738..000000000 --- a/http-ui/public/logo-white.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/http-ui/public/script.js b/http-ui/public/script.js deleted file mode 100644 index e4de86672..000000000 --- a/http-ui/public/script.js +++ /dev/null @@ -1,154 +0,0 @@ -var request = null; -var timeoutID = null; -var display_facets = false; - -$('#query, #filters').on('input', function () { - var query = $('#query').val(); - var filters = $('#filters').val(); - var timeoutMs = 100; - - if (timeoutID !== null) { - window.clearTimeout(timeoutID); - } - - timeoutID = window.setTimeout(function () { - request = $.ajax({ - type: "POST", - url: "query", - contentType: 'application/json', - data: JSON.stringify({ - 'query': query, - 'filters': filters, - "facetDistribution": display_facets, - }), - contentType: 'application/json', - success: function (data, textStatus, request) { - results.innerHTML = ''; - facets.innerHTML = ''; - - let timeSpent = request.getResponseHeader('Time-Ms'); - let numberOfDocuments = data.documents.length; - count.innerHTML = data.numberOfCandidates.toLocaleString(); - time.innerHTML = `${timeSpent}ms`; - time.classList.remove('fade-in-out'); - - for (facet_name in data.facets) { - for (value in data.facets[facet_name]) { - const elem = document.createElement('span'); - const count = data.facets[facet_name][value]; - elem.classList.add("tag"); - elem.setAttribute('data-name', facet_name); - elem.setAttribute('data-value', value); - elem.innerHTML = `${facet_name}:${value} (${count})`; - facets.appendChild(elem); - } - } - - for (element of data.documents) { - const elem = document.createElement('li'); - elem.classList.add("document"); - - const ol = document.createElement('ol'); - - for (const prop in element) { - const field = document.createElement('li'); - field.classList.add("field"); - - const attribute = document.createElement('div'); - attribute.classList.add("attribute"); - attribute.innerHTML = prop; - - const content = document.createElement('div'); - content.classList.add("content"); - - // Stringify Objects and Arrays to avoid [Object object] - if (typeof element[prop] === 'object' && element[prop] !== null) { - content.innerHTML = JSON.stringify(element[prop]); - } else { - content.innerHTML = element[prop]; - } - - field.appendChild(attribute); - field.appendChild(content); - - ol.appendChild(field); - } - - elem.appendChild(ol); - results.appendChild(elem); - } - - // When we click on a tag we append the facet value - // at the end of the facet query. - $('#facets .tag').on('click', function () { - let name = $(this).attr("data-name"); - let value = $(this).attr("data-value"); - - let facet_query = $('#filters').val().trim(); - if (facet_query === "") { - $('#filters').val(`${name} = "${value}"`).trigger('input'); - } else { - $('#filters').val(`${facet_query} AND ${name} = "${value}"`).trigger('input'); - } - }); - }, - beforeSend: function () { - if (request !== null) { - request.abort(); - time.classList.add('fade-in-out'); - } - }, - }); - }, timeoutMs); -}); - -function diffArray(arr1, arr2) { - return arr1.concat(arr2).filter(function (val) { - if (!(arr1.includes(val) && arr2.includes(val))) - return val; - }); -} - -function selectedFacetsToArray(facets_obj) { - var array = []; - for (const facet_name in facets_obj) { - var subarray = []; - for (const facet_value of facets_obj[facet_name]) { - subarray.push(`${facet_name}:${facet_value}`); - } - array.push(subarray); - } - return array; -} - -$('#display_facets').click(function() { - if (display_facets) { - display_facets = false; - $('#display_facets').html("Display facets") - $('#display_facets').removeClass("is-danger"); - $('#display_facets').addClass("is-success"); - $('#facets').hide(); - } else { - display_facets = true; - $('#display_facets').html("Hide facets") - $('#display_facets').addClass("is-danger"); - $('#display_facets').removeClass("is-success"); - $('#facets').show(); - } -}); - -// Make the number of document a little bit prettier -$('#docs-count').text(function(index, text) { - return parseInt(text).toLocaleString() -}); - -// Make the database a little bit easier to read -$('#db-size').text(function(index, text) { - return filesize(parseInt(text)) -}); - -// We trigger the input when we load the script. -$(window).on('load', function () { - // We execute a placeholder search when the input is empty. - $('#query').trigger('input'); -}); diff --git a/http-ui/public/style.css b/http-ui/public/style.css deleted file mode 100644 index ef032e51e..000000000 --- a/http-ui/public/style.css +++ /dev/null @@ -1,144 +0,0 @@ -#results { - max-width: 900px; - margin: 20px auto 0 auto; - padding: 0; -} - -#facets .tag { - margin-right: 1em; - margin-bottom: 1em; -} - -#facets { - display: none; - max-width: 900px; - margin: 20px auto 0 auto; - padding: 0; - max-height: 16em; - overflow: scroll; -} - -#display_facets { - margin: 20px auto 0 auto; - padding: 5px; - max-height: 16em; - overflow: scroll; -} - -#facets .tag:hover { - cursor: pointer; -} - -#logo-white { - display: none; -} - -#logo-black { - display: inherit; -} - -.notification { - display: flex; - justify-content: center; -} - -.document { - padding: 20px 20px; - background-color: #f5f5f5; - border-radius: 4px; - margin-bottom: 20px; - display: flex; -} - -.document ol { - flex: 0 0 75%; - max-width: 75%; - padding: 0; - margin: 0; -} - -.document .image { - max-width: 25%; - flex: 0 0 25%; - padding-left: 30px; - box-sizing: border-box; -} - -.document .image img { - width: 100%; -} - -.field { - list-style-type: none; - display: flex; - flex-wrap: wrap; -} - -.field:not(:last-child) { - margin-bottom: 7px; -} - -.attribute { - flex: 0 0 35%; - max-width: 35%; - text-align: right; - padding-right: 10px; - box-sizing: border-box; - text-transform: uppercase; - opacity: 0.7; -} - -.content { - max-width: 65%; - flex: 0 0 65%; - box-sizing: border-box; - padding-left: 10px; - color: rgba(0,0,0,.9); -} - -.content mark { - background-color: hsl(204, 86%, 88%); - color: hsl(204, 86%, 25%); -} - -@keyframes fadeInOut { - 0% { opacity: 1; } - 30% { opacity: 0.3; } - 100% { opacity: 1; } -} - -.fade-in-out { - animation: fadeInOut ease 1s infinite; -} - -@media (prefers-color-scheme:dark) { - #logo-white { - display: inherit; - } - - #logo-black { - display: none; - } - - .hero.is-light { - background-color: #242424; - color: inherit; - } - - .hero.is-light .title { - color: inherit; - } - - .document { - background-color: #242424; - } - - .content { - color: #dbdbdb; - } - - .content mark { - background-color: hsl(0, 0%, 35%); - color: hsl(0,0%,90.2%); - } -} diff --git a/http-ui/public/updates-script.js b/http-ui/public/updates-script.js deleted file mode 100644 index bb91de313..000000000 --- a/http-ui/public/updates-script.js +++ /dev/null @@ -1,102 +0,0 @@ -$(window).on('load', function () { - let wsProtcol = "ws"; - if (window.location.protocol === 'https') { - wsProtcol = 'wss'; - } - - let url = wsProtcol + '://' + window.location.hostname + ':' + window.location.port + '/updates/ws'; - var socket = new WebSocket(url); - - socket.onmessage = function (event) { - let status = JSON.parse(event.data); - - if (status.type == 'Pending') { - const elem = document.createElement('li'); - elem.classList.add("document"); - elem.setAttribute("id", 'update-' + status.update_id); - - const ol = document.createElement('ol'); - const field = document.createElement('li'); - field.classList.add("field"); - - const attributeUpdateId = document.createElement('div'); - attributeUpdateId.classList.add("attribute"); - attributeUpdateId.innerHTML = "update id"; - - const contentUpdateId = document.createElement('div'); - contentUpdateId.classList.add("updateId"); - contentUpdateId.classList.add("content"); - contentUpdateId.innerHTML = status.update_id; - - field.appendChild(attributeUpdateId); - field.appendChild(contentUpdateId); - - const attributeUpdateStatus = document.createElement('div'); - attributeUpdateStatus.classList.add("attribute"); - attributeUpdateStatus.innerHTML = "update status"; - - const contentUpdateStatus = document.createElement('div'); - contentUpdateStatus.classList.add("updateStatus"); - contentUpdateStatus.classList.add("content"); - contentUpdateStatus.innerHTML = 'pending'; - - field.appendChild(attributeUpdateStatus); - field.appendChild(contentUpdateStatus); - - ol.appendChild(field); - elem.appendChild(ol); - - prependChild(results, elem); - } - - if (status.type == "Progressing") { - const id = 'update-' + status.update_id; - const content = $(`#${id} .updateStatus.content`); - - let html; - - let { type, step, total_steps, current, total } = status.meta; - - if (type === 'DocumentsAddition') { - // If the total is null or undefined then the progress results is infinity. - let progress = Math.round(current / total * 100); - // We must divide the progress by the total number of indexing steps. - progress = progress / total_steps; - // And mark the previous steps as processed. - progress = progress + (step * 100 / total_steps); - // Generate the appropriate html bulma progress bar. - html = ``; - } else { - html = ``; - } - - content.html(html); - } - - if (status.type == "Processed") { - const id = 'update-' + status.update_id; - const content = $(`#${id} .updateStatus.content`); - content.html('processed ' + JSON.stringify(status.meta)); - } - - if (status.type == "Aborted") { - const id = 'update-' + status.update_id; - const content = $(`#${id} .updateStatus.content`); - content.html('aborted ' + JSON.stringify(status.meta)); - } - } -}); - -function prependChild(parent, newFirstChild) { - parent.insertBefore(newFirstChild, parent.firstChild) -} - -// Make the number of document a little bit prettier -$('#docs-count').text(function(index, text) { - return parseInt(text).toLocaleString() -}); - -// Make the database a little bit easier to read -$('#db-size').text(function(index, text) { - return filesize(parseInt(text)) -}); diff --git a/http-ui/src/main.rs b/http-ui/src/main.rs deleted file mode 100644 index 3b14889cc..000000000 --- a/http-ui/src/main.rs +++ /dev/null @@ -1,1176 +0,0 @@ -mod update_store; - -use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; -use std::fmt::Display; -use std::fs::{create_dir_all, File}; -use std::io::{BufReader, Cursor, Read}; -use std::net::SocketAddr; -use std::num::{NonZeroU32, NonZeroUsize}; -use std::path::PathBuf; -use std::str::FromStr; -use std::sync::Arc; -use std::time::Instant; -use std::{io, mem}; - -use askama_warp::Template; -use byte_unit::Byte; -use either::Either; -use flate2::read::GzDecoder; -use futures::{stream, FutureExt, StreamExt}; -use milli::documents::{DocumentsBatchBuilder, DocumentsBatchReader}; -use milli::heed::EnvOpenOptions; -use milli::tokenizer::TokenizerBuilder; -use milli::update::UpdateIndexingStep::*; -use milli::update::{ - ClearDocuments, IndexDocumentsConfig, IndexDocumentsMethod, IndexerConfig, Setting, -}; -use milli::{ - obkv_to_json, CompressionType, Filter as MilliFilter, FilterCondition, FormatOptions, Index, - MatcherBuilder, Object, SearchResult, SortError, -}; -use once_cell::sync::OnceCell; -use serde::{Deserialize, Serialize}; -use serde_json::Value; -use structopt::StructOpt; -use tokio::fs::File as TFile; -use tokio::io::AsyncWriteExt; -use tokio::sync::broadcast; -use tokio_stream::wrappers::BroadcastStream; -use warp::filters::ws::Message; -use warp::http::Response; -use warp::Filter; - -use self::update_store::UpdateStore; - -#[global_allocator] -static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; - -static GLOBAL_CONFIG: OnceCell = OnceCell::new(); - -#[derive(Debug, StructOpt)] -/// The HTTP main server of the milli project. -pub struct Opt { - /// The database path where the LMDB database is located. - /// It is created if it doesn't already exist. - #[structopt(long = "db", parse(from_os_str))] - database: PathBuf, - - /// The maximum size the database can take on disk. It is recommended to specify - /// the whole disk space (value must be a multiple of a page size). - #[structopt(long = "db-size", default_value = "100 GiB")] - database_size: Byte, - - /// The maximum size the database that stores the updates can take on disk. It is recommended - /// to specify the whole disk space (value must be a multiple of a page size). - #[structopt(long = "udb-size", default_value = "10 GiB")] - update_database_size: Byte, - - /// Disable document highlighting on the dashboard. - #[structopt(long)] - disable_highlighting: bool, - - /// Verbose mode (-v, -vv, -vvv, etc.) - #[structopt(short, long, parse(from_occurrences))] - verbose: usize, - - /// The ip and port on which the database will listen for HTTP requests. - #[structopt(short = "l", long, default_value = "127.0.0.1:9700")] - http_listen_addr: String, - - #[structopt(flatten)] - indexer: IndexerOpt, -} - -#[derive(Debug, Clone, StructOpt)] -pub struct IndexerOpt { - /// The amount of documents to skip before printing - /// a log regarding the indexing advancement. - #[structopt(long, default_value = "100000")] // 100k - pub log_every_n: usize, - - /// MTBL max number of chunks in bytes. - #[structopt(long)] - pub max_nb_chunks: Option, - - /// The maximum amount of memory to use for the MTBL buffer. It is recommended - /// to use something like 80%-90% of the available memory. - /// - /// It is automatically split by the number of jobs e.g. if you use 7 jobs - /// and 7 GB of max memory, each thread will use a maximum of 1 GB. - #[structopt(long, default_value = "7 GiB")] - pub max_memory: Byte, - - /// Size of the linked hash map cache when indexing. - /// The bigger it is, the faster the indexing is but the more memory it takes. - #[structopt(long, default_value = "500")] - pub linked_hash_map_size: usize, - - /// The name of the compression algorithm to use when compressing intermediate - /// chunks during indexing documents. - /// - /// Choosing a fast algorithm will make the indexing faster but may consume more memory. - #[structopt(long, possible_values = &["snappy", "zlib", "lz4", "lz4hc", "zstd"])] - pub chunk_compression_type: Option, - - /// The level of compression of the chosen algorithm. - #[structopt(long, requires = "chunk-compression-type")] - pub chunk_compression_level: Option, - - /// The number of bytes to remove from the begining of the chunks while reading/sorting - /// or merging them. - /// - /// File fusing must only be enable on file systems that support the `FALLOC_FL_COLLAPSE_RANGE`, - /// (i.e. ext4 and XFS). File fusing will only work if the `enable-chunk-fusing` is set. - #[structopt(long, default_value = "4 GiB")] - pub chunk_fusing_shrink_size: Byte, - - /// Enable the chunk fusing or not, this reduces the amount of disk used by a factor of 2. - #[structopt(long)] - pub enable_chunk_fusing: bool, - - /// Number of parallel jobs for indexing, defaults to # of CPUs. - #[structopt(long)] - pub indexing_jobs: Option, - - /// Maximum relative position in an attribute for a word to be indexed. - /// Any value higher than 65535 will be clamped. - #[structopt(long)] - pub max_positions_per_attributes: Option, -} - -struct Highlighter<'s, A> { - matcher_builder: MatcherBuilder<'s, A>, -} - -impl<'s, A: AsRef<[u8]>> Highlighter<'s, A> { - fn new(matcher_builder: MatcherBuilder<'s, A>) -> Self { - Self { matcher_builder } - } - - fn highlight_value(&self, value: Value) -> Value { - match value { - Value::Null => Value::Null, - Value::Bool(boolean) => Value::Bool(boolean), - Value::Number(number) => Value::Number(number), - Value::String(old_string) => { - let mut matcher = self.matcher_builder.build(&old_string); - - let format_options = FormatOptions { highlight: true, crop: Some(10) }; - - Value::String(matcher.format(format_options).to_string()) - } - Value::Array(values) => { - Value::Array(values.into_iter().map(|v| self.highlight_value(v)).collect()) - } - Value::Object(object) => Value::Object( - object.into_iter().map(|(k, v)| (k, self.highlight_value(v))).collect(), - ), - } - } - - fn highlight_record(&self, object: &mut Object, attributes_to_highlight: &HashSet) { - // TODO do we need to create a string for element that are not and needs to be highlight? - for (key, value) in object.iter_mut() { - if attributes_to_highlight.contains(key) { - let old_value = mem::take(value); - *value = self.highlight_value(old_value); - } - } - } -} - -#[derive(Template)] -#[template(path = "index.html")] -struct IndexTemplate { - db_name: String, - db_size: usize, - docs_count: usize, -} - -#[derive(Template)] -#[template(path = "updates.html")] -struct UpdatesTemplate { - db_name: String, - db_size: usize, - docs_count: usize, - updates: Vec>, -} - -#[derive(Debug, Clone, Serialize)] -#[serde(tag = "type")] -enum UpdateStatus { - Pending { update_id: u64, meta: M }, - Progressing { update_id: u64, meta: P }, - Processed { update_id: u64, meta: N }, - Aborted { update_id: u64, meta: M }, -} - -impl UpdateStatus { - fn update_id(&self) -> u64 { - match self { - UpdateStatus::Pending { update_id, .. } => *update_id, - UpdateStatus::Progressing { update_id, .. } => *update_id, - UpdateStatus::Processed { update_id, .. } => *update_id, - UpdateStatus::Aborted { update_id, .. } => *update_id, - } - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(tag = "type")] -enum UpdateMeta { - DocumentsAddition { method: String, format: String, encoding: Option }, - ClearDocuments, - Settings(Settings), - Facets(Facets), -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(tag = "type")] -enum UpdateMetaProgress { - DocumentsAddition { step: usize, total_steps: usize, current: usize, total: Option }, -} - -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -struct Settings { - #[serde(default, skip_serializing_if = "Setting::is_not_set")] - displayed_attributes: Setting>, - - #[serde(default, skip_serializing_if = "Setting::is_not_set")] - searchable_attributes: Setting>, - - #[serde(default, skip_serializing_if = "Setting::is_not_set")] - filterable_attributes: Setting>, - - #[serde(default, skip_serializing_if = "Setting::is_not_set")] - sortable_attributes: Setting>, - - #[serde(default, skip_serializing_if = "Setting::is_not_set")] - criteria: Setting>, - - #[serde(default, skip_serializing_if = "Setting::is_not_set")] - stop_words: Setting>, - - #[serde(default, skip_serializing_if = "Setting::is_not_set")] - synonyms: Setting>>, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -struct Facets { - level_group_size: Option, - min_level_size: Option, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -struct WordsPrefixes { - threshold: Option, - max_prefix_length: Option, -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(deny_unknown_fields)] -#[serde(rename_all = "camelCase")] -struct WordsLevelPositions { - level_group_size: Option, - min_level_size: Option, -} - -#[tokio::main] -async fn main() -> anyhow::Result<()> { - let opt = Opt::from_args(); - - stderrlog::new() - .verbosity(opt.verbose) - .show_level(false) - .timestamp(stderrlog::Timestamp::Off) - .init()?; - - create_dir_all(&opt.database)?; - let mut options = EnvOpenOptions::new(); - options.map_size(opt.database_size.get_bytes() as usize); - - // Setup the global thread pool - let jobs = opt.indexer.indexing_jobs.unwrap_or(0); - let pool = rayon::ThreadPoolBuilder::new().num_threads(jobs).build()?; - - let config = IndexerConfig { - max_nb_chunks: opt.indexer.max_nb_chunks, - chunk_compression_level: opt.indexer.chunk_compression_level, - max_positions_per_attributes: opt.indexer.max_positions_per_attributes, - thread_pool: Some(pool), - log_every_n: Some(opt.indexer.log_every_n), - max_memory: Some(opt.indexer.max_memory.get_bytes() as usize), - chunk_compression_type: opt.indexer.chunk_compression_type.unwrap_or(CompressionType::None), - ..Default::default() - }; - - GLOBAL_CONFIG.set(config).unwrap(); - - // Open the LMDB database. - let index = Index::new(options, &opt.database)?; - - // Setup the LMDB based update database. - let mut update_store_options = EnvOpenOptions::new(); - update_store_options.map_size(opt.update_database_size.get_bytes() as usize); - - let update_store_path = opt.database.join("updates.mdb"); - create_dir_all(&update_store_path)?; - - let (update_status_sender, _) = broadcast::channel(100); - let update_status_sender_cloned = update_status_sender.clone(); - let index_cloned = index.clone(); - let update_store = UpdateStore::open( - update_store_options, - update_store_path, - // the type hint is necessary: https://github.com/rust-lang/rust/issues/32600 - move |update_id, meta, content: &_| { - // We prepare the update by using the update builder. - - let before_update = Instant::now(); - // we extract the update type and execute the update itself. - let result: anyhow::Result<()> = (|| match meta { - UpdateMeta::DocumentsAddition { method, format, encoding } => { - // We must use the write transaction of the update here. - let mut wtxn = index_cloned.write_txn()?; - let update_method = match method.as_str() { - "replace" => IndexDocumentsMethod::ReplaceDocuments, - "update" => IndexDocumentsMethod::UpdateDocuments, - otherwise => panic!("invalid indexing method {:?}", otherwise), - }; - let indexing_config = IndexDocumentsConfig { - update_method, - autogenerate_docids: true, - ..Default::default() - }; - - let indexing_callback = |indexing_step| { - let (current, total) = match indexing_step { - RemapDocumentAddition { documents_seen } => (documents_seen, None), - ComputeIdsAndMergeDocuments { documents_seen, total_documents } => { - (documents_seen, Some(total_documents)) - } - IndexDocuments { documents_seen, total_documents } => { - (documents_seen, Some(total_documents)) - } - MergeDataIntoFinalDatabase { databases_seen, total_databases } => { - (databases_seen, Some(total_databases)) - } - }; - let _ = update_status_sender_cloned.send(UpdateStatus::Progressing { - update_id, - meta: UpdateMetaProgress::DocumentsAddition { - step: indexing_step.step(), - total_steps: indexing_step.number_of_steps(), - current, - total, - }, - }); - }; - - let builder = milli::update::IndexDocuments::new( - &mut wtxn, - &index_cloned, - GLOBAL_CONFIG.get().unwrap(), - indexing_config, - indexing_callback, - )?; - - let reader = match encoding.as_deref() { - Some("gzip") => Box::new(GzDecoder::new(content)), - None => Box::new(content) as Box, - otherwise => panic!("invalid encoding format {:?}", otherwise), - }; - - let documents = match format.as_str() { - "csv" => documents_from_csv(reader)?, - "json" => documents_from_json(reader)?, - "jsonl" => documents_from_jsonl(reader)?, - otherwise => panic!("invalid update format {:?}", otherwise), - }; - - let documents = DocumentsBatchReader::from_reader(Cursor::new(documents))?; - - let (builder, user_error) = builder.add_documents(documents)?; - let _count = user_error?; - let result = builder.execute(); - - match result { - Ok(_) => wtxn.commit().map_err(Into::into), - Err(e) => Err(e.into()), - } - } - UpdateMeta::ClearDocuments => { - // We must use the write transaction of the update here. - let mut wtxn = index_cloned.write_txn()?; - let builder = ClearDocuments::new(&mut wtxn, &index_cloned); - - match builder.execute() { - Ok(_count) => wtxn.commit().map_err(Into::into), - Err(e) => Err(e.into()), - } - } - UpdateMeta::Settings(settings) => { - // We must use the write transaction of the update here. - let mut wtxn = index_cloned.write_txn()?; - let mut builder = milli::update::Settings::new( - &mut wtxn, - &index_cloned, - GLOBAL_CONFIG.get().unwrap(), - ); - - // We transpose the settings JSON struct into a real setting update. - match settings.searchable_attributes { - Setting::Set(searchable_attributes) => { - builder.set_searchable_fields(searchable_attributes) - } - Setting::Reset => builder.reset_searchable_fields(), - Setting::NotSet => (), - } - - // We transpose the settings JSON struct into a real setting update. - match settings.displayed_attributes { - Setting::Set(displayed_attributes) => { - builder.set_displayed_fields(displayed_attributes) - } - Setting::Reset => builder.reset_displayed_fields(), - Setting::NotSet => (), - } - - // We transpose the settings JSON struct into a real setting update. - match settings.filterable_attributes { - Setting::Set(filterable_attributes) => { - builder.set_filterable_fields(filterable_attributes) - } - Setting::Reset => builder.reset_filterable_fields(), - Setting::NotSet => (), - } - - // We transpose the settings JSON struct into a real setting update. - match settings.sortable_attributes { - Setting::Set(sortable_attributes) => { - builder.set_sortable_fields(sortable_attributes) - } - Setting::Reset => builder.reset_sortable_fields(), - Setting::NotSet => (), - } - - // We transpose the settings JSON struct into a real setting update. - match settings.criteria { - Setting::Set(criteria) => builder.set_criteria(criteria), - Setting::Reset => builder.reset_criteria(), - Setting::NotSet => (), - } - - // We transpose the settings JSON struct into a real setting update. - match settings.stop_words { - Setting::Set(stop_words) => builder.set_stop_words(stop_words), - Setting::Reset => builder.reset_stop_words(), - Setting::NotSet => (), - } - - // We transpose the settings JSON struct into a real setting update. - match settings.synonyms { - Setting::Set(synonyms) => builder.set_synonyms(synonyms), - Setting::Reset => builder.reset_synonyms(), - Setting::NotSet => (), - } - - let result = builder.execute(|indexing_step| { - let (current, total) = match indexing_step { - RemapDocumentAddition { documents_seen } => (documents_seen, None), - ComputeIdsAndMergeDocuments { documents_seen, total_documents } => { - (documents_seen, Some(total_documents)) - } - IndexDocuments { documents_seen, total_documents } => { - (documents_seen, Some(total_documents)) - } - MergeDataIntoFinalDatabase { databases_seen, total_databases } => { - (databases_seen, Some(total_databases)) - } - }; - let _ = update_status_sender_cloned.send(UpdateStatus::Progressing { - update_id, - meta: UpdateMetaProgress::DocumentsAddition { - step: indexing_step.step(), - total_steps: indexing_step.number_of_steps(), - current, - total, - }, - }); - }); - - match result { - Ok(_count) => wtxn.commit().map_err(Into::into), - Err(e) => Err(e.into()), - } - } - UpdateMeta::Facets(levels) => { - // We must use the write transaction of the update here. - let mut wtxn = index_cloned.write_txn()?; - let mut builder = milli::update::Facets::new(&mut wtxn, &index_cloned); - if let Some(value) = levels.level_group_size { - builder.level_group_size(value); - } - if let Some(value) = levels.min_level_size { - builder.min_level_size(value); - } - match builder.execute() { - Ok(()) => wtxn.commit().map_err(Into::into), - Err(e) => Err(e.into()), - } - } - })(); - - let meta = match result { - Ok(()) => { - format!("valid update content processed in {:.02?}", before_update.elapsed()) - } - Err(e) => format!("error while processing update content: {:?}", e), - }; - - let processed = UpdateStatus::Processed { update_id, meta: meta.clone() }; - let _ = update_status_sender_cloned.send(processed); - - Ok(meta) - }, - )?; - - // The database name will not change. - let db_name = opt.database.file_stem().and_then(|s| s.to_str()).unwrap_or("").to_string(); - let lmdb_path = opt.database.join("data.mdb"); - - // We run and wait on the HTTP server - - // Expose an HTML page to debug the search in a browser - let db_name_cloned = db_name.clone(); - let lmdb_path_cloned = lmdb_path.clone(); - let index_cloned = index.clone(); - let dash_html_route = - warp::filters::method::get().and(warp::filters::path::end()).map(move || { - // We retrieve the database size. - let db_size = - File::open(lmdb_path_cloned.clone()).unwrap().metadata().unwrap().len() as usize; - - // And the number of documents in the database. - let rtxn = index_cloned.read_txn().unwrap(); - let docs_count = index_cloned.clone().number_of_documents(&rtxn).unwrap() as usize; - - IndexTemplate { db_name: db_name_cloned.clone(), db_size, docs_count } - }); - - let update_store_cloned = update_store.clone(); - let lmdb_path_cloned = lmdb_path.clone(); - let index_cloned = index.clone(); - let updates_list_or_html_route = warp::filters::method::get() - .and(warp::header("Accept")) - .and(warp::path!("updates")) - .map(move |header: String| { - let update_store = update_store_cloned.clone(); - let mut updates = update_store - .iter_metas(|processed, aborted, pending| { - let mut updates = Vec::>::new(); - for result in processed { - let (uid, meta) = result?; - updates.push(UpdateStatus::Processed { update_id: uid.get(), meta }); - } - for result in aborted { - let (uid, meta) = result?; - updates.push(UpdateStatus::Aborted { update_id: uid.get(), meta }); - } - for result in pending { - let (uid, meta) = result?; - updates.push(UpdateStatus::Pending { update_id: uid.get(), meta }); - } - Ok(updates) - }) - .unwrap(); - - updates.sort_unstable_by(|s1, s2| s1.update_id().cmp(&s2.update_id()).reverse()); - - if header.contains("text/html") { - // We retrieve the database size. - let db_size = - File::open(lmdb_path_cloned.clone()).unwrap().metadata().unwrap().len() - as usize; - - // And the number of documents in the database. - let rtxn = index_cloned.read_txn().unwrap(); - let docs_count = index_cloned.clone().number_of_documents(&rtxn).unwrap() as usize; - - let template = - UpdatesTemplate { db_name: db_name.clone(), db_size, docs_count, updates }; - Box::new(template) as Box - } else { - Box::new(warp::reply::json(&updates)) - } - }); - - let dash_bulma_route = - warp::filters::method::get().and(warp::path!("bulma.min.css")).map(|| { - Response::builder() - .header("content-type", "text/css; charset=utf-8") - .body(include_str!("../public/bulma.min.css")) - }); - - let dash_bulma_dark_route = - warp::filters::method::get().and(warp::path!("bulma-prefers-dark.min.css")).map(|| { - Response::builder() - .header("content-type", "text/css; charset=utf-8") - .body(include_str!("../public/bulma-prefers-dark.min.css")) - }); - - let dash_style_route = warp::filters::method::get().and(warp::path!("style.css")).map(|| { - Response::builder() - .header("content-type", "text/css; charset=utf-8") - .body(include_str!("../public/style.css")) - }); - - let dash_jquery_route = - warp::filters::method::get().and(warp::path!("jquery-3.4.1.min.js")).map(|| { - Response::builder() - .header("content-type", "application/javascript; charset=utf-8") - .body(include_str!("../public/jquery-3.4.1.min.js")) - }); - - let dash_filesize_route = - warp::filters::method::get().and(warp::path!("filesize.min.js")).map(|| { - Response::builder() - .header("content-type", "application/javascript; charset=utf-8") - .body(include_str!("../public/filesize.min.js")) - }); - - let dash_script_route = warp::filters::method::get().and(warp::path!("script.js")).map(|| { - Response::builder() - .header("content-type", "application/javascript; charset=utf-8") - .body(include_str!("../public/script.js")) - }); - - let updates_script_route = - warp::filters::method::get().and(warp::path!("updates-script.js")).map(|| { - Response::builder() - .header("content-type", "application/javascript; charset=utf-8") - .body(include_str!("../public/updates-script.js")) - }); - - let dash_logo_white_route = - warp::filters::method::get().and(warp::path!("logo-white.svg")).map(|| { - Response::builder() - .header("content-type", "image/svg+xml") - .body(include_str!("../public/logo-white.svg")) - }); - - let dash_logo_black_route = - warp::filters::method::get().and(warp::path!("logo-black.svg")).map(|| { - Response::builder() - .header("content-type", "image/svg+xml") - .body(include_str!("../public/logo-black.svg")) - }); - - #[derive(Debug, Deserialize)] - #[serde(untagged)] - enum UntaggedEither { - Left(L), - Right(R), - } - - impl From> for Either { - fn from(value: UntaggedEither) -> Either { - match value { - UntaggedEither::Left(left) => Either::Left(left), - UntaggedEither::Right(right) => Either::Right(right), - } - } - } - - #[derive(Debug, Deserialize)] - #[serde(deny_unknown_fields)] - #[serde(rename_all = "camelCase")] - struct QueryBody { - query: Option, - filters: Option, - sort: Option, - facet_filters: Option, String>>>, - facet_distribution: Option, - limit: Option, - } - - #[derive(Debug, Serialize)] - #[serde(rename_all = "camelCase")] - struct Answer { - documents: Vec, - number_of_candidates: u64, - facets: BTreeMap>, - } - - let disable_highlighting = opt.disable_highlighting; - let index_cloned = index.clone(); - let query_route = warp::filters::method::post() - .and(warp::path!("query")) - .and(warp::body::json()) - .map(move |query: QueryBody| { - let before_search = Instant::now(); - let index = index_cloned.clone(); - let rtxn = index.read_txn().unwrap(); - - let mut search = index.search(&rtxn); - if let Some(query) = query.query { - search.query(query); - } - - let filters = match query.filters.as_ref() { - Some(condition) if !condition.trim().is_empty() => { - MilliFilter::from_str(condition).unwrap() - } - _otherwise => None, - }; - - let facet_filters = match query.facet_filters.as_ref() { - Some(array) => { - let eithers = array.iter().map(|either| match either { - UntaggedEither::Left(l) => { - Either::Left(l.iter().map(|s| s.as_str()).collect::>()) - } - UntaggedEither::Right(r) => Either::Right(r.as_str()), - }); - MilliFilter::from_array(eithers).unwrap() - } - _otherwise => None, - }; - - let condition = match (filters, facet_filters) { - (Some(filters), Some(facet_filters)) => { - Some(FilterCondition::And(vec![filters.into(), facet_filters.into()])) - } - (Some(condition), None) | (None, Some(condition)) => Some(condition.into()), - _otherwise => None, - }; - - if let Some(condition) = condition { - search.filter(condition.into()); - } - - if let Some(limit) = query.limit { - search.limit(limit); - } - - if let Some(sort) = query.sort { - search.sort_criteria(vec![sort.parse().map_err(SortError::from).unwrap()]); - } - - let SearchResult { matching_words, candidates, documents_ids } = - search.execute().unwrap(); - - let number_of_candidates = candidates.len(); - let facets = if query.facet_distribution == Some(true) { - Some(index.facets_distribution(&rtxn).candidates(candidates).execute().unwrap()) - } else { - None - }; - - let mut documents = Vec::new(); - let fields_ids_map = index.fields_ids_map(&rtxn).unwrap(); - let displayed_fields = match index.displayed_fields_ids(&rtxn).unwrap() { - Some(fields) => fields, - None => fields_ids_map.iter().map(|(id, _)| id).collect(), - }; - let attributes_to_highlight = match index.searchable_fields(&rtxn).unwrap() { - Some(fields) => fields.into_iter().map(String::from).collect(), - None => fields_ids_map.iter().map(|(_, name)| name).map(String::from).collect(), - }; - - let mut matcher_builder = MatcherBuilder::new( - matching_words, - TokenizerBuilder::default().create_char_map(true).build(), - ); - matcher_builder.highlight_prefix("".to_string()); - matcher_builder.highlight_suffix("".to_string()); - let highlighter = Highlighter::new(matcher_builder); - for (_id, obkv) in index.documents(&rtxn, documents_ids).unwrap() { - let mut object = obkv_to_json(&displayed_fields, &fields_ids_map, obkv).unwrap(); - if !disable_highlighting { - highlighter.highlight_record(&mut object, &attributes_to_highlight); - } - - documents.push(object); - } - - let answer = - Answer { documents, number_of_candidates, facets: facets.unwrap_or_default() }; - - Response::builder() - .header("Content-Type", "application/json") - .header("Time-Ms", before_search.elapsed().as_millis().to_string()) - .body(serde_json::to_string(&answer).unwrap()) - }); - - let index_cloned = index.clone(); - let document_route = warp::filters::method::get().and(warp::path!("document" / String)).map( - move |id: String| { - let index = index_cloned.clone(); - let rtxn = index.read_txn().unwrap(); - - let external_documents_ids = index.external_documents_ids(&rtxn).unwrap(); - let fields_ids_map = index.fields_ids_map(&rtxn).unwrap(); - let displayed_fields = match index.displayed_fields_ids(&rtxn).unwrap() { - Some(fields) => fields, - None => fields_ids_map.iter().map(|(id, _)| id).collect(), - }; - - match external_documents_ids.get(&id) { - Some(document_id) => { - let document_id = document_id as u32; - let (_, obkv) = - index.documents(&rtxn, Some(document_id)).unwrap().pop().unwrap(); - let document = obkv_to_json(&displayed_fields, &fields_ids_map, obkv).unwrap(); - - Response::builder() - .header("Content-Type", "application/json") - .body(serde_json::to_string(&document).unwrap()) - } - None => Response::builder() - .status(404) - .body(format!("Document with id {:?} not found.", id)), - } - }, - ); - - async fn buf_stream( - update_store: Arc>, - update_status_sender: broadcast::Sender< - UpdateStatus, - >, - update_method: Option, - format: String, - encoding: Option, - mut stream: impl futures::Stream> + Unpin, - ) -> Result { - let file = tokio::task::block_in_place(tempfile::tempfile).unwrap(); - let mut file = TFile::from_std(file); - - while let Some(result) = stream.next().await { - let mut bytes = Vec::new(); - result.unwrap().reader().read_to_end(&mut bytes).unwrap(); - file.write_all(&bytes[..]).await.unwrap(); - } - - let file = file.into_std().await; - let mmap = unsafe { memmap2::Mmap::map(&file).expect("can't map file") }; - - let method = match update_method.as_deref() { - Some("replace") => String::from("replace"), - Some("update") => String::from("update"), - _ => String::from("replace"), - }; - - let meta = UpdateMeta::DocumentsAddition { method, format, encoding }; - let update_id = update_store.register_update(&meta, &mmap[..]).unwrap(); - let _ = update_status_sender.send(UpdateStatus::Pending { update_id, meta }); - eprintln!("update {} registered", update_id); - - Ok(warp::reply()) - } - - #[derive(Deserialize)] - struct QueryUpdate { - method: Option, - } - - let update_store_cloned = update_store.clone(); - let update_status_sender_cloned = update_status_sender.clone(); - let indexing_route = warp::filters::method::post() - .and(warp::path!("documents")) - .and(warp::header::header("content-type")) - .and(warp::header::optional::("content-encoding")) - .and(warp::query::query()) - .and(warp::body::stream()) - .and_then(move |content_type: String, content_encoding, params: QueryUpdate, stream| { - let format = match content_type.as_str() { - "text/csv" => "csv", - "application/json" => "json", - "application/x-ndjson" => "jsonl", - otherwise => panic!("invalid update format: {}", otherwise), - }; - - buf_stream( - update_store_cloned.clone(), - update_status_sender_cloned.clone(), - params.method, - format.to_string(), - content_encoding, - stream, - ) - }); - - let update_store_cloned = update_store.clone(); - let update_status_sender_cloned = update_status_sender.clone(); - let clearing_route = - warp::filters::method::post().and(warp::path!("clear-documents")).map(move || { - let meta = UpdateMeta::ClearDocuments; - let update_id = update_store_cloned.register_update(&meta, &[]).unwrap(); - let _ = update_status_sender_cloned.send(UpdateStatus::Pending { update_id, meta }); - eprintln!("update {} registered", update_id); - Ok(warp::reply()) - }); - - let update_store_cloned = update_store.clone(); - let update_status_sender_cloned = update_status_sender.clone(); - let change_settings_route = warp::filters::method::post() - .and(warp::path!("settings")) - .and(warp::body::json()) - .map(move |settings: Settings| { - let meta = UpdateMeta::Settings(settings); - let update_id = update_store_cloned.register_update(&meta, &[]).unwrap(); - let _ = update_status_sender_cloned.send(UpdateStatus::Pending { update_id, meta }); - eprintln!("update {} registered", update_id); - Ok(warp::reply()) - }); - - let update_store_cloned = update_store.clone(); - let update_status_sender_cloned = update_status_sender.clone(); - let change_facet_levels_route = warp::filters::method::post() - .and(warp::path!("facet-level-sizes")) - .and(warp::body::json()) - .map(move |levels: Facets| { - let meta = UpdateMeta::Facets(levels); - let update_id = update_store_cloned.register_update(&meta, &[]).unwrap(); - let _ = update_status_sender_cloned.send(UpdateStatus::Pending { update_id, meta }); - eprintln!("update {} registered", update_id); - warp::reply() - }); - - let update_store_cloned = update_store.clone(); - let update_status_sender_cloned = update_status_sender.clone(); - let abort_update_id_route = warp::filters::method::delete() - .and(warp::path!("update" / u64)) - .map(move |update_id: u64| { - if let Some(meta) = update_store_cloned.abort_update(update_id).unwrap() { - let _ = update_status_sender_cloned.send(UpdateStatus::Aborted { update_id, meta }); - eprintln!("update {} aborted", update_id); - } - warp::reply() - }); - - let update_store_cloned = update_store.clone(); - let update_status_sender_cloned = update_status_sender.clone(); - let abort_pending_updates_route = - warp::filters::method::delete().and(warp::path!("updates")).map(move || { - let updates = update_store_cloned.abort_pendings().unwrap(); - for (update_id, meta) in updates { - let _ = update_status_sender_cloned.send(UpdateStatus::Aborted { update_id, meta }); - eprintln!("update {} aborted", update_id); - } - warp::reply() - }); - - let update_ws_route = - warp::ws().and(warp::path!("updates" / "ws")).map(move |ws: warp::ws::Ws| { - // And then our closure will be called when it completes... - let update_status_receiver = update_status_sender.subscribe(); - ws.on_upgrade(|websocket| { - // Just echo all updates messages... - BroadcastStream::new(update_status_receiver) - .flat_map(|result| match result { - Ok(status) => { - let msg = serde_json::to_string(&status).unwrap(); - stream::iter(Some(Ok(Message::text(msg)))) - } - Err(e) => { - eprintln!("channel error: {:?}", e); - stream::iter(None) - } - }) - .forward(websocket) - .map(|result| { - if let Err(e) = result { - eprintln!("websocket error: {:?}", e); - } - }) - }) - }); - - let die_route = warp::filters::method::get().and(warp::path!("die")).map(move || { - eprintln!("Killed by an HTTP request received on the die route"); - std::process::exit(0); - #[allow(unreachable_code)] - warp::reply() - }); - - let routes = dash_html_route - .or(updates_list_or_html_route) - .or(dash_bulma_route) - .or(dash_bulma_dark_route) - .or(dash_style_route) - .or(dash_jquery_route) - .or(dash_filesize_route) - .or(dash_script_route) - .or(updates_script_route) - .or(dash_logo_white_route) - .or(dash_logo_black_route) - .or(query_route) - .or(document_route) - .or(indexing_route) - .or(abort_update_id_route) - .or(abort_pending_updates_route) - .or(clearing_route) - .or(change_settings_route) - .or(change_facet_levels_route) - .or(update_ws_route) - .or(die_route); - - let addr = SocketAddr::from_str(&opt.http_listen_addr)?; - warp::serve(routes).run(addr).await; - Ok(()) -} - -fn documents_from_jsonl(reader: impl Read) -> anyhow::Result> { - let mut documents = DocumentsBatchBuilder::new(Vec::new()); - let reader = BufReader::new(reader); - - for result in serde_json::Deserializer::from_reader(reader).into_iter::() { - let object = result?; - documents.append_json_object(&object)?; - } - - documents.into_inner().map_err(Into::into) -} - -fn documents_from_json(reader: impl Read) -> anyhow::Result> { - let mut documents = DocumentsBatchBuilder::new(Vec::new()); - - documents.append_json_array(reader)?; - - documents.into_inner().map_err(Into::into) -} - -fn documents_from_csv(reader: impl Read) -> anyhow::Result> { - let csv = csv::Reader::from_reader(reader); - - let mut documents = DocumentsBatchBuilder::new(Vec::new()); - documents.append_csv(csv)?; - - documents.into_inner().map_err(Into::into) -} - -#[cfg(test)] -mod tests { - use maplit::{btreeset, hashmap, hashset}; - use milli::update::Setting; - use serde_test::{assert_tokens, Token}; - - use crate::Settings; - - #[test] - fn serde_settings_set() { - let settings = Settings { - displayed_attributes: Setting::Set(vec!["name".to_string()]), - searchable_attributes: Setting::Set(vec!["age".to_string()]), - filterable_attributes: Setting::Set(hashset! { "age".to_string() }), - sortable_attributes: Setting::Set(hashset! { "age".to_string() }), - criteria: Setting::Set(vec!["age:asc".to_string()]), - stop_words: Setting::Set(btreeset! { "and".to_string() }), - synonyms: Setting::Set(hashmap! { "alex".to_string() => vec!["alexey".to_string()] }), - }; - - assert_tokens( - &settings, - &[ - Token::Struct { name: "Settings", len: 7 }, - Token::Str("displayedAttributes"), - Token::Some, - Token::Seq { len: Some(1) }, - Token::Str("name"), - Token::SeqEnd, - Token::Str("searchableAttributes"), - Token::Some, - Token::Seq { len: Some(1) }, - Token::Str("age"), - Token::SeqEnd, - Token::Str("filterableAttributes"), - Token::Some, - Token::Seq { len: Some(1) }, - Token::Str("age"), - Token::SeqEnd, - Token::Str("sortableAttributes"), - Token::Some, - Token::Seq { len: Some(1) }, - Token::Str("age"), - Token::SeqEnd, - Token::Str("criteria"), - Token::Some, - Token::Seq { len: Some(1) }, - Token::Str("age:asc"), - Token::SeqEnd, - Token::Str("stopWords"), - Token::Some, - Token::Seq { len: Some(1) }, - Token::Str("and"), - Token::SeqEnd, - Token::Str("synonyms"), - Token::Some, - Token::Map { len: Some(1) }, - Token::Str("alex"), - Token::Seq { len: Some(1) }, - Token::Str("alexey"), - Token::SeqEnd, - Token::MapEnd, - Token::StructEnd, - ], - ); - } - - #[test] - fn serde_settings_reset() { - let settings = Settings { - displayed_attributes: Setting::Reset, - searchable_attributes: Setting::Reset, - filterable_attributes: Setting::Reset, - sortable_attributes: Setting::Reset, - criteria: Setting::Reset, - stop_words: Setting::Reset, - synonyms: Setting::Reset, - }; - - assert_tokens( - &settings, - &[ - Token::Struct { name: "Settings", len: 7 }, - Token::Str("displayedAttributes"), - Token::None, - Token::Str("searchableAttributes"), - Token::None, - Token::Str("filterableAttributes"), - Token::None, - Token::Str("sortableAttributes"), - Token::None, - Token::Str("criteria"), - Token::None, - Token::Str("stopWords"), - Token::None, - Token::Str("synonyms"), - Token::None, - Token::StructEnd, - ], - ); - } - - #[test] - fn serde_settings_notset() { - let settings = Settings { - displayed_attributes: Setting::NotSet, - searchable_attributes: Setting::NotSet, - filterable_attributes: Setting::NotSet, - sortable_attributes: Setting::NotSet, - criteria: Setting::NotSet, - stop_words: Setting::NotSet, - synonyms: Setting::NotSet, - }; - - assert_tokens(&settings, &[Token::Struct { name: "Settings", len: 0 }, Token::StructEnd]); - } -} diff --git a/http-ui/src/update_store.rs b/http-ui/src/update_store.rs deleted file mode 100644 index bbbff25c8..000000000 --- a/http-ui/src/update_store.rs +++ /dev/null @@ -1,362 +0,0 @@ -#![allow(unused)] - -use std::path::Path; -use std::sync::Arc; - -use crossbeam_channel::Sender; -use heed::types::{ByteSlice, DecodeIgnore, OwnedType, SerdeJson}; -use heed::{Database, Env, EnvOpenOptions}; -use milli::heed; -use serde::{Deserialize, Serialize}; - -pub type BEU64 = heed::zerocopy::U64; - -#[derive(Clone)] -pub struct UpdateStore { - env: Env, - pending_meta: Database, SerdeJson>, - pending: Database, ByteSlice>, - processed_meta: Database, SerdeJson>, - aborted_meta: Database, SerdeJson>, - notification_sender: Sender<()>, -} - -pub trait UpdateHandler { - fn handle_update(&mut self, update_id: u64, meta: M, content: &[u8]) -> heed::Result; -} - -impl UpdateHandler for F -where - F: FnMut(u64, M, &[u8]) -> heed::Result + Send + 'static, -{ - fn handle_update(&mut self, update_id: u64, meta: M, content: &[u8]) -> heed::Result { - self(update_id, meta, content) - } -} - -impl UpdateStore { - pub fn open( - mut options: EnvOpenOptions, - path: P, - mut update_handler: U, - ) -> heed::Result>> - where - P: AsRef, - U: UpdateHandler + Send + 'static, - M: for<'a> Deserialize<'a>, - N: Serialize, - { - options.max_dbs(4); - let env = options.open(path)?; - let pending_meta = env.create_database(Some("pending-meta"))?; - let pending = env.create_database(Some("pending"))?; - let processed_meta = env.create_database(Some("processed-meta"))?; - let aborted_meta = env.create_database(Some("aborted-meta"))?; - - let (notification_sender, notification_receiver) = crossbeam_channel::bounded(1); - // Send a first notification to trigger the process. - let _ = notification_sender.send(()); - - let update_store = Arc::new(UpdateStore { - env, - pending, - pending_meta, - processed_meta, - aborted_meta, - notification_sender, - }); - - let update_store_cloned = update_store.clone(); - std::thread::spawn(move || { - // Block and wait for something to process. - for () in notification_receiver { - loop { - match update_store_cloned.process_pending_update(&mut update_handler) { - Ok(Some(_)) => (), - Ok(None) => break, - Err(e) => eprintln!("error while processing update: {}", e), - } - } - } - }); - - Ok(update_store) - } - - /// Returns the new biggest id to use to store the new update. - fn new_update_id(&self, txn: &heed::RoTxn) -> heed::Result { - let last_pending = - self.pending_meta.remap_data_type::().last(txn)?.map(|(k, _)| k.get()); - - let last_processed = - self.processed_meta.remap_data_type::().last(txn)?.map(|(k, _)| k.get()); - - let last_aborted = - self.aborted_meta.remap_data_type::().last(txn)?.map(|(k, _)| k.get()); - - let last_update_id = - [last_pending, last_processed, last_aborted].iter().copied().flatten().max(); - - match last_update_id { - Some(last_id) => Ok(last_id + 1), - None => Ok(0), - } - } - - /// Registers the update content in the pending store and the meta - /// into the pending-meta store. Returns the new unique update id. - pub fn register_update(&self, meta: &M, content: &[u8]) -> heed::Result - where - M: Serialize, - { - let mut wtxn = self.env.write_txn()?; - - // We ask the update store to give us a new update id, this is safe, - // no other update can have the same id because we use a write txn before - // asking for the id and registering it so other update registering - // will be forced to wait for a new write txn. - let update_id = self.new_update_id(&wtxn)?; - let update_key = BEU64::new(update_id); - - self.pending_meta.put(&mut wtxn, &update_key, meta)?; - self.pending.put(&mut wtxn, &update_key, content)?; - - wtxn.commit()?; - - if let Err(e) = self.notification_sender.try_send(()) { - assert!(!e.is_disconnected(), "update notification channel is disconnected"); - } - - Ok(update_id) - } - - /// Executes the user provided function on the next pending update (the one with the lowest id). - /// This is asynchronous as it let the user process the update with a read-only txn and - /// only writing the result meta to the processed-meta store *after* it has been processed. - fn process_pending_update(&self, handler: &mut U) -> heed::Result> - where - U: UpdateHandler, - M: for<'a> Deserialize<'a>, - N: Serialize, - { - // Create a read transaction to be able to retrieve the pending update in order. - let rtxn = self.env.read_txn()?; - let first_meta = self.pending_meta.first(&rtxn)?; - - // If there is a pending update we process and only keep - // a reader while processing it, not a writer. - match first_meta { - Some((first_id, first_meta)) => { - let first_content = - self.pending.get(&rtxn, &first_id)?.expect("associated update content"); - - // Process the pending update using the provided user function. - let new_meta = handler.handle_update(first_id.get(), first_meta, first_content)?; - drop(rtxn); - - // Once the pending update have been successfully processed - // we must remove the content from the pending stores and - // write the *new* meta to the processed-meta store and commit. - let mut wtxn = self.env.write_txn()?; - self.pending_meta.delete(&mut wtxn, &first_id)?; - self.pending.delete(&mut wtxn, &first_id)?; - self.processed_meta.put(&mut wtxn, &first_id, &new_meta)?; - wtxn.commit()?; - - Ok(Some((first_id.get(), new_meta))) - } - None => Ok(None), - } - } - - /// The id and metadata of the update that is currently being processed, - /// `None` if no update is being processed. - pub fn processing_update(&self) -> heed::Result> - where - M: for<'a> Deserialize<'a>, - { - let rtxn = self.env.read_txn()?; - match self.pending_meta.first(&rtxn)? { - Some((key, meta)) => Ok(Some((key.get(), meta))), - None => Ok(None), - } - } - - /// Execute the user defined function with the meta-store iterators, the first - /// iterator is the *processed* meta one, the second the *aborted* meta one - /// and, the last is the *pending* meta one. - pub fn iter_metas(&self, mut f: F) -> heed::Result - where - M: for<'a> Deserialize<'a>, - N: for<'a> Deserialize<'a>, - F: for<'a> FnMut( - heed::RoIter<'a, OwnedType, SerdeJson>, - heed::RoIter<'a, OwnedType, SerdeJson>, - heed::RoIter<'a, OwnedType, SerdeJson>, - ) -> heed::Result, - { - let rtxn = self.env.read_txn()?; - - // We get the pending, processed and aborted meta iterators. - let processed_iter = self.processed_meta.iter(&rtxn)?; - let aborted_iter = self.aborted_meta.iter(&rtxn)?; - let pending_iter = self.pending_meta.iter(&rtxn)?; - - // We execute the user defined function with both iterators. - (f)(processed_iter, aborted_iter, pending_iter) - } - - /// Returns the update associated meta or `None` if the update doesn't exist. - pub fn meta(&self, update_id: u64) -> heed::Result>> - where - M: for<'a> Deserialize<'a>, - N: for<'a> Deserialize<'a>, - { - let rtxn = self.env.read_txn()?; - let key = BEU64::new(update_id); - - if let Some(meta) = self.pending_meta.get(&rtxn, &key)? { - return Ok(Some(UpdateStatusMeta::Pending(meta))); - } - - if let Some(meta) = self.processed_meta.get(&rtxn, &key)? { - return Ok(Some(UpdateStatusMeta::Processed(meta))); - } - - if let Some(meta) = self.aborted_meta.get(&rtxn, &key)? { - return Ok(Some(UpdateStatusMeta::Aborted(meta))); - } - - Ok(None) - } - - /// Aborts an update, an aborted update content is deleted and - /// the meta of it is moved into the aborted updates database. - /// - /// Trying to abort an update that is currently being processed, an update - /// that as already been processed or which doesn't actually exist, will - /// return `None`. - pub fn abort_update(&self, update_id: u64) -> heed::Result> - where - M: Serialize + for<'a> Deserialize<'a>, - { - let mut wtxn = self.env.write_txn()?; - let key = BEU64::new(update_id); - - // We cannot abort an update that is currently being processed. - if self.pending_meta.first(&wtxn)?.map(|(key, _)| key.get()) == Some(update_id) { - return Ok(None); - } - - let meta = match self.pending_meta.get(&wtxn, &key)? { - Some(meta) => meta, - None => return Ok(None), - }; - - self.aborted_meta.put(&mut wtxn, &key, &meta)?; - self.pending_meta.delete(&mut wtxn, &key)?; - self.pending.delete(&mut wtxn, &key)?; - - wtxn.commit()?; - - Ok(Some(meta)) - } - - /// Aborts all the pending updates, and not the one being currently processed. - /// Returns the update metas and ids that were successfully aborted. - pub fn abort_pendings(&self) -> heed::Result> - where - M: Serialize + for<'a> Deserialize<'a>, - { - let mut wtxn = self.env.write_txn()?; - let mut aborted_updates = Vec::new(); - - // We skip the first pending update as it is currently being processed. - for result in self.pending_meta.iter(&wtxn)?.skip(1) { - let (key, meta) = result?; - let id = key.get(); - aborted_updates.push((id, meta)); - } - - for (id, meta) in &aborted_updates { - let key = BEU64::new(*id); - self.aborted_meta.put(&mut wtxn, &key, &meta)?; - self.pending_meta.delete(&mut wtxn, &key)?; - self.pending.delete(&mut wtxn, &key)?; - } - - wtxn.commit()?; - - Ok(aborted_updates) - } -} - -#[derive(Debug, PartialEq, Eq, Hash)] -pub enum UpdateStatusMeta { - Pending(M), - Processed(N), - Aborted(M), -} - -#[cfg(test)] -mod tests { - use std::thread; - use std::time::{Duration, Instant}; - - use super::*; - - #[test] - fn simple() { - let dir = tempfile::tempdir().unwrap(); - let options = EnvOpenOptions::new(); - let update_store = UpdateStore::open(options, dir, |_id, meta: String, _content: &_| { - Ok(meta + " processed") - }) - .unwrap(); - - let meta = String::from("kiki"); - let update_id = update_store.register_update(&meta, &[]).unwrap(); - - thread::sleep(Duration::from_millis(100)); - - let meta = update_store.meta(update_id).unwrap().unwrap(); - assert_eq!(meta, UpdateStatusMeta::Processed(format!("kiki processed"))); - } - - #[test] - #[ignore] - fn long_running_update() { - let dir = tempfile::tempdir().unwrap(); - let options = EnvOpenOptions::new(); - let update_store = UpdateStore::open(options, dir, |_id, meta: String, _content: &_| { - thread::sleep(Duration::from_millis(400)); - Ok(meta + " processed") - }) - .unwrap(); - - let before_register = Instant::now(); - - let meta = String::from("kiki"); - let update_id_kiki = update_store.register_update(&meta, &[]).unwrap(); - assert!(before_register.elapsed() < Duration::from_millis(200)); - - let meta = String::from("coco"); - let update_id_coco = update_store.register_update(&meta, &[]).unwrap(); - assert!(before_register.elapsed() < Duration::from_millis(200)); - - let meta = String::from("cucu"); - let update_id_cucu = update_store.register_update(&meta, &[]).unwrap(); - assert!(before_register.elapsed() < Duration::from_millis(200)); - - thread::sleep(Duration::from_millis(400 * 3 + 100)); - - let meta = update_store.meta(update_id_kiki).unwrap().unwrap(); - assert_eq!(meta, UpdateStatusMeta::Processed(format!("kiki processed"))); - - let meta = update_store.meta(update_id_coco).unwrap().unwrap(); - assert_eq!(meta, UpdateStatusMeta::Processed(format!("coco processed"))); - - let meta = update_store.meta(update_id_cucu).unwrap().unwrap(); - assert_eq!(meta, UpdateStatusMeta::Processed(format!("cucu processed"))); - } -} diff --git a/http-ui/templates/index.html b/http-ui/templates/index.html deleted file mode 100644 index 49fb0eb2b..000000000 --- a/http-ui/templates/index.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - {{ db_name }} | The milli engine - - - -
-
-
- -
-
- milli logo in white - milli logo in black -
-
- - -
-
-
- -
-
- - - -
-
- -
- -
- -
-
    - -
-
- - - - - - diff --git a/http-ui/templates/updates.html b/http-ui/templates/updates.html deleted file mode 100644 index 276bee40c..000000000 --- a/http-ui/templates/updates.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - {{ db_name }} | Updates - - - -
-
-
- - -
-
- milli logo in white - milli logo in black -
-
-
- - -
-
-
- -
-
    - - {% for update in updates %} - {% match update %} - {% when UpdateStatus::Pending with { update_id, meta } %} -
  1. -
      -
    1. -
      update id
      {{ update_id }}
      -
      update status
      pending
      -
    2. -
    -
  2. - {% when UpdateStatus::Processed with { update_id, meta } %} -
  3. -
      -
    1. -
      update id
      {{ update_id }}
      -
      update status
      {{ meta }}
      -
    2. -
    -
  4. - {% when UpdateStatus::Aborted with { update_id, meta } %} -
  5. -
      -
    1. -
      update id
      {{ update_id }}
      -
      update status
      aborted
      -
    2. -
    -
  6. - {% else %} - {% endmatch %} - {% endfor %} - -
-
- - - - - - diff --git a/infos/Cargo.toml b/infos/Cargo.toml deleted file mode 100644 index 23d21f042..000000000 --- a/infos/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "infos" -version = "0.33.4" -authors = ["Clément Renault "] -edition = "2018" -publish = false - -[dependencies] -anyhow = "1.0.56" -byte-unit = { version = "4.0.14", default-features = false, features = ["std"] } -csv = "1.1.6" -milli = { path = "../milli" } -mimalloc = { version = "0.1.29", default-features = false } -roaring = "0.9.0" -serde_json = "1.0.79" -stderrlog = "0.5.1" -structopt = { version = "0.3.26", default-features = false } diff --git a/infos/src/main.rs b/infos/src/main.rs deleted file mode 100644 index f5fdcf94a..000000000 --- a/infos/src/main.rs +++ /dev/null @@ -1,1221 +0,0 @@ -use std::fmt::Write as _; -use std::path::PathBuf; -use std::{fmt, io, str}; - -use anyhow::Context; -use byte_unit::Byte; -use heed::EnvOpenOptions; -use milli::facet::FacetType; -use milli::index::db_name::*; -use milli::{heed, FieldId, Index}; -use structopt::StructOpt; -use Command::*; - -#[global_allocator] -static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; - -const ALL_DATABASE_NAMES: &[&str] = &[ - MAIN, - WORD_DOCIDS, - WORD_PREFIX_DOCIDS, - DOCID_WORD_POSITIONS, - WORD_PAIR_PROXIMITY_DOCIDS, - WORD_PREFIX_PAIR_PROXIMITY_DOCIDS, - WORD_POSITION_DOCIDS, - WORD_PREFIX_POSITION_DOCIDS, - FIELD_ID_WORD_COUNT_DOCIDS, - FACET_ID_F64_DOCIDS, - FACET_ID_STRING_DOCIDS, - FIELD_ID_DOCID_FACET_F64S, - FIELD_ID_DOCID_FACET_STRINGS, - EXACT_WORD_DOCIDS, - EXACT_WORD_PREFIX_DOCIDS, - DOCUMENTS, -]; - -const POSTINGS_DATABASE_NAMES: &[&str] = &[ - WORD_DOCIDS, - WORD_PREFIX_DOCIDS, - DOCID_WORD_POSITIONS, - WORD_PAIR_PROXIMITY_DOCIDS, - WORD_PREFIX_PAIR_PROXIMITY_DOCIDS, -]; - -#[derive(Debug, StructOpt)] -/// A stats fetcher for milli. -pub struct Opt { - /// The database path where the database is located. - /// It is created if it doesn't already exist. - #[structopt(long = "db", parse(from_os_str))] - database: PathBuf, - - /// The maximum size the database can take on disk. It is recommended to specify - /// the whole disk space (value must be a multiple of a page size). - #[structopt(long = "db-size", default_value = "100 GiB")] - database_size: Byte, - - /// Verbose mode (-v, -vv, -vvv, etc.) - #[structopt(short, long, parse(from_occurrences))] - verbose: usize, - - #[structopt(subcommand)] - command: Command, -} - -#[derive(Debug, StructOpt)] -enum Command { - /// Outputs a CSV of the most frequent words of this index. - /// - /// `word` are displayed and ordered by frequency. - /// `document_frequency` defines the number of documents which contains the word. - MostCommonWords { - /// The maximum number of frequencies to return. - #[structopt(default_value = "10")] - limit: usize, - }, - - /// Outputs a CSV with the biggest entries of the database. - BiggestValues { - /// The maximum number of sizes to return. - #[structopt(default_value = "10")] - limit: usize, - }, - - /// Outputs a CSV with the documents ids where the given words appears. - WordsDocids { - /// Display the whole documents ids in details. - #[structopt(long)] - full_display: bool, - - /// The words to display the documents ids of. - words: Vec, - }, - - /// Outputs a CSV with the documents ids where the given words prefixes appears. - WordsPrefixesDocids { - /// Display the whole documents ids in details. - #[structopt(long)] - full_display: bool, - - /// The prefixes to display the documents ids of. - prefixes: Vec, - }, - - /// Outputs a CSV with the documents ids along with the facet numbers where it appears. - FacetNumbersDocids { - /// Display the whole documents ids in details. - #[structopt(long)] - full_display: bool, - - /// The field name in the document. - field_name: String, - }, - - /// Outputs a CSV with the documents ids along with the facet strings where it appears. - FacetStringsDocids { - /// Display the whole documents ids in details. - #[structopt(long)] - full_display: bool, - - /// The field name in the document. - field_name: String, - }, - - /// Outputs a CSV with the documents ids along with the word level positions where it appears. - WordsLevelPositionsDocids { - /// Display the whole documents ids in details. - #[structopt(long)] - full_display: bool, - - /// Words appearing in the documents. - words: Vec, - }, - - /// Outputs a CSV with the documents ids along with - /// the word prefix level positions where it appears. - WordPrefixesLevelPositionsDocids { - /// Display the whole documents ids in details. - #[structopt(long)] - full_display: bool, - - /// Prefixes of words appearing in the documents. - prefixes: Vec, - }, - - /// Outputs a CSV with the documents ids along with - /// the field id and the word count where it appears. - FieldIdWordCountDocids { - /// Display the whole documents ids in details. - #[structopt(long)] - full_display: bool, - - /// The field name in the document. - field_name: String, - }, - - /// Outputs a CSV with the documents ids, words and the positions where this word appears. - DocidsWordsPositions { - /// Display the whole positions in detail. - #[structopt(long)] - full_display: bool, - - /// If defined, only retrieve the documents that corresponds to these internal ids. - internal_documents_ids: Vec, - }, - - /// Outputs some facets numbers statistics for the given facet name. - FacetNumberStats { - /// The field name in the document. - field_name: String, - }, - - /// Outputs the average number of *different* words by document. - AverageNumberOfWordsByDoc, - - /// Outputs the average number of positions for each document words. - AverageNumberOfPositionsByWord, - - /// Outputs some statistics about the given database (e.g. median, quartiles, - /// percentiles, minimum, maximum, averge, key size, value size). - DatabaseStats { - #[structopt(possible_values = POSTINGS_DATABASE_NAMES)] - database: String, - }, - - /// Outputs the size in bytes of the specified databases names. - SizeOfDatabase { - /// The name of the database to measure the size of, if not specified it's equivalent - /// to specifying all the databases names. - #[structopt(possible_values = ALL_DATABASE_NAMES)] - databases: Vec, - }, - - /// Outputs a CSV with the proximities for the two specidied words and - /// the documents ids where these relations appears. - /// - /// `word1`, `word2` defines the word pair specified *in this specific order*. - /// `proximity` defines the proximity between the two specified words. - /// `documents_ids` defines the documents ids where the relation appears. - WordPairProximitiesDocids { - /// Display the whole documents ids in details. - #[structopt(long)] - full_display: bool, - - /// First word of the word pair. - word1: String, - - /// Second word of the word pair. - word2: String, - }, - - /// Outputs a CSV with the proximities for the two specified words and - /// the documents ids where these relations appears. - /// - /// `word1`, `prefix` defines the word pair specified *in this specific order*. - /// `proximity` defines the proximity between the two specified words. - /// `documents_ids` defines the documents ids where the relation appears. - WordPrefixPairProximitiesDocids { - /// Display the whole documents ids in details. - #[structopt(long)] - full_display: bool, - - /// First word of the word pair. - word1: String, - - /// Second word of the word pair. - prefix: String, - }, - - /// Outputs the words FST to standard output. - /// - /// One can use the FST binary helper to dissect and analyze it, - /// you can install it using `cargo install fst-bin`. - ExportWordsFst, - - /// Outputs the words prefix FST to standard output. - /// - /// One can use the FST binary helper to dissect and analyze it, - /// you can install it using `cargo install fst-bin`. - ExportWordsPrefixFst, - - /// Outputs the documents as JSON lines to the standard output. - /// - /// All of the fields are extracted, not just the displayed ones. - ExportDocuments { - /// If defined, only retrieve the documents that corresponds to these internal ids. - internal_documents_ids: Vec, - }, -} - -fn main() -> anyhow::Result<()> { - let opt = Opt::from_args(); - - stderrlog::new() - .verbosity(opt.verbose) - .show_level(false) - .timestamp(stderrlog::Timestamp::Off) - .init()?; - - let mut options = EnvOpenOptions::new(); - options.map_size(opt.database_size.get_bytes() as usize); - - // Return an error if the database does not exist. - if !opt.database.exists() { - anyhow::bail!("The database ({}) does not exist.", opt.database.display()); - } - - // Open the LMDB database. - let index = Index::new(options, opt.database)?; - let rtxn = index.read_txn()?; - - match opt.command { - MostCommonWords { limit } => most_common_words(&index, &rtxn, limit), - BiggestValues { limit } => biggest_value_sizes(&index, &rtxn, limit), - WordsDocids { full_display, words } => words_docids(&index, &rtxn, !full_display, words), - WordsPrefixesDocids { full_display, prefixes } => { - words_prefixes_docids(&index, &rtxn, !full_display, prefixes) - } - FacetNumbersDocids { full_display, field_name } => { - facet_values_docids(&index, &rtxn, !full_display, FacetType::Number, field_name) - } - FacetStringsDocids { full_display, field_name } => { - facet_values_docids(&index, &rtxn, !full_display, FacetType::String, field_name) - } - WordsLevelPositionsDocids { full_display, words } => { - words_positions_docids(&index, &rtxn, !full_display, words) - } - WordPrefixesLevelPositionsDocids { full_display, prefixes } => { - word_prefixes_positions_docids(&index, &rtxn, !full_display, prefixes) - } - FieldIdWordCountDocids { full_display, field_name } => { - field_id_word_count_docids(&index, &rtxn, !full_display, field_name) - } - DocidsWordsPositions { full_display, internal_documents_ids } => { - docids_words_positions(&index, &rtxn, !full_display, internal_documents_ids) - } - FacetNumberStats { field_name } => facet_number_stats(&index, &rtxn, field_name), - AverageNumberOfWordsByDoc => average_number_of_words_by_doc(&index, &rtxn), - AverageNumberOfPositionsByWord => average_number_of_positions_by_word(&index, &rtxn), - SizeOfDatabase { databases } => size_of_databases(&index, &rtxn, databases), - DatabaseStats { database } => database_stats(&index, &rtxn, &database), - WordPairProximitiesDocids { full_display, word1, word2 } => { - word_pair_proximities_docids(&index, &rtxn, !full_display, word1, word2) - } - WordPrefixPairProximitiesDocids { full_display, word1, prefix } => { - word_prefix_pair_proximities_docids(&index, &rtxn, !full_display, word1, prefix) - } - ExportWordsFst => export_words_fst(&index, &rtxn), - ExportWordsPrefixFst => export_words_prefix_fst(&index, &rtxn), - ExportDocuments { internal_documents_ids } => { - export_documents(&index, &rtxn, internal_documents_ids) - } - } -} - -fn most_common_words(index: &Index, rtxn: &heed::RoTxn, limit: usize) -> anyhow::Result<()> { - use std::cmp::Reverse; - use std::collections::BinaryHeap; - - let mut heap = BinaryHeap::with_capacity(limit + 1); - for result in index.word_docids.iter(rtxn)? { - if limit == 0 { - break; - } - let (word, docids) = result?; - heap.push((Reverse(docids.len()), word)); - if heap.len() > limit { - heap.pop(); - } - } - - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["word", "document_frequency"])?; - - for (Reverse(document_frequency), word) in heap.into_sorted_vec() { - wtr.write_record(&[word, &document_frequency.to_string()])?; - } - - Ok(wtr.flush()?) -} - -/// Helper function that converts the facet value key to a unique type -/// that can be used for log or display purposes. -fn facet_values_iter<'txn, KC: 'txn, DC: 'txn>( - rtxn: &'txn heed::RoTxn, - db: heed::Database, - field_id: FieldId, -) -> heed::Result> + 'txn>> -where - KC: heed::BytesDecode<'txn>, - DC: heed::BytesDecode<'txn>, -{ - let iter = db - .remap_key_type::() - .prefix_iter(&rtxn, &field_id.to_be_bytes())? - .remap_key_type::(); - - Ok(Box::new(iter)) -} - -fn facet_number_value_to_string(level: u8, left: T, right: T) -> (u8, String) { - if level == 0 { - (level, format!("{:?}", left)) - } else { - (level, format!("{:?} to {:?}", left, right)) - } -} - -fn biggest_value_sizes(index: &Index, rtxn: &heed::RoTxn, limit: usize) -> anyhow::Result<()> { - use std::cmp::Reverse; - use std::collections::BinaryHeap; - - use heed::types::ByteSlice; - - let Index { - word_docids, - word_prefix_docids, - docid_word_positions, - word_pair_proximity_docids, - word_prefix_pair_proximity_docids, - word_position_docids, - word_prefix_position_docids, - field_id_word_count_docids, - facet_id_f64_docids, - facet_id_string_docids, - facet_id_exists_docids, - exact_word_docids, - exact_word_prefix_docids, - field_id_docid_facet_f64s: _, - field_id_docid_facet_strings: _, - .. - } = index; - - let main_name = "main"; - let word_docids_name = "word_docids"; - let word_prefix_docids_name = "word_prefix_docids"; - let docid_word_positions_name = "docid_word_positions"; - let word_prefix_pair_proximity_docids_name = "word_prefix_pair_proximity_docids"; - let word_pair_proximity_docids_name = "word_pair_proximity_docids"; - let word_position_docids_name = "word_position_docids"; - let word_prefix_position_docids_name = "word_prefix_position_docids"; - let field_id_word_count_docids_name = "field_id_word_count_docids"; - let facet_id_f64_docids_name = "facet_id_f64_docids"; - let facet_id_string_docids_name = "facet_id_string_docids"; - let facet_id_exists_docids_name = "facet_id_exists_docids"; - let documents_name = "documents"; - - let mut heap = BinaryHeap::with_capacity(limit + 1); - - if limit > 0 { - // Fetch the words FST - let words_fst = index.words_fst(rtxn)?; - let length = words_fst.as_fst().as_bytes().len(); - heap.push(Reverse((length, "words-fst".to_string(), main_name))); - if heap.len() > limit { - heap.pop(); - } - - // Fetch the word prefix FST - let words_prefixes_fst = index.words_prefixes_fst(rtxn)?; - let length = words_prefixes_fst.as_fst().as_bytes().len(); - heap.push(Reverse((length, "words-prefixes-fst".to_string(), main_name))); - if heap.len() > limit { - heap.pop(); - } - - let documents_ids = index.documents_ids(rtxn)?; - heap.push(Reverse((documents_ids.len() as usize, "documents-ids".to_string(), main_name))); - if heap.len() > limit { - heap.pop(); - } - - for result in word_docids.remap_data_type::().iter(rtxn)? { - let (word, value) = result?; - heap.push(Reverse((value.len(), word.to_string(), word_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - for result in exact_word_docids.remap_data_type::().iter(rtxn)? { - let (word, value) = result?; - heap.push(Reverse((value.len(), word.to_string(), word_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - for result in word_prefix_docids.remap_data_type::().iter(rtxn)? { - let (word, value) = result?; - heap.push(Reverse((value.len(), word.to_string(), word_prefix_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - for result in exact_word_prefix_docids.remap_data_type::().iter(rtxn)? { - let (word, value) = result?; - heap.push(Reverse((value.len(), word.to_string(), word_prefix_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - for result in docid_word_positions.remap_data_type::().iter(rtxn)? { - let ((docid, word), value) = result?; - let key = format!("{} {}", docid, word); - heap.push(Reverse((value.len(), key, docid_word_positions_name))); - if heap.len() > limit { - heap.pop(); - } - } - - for result in word_pair_proximity_docids.remap_data_type::().iter(rtxn)? { - let ((word1, word2, prox), value) = result?; - let key = format!("{} {} {}", word1, word2, prox); - heap.push(Reverse((value.len(), key, word_pair_proximity_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - for result in word_prefix_pair_proximity_docids.remap_data_type::().iter(rtxn)? { - let ((word, prefix, prox), value) = result?; - let key = format!("{} {} {}", word, prefix, prox); - heap.push(Reverse((value.len(), key, word_prefix_pair_proximity_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - for result in word_position_docids.remap_data_type::().iter(rtxn)? { - let ((word, pos), value) = result?; - let key = format!("{} {}", word, pos); - heap.push(Reverse((value.len(), key, word_position_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - for result in word_prefix_position_docids.remap_data_type::().iter(rtxn)? { - let ((word, pos), value) = result?; - let key = format!("{} {}", word, pos); - heap.push(Reverse((value.len(), key, word_prefix_position_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - for result in field_id_word_count_docids.remap_data_type::().iter(rtxn)? { - let ((field_id, word_count), docids) = result?; - let key = format!("{} {}", field_id, word_count); - heap.push(Reverse((docids.len(), key, field_id_word_count_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - let faceted_fields = index.faceted_fields_ids(rtxn)?; - let fields_ids_map = index.fields_ids_map(rtxn)?; - - for facet_id in faceted_fields { - let facet_name = fields_ids_map.name(facet_id).unwrap(); - - // List the facet numbers of this facet id. - let db = facet_id_f64_docids.remap_data_type::(); - for result in facet_values_iter(rtxn, db, facet_id)? { - let ((_fid, level, left, right), value) = result?; - let mut output = facet_number_value_to_string(level, left, right).1; - write!(&mut output, " (level {})", level)?; - let key = format!("{} {}", facet_name, output); - heap.push(Reverse((value.len(), key, facet_id_f64_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - // List the facet strings of this facet id. - let db = facet_id_string_docids.remap_data_type::(); - for result in facet_values_iter(rtxn, db, facet_id)? { - let ((_fid, fvalue), value) = result?; - let key = format!("{} {}", facet_name, fvalue); - heap.push(Reverse((value.len(), key, facet_id_string_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - - // List the docids where the facet exists - let db = facet_id_exists_docids.remap_data_type::(); - for result in facet_values_iter(rtxn, db, facet_id)? { - let (_fid, value) = result?; - let key = facet_name.to_string(); - heap.push(Reverse((value.len(), key, facet_id_exists_docids_name))); - if heap.len() > limit { - heap.pop(); - } - } - } - - for result in index.all_documents(rtxn)? { - let (id, value) = result?; - let size = value.iter().map(|(k, v)| k.to_ne_bytes().len() + v.len()).sum(); - heap.push(Reverse((size, id.to_string(), documents_name))); - if heap.len() > limit { - heap.pop(); - } - } - } - - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["database_name", "key_name", "size"])?; - - for Reverse((size, key_name, database_name)) in heap.into_sorted_vec() { - wtr.write_record(&[database_name.to_string(), key_name, size.to_string()])?; - } - - Ok(wtr.flush()?) -} - -fn words_docids( - index: &Index, - rtxn: &heed::RoTxn, - debug: bool, - words: Vec, -) -> anyhow::Result<()> { - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["word", "documents_ids"])?; - - for word in words { - if let Some(docids) = index.word_docids.get(rtxn, &word)? { - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - wtr.write_record(&[word, docids])?; - } - } - - Ok(wtr.flush()?) -} - -fn words_prefixes_docids( - index: &Index, - rtxn: &heed::RoTxn, - debug: bool, - prefixes: Vec, -) -> anyhow::Result<()> { - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["prefix", "documents_ids"])?; - - if prefixes.is_empty() { - for result in index.word_prefix_docids.iter(rtxn)? { - let (prefix, docids) = result?; - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - wtr.write_record(&[prefix, &docids])?; - } - } else { - for prefix in prefixes { - if let Some(docids) = index.word_prefix_docids.get(rtxn, &prefix)? { - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - wtr.write_record(&[prefix, docids])?; - } - } - } - - Ok(wtr.flush()?) -} - -fn facet_values_docids( - index: &Index, - rtxn: &heed::RoTxn, - debug: bool, - facet_type: FacetType, - field_name: String, -) -> anyhow::Result<()> { - let fields_ids_map = index.fields_ids_map(&rtxn)?; - let faceted_fields = index.faceted_fields_ids(&rtxn)?; - - let field_id = fields_ids_map - .id(&field_name) - .with_context(|| format!("field {} not found", field_name))?; - - if !faceted_fields.contains(&field_id) { - anyhow::bail!("field {} is not faceted", field_name); - } - - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - - match facet_type { - FacetType::Number => { - wtr.write_record(&["facet_number", "facet_level", "documents_count", "documents_ids"])?; - for result in facet_values_iter(rtxn, index.facet_id_f64_docids, field_id)? { - let ((_fid, level, left, right), docids) = result?; - let value = facet_number_value_to_string(level, left, right).1; - let count = docids.len(); - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - wtr.write_record(&[value, level.to_string(), count.to_string(), docids])?; - } - } - FacetType::String => { - wtr.write_record(&["facet_string", "documents_count", "documents_ids"])?; - for result in facet_values_iter(rtxn, index.facet_id_string_docids, field_id)? { - let ((_fid, normalized), (_original, docids)) = result?; - let count = docids.len(); - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - wtr.write_record(&[normalized.to_string(), count.to_string(), docids])?; - } - } - } - - Ok(wtr.flush()?) -} - -fn words_positions_docids( - index: &Index, - rtxn: &heed::RoTxn, - debug: bool, - words: Vec, -) -> anyhow::Result<()> { - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["word", "position", "documents_count", "documents_ids"])?; - - for word in words.iter().map(AsRef::as_ref) { - let range = { - let left = (word, u32::min_value()); - let right = (word, u32::max_value()); - left..=right - }; - for result in index.word_position_docids.range(rtxn, &range)? { - let ((w, pos), docids) = result?; - - let count = docids.len().to_string(); - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - let position = format!("{:?}", pos); - wtr.write_record(&[w, &position, &count, &docids])?; - } - } - - Ok(wtr.flush()?) -} - -fn word_prefixes_positions_docids( - index: &Index, - rtxn: &heed::RoTxn, - debug: bool, - prefixes: Vec, -) -> anyhow::Result<()> { - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["prefix", "position", "documents_count", "documents_ids"])?; - - for word in prefixes.iter().map(AsRef::as_ref) { - let range = { - let left = (word, u32::min_value()); - let right = (word, u32::max_value()); - left..=right - }; - for result in index.word_prefix_position_docids.range(rtxn, &range)? { - let ((w, pos), docids) = result?; - - let count = docids.len().to_string(); - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - let position = format!("{:?}", pos); - wtr.write_record(&[w, &position, &count, &docids])?; - } - } - - Ok(wtr.flush()?) -} - -fn field_id_word_count_docids( - index: &Index, - rtxn: &heed::RoTxn, - debug: bool, - field_name: String, -) -> anyhow::Result<()> { - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["field_name", "word_count", "docids"])?; - - let field_id = index - .fields_ids_map(rtxn)? - .id(&field_name) - .with_context(|| format!("unknown field name: {}", &field_name))?; - - let left = (field_id, 0); - let right = (field_id, u8::max_value()); - let iter = index.field_id_word_count_docids.range(rtxn, &(left..=right))?; - - for result in iter { - let ((_, word_count), docids) = result?; - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - wtr.write_record(&[&field_name, &format!("{}", word_count), &docids])?; - } - - Ok(wtr.flush()?) -} - -fn docids_words_positions( - index: &Index, - rtxn: &heed::RoTxn, - debug: bool, - internal_ids: Vec, -) -> anyhow::Result<()> { - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["document_id", "word", "positions"])?; - - let iter: Box> = if internal_ids.is_empty() { - Box::new(index.docid_word_positions.iter(rtxn)?) - } else { - let vec: heed::Result> = internal_ids - .into_iter() - .map(|id| index.docid_word_positions.prefix_iter(rtxn, &(id, ""))) - .collect(); - Box::new(vec?.into_iter().flatten()) - }; - - for result in iter { - let ((id, word), positions) = result?; - let positions = if debug { - format!("{:?}", positions) - } else { - format!("{:?}", positions.iter().collect::>()) - }; - wtr.write_record(&[&id.to_string(), word, &positions])?; - } - - Ok(wtr.flush()?) -} - -fn facet_number_stats(index: &Index, rtxn: &heed::RoTxn, field_name: String) -> anyhow::Result<()> { - let fields_ids_map = index.fields_ids_map(&rtxn)?; - let faceted_fields = index.faceted_fields_ids(&rtxn)?; - - let field_id = fields_ids_map - .id(&field_name) - .with_context(|| format!("field {} not found", field_name))?; - - if !faceted_fields.contains(&field_id) { - anyhow::bail!("field {} is not faceted", field_name); - } - - let iter = facet_values_iter(rtxn, index.facet_id_f64_docids, field_id)?; - println!("The database {:?} facet stats", field_name); - - let mut level_size = 0; - let mut current_level = None; - for result in iter { - let ((_fid, level, _left, _right), _) = result?; - if let Some(current) = current_level { - if current != level { - println!("\tnumber of groups at level {}: {}", current, level_size); - level_size = 0; - } - } - current_level = Some(level); - level_size += 1; - } - - if let Some(current) = current_level { - println!("\tnumber of groups at level {}: {}", current, level_size); - } - - Ok(()) -} - -fn export_words_fst(index: &Index, rtxn: &heed::RoTxn) -> anyhow::Result<()> { - use std::io::Write as _; - - let mut stdout = io::stdout(); - let words_fst = index.words_fst(rtxn)?; - stdout.write_all(words_fst.as_fst().as_bytes())?; - - Ok(()) -} - -fn export_words_prefix_fst(index: &Index, rtxn: &heed::RoTxn) -> anyhow::Result<()> { - use std::io::Write as _; - - let mut stdout = io::stdout(); - let words_prefixes_fst = index.words_prefixes_fst(rtxn)?; - stdout.write_all(words_prefixes_fst.as_fst().as_bytes())?; - - Ok(()) -} - -fn export_documents( - index: &Index, - rtxn: &heed::RoTxn, - internal_ids: Vec, -) -> anyhow::Result<()> { - use std::io::{BufWriter, Write as _}; - - use milli::obkv_to_json; - - let stdout = io::stdout(); - let mut out = BufWriter::new(stdout); - - let fields_ids_map = index.fields_ids_map(rtxn)?; - let displayed_fields: Vec<_> = fields_ids_map.iter().map(|(id, _name)| id).collect(); - - let iter: Box> = if internal_ids.is_empty() { - Box::new(index.all_documents(rtxn)?.map(|result| result.map(|(_id, obkv)| obkv))) - } else { - Box::new( - index - .documents(rtxn, internal_ids.into_iter())? - .into_iter() - .map(|(_id, obkv)| Ok(obkv)), - ) - }; - - for result in iter { - let obkv = result?; - let document = obkv_to_json(&displayed_fields, &fields_ids_map, obkv)?; - serde_json::to_writer(&mut out, &document)?; - writeln!(&mut out)?; - } - - out.into_inner()?; - - Ok(()) -} - -fn average_number_of_words_by_doc(index: &Index, rtxn: &heed::RoTxn) -> anyhow::Result<()> { - use heed::types::DecodeIgnore; - use milli::{BEU32StrCodec, DocumentId}; - - let mut words_counts = Vec::new(); - let mut count = 0; - let mut prev = None as Option<(DocumentId, u32)>; - - let iter = - index.docid_word_positions.as_polymorph().iter::<_, BEU32StrCodec, DecodeIgnore>(rtxn)?; - for result in iter { - let ((docid, _word), ()) = result?; - - match prev.as_mut() { - Some((prev_docid, prev_count)) if docid == *prev_docid => { - *prev_count += 1; - } - Some((prev_docid, prev_count)) => { - words_counts.push(*prev_count); - *prev_docid = docid; - *prev_count = 0; - count += 1; - } - None => prev = Some((docid, 1)), - } - } - - if let Some((_, prev_count)) = prev.take() { - words_counts.push(prev_count); - count += 1; - } - - let words_count = words_counts.into_iter().map(|c| c as usize).sum::() as f64; - let count = count as f64; - - println!("average number of different words by document: {}", words_count / count); - - Ok(()) -} - -fn average_number_of_positions_by_word(index: &Index, rtxn: &heed::RoTxn) -> anyhow::Result<()> { - use heed::types::DecodeIgnore; - use milli::BoRoaringBitmapCodec; - - let mut values_length = Vec::new(); - let mut count = 0; - - let db = index.docid_word_positions.as_polymorph(); - for result in db.iter::<_, DecodeIgnore, BoRoaringBitmapCodec>(rtxn)? { - let ((), val) = result?; - values_length.push(val.len() as u32); - count += 1; - } - - let values_length_sum = values_length.into_iter().map(|c| c as usize).sum::() as f64; - let count = count as f64; - - println!("average number of positions by word: {}", values_length_sum / count); - - Ok(()) -} - -fn size_of_databases(index: &Index, rtxn: &heed::RoTxn, names: Vec) -> anyhow::Result<()> { - use heed::types::ByteSlice; - - let Index { - word_docids, - word_prefix_docids, - docid_word_positions, - word_pair_proximity_docids, - word_prefix_pair_proximity_docids, - word_position_docids, - word_prefix_position_docids, - field_id_word_count_docids, - facet_id_f64_docids, - facet_id_string_docids, - field_id_docid_facet_f64s, - field_id_docid_facet_strings, - facet_id_exists_docids, - exact_word_prefix_docids, - exact_word_docids, - .. - } = index; - - let names = if names.is_empty() { - ALL_DATABASE_NAMES.iter().map(|s| s.to_string()).collect() - } else { - names - }; - - for name in names { - let database = match name.as_str() { - WORD_PREFIX_DOCIDS => word_prefix_docids.as_polymorph(), - WORD_DOCIDS => word_docids.as_polymorph(), - DOCID_WORD_POSITIONS => docid_word_positions.as_polymorph(), - WORD_PAIR_PROXIMITY_DOCIDS => word_pair_proximity_docids.as_polymorph(), - WORD_PREFIX_PAIR_PROXIMITY_DOCIDS => word_prefix_pair_proximity_docids.as_polymorph(), - WORD_POSITION_DOCIDS => word_position_docids.as_polymorph(), - WORD_PREFIX_POSITION_DOCIDS => word_prefix_position_docids.as_polymorph(), - FIELD_ID_WORD_COUNT_DOCIDS => field_id_word_count_docids.as_polymorph(), - FACET_ID_F64_DOCIDS => facet_id_f64_docids.as_polymorph(), - FACET_ID_STRING_DOCIDS => facet_id_string_docids.as_polymorph(), - FACET_ID_EXISTS_DOCIDS => facet_id_exists_docids.as_polymorph(), - FIELD_ID_DOCID_FACET_F64S => field_id_docid_facet_f64s.as_polymorph(), - FIELD_ID_DOCID_FACET_STRINGS => field_id_docid_facet_strings.as_polymorph(), - EXACT_WORD_DOCIDS => exact_word_docids.as_polymorph(), - EXACT_WORD_PREFIX_DOCIDS => exact_word_prefix_docids.as_polymorph(), - - unknown => anyhow::bail!("unknown database {:?}", unknown), - }; - - let mut key_size: u64 = 0; - let mut val_size: u64 = 0; - let mut number_entries: u64 = 0; - for result in database.iter::<_, ByteSlice, ByteSlice>(rtxn)? { - let (k, v) = result?; - key_size += k.len() as u64; - val_size += v.len() as u64; - number_entries += 1; - } - - println!("The {} database weigh:", name); - println!("\ttotal key size: {}", Byte::from(key_size).get_appropriate_unit(true)); - println!("\ttotal val size: {}", Byte::from(val_size).get_appropriate_unit(true)); - println!("\ttotal size: {}", Byte::from(key_size + val_size).get_appropriate_unit(true)); - println!("\tnumber of entries: {}", number_entries); - } - - Ok(()) -} - -fn database_stats(index: &Index, rtxn: &heed::RoTxn, name: &str) -> anyhow::Result<()> { - use heed::types::ByteSlice; - use heed::{BytesDecode, Error}; - use milli::{BoRoaringBitmapCodec, CboRoaringBitmapCodec, RoaringBitmapCodec}; - use roaring::RoaringBitmap; - - fn compute_stats<'a, DC: BytesDecode<'a, DItem = RoaringBitmap>>( - db: heed::PolyDatabase, - rtxn: &'a heed::RoTxn, - name: &str, - ) -> anyhow::Result<()> { - let mut key_size = 0u64; - let mut val_size = 0u64; - let mut values_length = Vec::new(); - - for result in db.iter::<_, ByteSlice, ByteSlice>(rtxn)? { - let (key, val) = result?; - key_size += key.len() as u64; - val_size += val.len() as u64; - let val = DC::bytes_decode(val).ok_or(Error::Decoding)?; - values_length.push(val.len() as u32); - } - - values_length.sort_unstable(); - let len = values_length.len(); - - let twenty_five_percentile = values_length.get(len / 4).unwrap_or(&0); - let fifty_percentile = values_length.get(len / 2).unwrap_or(&0); - let seventy_five_percentile = values_length.get(len * 3 / 4).unwrap_or(&0); - let ninety_percentile = values_length.get(len * 90 / 100).unwrap_or(&0); - let ninety_five_percentile = values_length.get(len * 95 / 100).unwrap_or(&0); - let ninety_nine_percentile = values_length.get(len * 99 / 100).unwrap_or(&0); - let minimum = values_length.first().unwrap_or(&0); - let maximum = values_length.last().unwrap_or(&0); - let count = values_length.len(); - let sum = values_length.iter().map(|l| *l as u64).sum::(); - - println!("The {} database stats on the lengths", name); - println!("\tnumber of entries: {}", count); - println!("\t25th percentile (first quartile): {}", twenty_five_percentile); - println!("\t50th percentile (median): {}", fifty_percentile); - println!("\t75th percentile (third quartile): {}", seventy_five_percentile); - println!("\t90th percentile: {}", ninety_percentile); - println!("\t95th percentile: {}", ninety_five_percentile); - println!("\t99th percentile: {}", ninety_nine_percentile); - println!("\tminimum: {}", minimum); - println!("\tmaximum: {}", maximum); - println!("\taverage: {}", sum as f64 / count as f64); - println!("\ttotal key size: {}", Byte::from(key_size).get_appropriate_unit(true)); - println!("\ttotal val size: {}", Byte::from(val_size).get_appropriate_unit(true)); - println!("\ttotal size: {}", Byte::from(key_size + val_size).get_appropriate_unit(true)); - - Ok(()) - } - - match name { - WORD_DOCIDS => { - let db = index.word_docids.as_polymorph(); - compute_stats::(*db, rtxn, name) - } - WORD_PREFIX_DOCIDS => { - let db = index.word_prefix_docids.as_polymorph(); - compute_stats::(*db, rtxn, name) - } - DOCID_WORD_POSITIONS => { - let db = index.docid_word_positions.as_polymorph(); - compute_stats::(*db, rtxn, name) - } - WORD_PAIR_PROXIMITY_DOCIDS => { - let db = index.word_pair_proximity_docids.as_polymorph(); - compute_stats::(*db, rtxn, name) - } - WORD_PREFIX_PAIR_PROXIMITY_DOCIDS => { - let db = index.word_prefix_pair_proximity_docids.as_polymorph(); - compute_stats::(*db, rtxn, name) - } - FIELD_ID_WORD_COUNT_DOCIDS => { - let db = index.field_id_word_count_docids.as_polymorph(); - compute_stats::(*db, rtxn, name) - } - unknown => anyhow::bail!("unknown database {:?}", unknown), - } -} - -fn word_pair_proximities_docids( - index: &Index, - rtxn: &heed::RoTxn, - debug: bool, - word1: String, - word2: String, -) -> anyhow::Result<()> { - use heed::types::ByteSlice; - use milli::RoaringBitmapCodec; - - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["word1", "word2", "proximity", "documents_ids"])?; - - // Create the prefix key with only the pair of words. - let mut prefix = Vec::with_capacity(word1.len() + word2.len() + 1); - prefix.extend_from_slice(word1.as_bytes()); - prefix.push(0); - prefix.extend_from_slice(word2.as_bytes()); - prefix.push(0); - - let db = index.word_pair_proximity_docids.as_polymorph(); - let iter = db.prefix_iter::<_, ByteSlice, RoaringBitmapCodec>(rtxn, &prefix)?; - for result in iter { - let (key, docids) = result?; - - // Skip keys that are longer than the requested one, - // a longer key means that the second word is a prefix of the request word. - if key.len() != prefix.len() + 1 { - continue; - } - - let proximity = key.last().unwrap(); - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - wtr.write_record(&[&word1, &word2, &proximity.to_string(), &docids])?; - } - - Ok(wtr.flush()?) -} - -fn word_prefix_pair_proximities_docids( - index: &Index, - rtxn: &heed::RoTxn, - debug: bool, - word1: String, - word_prefix: String, -) -> anyhow::Result<()> { - use heed::types::ByteSlice; - use milli::RoaringBitmapCodec; - - let stdout = io::stdout(); - let mut wtr = csv::Writer::from_writer(stdout.lock()); - wtr.write_record(&["word1", "word_prefix", "proximity", "documents_ids"])?; - - // Create the prefix key with only the pair of words. - let mut prefix = Vec::with_capacity(word1.len() + word_prefix.len() + 1); - prefix.extend_from_slice(word1.as_bytes()); - prefix.push(0); - prefix.extend_from_slice(word_prefix.as_bytes()); - - let db = index.word_prefix_pair_proximity_docids.as_polymorph(); - let iter = db.prefix_iter::<_, ByteSlice, RoaringBitmapCodec>(rtxn, &prefix)?; - for result in iter { - let (key, docids) = result?; - - // Skip keys that are longer than the requested one, - // a longer key means that the second word is a prefix of the request word. - if key.len() != prefix.len() + 1 { - continue; - } - - let proximity = key.last().unwrap(); - let docids = if debug { - format!("{:?}", docids) - } else { - format!("{:?}", docids.iter().collect::>()) - }; - wtr.write_record(&[&word1, &word_prefix, &proximity.to_string(), &docids])?; - } - - Ok(wtr.flush()?) -} diff --git a/milli/README.md b/milli/README.md deleted file mode 100644 index 56db42a86..000000000 --- a/milli/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Milli - -## Fuzzing milli - -Currently you can only fuzz the indexation. -To execute the fuzzer run: -``` -cargo +nightly fuzz run indexing -``` - -To execute the fuzzer on multiple thread you can also run: -``` -cargo +nightly fuzz run -j4 indexing -``` - -Since the fuzzer is going to create a lot of temporary file to let milli index its documents -I would also recommand to execute it on a ramdisk. -Here is how to setup a ramdisk on linux: -``` -sudo mount -t tmpfs none path/to/your/ramdisk -``` -And then set the [TMPDIR](https://doc.rust-lang.org/std/env/fn.temp_dir.html) environment variable -to make the fuzzer create its file in it: -``` -export TMPDIR=path/to/your/ramdisk -``` diff --git a/milli/fuzz/.gitignore b/milli/fuzz/.gitignore deleted file mode 100644 index ebf2c9395..000000000 --- a/milli/fuzz/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -Cargo.lock -target/ - -/corpus/ -/artifacts/ diff --git a/milli/fuzz/Cargo.toml b/milli/fuzz/Cargo.toml deleted file mode 100644 index 6bf7b2c6d..000000000 --- a/milli/fuzz/Cargo.toml +++ /dev/null @@ -1,34 +0,0 @@ -[package] -name = "milli-fuzz" -version = "0.0.0" -authors = ["Automatically generated"] -publish = false -edition = "2018" - -[package.metadata] -cargo-fuzz = true - -[dependencies] -arbitrary = "1.0" -libfuzzer-sys = "0.4" -serde_json = { version = "1.0.62", features = ["preserve_order"] } -anyhow = "1.0" -tempfile = "3.3" -arbitrary-json = "0.1.0" -mimalloc = { version = "0.1.29", default-features = false } - -[dependencies.milli] -path = ".." - -# Prevent this from interfering with workspaces -[workspace] -members = ["."] - -[profile.release] -debug = true - -[[bin]] -name = "indexing" -path = "fuzz_targets/indexing.rs" -test = false -doc = false diff --git a/milli/fuzz/fuzz_targets/indexing.rs b/milli/fuzz/fuzz_targets/indexing.rs deleted file mode 100644 index 8ce470718..000000000 --- a/milli/fuzz/fuzz_targets/indexing.rs +++ /dev/null @@ -1,114 +0,0 @@ -#![no_main] - -use std::collections::HashSet; -use std::io::{BufWriter, Cursor, Read, Seek, Write}; - -use anyhow::{bail, Result}; -use arbitrary_json::ArbitraryValue; -use libfuzzer_sys::fuzz_target; -use milli::documents::{DocumentsBatchBuilder, DocumentsBatchReader}; -use milli::heed::EnvOpenOptions; -use milli::update::{IndexDocuments, IndexDocumentsConfig, IndexerConfig, Settings}; -use milli::{Index, Object}; -use serde_json::{Map, Value}; - -#[global_allocator] -static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; - -/// reads json from input and write an obkv batch to writer. -pub fn read_json(input: impl Read, writer: impl Write + Seek) -> Result { - let writer = BufWriter::new(writer); - let mut builder = DocumentsBatchBuilder::new(writer); - - let values: Vec = serde_json::from_reader(input)?; - if builder.documents_count() == 0 { - bail!("Empty payload"); - } - - for object in values { - builder.append_json_object(&object)?; - } - - let count = builder.documents_count(); - let vector = builder.into_inner()?; - - Ok(count as usize) -} - -fn index_documents( - index: &mut milli::Index, - documents: DocumentsBatchReader>>, -) -> Result<()> { - let config = IndexerConfig::default(); - let mut wtxn = index.write_txn()?; - - let indexing_config = IndexDocumentsConfig::default(); - let mut builder = IndexDocuments::new(&mut wtxn, &index, &config, indexing_config, |_| ())?; - builder.add_documents(documents)?; - builder.execute().unwrap(); - - wtxn.commit()?; - Ok(()) -} - -fn create_index() -> Result { - let dir = tempfile::tempdir().unwrap(); - let mut options = EnvOpenOptions::new(); - options.map_size(10 * 1024 * 1024 * 1024); // 10 GB - options.max_readers(1); - let index = Index::new(options, dir.path())?; - - let config = IndexerConfig::default(); - let mut wtxn = index.write_txn().unwrap(); - - let mut builder = Settings::new(&mut wtxn, &index, &config); - - let displayed_fields = - ["id", "title", "album", "artist", "genre", "country", "released", "duration"] - .iter() - .map(|s| s.to_string()) - .collect(); - builder.set_displayed_fields(displayed_fields); - - let searchable_fields = ["title", "album", "artist"].iter().map(|s| s.to_string()).collect(); - builder.set_searchable_fields(searchable_fields); - - let faceted_fields: HashSet = - ["released-timestamp", "duration-float", "genre", "country", "artist"] - .iter() - .map(|s| s.to_string()) - .collect(); - builder.set_filterable_fields(faceted_fields.clone()); - builder.set_sortable_fields(faceted_fields); - - builder.set_distinct_field("same".to_string()); - - builder.execute(|_| ()).unwrap(); - wtxn.commit().unwrap(); - - Ok(index) -} - -fuzz_target!(|batches: Vec>| { - if let Ok(mut index) = create_index() { - for batch in batches { - let documents: Vec = - batch.into_iter().map(|value| serde_json::Value::from(value)).collect(); - let json = Value::Array(documents); - let json = serde_json::to_string(&json).unwrap(); - - let mut documents = Cursor::new(Vec::new()); - - // We ignore all malformed documents - if let Ok(_) = read_json(json.as_bytes(), &mut documents) { - documents.rewind().unwrap(); - let documents = DocumentsBatchReader::from_reader(documents).unwrap(); - // A lot of errors can come out of milli and we don't know which ones are normal or not - // so we are only going to look for the unexpected panics. - let _ = index_documents(&mut index, documents); - } - } - - index.prepare_for_closing().wait(); - } -});