From 7212d64807f2c4b763936e66bdd280f0ff29985e Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Wed, 11 Feb 2026 11:09:44 +0100 Subject: [PATCH 01/64] foo --- src/OptimalControl.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OptimalControl.jl b/src/OptimalControl.jl index cc87c12c..9a2abc1c 100644 --- a/src/OptimalControl.jl +++ b/src/OptimalControl.jl @@ -25,4 +25,4 @@ include(joinpath(@__DIR__, "solve.jl")) export solve export available_methods -end +end \ No newline at end of file From 1ccb707831db7ddee1840fe5ca029e718197e57a Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Wed, 11 Feb 2026 11:10:42 +0100 Subject: [PATCH 02/64] foo --- .gitignore | 4 ++-- diag.jl | 15 --------------- 2 files changed, 2 insertions(+), 17 deletions(-) delete mode 100644 diag.jl diff --git a/.gitignore b/.gitignore index 739d6204..ab853b63 100644 --- a/.gitignore +++ b/.gitignore @@ -40,5 +40,5 @@ Manifest.toml */.ipynb_checkpoints # -docs/tmp/ -save/ \ No newline at end of file +.tmp/ +.save/ \ No newline at end of file diff --git a/diag.jl b/diag.jl deleted file mode 100644 index 80b18af9..00000000 --- a/diag.jl +++ /dev/null @@ -1,15 +0,0 @@ -using Pkg -Pkg.activate(".") - -# We want to see if AbstractOptimalControlProblem is defined BEFORE ctmodels.jl:4 -# So we can't just use OptimalControl because it errors. - -# Let's manually include things up to ctmodels.jl -include("src/imports/ctbase.jl") -include("src/imports/ctparser.jl") -include("src/imports/plots.jl") - -println("Defined before ctmodels: ", isdefined(Main, :AbstractOptimalControlProblem)) -if isdefined(Main, :AbstractOptimalControlProblem) - println("Parent: ", parentmodule(Main.AbstractOptimalControlProblem)) -end From 797b20a09f30300cb0e8dbc1b561a714ac38010b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Caillau Date: Wed, 11 Feb 2026 11:26:01 +0100 Subject: [PATCH 03/64] Update compatibility versions in Project.toml --- Project.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index ae141e2c..b69611ab 100644 --- a/Project.toml +++ b/Project.toml @@ -20,11 +20,11 @@ SolverCore = "ff4d7338-4cf1-434d-91df-b86cb86fb843" [compat] ADNLPModels = "0.8" -CTBase = "0.17" -CTDirect = "0.18" +CTBase = "0.18" +CTDirect = "1" CTFlows = "0.8" -CTModels = "0.7" -CTParser = "0.7, 0.8" +CTModels = "0.8" +CTParser = "0.8" CTSolvers = "0.2" CommonSolve = "0.2" DifferentiationInterface = "0.7" From 50366f4613ffcf8fbbcec7b5ddf5cda1d2cf61a9 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Caillau Date: Wed, 11 Feb 2026 11:27:10 +0100 Subject: [PATCH 04/64] Update compatibility versions in Project.toml --- docs/Project.toml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/Project.toml b/docs/Project.toml index e415fed9..28a5d3ed 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -28,11 +28,12 @@ Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" [compat] ADNLPModels = "0.8" -CTBase = "0.16" -CTDirect = "0.17" +CTBase = "0.18" +CTDirect = "1" CTFlows = "0.8" -CTModels = "0.6" -CTParser = "0.7" +CTModels = "0.8" +CTParser = "0.8" +CTSolver = "0.2" CommonSolve = "0.2" DataFrames = "1" DifferentiationInterface = "0.7" From 01ba7f183217422b0903b53598d619379b2e3c8b Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Wed, 11 Feb 2026 14:09:31 +0100 Subject: [PATCH 05/64] Add CTDirect reexports and tests - Add ctbase.jl with CTBase exception reexports using @reexport import - Add ctdirect.jl with CTDirect types and functions reexports - Add test_ctbase.jl and test_ctdirect.jl to verify reexports - Enable ctdirect.jl include in OptimalControl.jl - Add Reexport dependency to Project.toml - Fix 'Invalid redefinition of constant' error by using proper @reexport import pattern --- Project.toml | 2 + src/OptimalControl.jl | 23 +- src/imports/commonsolve.jl | 1 - src/imports/ctbase.jl | 30 +- src/imports/ctdirect.jl | 20 +- src/solve.jl | 2 + test/README.md | 143 ++++ test/coverage.jl | 15 + test/ctdirect/problems/beam.jl | 17 - test/ctdirect/problems/beam2.jl | 19 - test/ctdirect/problems/bolza.jl | 18 - test/ctdirect/problems/double_integrator.jl | 60 -- test/ctdirect/problems/fuller.jl | 16 - test/ctdirect/problems/goddard.jl | 187 ----- test/ctdirect/problems/jackson.jl | 27 - test/ctdirect/problems/parametric.jl | 27 - test/ctdirect/problems/robbins.jl | 21 - test/ctdirect/problems/simple_integrator.jl | 17 - test/ctdirect/problems/vanderpol.jl | 19 - test/ctdirect/suite/test_all_ocp.jl | 81 -- test/ctdirect/suite/test_constraints.jl | 114 --- test/ctdirect/suite/test_continuation.jl | 80 -- test/ctdirect/suite/test_discretization.jl | 112 --- test/ctdirect/suite/test_exa.jl | 30 - test/ctdirect/suite/test_initial_guess.jl | 177 ----- test/ctdirect/suite/test_objective.jl | 60 -- test/extras/check_ownership.jl | 39 - test/extras/cons.jl | 98 --- test/extras/cons_2.jl | 41 - test/extras/ensemble.jl | 21 - test/extras/export.jl | 27 - test/extras/nonautonomous.jl | 36 - test/extras/ocp.jl | 28 - test/indirect/Goddard.jl | 54 -- test/indirect/test_goddard_indirect.jl | 60 -- test/problems/beam.jl | 28 - test/problems/goddard.jl | 64 -- test/runtests.jl | 92 +-- test/suite/reexport/test_ctbase.jl | 30 + test/suite/reexport/test_ctdirect.jl | 29 + test/test_optimalcontrol_solve_api.jl | 796 -------------------- 41 files changed, 295 insertions(+), 2466 deletions(-) delete mode 100644 src/imports/commonsolve.jl create mode 100644 test/README.md create mode 100644 test/coverage.jl delete mode 100644 test/ctdirect/problems/beam.jl delete mode 100644 test/ctdirect/problems/beam2.jl delete mode 100644 test/ctdirect/problems/bolza.jl delete mode 100644 test/ctdirect/problems/double_integrator.jl delete mode 100644 test/ctdirect/problems/fuller.jl delete mode 100644 test/ctdirect/problems/goddard.jl delete mode 100644 test/ctdirect/problems/jackson.jl delete mode 100644 test/ctdirect/problems/parametric.jl delete mode 100644 test/ctdirect/problems/robbins.jl delete mode 100644 test/ctdirect/problems/simple_integrator.jl delete mode 100644 test/ctdirect/problems/vanderpol.jl delete mode 100644 test/ctdirect/suite/test_all_ocp.jl delete mode 100644 test/ctdirect/suite/test_constraints.jl delete mode 100644 test/ctdirect/suite/test_continuation.jl delete mode 100644 test/ctdirect/suite/test_discretization.jl delete mode 100644 test/ctdirect/suite/test_exa.jl delete mode 100644 test/ctdirect/suite/test_initial_guess.jl delete mode 100644 test/ctdirect/suite/test_objective.jl delete mode 100644 test/extras/check_ownership.jl delete mode 100644 test/extras/cons.jl delete mode 100644 test/extras/cons_2.jl delete mode 100644 test/extras/ensemble.jl delete mode 100644 test/extras/export.jl delete mode 100644 test/extras/nonautonomous.jl delete mode 100644 test/extras/ocp.jl delete mode 100644 test/indirect/Goddard.jl delete mode 100644 test/indirect/test_goddard_indirect.jl delete mode 100644 test/problems/beam.jl delete mode 100644 test/problems/goddard.jl create mode 100644 test/suite/reexport/test_ctbase.jl create mode 100644 test/suite/reexport/test_ctdirect.jl delete mode 100644 test/test_optimalcontrol_solve_api.jl diff --git a/Project.toml b/Project.toml index b69611ab..53e09796 100644 --- a/Project.toml +++ b/Project.toml @@ -16,6 +16,7 @@ DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" ExaModels = "1037b233-b668-4ce9-9b63-f9f681f55dd2" NLPModels = "a4795742-8479-5a88-8948-cc11e1c8c1a6" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +Reexport = "189a3867-3050-52da-a836-e630ba90ab69" SolverCore = "ff4d7338-4cf1-434d-91df-b86cb86fb843" [compat] @@ -39,6 +40,7 @@ NLPModelsIpopt = "0.11" NonlinearSolve = "4" OrdinaryDiffEq = "6" RecipesBase = "1" +Reexport = "1.2.2" SolverCore = "0.3.9" SplitApplyCombine = "1" Test = "1" diff --git a/src/OptimalControl.jl b/src/OptimalControl.jl index 9a2abc1c..2c6064dd 100644 --- a/src/OptimalControl.jl +++ b/src/OptimalControl.jl @@ -8,21 +8,22 @@ $(EXPORTS) module OptimalControl using DocStringExtensions +using Reexport # Imports include(joinpath(@__DIR__, "imports", "ctbase.jl")) -include(joinpath(@__DIR__, "imports", "ctparser.jl")) -include(joinpath(@__DIR__, "imports", "plots.jl")) -include(joinpath(@__DIR__, "imports", "ctmodels.jl")) include(joinpath(@__DIR__, "imports", "ctdirect.jl")) -include(joinpath(@__DIR__, "imports", "ctflows.jl")) -include(joinpath(@__DIR__, "imports", "ctsolvers.jl")) -include(joinpath(@__DIR__, "imports", "modelers.jl")) -include(joinpath(@__DIR__, "imports", "commonsolve.jl")) +# include(joinpath(@__DIR__, "imports", "ctparser.jl")) +# include(joinpath(@__DIR__, "imports", "plots.jl")) +# include(joinpath(@__DIR__, "imports", "ctmodels.jl")) +# include(joinpath(@__DIR__, "imports", "ctflows.jl")) +# include(joinpath(@__DIR__, "imports", "ctsolvers.jl")) +# include(joinpath(@__DIR__, "imports", "modelers.jl")) +# include(joinpath(@__DIR__, "imports", "commonsolve.jl")) -# solve -include(joinpath(@__DIR__, "solve.jl")) -export solve -export available_methods +# # solve +# include(joinpath(@__DIR__, "solve.jl")) +# export solve +# export available_methods end \ No newline at end of file diff --git a/src/imports/commonsolve.jl b/src/imports/commonsolve.jl deleted file mode 100644 index 57bd8f16..00000000 --- a/src/imports/commonsolve.jl +++ /dev/null @@ -1 +0,0 @@ -import CommonSolve: CommonSolve, solve \ No newline at end of file diff --git a/src/imports/ctbase.jl b/src/imports/ctbase.jl index 285cfa84..047fcb6f 100644 --- a/src/imports/ctbase.jl +++ b/src/imports/ctbase.jl @@ -1,23 +1,11 @@ -import CTBase: CTBase +# CTBase reexports # Exceptions -import CTBase: - IncorrectArgument -# ParsingError, -# CTException, -# AmbiguousDescription, -# IncorrectMethod, -# IncorrectOutput, -# NotImplemented, -# UnauthorizedCall, -# ExtensionError - -# export ParsingError, -# CTException, -# AmbiguousDescription, -# IncorrectArgument, -# IncorrectMethod, -# IncorrectOutput, -# NotImplemented, -# UnauthorizedCall, -# ExtensionError \ No newline at end of file +@reexport import CTBase: + CTException, + IncorrectArgument, + PreconditionError, + NotImplemented, + ParsingError, + AmbiguousDescription, + ExtensionError diff --git a/src/imports/ctdirect.jl b/src/imports/ctdirect.jl index e2c55f00..88939a69 100644 --- a/src/imports/ctdirect.jl +++ b/src/imports/ctdirect.jl @@ -1,18 +1,6 @@ -import CTDirect: CTDirect +# CTDirect reexports -# # Abstract types -# import CTDirect: -# AbstractOptimalControlDiscretizer - -# Discretizers -import CTDirect: +@reexport import CTDirect: + AbstractOptimalControlDiscretizer, + discretize, Collocation - -# direct_transcription, -# set_initial_guess, -# build_OCP_solution, -# nlp_model, -# ocp_model, -# AbstractOptimalControlDiscretizer -# export AbstractOptimalControlDiscretizer -# export direct_transcription, set_initial_guess, build_OCP_solution, nlp_model, ocp_model \ No newline at end of file diff --git a/src/solve.jl b/src/solve.jl index cc005969..194ea410 100644 --- a/src/solve.jl +++ b/src/solve.jl @@ -1,5 +1,7 @@ # ------------------------------------------------------------------------ # ------------------------------------------------------------------------ +import CommonSolve: CommonSolve, solve + # Default options __display() = true __initial_guess() = nothing diff --git a/test/README.md b/test/README.md new file mode 100644 index 00000000..67061001 --- /dev/null +++ b/test/README.md @@ -0,0 +1,143 @@ +# Testing Guide for OptimalControl + +This directory contains the test suite for `OptimalControl.jl`. It follows the testing conventions and infrastructure provided by [CTBase.jl](https://github.com/control-toolbox/CTBase.jl). + +For detailed guidelines on testing and coverage, please refer to: + +- [CTBase Test Coverage Guide](https://control-toolbox.org/CTBase.jl/stable/test-coverage-guide.html) +- [CTBase TestRunner Extension](https://github.com/control-toolbox/CTBase.jl/blob/main/ext/TestRunner.jl) +- [CTBase CoveragePostprocessing](https://github.com/control-toolbox/CTBase.jl/blob/main/ext/CoveragePostprocessing.jl) + +--- + +## 1. Running Tests + +Tests are executed using the standard Julia Test interface, enhanced by `CTBase.TestRunner`. + +### Default Run (All Enabled Tests) + +```bash +julia --project=@. -e 'using Pkg; Pkg.test()' +``` + +### Running Specific Test Groups + +To run only specific test groups (e.g., `reexport`): + +```bash +julia --project=@. -e 'using Pkg; Pkg.test(; test_args=["suite/reexport/*"])' +``` + +Multiple groups can be specified: + +```bash +julia --project=@. -e 'using Pkg; Pkg.test(; test_args=["suite/reexport/*", "suite/other/*"])' +``` + +### Running All Tests (Including Optional/Long Tests) + +```bash +julia --project=@. -e 'using Pkg; Pkg.test(; test_args=["all"])' +``` + +--- + +## 2. Coverage + +To run tests with coverage and generate a report: + +```bash +julia --project=@. -e 'using Pkg; Pkg.test("OptimalControl"; coverage=true); include("test/coverage.jl")' +``` + +This will: + +1. Run all tests with coverage tracking +2. Process `.cov` files +3. Move them to `coverage/` directory +4. Generate an HTML report in `coverage/html/` + +--- + +## 3. Adding New Tests + +### File and Function Naming + +All test files must follow this pattern: + +- **File name**: `test_.jl` +- **Entry function**: `test_()` (matching the filename exactly) + +Example: + +```julia +# File: test/suite/reexport/test_ctbase.jl +module TestCtbase + +using Test +using OptimalControl +const VERBOSE = isdefined(Main, :TestOptions) ? Main.TestOptions.VERBOSE : true +const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : true + +function test_ctbase() + @testset "CTBase reexports" verbose=VERBOSE showtiming=SHOWTIMING begin + # Tests here + end +end + +end # module + +# CRITICAL: Redefine in outer scope for TestRunner +test_ctbase() = TestCtbase.test_ctbase() +``` + +### Registering the Test + +Tests are automatically discovered by the `CTBase.TestRunner` extension using the pattern `suite/*/test_*`. + +--- + +## 4. Best Practices & Rules + +### ⚠️ Crucial: Struct Definitions + +**NEVER define `struct`s inside test functions.** All helper types, mocks, and fakes must be defined at the **module top-level**. + +```julia +# ❌ WRONG +function test_something() + @testset "Test" begin + struct FakeType end # WRONG! Causes world-age issues + end +end + +# ✅ CORRECT +module TestSomething + +# TOP-LEVEL: Define all structs here +struct FakeType end + +function test_something() + @testset "Test" begin + obj = FakeType() # Correct + end +end + +end # module +``` + +### Test Structure + +- Use module isolation for each test file +- Separate unit and integration tests with clear comments +- Each test must be independent and deterministic + +### Directory Structure + +Tests are organized under `test/suite/` by **functionality**: + +- `suite/reexport/` - Reexport verification tests + +--- + +For more detailed testing standards, see the [CTBase Test Coverage Guide](https://control-toolbox.org/CTBase.jl/stable/test-coverage-guide.html). diff --git a/test/coverage.jl b/test/coverage.jl new file mode 100644 index 00000000..f74266fe --- /dev/null +++ b/test/coverage.jl @@ -0,0 +1,15 @@ +# ============================================================================== +# OptimalControl Coverage Post-Processing +# ============================================================================== +# +# See test/README.md for details. +# +# Usage: +# julia --project=@. -e 'using Pkg; Pkg.test("OptimalControl"; coverage=true); include("test/coverage.jl")' +# +# ============================================================================== + +pushfirst!(LOAD_PATH, @__DIR__) +using Coverage +using CTBase +CTBase.postprocess_coverage(; root_dir=dirname(@__DIR__)) \ No newline at end of file diff --git a/test/ctdirect/problems/beam.jl b/test/ctdirect/problems/beam.jl deleted file mode 100644 index b4bd7e01..00000000 --- a/test/ctdirect/problems/beam.jl +++ /dev/null @@ -1,17 +0,0 @@ -# Beam example from bocop - -function beam() - @def beam begin - t ∈ [0, 1], time - x ∈ R², state - u ∈ R, control - x(0) == [0, 1] - x(1) == [0, -1] - ẋ(t) == [x₂(t), u(t)] - 0 ≤ x₁(t) ≤ 0.1 - -10 ≤ u(t) ≤ 10 - ∫(u(t)^2) → min - end - - return ((ocp=beam, obj=8.898598, name="beam", init=nothing)) -end diff --git a/test/ctdirect/problems/beam2.jl b/test/ctdirect/problems/beam2.jl deleted file mode 100644 index 8eb8dd8d..00000000 --- a/test/ctdirect/problems/beam2.jl +++ /dev/null @@ -1,19 +0,0 @@ -# Beam example from bocop -# beam2: coordinate wise dynamics - -function beam2() - beam2 = @def begin - t ∈ [0, 1], time - x ∈ R², state - u ∈ R, control - x(0) == [0, 1] - x(1) == [0, -1] - ∂(x₁)(t) == x₂(t) - ∂(x₂)(t) == u(t) - 0 ≤ x₁(t) ≤ 0.1 - -10 ≤ u(t) ≤ 10 - ∫(u(t)^2) → min - end - - return ((ocp=beam2, obj=8.898598, name="beam2", init=nothing)) -end diff --git a/test/ctdirect/problems/bolza.jl b/test/ctdirect/problems/bolza.jl deleted file mode 100644 index e76bc7c5..00000000 --- a/test/ctdirect/problems/bolza.jl +++ /dev/null @@ -1,18 +0,0 @@ -# some test problems with free times - -function bolza_freetf() - @def ocp begin - tf ∈ R, variable - t ∈ [0, tf], time - x ∈ R, state - u ∈ R, control - tf >= 0.1 - x(t) >= 0 - ẋ(t) == tf * u(t) - x(0) == 0 - x(tf) == 1 - tf + 0.5∫(u(t)^2) → min - end - - return ((ocp=ocp, obj=1.476, name="bolza_freetf", init=nothing)) -end diff --git a/test/ctdirect/problems/double_integrator.jl b/test/ctdirect/problems/double_integrator.jl deleted file mode 100644 index e6b96111..00000000 --- a/test/ctdirect/problems/double_integrator.jl +++ /dev/null @@ -1,60 +0,0 @@ -# double integrator - -# min tf -function double_integrator_mintf() - @def ocp begin - tf ∈ R, variable - t ∈ [0, tf], time - x ∈ R², state - u ∈ R, control - -1 ≤ u(t) ≤ 1 - x(0) == [0, 0] - x(tf) == [1, 0] - 0.05 ≤ tf ≤ Inf - ẋ(t) == [x₂(t), u(t)] - tf → min - end - - return ((ocp=ocp, obj=2.0, name="double_integrator_mintf", init=nothing)) -end - -# min energy with fixed tf -function double_integrator_minenergy(T=2) - @def ocp begin - t ∈ [0, T], time - x ∈ R², state - u ∈ R, control - q = x₁ - v = x₂ - q(0) == 0 - v(0) == 0 - q(T) == 1 - v(T) == 0 - ẋ(t) == [v(t), u(t)] - ∫(u(t)^2) → min - end - - return ((ocp=ocp, obj=nothing, name="double_integrator_minenergy", init=nothing)) -end - -# max t0 with free t0,tf -function double_integrator_freet0tf() - @def ocp begin - v ∈ R², variable - t0 = v₁ - tf = v₂ - t ∈ [t0, tf], time - x ∈ R², state - u ∈ R, control - -1 ≤ u(t) ≤ 1 - x(t0) == [0, 0] - x(tf) == [1, 0] - 0.05 ≤ t0 ≤ 10 - 0.05 ≤ tf ≤ 10 - 0.01 ≤ tf - t0 ≤ Inf - ẋ(t) == [x₂(t), u(t)] - t0 → max - end - - return ((ocp=ocp, obj=8.0, name="double_integrator_freet0tf", init=nothing)) -end diff --git a/test/ctdirect/problems/fuller.jl b/test/ctdirect/problems/fuller.jl deleted file mode 100644 index 94212dbd..00000000 --- a/test/ctdirect/problems/fuller.jl +++ /dev/null @@ -1,16 +0,0 @@ -# Fuller example - -function fuller() - @def fuller begin - t ∈ [0, 3.5], time - x ∈ R², state - u ∈ R, control - -1 ≤ u(t) ≤ 1 - x(0) == [0, 1] - x(3.5) == [0, 0] - ẋ(t) == [x₂(t), u(t)] - ∫(x₁(t)^2) → min - end - - return ((ocp=fuller, obj=2.683944e-1, name="fuller", init=nothing)) -end diff --git a/test/ctdirect/problems/goddard.jl b/test/ctdirect/problems/goddard.jl deleted file mode 100644 index 059cb6c8..00000000 --- a/test/ctdirect/problems/goddard.jl +++ /dev/null @@ -1,187 +0,0 @@ -# Goddard problem -# free final time, fixed final mass, max altitude -# constraint on max speed - -using CTModels # for functional definitions - -# aux functions -# NB defining these inside the problem function does not seem to change the allocations -function F0(x, Cd, beta) - r, v, m = x - D = Cd * v^2 * exp(-beta * (r - 1)) - return [v, -D / m - 1 / r^2, 0] -end -function F1(x, Tmax, b) - r, v, m = x - return [0, Tmax / m, -b * Tmax] -end - -# abstract definition -function goddard(; vmax=0.1, Tmax=3.5) - # constants - Cd = 310 - beta = 500 - b = 2 - r0 = 1 - v0 = 0 - m0 = 1 - mf = 0.6 - x0 = [r0, v0, m0] - - @def goddard begin - tf ∈ R, variable - t ∈ [0, tf], time - x ∈ R^3, state - u ∈ R, control - 0.01 ≤ tf ≤ Inf - r = x[1] - v = x[2] - m = x[3] - x(0) == x0 - m(tf) == mf - r0 ≤ r(t) ≤ r0 + 0.1 - v0 ≤ v(t) ≤ vmax - mf ≤ m(t) ≤ m0 - 0 ≤ u(t) ≤ 1 - ẋ(t) == F0(x(t), Cd, beta) + u(t) * F1(x(t), Tmax, b) - r(tf) → max - end - - return ((ocp=goddard, obj=1.01257, name="goddard", init=(state=[1.01, 0.05, 0.8],))) -end - -# all constraints, CTModels inplace functional version -function goddard_all() - # constants - Cd = 310 - beta = 500 - b = 2 - r0 = 1 - v0 = 0 - m0 = 1 - mf = 0.6 - vmax = 0.1 - Tmax = 3.5 - - pre_ocp = CTModels.PreModel() - CTModels.state!(pre_ocp, 3) - CTModels.control!(pre_ocp, 1) - CTModels.variable!(pre_ocp, 1) - CTModels.time!(pre_ocp; t0=0.0, indf=1) - # state box (active at t0 and tf) - CTModels.constraint!( - pre_ocp, :state; rg=1:3, lb=[r0, v0, 0], ub=[Inf, Inf, m0], label=:state_rg - ) - # control box (active on last bang arc) - CTModels.constraint!(pre_ocp, :control; rg=1:1, lb=[0], ub=[Inf], label=:control_rg) - # variable box (inactive) - CTModels.constraint!( - pre_ocp, :variable; rg=1:1, lb=[0.01], ub=[Inf], label=:variable_rg - ) - # state constraint (active on constrained arc) - # control constraint (active on first bang arc) - # 'mixed' constraint (inactive) - function path!(r, t, x, u, v) - r[1] = x[2] - r[2] = u[1] - r[3] = x[1] + x[2] + x[3] + u[1] + v[1] - end - CTModels.constraint!( - pre_ocp, :path; f=(path!), lb=[-Inf, -Inf, 0], ub=[vmax, 1, Inf], label=:path - ) - mayer(x0, xf, v) = xf[1] - CTModels.objective!(pre_ocp, :max; mayer=mayer) - function f!(r, t, x, u, v) - r[1] = x[2] - D = Cd * x[2]^2 * exp(-beta * (x[1] - 1)) - r[2] = -D / x[3] - 1 / x[1]^2 + u[1] * Tmax / x[3] - r[3] = -b * Tmax * u[1] - end - CTModels.dynamics!(pre_ocp, f!) - function bc!(r, x0, xf, v) - r[1] = x0[1] - r[2] = x0[2] - r[3] = x0[3] - r[4] = xf[3] - end - CTModels.constraint!( - pre_ocp, - :boundary; - f=(bc!), - lb=[r0, v0, m0, mf], - ub=[r0, v0, m0, mf], - label=:boundary, - ) - CTModels.definition!(pre_ocp, Expr(:goddard_all)) - CTModels.time_dependence!(pre_ocp; autonomous=true) - ocp = CTModels.build(pre_ocp) - - return (( - ocp=ocp, - obj=1.01257, - name="goddard_all_constraints", - init=(state=[1.01, 0.05, 0.8],), - )) -end - -# all constraints, CTModels outplace functional version -function goddard_all_outplace() - # constants - Cd = 310 - beta = 500 - b = 2 - r0 = 1 - v0 = 0 - m0 = 1 - mf = 0.6 - vmax = 0.1 - Tmax = 3.5 - - pre_ocp = CTModels.PreModel() - CTModels.state!(pre_ocp, 3) - CTModels.control!(pre_ocp, 1) - CTModels.variable!(pre_ocp, 1) - CTModels.time!(pre_ocp; t0=0.0, indf=1) - # state box (active at t0 and tf) - CTModels.constraint!( - pre_ocp, :state; rg=1:3, lb=[r0, v0, 0], ub=[Inf, Inf, m0], label=:state_rg - ) - # control box (active on last bang arc) - CTModels.constraint!(pre_ocp, :control; rg=1:1, lb=[0], ub=[Inf], label=:control_rg) - # variable box (inactive) - CTModels.constraint!( - pre_ocp, :variable; rg=1:1, lb=[0.01], ub=[Inf], label=:variable_rg - ) - # state constraint (active on constrained arc) - # control constraint (active on first bang arc) - # 'mixed' constraint (inactive) - function path(t, x, u, v) - return [x[2], u[1], x[1] + x[2] + x[3] + u[1] + v[1]] - end - CTModels.constraint!( - pre_ocp, :path; f=path, lb=[-Inf, -Inf, 0], ub=[vmax, 1, Inf], label=:path - ) - mayer(x0, xf, v) = xf[1] - CTModels.objective!(pre_ocp, :max; mayer=mayer) - function f(r, t, x, u, v) - D = Cd * x[2]^2 * exp(-beta * (x[1] - 1)) - return [x[2], -D / x[3] - 1 / x[1]^2 + u[1] * Tmax / x[3], -b * Tmax * u[1]] - end - CTModels.dynamics!(pre_ocp, f) - function bc(x0, xf, v) - return [x0[1], x0[2], x0[3], xf[3]] - end - CTModels.constraint!( - pre_ocp, :boundary; f=bc, lb=[r0, v0, m0, mf], ub=[r0, v0, m0, mf], label=:boundary - ) - CTModels.definition!(pre_ocp, Expr(:goddard_all)) - CTModels.time_dependence!(pre_ocp; autonomous=true) - ocp = CTModels.build(pre_ocp) - - return (( - ocp=ocp, - obj=1.01257, - name="goddard_all_constraints", - init=(state=[1.01, 0.05, 0.8],), - )) -end diff --git a/test/ctdirect/problems/jackson.jl b/test/ctdirect/problems/jackson.jl deleted file mode 100644 index 083024aa..00000000 --- a/test/ctdirect/problems/jackson.jl +++ /dev/null @@ -1,27 +0,0 @@ -# Jackson example from Bocop - -function jackson() - @def jackson begin - # constants - k1 = 1 - k2 = 10 - k3 = 1 - - t ∈ [0, 4], time - x ∈ R³, state - u ∈ R, control - [0, 0, 0] ≤ x(t) ≤ [1.1, 1.1, 1.1] - 0 ≤ u(t) ≤ 1 - x(0) == [1, 0, 0] - a = x[1] - b = x[2] - ẋ(t) == [ - -u(t) * (k1 * a(t) - k2 * b(t)), - u(t) * (k1 * a(t) - k2 * b(t)) - (1 - u(t)) * k3 * b(t), - (1 - u(t)) * k3 * b(t), - ] - x[3](4) → max - end - - return ((ocp=jackson, obj=0.192011, name="jackson", init=nothing)) -end diff --git a/test/ctdirect/problems/parametric.jl b/test/ctdirect/problems/parametric.jl deleted file mode 100644 index 785c6888..00000000 --- a/test/ctdirect/problems/parametric.jl +++ /dev/null @@ -1,27 +0,0 @@ -# Parametric problem (name ??) - -function parametric(ρ) - relu(x) = max(0, x) - μ = 10 - p_relu(x) = log(abs(1 + exp(μ * x))) / μ - f(x) = 1 - x - m(x) = (p_relu ∘ f)(x) - T = 2 - - @def param begin - τ ∈ R, variable - s ∈ [0, 1], time - x ∈ R², state - u ∈ R², control - x₁(0) == 0 - x₂(0) == 1 - x₁(1) == 1 - ẋ(s) == [τ * (u₁(s) + 2), (T - τ) * u₂(s)] - -1 ≤ u₁(s) ≤ 1 - -1 ≤ u₂(s) ≤ 1 - 0 ≤ τ ≤ T - -(x₂(1) - 2)^3 - ∫(ρ * (τ * m(x₁(s))^2 + (T - τ) * m(x₂(s))^2)) → min - end - - return ((ocp=param, obj=nothing, name="parametric", init=nothing)) -end diff --git a/test/ctdirect/problems/robbins.jl b/test/ctdirect/problems/robbins.jl deleted file mode 100644 index b5b5e28c..00000000 --- a/test/ctdirect/problems/robbins.jl +++ /dev/null @@ -1,21 +0,0 @@ -# Robbins example from Bocop - -function robbins() - @def robbins begin - # constants - alpha = 3 - beta = 0 - gamma = 0.5 - - t ∈ [0, 10], time - x ∈ R³, state - u ∈ R, control - 0 ≤ x[1](t) ≤ Inf - x(0) == [1, -2, 0] - x(10) == [0, 0, 0] - ẋ(t) == [x[2](t), x[3](t), u(t)] - ∫(alpha * x[1](t) + beta * x[1](t)^2 + gamma * u(t)^2) → min - end - - return ((ocp=robbins, obj=19.4, name="robbins", init=nothing)) -end diff --git a/test/ctdirect/problems/simple_integrator.jl b/test/ctdirect/problems/simple_integrator.jl deleted file mode 100644 index 7a947383..00000000 --- a/test/ctdirect/problems/simple_integrator.jl +++ /dev/null @@ -1,17 +0,0 @@ -# simple intergator -# min energy, dual control - -function simple_integrator() - @def ocp begin - t ∈ [0, 1], time - x ∈ R, state - u ∈ R², control - [0, 0] ≤ u(t) ≤ [Inf, Inf] - x(0) == -1 - x(1) == 0 - ẋ(t) == -x(t) - u[1](t) + u[2](t) - ∫((u[1](t)+u[2](t))^2) → min - end - - return ((ocp=ocp, obj=3.13e-1, name="simple_integrator", init=nothing)) -end diff --git a/test/ctdirect/problems/vanderpol.jl b/test/ctdirect/problems/vanderpol.jl deleted file mode 100644 index 47eaeb60..00000000 --- a/test/ctdirect/problems/vanderpol.jl +++ /dev/null @@ -1,19 +0,0 @@ -# Van der Pol example from Bocop - -function vanderpol() - @def vanderpol begin - # constants - omega = 1 - epsilon = 1 - - t ∈ [0, 2], time - x ∈ R², state - u ∈ R, control - x(0) == [1, 0] - ẋ(t) == - [x[2](t), epsilon * omega * (1 - x[1](t)^2) * x[2](t) - omega^2 * x[1](t) + u(t)] - ∫(0.5 * (x[1](t)^2 + x[2](t)^2 + u(t)^2)) → min - end - - return ((ocp=vanderpol, obj=1.047921, name="vanderpol", init=nothing)) -end diff --git a/test/ctdirect/suite/test_all_ocp.jl b/test/ctdirect/suite/test_all_ocp.jl deleted file mode 100644 index 60097d95..00000000 --- a/test/ctdirect/suite/test_all_ocp.jl +++ /dev/null @@ -1,81 +0,0 @@ -println("testing: OCP definitions") - -# beam -if !isdefined(Main, :beam) - include("../problems/beam.jl") -end -@testset verbose = true showtiming = true ":beam" begin - prob = beam() - sol = solve(prob.ocp, display=false) - @test sol.objective ≈ prob.obj rtol = 1e-2 -end - -# double integrator min tf -if !isdefined(Main, :double_integrator_mintf) - include("../problems/double_integrator.jl") -end -@testset verbose = true showtiming = true ":double_integrator :min_tf" begin - prob = double_integrator_mintf() - sol = solve(prob.ocp, display=false) - @test sol.objective ≈ prob.obj rtol = 1e-2 -end - -# fuller -if !isdefined(Main, :fuller) - include("../problems/fuller.jl") -end -@testset verbose = true showtiming = true ":fuller" begin - prob = fuller() - sol = solve(prob.ocp, display=false) - @test sol.objective ≈ prob.obj rtol = 1e-2 -end - -# goddard max rf -if !isdefined(Main, :goddard) - include("../problems/goddard.jl") -end -@testset verbose = true showtiming = true ":goddard :max_rf" begin - prob = goddard() - sol = solve(prob.ocp, display=false) - @test sol.objective ≈ prob.obj rtol = 1e-2 -end - -# jackson -if !isdefined(Main, :jackson) - include("../problems/jackson.jl") -end -@testset verbose = true showtiming = true ":jackson" begin - prob = jackson() - sol = solve(prob.ocp, display=false) - @test sol.objective ≈ prob.obj rtol = 1e-2 -end - -# robbins obj is 19.4 instead of 20 -if !isdefined(Main, :robbins) - include("../problems/robbins.jl") -end -@testset verbose = true showtiming = true ":robbins" begin - prob = robbins() - sol = solve(prob.ocp, display=false) - @test sol.objective ≈ prob.obj rtol = 1e-2 -end - -# simple integrator -if !isdefined(Main, :simple_integrator) - include("../problems/simple_integrator.jl") -end -@testset verbose = true showtiming = true ":simple_integrator" begin - prob = simple_integrator() - sol = solve(prob.ocp, display=false) - @test sol.objective ≈ prob.obj rtol = 1e-2 -end - -# vanderpol -if !isdefined(Main, :vanderpol) - include("../problems/vanderpol.jl") -end -@testset verbose = true showtiming = true ":vanderpol" begin - prob = vanderpol() - sol = solve(prob.ocp, display=false) - @test sol.objective ≈ prob.obj rtol = 1e-2 -end diff --git a/test/ctdirect/suite/test_constraints.jl b/test/ctdirect/suite/test_constraints.jl deleted file mode 100644 index cf9c6fe3..00000000 --- a/test/ctdirect/suite/test_constraints.jl +++ /dev/null @@ -1,114 +0,0 @@ -println("testing: constraint types") - -if !isdefined(Main, :goddard) - include("../problems/goddard.jl") -end - -# ad hoc constraints / multipliers check -check_constraint_mult = false - -if !check_constraint_mult - - # box constraints - @testset verbose = true showtiming = true ":goddard :box_constraints" begin - prob = goddard() - sol = solve(prob.ocp, display=false) - @test sol.objective ≈ prob.obj rtol = 1e-2 - end - - # all constraints - @testset verbose = true showtiming = true ":goddard :all_constraints" begin - prob = goddard_all() - sol = solve(prob.ocp, display=false, init=prob.init) - @test sol.objective ≈ prob.obj rtol = 1e-2 - end - -else - # ad hoc check on goddard problem - # NB. sign mismatch between p(tf) and multiplier for final constraints - # +++if possible fix ordering in OCP: initial THEN final constraints ! - using SplitApplyCombine - pyplot() - - ocp = goddard_all() - sol = solve(ocp.ocp; display=false, init=ocp.init) - - # plot state, control and costate - psol = plot(sol) - - # check constraints and multipliers - T = sol.time_grid - - # POINT CONSTRAINTS - # boundary constraints (NB. ORDERING IS NOT OBVIOUS) - println("Boundary constraints: ", sol.boundary_constraints) - println("multipliers: ", sol.mult_boundary_constraints) - println("p(t0): ", sol.costate(T[1]), " p_m(tf) ", sol.costate(T[end])[3]) - # variable constraints / box - println("\nVariable constraints: ", sol.variable_constraints) - println("multipliers: ", sol.mult_variable_constraints) - println( - "\nVariable box multipliers LB: ", - sol.mult_variable_box_lower, - " UB ", - sol.mult_variable_box_upper, - ) - - # PATH CONSTRAINTS - # state box - x = invert(sol.state.(T)) - x_box_lb = invert(sol.mult_state_box_lower.(T)) - x_box_ub = invert(sol.mult_state_box_upper.(T)) - - p1_a = plot(T, x[1]; label="r") - p1_b = plot(T, [x_box_lb[1] x_box_ub[1]]; label=["LB" "UB"]) - p1 = plot(p1_a, p1_b; layout=(2, 1)) - - p2_a = plot(T, x[2]; label="v") - p2_b = plot(T, [x_box_lb[2] x_box_ub[2]]; label=["LB" "UB"]) - p2 = plot(p2_a, p2_b; layout=(2, 1)) - - p3_a = plot(T, x[3]; label="m") - p3_b = plot(T, [x_box_lb[3] x_box_ub[3]]; label=["LB" "UB"]) - p3 = plot(p3_a, p3_b; layout=(2, 1)) - - # control box - u = sol.control.(T) - u_box_lb = flatten(sol.mult_control_box_lower.(T)) - u_box_ub = flatten(sol.mult_control_box_upper.(T)) - p4_a = plot(T, u; label="u") - p4_b = plot(T, [u_box_lb u_box_ub]; label=["LB" "UB"]) - p4 = plot(p4_a, p4_b; layout=(2, 1)) - - p_box = plot( - p1, p2, p3, p4; layout=(2, 2), title=["r box" "" "v box" "" "m box" "" "u box" ""] - ) - display(p_box) - readline() #ffs julia, fix your damn plots - - # nonlinear path constraints - # control constraints - c_u = flatten(sol.control_constraints.(T)) - m_c_u = flatten(sol.mult_control_constraints.(T)) - p5_a = plot(T, c_u; label="c_u") - p5_b = plot(T, m_c_u; label="mul") - p5 = plot(p5_a, p5_b; layout=(2, 1)) - - # state constraints - c_x = flatten(sol.state_constraints.(T)) - m_c_x = flatten(sol.mult_state_constraints.(T)) - p6_a = plot(T, c_x; label="c_x") - p6_b = plot(T, m_c_x; label="mul") - p6 = plot(p6_a, p6_b; layout=(2, 1)) - - # mixed constraints - c_xu = flatten(sol.mixed_constraints.(T)) - m_c_xu = flatten(sol.mult_mixed_constraints.(T)) - p7_a = plot(T, c_xu; label="c_xu") - p7_b = plot(T, m_c_xu; label="mul") - p7 = plot(p7_a, p7_b; layout=(2, 1)) - - p_cons = plot( - p5, p6, p7; layout=(1, 3), title=["control cons" "" "state cons" "" "mixed cons" ""] - ) -end diff --git a/test/ctdirect/suite/test_continuation.jl b/test/ctdirect/suite/test_continuation.jl deleted file mode 100644 index 0b5aff32..00000000 --- a/test/ctdirect/suite/test_continuation.jl +++ /dev/null @@ -1,80 +0,0 @@ -println("testing: discrete continuation") - -test1 = true -test2 = true -test3 = true -draw_plot = false - -# double integrator -if test1 - if !isdefined(Main, :double_integrator_minenergy) - include("../problems/double_integrator.jl") - end - @testset verbose = true showtiming = true ":continuation :double_integrator" begin - init = nothing - obj_list = [] - for T in 1:5 - ocp = double_integrator_minenergy(T).ocp - sol = solve(ocp, display=false, init=init, grid_size=100) - init = sol - push!(obj_list, objective(sol)) - end - @test obj_list ≈ [12, 1.5, 0.44, 0.19, 0.096] rtol = 1e-2 - end -end - -# parametric -if test2 - if !isdefined(Main, :parametric) - include("../problems/parametric.jl") - end - - @testset verbose = true showtiming = true ":continuation :parametric_ocp" begin - init = () - obj_list = [] - for ρ in [0.1, 5, 10, 30, 100] - ocp = parametric(ρ).ocp - sol = solve(ocp, display=false, init=init) - init = sol - push!(obj_list, objective(sol)) - end - @test obj_list ≈ [-0.034, -1.67, -6.2, -35, -148] rtol = 1e-2 - end -end - -# goddard -if test3 - if !isdefined(Main, :goddard) - include("../problems/goddard.jl") - end - sol0 = solve(goddard().ocp; display=false) - - @testset verbose = true showtiming = true ":continuation :goddard" begin - sol = sol0 - Tmax_list = [] - obj_list = [] - for Tmax in 3.5:-0.5:1 - sol = solve(goddard(Tmax=Tmax).ocp, display=false, init=sol) - push!(Tmax_list, Tmax) - push!(obj_list, objective(sol)) - end - @test obj_list ≈ [1.0125, 1.0124, 1.0120, 1.0112, 1.0092, 1.0036] rtol = 1e-2 - - if draw_plot - using Plots - # plot obj(vmax) - pobj = plot( - Tmax_list, - obj_list, - label="r(tf)", - xlabel="Maximal thrust (Tmax)", - ylabel="Maximal altitude r(tf)", - seriestype=:scatter, - ) - # plot multiple solutions - plot(sol0) - p = plot!(sol) - display(plot(pobj, p, layout=2, reuse=false, size=(1000, 500))) - end - end -end diff --git a/test/ctdirect/suite/test_discretization.jl b/test/ctdirect/suite/test_discretization.jl deleted file mode 100644 index 80937201..00000000 --- a/test/ctdirect/suite/test_discretization.jl +++ /dev/null @@ -1,112 +0,0 @@ -println("testing: discretization options") - -normalize_grid(t) = return (t .- t[1]) ./ (t[end] - t[1]) -N = 250 - -# 1. simple integrator min energy (dual control for test) -if !isdefined(Main, :simple_integrator) - include("../problems/simple_integrator.jl") -end -ocp = simple_integrator().ocp -sol0 = solve(ocp; display=false) - -# solve with explicit and non uniform time grid -@testset verbose = true showtiming = true ":explicit_grid" begin - sol = solve(ocp, time_grid=LinRange(0, 1, N + 1), display=false) - @test (objective(sol) == objective(sol0)) && (iterations(sol) == iterations(sol0)) -end - -@testset verbose = true showtiming = true ":non_uniform_grid" begin - grid = [0, 0.1, 0.3, 0.6, 0.98, 0.99, 1] - sol = solve(ocp, time_grid=grid, display=false) - @test time_grid(sol) ≈ grid -end - -# 2. integrator free times -if !isdefined(Main, :double_integrator_freet0tf) - include("../problems/double_integrator.jl") -end -ocp = double_integrator_freet0tf().ocp -sol0 = solve(ocp; display=false) - -@testset verbose = true showtiming = true ":explicit_grid" begin - sol = solve(ocp, time_grid=LinRange(0, 1, N + 1), display=false) - @test (objective(sol) == objective(sol0)) && (iterations(sol) == iterations(sol0)) -end - -@testset verbose = true showtiming = true ":max_t0 :non_uniform_grid" begin - grid = [0, 0.1, 0.6, 0.95, 1] - sol = solve(ocp, time_grid=grid, display=false) - @test normalize_grid(time_grid(sol)) ≈ grid -end - -# 3. double integrator min energy ocp (T=2) with explicit / non-uniform grid -if !isdefined(Main, :double_integrator_minenergy) - include("../problems/double_integrator.jl") -end -ocp = double_integrator_minenergy(2).ocp -sol0 = solve(ocp; display=false) - -@testset verbose = true showtiming = true ":explicit_grid" begin - sol = solve(ocp, time_grid=LinRange(0, 1, N + 1), display=false) - @test (objective(sol) == objective(sol0)) && (iterations(sol) == iterations(sol0)) -end - -@testset verbose = true showtiming = true ":non_uniform_grid" begin - grid = [0, 0.3, 1, 1.9, 2] - sol = solve(ocp, time_grid=grid, display=false) - @test time_grid(sol) ≈ grid -end - -# discretization methods -if !isdefined(Main, :goddard_all) - include("../problems/goddard.jl") -end - -@testset verbose = true showtiming = true ":simple_integrator :disc_method" begin - prob = simple_integrator() - sol = solve(prob.ocp, display=false, disc_method=:trapeze) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:midpoint) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:euler) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:euler_implicit) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:gauss_legendre_2) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:gauss_legendre_3) - @test objective(sol) ≈ prob.obj rtol = 1e-2 -end - -@testset verbose = true showtiming = true ":double_integrator :disc_method" begin - prob = double_integrator_freet0tf() - sol = solve(prob.ocp, display=false, disc_method=:trapeze) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:midpoint) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:euler) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:euler_implicit) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:gauss_legendre_2) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:gauss_legendre_3) - @test objective(sol) ≈ prob.obj rtol = 1e-2 -end - -@testset verbose = true showtiming = true ":goddard :disc_method" begin - prob = goddard_all() - sol = solve(prob.ocp, display=false, disc_method=:trapeze) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:midpoint) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:euler) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:euler_implicit) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:gauss_legendre_2) - @test objective(sol) ≈ prob.obj rtol = 1e-2 - sol = solve(prob.ocp, display=false, disc_method=:gauss_legendre_3) - @test objective(sol) ≈ prob.obj rtol = 1e-2 -end diff --git a/test/ctdirect/suite/test_exa.jl b/test/ctdirect/suite/test_exa.jl deleted file mode 100644 index 48fce692..00000000 --- a/test/ctdirect/suite/test_exa.jl +++ /dev/null @@ -1,30 +0,0 @@ -# beam2 -if !isdefined(Main, :beam2) - include("../problems/beam2.jl") -end - -display = false # during optim solves - -# Test on CPU - -println("testing: ExaModels (CPU)") - -@testset verbose = true showtiming = true ":examodel :cpu :trapeze" begin - prob = beam2() - sol = solve(prob.ocp, :madnlp, :exa; disc_method=:trapeze, display=display) - @test sol.objective ≈ prob.obj rtol = 1e-2 -end - -@testset verbose = true showtiming = true ":examodel :cpu :euler :init" begin - prob = beam2() - sol = solve( - prob.ocp, - :madnlp, - :exa; - disc_method=:euler, - display=display, - init=(control=6.66,), - max_iter=0, - ) - @test control(sol)(0.5) == 6.66 -end diff --git a/test/ctdirect/suite/test_initial_guess.jl b/test/ctdirect/suite/test_initial_guess.jl deleted file mode 100644 index 5539cbe3..00000000 --- a/test/ctdirect/suite/test_initial_guess.jl +++ /dev/null @@ -1,177 +0,0 @@ -println("testing: initial guess options") - -# use 0 iterations to check initial guess, >0 to check cv -maxiter = 0 - -# reference solution -prob = double_integrator_mintf() -ocp = prob.ocp -sol0 = solve(ocp; display=false) - -# constant initial guess -x_const = [0.5, 0.2] -u_const = 0.5 -v_const = 0.15 - -# functional initial guess -x_func = t -> [t^2, sqrt(t)] -u_func = t -> (cos(10 * t) + 1) * 0.5 - -# interpolated initial guess -x_vec = [[0, 0], [1, 2], [5, -1]] -x_matrix = [0 0; 1 2; 5 -1] -u_vec = [0, 0.3, 0.1] - -################################################# -# 1 Pass initial guess to all-in-one solve call - -# 1.a default initial guess -@testset verbose = true showtiming = true ":default_init_no_arg" begin - sol = solve(ocp, display=false, max_iter=maxiter) - T = time_grid(sol) - @test isapprox(state(sol).(T), (t -> [0.1, 0.1]).(T), rtol=1e-2) - @test isapprox(control(sol).(T), (t -> 0.1).(T), rtol=1e-2) - @test isapprox(variable(sol), 0.1, rtol=1e-2) -end -@testset verbose = true showtiming = true ":default_init_()" begin - sol = solve(ocp, display=false, init=(), max_iter=maxiter) - T = time_grid(sol) - @test isapprox(state(sol).(T), (t -> [0.1, 0.1]).(T), rtol=1e-2) - @test isapprox(control(sol).(T), (t -> 0.1).(T), rtol=1e-2) - @test isapprox(variable(sol), 0.1, rtol=1e-2) -end -@testset verbose = true showtiming = true ":default_init_nothing" begin - sol = solve(ocp, display=false, init=nothing, max_iter=maxiter) - T = time_grid(sol) - @test isapprox(state(sol).(T), (t -> [0.1, 0.1]).(T), rtol=1e-2) - @test isapprox(control(sol).(T), (t -> 0.1).(T), rtol=1e-2) - @test variable(sol) == 0.1 -end - -# 1.b constant initial guess -@testset verbose = true showtiming = true ":constant_x" begin - sol = solve(ocp, display=false, init=(state=x_const,), max_iter=maxiter) - T = time_grid(sol) - @test isapprox(state(sol).(T), (t -> x_const).(T), rtol=1e-2) -end -@testset verbose = true showtiming = true ":constant_u" begin - sol = solve(ocp, display=false, init=(control=u_const,), max_iter=maxiter) - T = time_grid(sol) - @test isapprox(control(sol).(T), (t -> u_const).(T), rtol=1e-2) -end -@testset verbose = true showtiming = true ":constant_v" begin - sol = solve(ocp, display=false, init=(variable=v_const,), max_iter=maxiter) - @test variable(sol) == v_const -end -@testset verbose = true showtiming = true ":constant_xu" begin - sol = solve(ocp, display=false, init=(state=x_const, control=u_const), max_iter=maxiter) - T = time_grid(sol) - @test isapprox(state(sol).(T), (t -> x_const).(T), rtol=1e-2) - @test isapprox(control(sol).(T), (t -> u_const).(T), rtol=1e-2) -end -@testset verbose = true showtiming = true ":constant_xv" begin - sol = solve( - ocp, display=false, init=(state=x_const, variable=v_const), max_iter=maxiter - ) - T = time_grid(sol) - @test isapprox(state(sol).(T), (t -> x_const).(T), rtol=1e-2) - @test variable(sol) == v_const -end -@testset verbose = true showtiming = true ":constant_uv" begin - sol = solve( - ocp, display=false, init=(control=u_const, variable=v_const), max_iter=maxiter - ) - T = time_grid(sol) - @test isapprox(control(sol).(T), (t -> u_const).(T), rtol=1e-2) - @test variable(sol) == v_const -end -@testset verbose = true showtiming = true ":constant_xuv" begin - sol = solve( - ocp, - display=false, - init=(state=x_const, control=u_const, variable=v_const), - max_iter=maxiter, - ) - T = time_grid(sol) - @test isapprox(state(sol).(T), (t -> x_const).(T), rtol=1e-2) - @test isapprox(control(sol).(T), (t -> u_const).(T), rtol=1e-2) - @test variable(sol) == v_const -end - -# 1. functional initial guess -@testset verbose = true showtiming = true ":functional_x" begin - sol = solve(ocp, display=false, init=(state=x_func,), max_iter=maxiter) - T = time_grid(sol) - @test isapprox(state(sol).(T), x_func.(T), rtol=1e-2) -end -@testset verbose = true showtiming = true ":functional_u" begin - sol = solve(ocp, display=false, init=(control=u_func,), max_iter=maxiter) - T = time_grid(sol) - @test isapprox(control(sol).(T), u_func.(T), rtol=1e-2) -end -@testset verbose = true showtiming = true ":functional_xu" begin - sol = solve(ocp, display=false, init=(state=x_func, control=u_func), max_iter=maxiter) - T = time_grid(sol) - @test isapprox(state(sol).(T), x_func.(T), rtol=1e-2) - @test isapprox(control(sol).(T), u_func.(T), rtol=1e-2) -end - -# 1.d interpolated initial guess -t_vec = [0, 0.1, v_const] -@testset verbose = true showtiming = true ":vector_txu :constant_v" begin - sol = solve( - ocp, - display=false, - init=(time=t_vec, state=x_vec, control=u_vec, variable=v_const), - max_iter=maxiter, - ) - @test isapprox(state(sol).(t_vec), x_vec, rtol=1e-2) - @test isapprox(control(sol).(t_vec), u_vec, rtol=1e-2) - @test variable(sol) == v_const -end -t_matrix = [0 0.1 v_const] -@testset verbose = true showtiming = true ":matrix_t :vector_xu :constant_v" begin - sol = solve( - ocp, - display=false, - init=(time=t_matrix, state=x_vec, control=u_vec, variable=v_const), - max_iter=maxiter, - ) - @test isapprox(state(sol).(flatten(t_matrix)), x_vec, rtol=1e-2) - @test isapprox(control(sol).(flatten(t_matrix)), u_vec, rtol=1e-2) - @test variable(sol) == v_const -end -@testset verbose = true showtiming = true ":matrix_x :vector_tu :constant_v" begin - sol = solve( - ocp, - display=false, - init=(time=t_vec, state=x_matrix, control=u_vec, variable=v_const), - max_iter=maxiter, - ) - @test isapprox(stack(state(sol).(t_matrix), dims=1), x_matrix, rtol=1e-2) - @test isapprox(control(sol).(t_vec), u_vec, rtol=1e-2) - @test variable(sol) == v_const -end - -# 1.e mixed initial guess -@testset verbose = true showtiming = true ":vector_tx :functional_u :constant_v" begin - sol = solve( - ocp, - display=false, - init=(time=t_vec, state=x_vec, control=u_func, variable=v_const), - max_iter=maxiter, - ) - T = time_grid(sol) - @test isapprox(state(sol).(t_vec), x_vec, rtol=1e-2) - @test isapprox(control(sol).(T), u_func.(T), rtol=1e-2) - @test variable(sol) == v_const -end - -# 1.f warm start -@testset verbose = true showtiming = true ":warm_start" begin - sol = solve(ocp, display=false, init=sol0, max_iter=maxiter) - T = time_grid(sol) - @test isapprox(state(sol).(T), state(sol0).(T), rtol=1e-2) - @test isapprox(control(sol).(T), control(sol0).(T), rtol=1e-2) - @test variable(sol) == variable(sol0) -end diff --git a/test/ctdirect/suite/test_objective.jl b/test/ctdirect/suite/test_objective.jl deleted file mode 100644 index 5b2571b6..00000000 --- a/test/ctdirect/suite/test_objective.jl +++ /dev/null @@ -1,60 +0,0 @@ -println("testing: objective") - -# min tf -if !isdefined(Main, :double_integrator_mintf) - include("../problems/double_integrator.jl") -end - -@testset verbose = true showtiming = true ":min_tf :mayer" begin - prob = double_integrator_mintf() - sol = solve(prob.ocp, display=false) - @test objective(sol) ≈ prob.obj rtol = 1e-2 -end - -# max t0 (free t0 and tf) -@testset verbose = true showtiming = true ":max_t0" begin - prob = double_integrator_freet0tf() - sol = solve(prob.ocp, display=false) - @test objective(sol) ≈ prob.obj rtol = 1e-2 -end - -# bolza, non-autonomous mayer term, tf in dynamics -if !isdefined(Main, :bolza_freetf) - include("../problems/bolza.jl") -end -prob = bolza_freetf() -@testset verbose = true showtiming = true ":bolza :tf_in_dyn_and_cost" begin - sol = solve(prob.ocp, display=false) - @test objective(sol) ≈ prob.obj rtol = 1e-2 -end - -#= +++retry with :default AD backend ? -@def ocp begin - v = (t0, tf) ∈ R^2, variable - t ∈ [t0, tf], time - x ∈ R, state - u ∈ R, control - ẋ(t) == tf * u(t) + t0 - x(t0) == 0 - x(tf) == 1 - 0 ≤ t0 ≤ 10 - 0.01 ≤ tf - t0 ≤ 10 - (t0^2 + tf) + 0.5∫(u(t)^2) → min -end -@testset verbose = true showtiming = true ":bolza :t0_tf_in_dyn_and_cost" begin - sol = solve(ocp, print_level=5) - @test sol.variable[1] ≈ 1.107 rtol=1e-2 -end - -# :default backend ? -@def ocp2 begin - s ∈ [0, 1], time - y ∈ R^2, state - u ∈ R, control - ẏ(s) == [u(s), 0] - y[1](0) == 0 - y[1](1) == 0 - ∫(u(s)^2) → min -end -sol = solve(ocp2) -=# diff --git a/test/extras/check_ownership.jl b/test/extras/check_ownership.jl deleted file mode 100644 index f9ed6550..00000000 --- a/test/extras/check_ownership.jl +++ /dev/null @@ -1,39 +0,0 @@ -using OptimalControl -using CTBase -using CTSolvers -using CTDirect -using CTFlows -using CTModels -using CTParser - -# Symbol to check -sym_to_check = :initial_guess - -# List of modules to check -modules = [ - (:CTBase, CTBase), - (:CTSolvers, CTSolvers), - (:CTDirect, CTDirect), - (:CTFlows, CTFlows), - (:CTModels, CTModels), - (:CTParser, CTParser), - (:OptimalControl, OptimalControl) -] - -println("Checking symbol: :$(sym_to_check)") -println("-"^30) - -for (name, mod) in modules - is_defined = isdefined(mod, sym_to_check) - is_exported = sym_to_check in names(mod) - - status = if is_exported - "Exported" - elseif is_defined - "Defined (internal)" - else - "Not found" - end - - println("$(name): $(status)") -end diff --git a/test/extras/cons.jl b/test/extras/cons.jl deleted file mode 100644 index 84688fea..00000000 --- a/test/extras/cons.jl +++ /dev/null @@ -1,98 +0,0 @@ -using OptimalControl -using NLPModelsIpopt -using Plots -using CTModels -using NonlinearSolve -using OrdinaryDiffEq - -t0 = 0 -tf = 2 -x0 = 1 -xf = 1/2 -lb = 0.1 - -ocp = @def begin - t ∈ [t0, tf], time - x ∈ R, state - u ∈ R, control - - -1 ≤ u(t) ≤ 1 - - x(t0) == x0 - x(tf) == xf - - x(t) - lb ≥ 0, (1) - - ẋ(t) == u(t) - - ∫(x(t)^2) → min -end; - -sol = solve(ocp; grid_size=500, print_level=4, disc_method=:gauss_legendre_2); - -plt = plot(sol, ocp) - -# -t = time_grid(sol); -x = state(sol); -p = costate(sol); -u = control(sol); - -# -h = (tf-t0)/length(t); - -# -η = CTModels.dual(sol, ocp, :eq1); - -# -pη1 = plot(plt[5]); -pη2 = plot(t, t->η(t)/h; color=:red, legend=false); -plot(pη1, pη2; layout=(2, 1)) - -# Voyons la constance du hamiltonien -g(x) = x - lb; -ε = 1e-3; -t12 = t[0 .≤ (g ∘ x).(t) .≤ ε]; -t1 = min(t12...) -t2 = max(t12...) - -H(x, p, u, η) = p*u - x^2 + η*g(x); -H(t) = H(x(t), p(t), u(t), η(t)*h); -plt_H = plot(t, H; color=:green, label="direct") - -# shooting -f1 = Flow(ocp, (x, p) -> -1); -f2 = Flow(ocp, (x, p) -> 0, (x, u) -> g(x), (x, p) -> 2x); -f3 = Flow(ocp, (x, p) -> +1); -function S(p0, t1, t2) - x1, p1 = f1(t0, x0, p0, t1) - x2, p2 = f2(t1, x1, p1, t2) - x3, p3 = f3(t2, x2, p2, tf) - return [p1, g(x1), x3-xf] -end; - -ξ = [p(t0), t1, t2] # initial guess -nle! = (s, ξ, λ) -> s .= S(ξ...) # auxiliary function -prob = NonlinearProblem(nle!, ξ) # NLE problem with initial guess - -indirect_sol = solve(prob, SimpleNewtonRaphson(); show_trace=Val(true)) - -# we retrieve the costate solution together with the times -p0 = indirect_sol.u[1] -t1 = indirect_sol.u[2] -t2 = indirect_sol.u[3] - -f = f1 * (t1, f2) * (t2, f3); -sol_flow = f((t0, tf), x0, p0); -plot(sol_flow; label="indirect") - -t_flow = time_grid(sol_flow); -x_flow = state(sol_flow); -p_flow = costate(sol_flow); -u_flow = control(sol_flow); -η_flow = dual(sol, ocp, :eq1) # t -> 2x(t) * (t1 ≤ t ≤ t2) - -H_flow(t) = H(x_flow(t), p_flow(t), u_flow(t), η_flow(t)); -plot!(plt_H, t, H_flow; color=:blue, label="indirect") - -plot(t_flow, η_flow) diff --git a/test/extras/cons_2.jl b/test/extras/cons_2.jl deleted file mode 100644 index 0f696105..00000000 --- a/test/extras/cons_2.jl +++ /dev/null @@ -1,41 +0,0 @@ -using OptimalControl -using OrdinaryDiffEq - -t0 = 0 -tf = 2 -x0 = 1 -xf = 1/2 -lb = 0.1 - -ocp = @def begin - t ∈ [t0, tf], time - x ∈ R, state - u ∈ R, control - - -1 ≤ u(t) ≤ 1 - - x(t0) == x0 - x(tf) == xf - - x(t) - lb ≥ 0 # state constraint - - ẋ(t) == u(t) - - ∫(x(t)^2) → min -end - -u(x, p) = 0 # boundary control -c(x, u) = x-lb # constraint -η(x, p) = 2x # dual variable - -f1 = Flow(ocp, (x, p) -> -1) -f2 = Flow(ocp, u, c, η) -f3 = Flow(ocp, (x, p) -> +1) - -t1 = 0.9 -t2 = 1.6 -f = f1 * (t1, f2) * (t2, f3) - -p0 = -0.982237546583301 -xf, pf = f(t0, x0, p0, tf) -xf diff --git a/test/extras/ensemble.jl b/test/extras/ensemble.jl deleted file mode 100644 index a01706a8..00000000 --- a/test/extras/ensemble.jl +++ /dev/null @@ -1,21 +0,0 @@ -using OptimalControl -using NLPModelsIpopt -using Plots - -c0(N) = repeat([-1, 0], N) -cf(N) = repeat([0, 0], N) -f(x, u) = [x[2], u] -f(x, u, N) = reduce(vcat, [f(x[(2i - 1):2i], u) for i in 1:N]) - -N = 3 -ocp = @def begin - t ∈ [0, 1], time - x ∈ R^(2N), state - u ∈ R, control - x(0) == c0(N) - x(1) == cf(N) - ẋ(t) == f(x(t), u(t), N) - ∫(0.5u(t)^2) → min -end - -sol = solve(ocp) diff --git a/test/extras/export.jl b/test/extras/export.jl deleted file mode 100644 index 4c7caf98..00000000 --- a/test/extras/export.jl +++ /dev/null @@ -1,27 +0,0 @@ -using OptimalControl -using NLPModelsIpopt - -ocp = @def begin - t ∈ [0, 1], time - x ∈ R², state - u ∈ R, control - x(0) == [-1, 0] - x(1) == [0, 0] - ẋ(t) == [x₂(t), u(t)] - ∫(0.5u(t)^2) → min -end - -sol = solve(ocp) - -using JLD2 -export_ocp_solution(sol; filename="my_solution") -sol_jld = import_ocp_solution(ocp; filename="my_solution") -println("Objective from computed solution: ", objective(sol)) -println("Objective from imported solution: ", objective(sol_jld)) -println("type of imported solution: ", typeof(sol_jld)) - -using JSON3 -export_ocp_solution(sol; filename="my_solution", format=:JSON) -sol_json = import_ocp_solution(ocp; filename="my_solution", format=:JSON) -println("Objective from computed solution: ", objective(sol)) -println("Objective from imported solution: ", objective(sol_json)) diff --git a/test/extras/nonautonomous.jl b/test/extras/nonautonomous.jl deleted file mode 100644 index 85f64946..00000000 --- a/test/extras/nonautonomous.jl +++ /dev/null @@ -1,36 +0,0 @@ -using OptimalControl -using NLPModelsIpopt -using Plots - -t0 = 0 -tf = π/4 -x0 = 0 -xf = tan(π/4) - 2log(√(2)/2) - -ocp = @def begin - t ∈ [t0, tf], time - x ∈ R, state - u ∈ R, control - - x(t0) == x0 - x(tf) == xf - - ẋ(t) == u(t) * (1 + tan(t)) - - 0.5∫(u(t)^2) → min -end; - -sol = solve(ocp; print_level=4); - -plt = plot(sol, ocp) - -u(t) = 1 + tan(t) -plot!(plt[3], range(t0, tf, 101), u; color=:red, legend=false) - -using OrdinaryDiffEq -u(t, x, p) = p * (1 + tan(t)) -f = Flow(ocp, u; autonomous=false) -p0 = 1 -xf, pf = f(t0, x0, p0, tf) - -xf - (tan(π/4) - 2log(√(2)/2)) diff --git a/test/extras/ocp.jl b/test/extras/ocp.jl deleted file mode 100644 index b8b81845..00000000 --- a/test/extras/ocp.jl +++ /dev/null @@ -1,28 +0,0 @@ -using Pkg -Pkg.activate(".") - -using OptimalControl - -# activate NLP modelers -using ADNLPModels -# + using ExaModels (in test_exa for now) - -# activate NLP solvers -using NLPModelsIpopt -using MadNLP - -n=2 -@def ocp begin - tf ∈ R, variable - t ∈ [0, tf], time - x ∈ R^n, state - u ∈ R, control - -1 ≤ u(t) ≤ 1 - x(0) == [0, 0] - x(tf) == [1, 0] - 0.05 ≤ tf ≤ Inf - ẋ(t) == [x₂(t), u(t)] - tf → min -end true - -sol = solve(ocp, :adnlp, :ipopt; print_level=5); diff --git a/test/indirect/Goddard.jl b/test/indirect/Goddard.jl deleted file mode 100644 index 4c744225..00000000 --- a/test/indirect/Goddard.jl +++ /dev/null @@ -1,54 +0,0 @@ -# parameters -const Cd = 310 -const Tmax = 3.5 -const β = 500 -const b = 2 -const t0 = 0 -const r0 = 1 -const v0 = 0 -const vmax = 0.1 -const m0 = 1 -const mf = 0.6 -const x0 = [r0, v0, m0] - -function Goddard() - - # model - ocp = @def ocp begin - - # variables - tf ∈ R, variable - t ∈ [t0, tf], time - x = (r, v, m) ∈ R³, state - u ∈ R, control - - # constraints - 0 ≤ u(t) ≤ 1, (u_con) - r(t) ≥ r0, (x_con_rmin) - 0 ≤ v(t) ≤ vmax, (x_con_vmax) - x(t0) == x0, (initial_con) - m(tf) == mf, (final_con) - - # dynamics - ẋ(t) == F0(x(t)) + u(t) * F1(x(t)) - - # objective - r(tf) → max - end - - objective = 1.0125762700748699 - - return ocp, objective -end - -# dynamics -function F0(x) - r, v, m = x - D = Cd * v^2 * exp(-β * (r - 1)) - return [v, -D / m - 1 / r^2, 0] -end - -function F1(x) - r, v, m = x - return [0, Tmax / m, -b * Tmax] -end diff --git a/test/indirect/test_goddard_indirect.jl b/test/indirect/test_goddard_indirect.jl deleted file mode 100644 index f0bc637c..00000000 --- a/test/indirect/test_goddard_indirect.jl +++ /dev/null @@ -1,60 +0,0 @@ -function test_goddard_indirect() - ocp, obj = Goddard() - g(x) = vmax - x[2] # todo: g(x, u) ≥ 0 (cf. nonnegative multiplier), could be retrieved from constraints - final_mass_cons(xf) = xf[3] - mf - - # bang controls - u0 = 0 - u1 = 1 - - # singular control - H0 = Lift(F0) - H1 = Lift(F1) - H01 = @Lie {H0, H1} - H001 = @Lie {H0, H01} - H101 = @Lie {H1, H01} - us(x, p) = -H001(x, p) / H101(x, p) - - # boundary control - #ub(x) = -(F0 ⋅ g)(x) / (F1 ⋅ g)(x) - ub(x) = -Lie(F0, g)(x) / Lie(F1, g)(x) - #μ(x, p) = H01(x, p) / (F1 ⋅ g)(x) - μ(x, p) = H01(x, p) / Lie(F1, g)(x) - - # flows - f0 = Flow(ocp, (x, p, v) -> u0) - f1 = Flow(ocp, (x, p, v) -> u1) - fs = Flow(ocp, (x, p, v) -> us(x, p)) - fb = Flow(ocp, (x, p, v) -> ub(x), (x, u, v) -> g(x), (x, p, v) -> μ(x, p)) - - # shooting function - function shoot!(s, p0, t1, t2, t3, tf) # B+ S C B0 structure - x1, p1 = f1(t0, x0, p0, t1) - x2, p2 = fs(t1, x1, p1, t2) - x3, p3 = fb(t2, x2, p2, t3) - xf, pf = f0(t3, x3, p3, tf) - s[1] = final_mass_cons(xf) - s[2:3] = pf[1:2] - [1, 0] - s[4] = H1(x1, p1) - s[5] = H01(x1, p1) - s[6] = g(x2) - return s[7] = H0(xf, pf) # free tf - end - - # tests - p0 = [3.9457646586891744, 0.15039559623165552, 0.05371271293970545] - t1 = 0.023509684041879215 - t2 = 0.059737380899876 - t3 = 0.10157134842432228 - tf = 0.20204744057100849 - - # test shooting function with solve from NonlinearSolve - s = zeros(eltype(p0), 7) - ξ0 = [p0; t1; t2; t3; tf] - shoot!(s, ξ, λ) = shoot!(s, ξ[1:3], ξ[4], ξ[5], ξ[6], ξ[7]) - prob = NonlinearProblem(shoot!, ξ0) - sol = solve(prob) - ξ = sol.u - p0, t1, t2, t3, tf = ξ[1:3], ξ[4], ξ[5], ξ[6], ξ[7] - @test norm(s) < 1e-6 -end diff --git a/test/problems/beam.jl b/test/problems/beam.jl deleted file mode 100644 index 542d7500..00000000 --- a/test/problems/beam.jl +++ /dev/null @@ -1,28 +0,0 @@ -# Beam optimal control problem definition used by tests and examples. -# -# Returns a NamedTuple with fields: -# - ocp :: the CTParser-defined optimal control problem -# - obj :: reference optimal objective value (Ipopt / MadNLP, Collocation) -# - name :: a short problem name -# - init :: NamedTuple of components for CTSolvers.initial_guess -function Beam() - ocp = @def begin - t ∈ [0, 1], time - x ∈ R², state - u ∈ R, control - - x(0) == [0, 1] - x(1) == [0, -1] - 0 ≤ x₁(t) ≤ 0.1 - -10 ≤ u(t) ≤ 10 - - ∂(x₁)(t) == x₂(t) - ∂(x₂)(t) == u(t) - - ∫(u(t)^2) → min - end - - init = (state=[0.05, 0.1], control=0.1) - - return (ocp=ocp, obj=8.898598, name="beam", init=init) -end diff --git a/test/problems/goddard.jl b/test/problems/goddard.jl deleted file mode 100644 index 310adcdb..00000000 --- a/test/problems/goddard.jl +++ /dev/null @@ -1,64 +0,0 @@ -# Goddard rocket optimal control problem used by CTSolvers tests. - -""" - Goddard(; vmax=0.1, Tmax=3.5) - -Return data for the classical Goddard rocket ascent, formulated as a -*maximization* of the final altitude `r(tf)`. - -The function returns a NamedTuple with fields: - - * `ocp` – CTParser/@def optimal control problem - * `obj` – reference optimal objective value - * `name` – short problem name (`"goddard"`) - * `init` – NamedTuple of components for `CTSolvers.initial_guess`, similar - in spirit to `Beam()`. -""" -function Goddard(; vmax=0.1, Tmax=3.5) - # constants - Cd = 310 - beta = 500 - b = 2 - r0 = 1 - v0 = 0 - m0 = 1 - mf = 0.6 - x0 = [r0, v0, m0] - - @def goddard begin - tf ∈ R, variable - t ∈ [0, tf], time - x ∈ R^3, state - u ∈ R, control - - 0.01 ≤ tf ≤ Inf - - r = x[1] - v = x[2] - m = x[3] - - x(0) == x0 - m(tf) == mf - - r0 ≤ r(t) ≤ r0 + 0.1 - v0 ≤ v(t) ≤ vmax - mf ≤ m(t) ≤ m0 - 0 ≤ u(t) ≤ 1 - - # Component-wise dynamics (Goddard rocket) - D = Cd * v(t)^2 * exp(-beta * (r(t) - r0)) - g = 1 / r(t)^2 - T = Tmax * u(t) - - ∂(r)(t) == v(t) - ∂(v)(t) == (T - D - m(t) * g) / m(t) - ∂(m)(t) == -b * T - - r(tf) → max - end - - # Components for a reasonable initial guess around a feasible trajectory. - init = (state=[1.01, 0.05, 0.8], control=0.5, variable=[0.1]) - - return (ocp=goddard, obj=1.01257, name="goddard", init=init) -end diff --git a/test/runtests.jl b/test/runtests.jl index 0ae5916d..17cb0470 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,52 +1,58 @@ +# ============================================================================== +# OptimalControl Test Runner +# ============================================================================== +# +# See test/README.md for usage instructions (running specific tests, coverage, etc.) +# +# ============================================================================== + +# Test dependencies using Test -using ADNLPModels -using CommonSolve using CTBase -using CTDirect -using CTModels -using CTSolvers using OptimalControl -using NLPModelsIpopt -using MadNLP -using MadNLPMumps -using NLPModels -using LinearAlgebra -using OrdinaryDiffEq -using DifferentiationInterface -using ForwardDiff: ForwardDiff -using NonlinearSolve -using SolverCore -using SplitApplyCombine # for flatten in some tests - -# NB some direct tests use functional definition and are `using CTModels` - -# @testset verbose = true showtiming = true "Optimal control tests" begin - -# # ctdirect tests -# @testset verbose = true showtiming = true "CTDirect tests" begin -# # run all scripts in subfolder suite/ -# include.(filter(contains(r".jl$"), readdir("./ctdirect/suite"; join=true))) -# end - -# # other tests: indirect -# include("./indirect/Goddard.jl") -# for name in (:goddard_indirect,) -# @testset "$(name)" begin -# test_name = Symbol(:test_, name) -# println("Testing: " * string(name)) -# include("./indirect/$(test_name).jl") -# @eval $test_name() -# end -# end -# end +# Trigger loading of optional extensions +const TestRunner = Base.get_extension(CTBase, :TestRunner) + +# Controls nested testset output formatting (used by individual test files) +module TestOptions const VERBOSE = true const SHOWTIMING = true +end +using .TestOptions: VERBOSE, SHOWTIMING + +# # Include shared test problems via TestProblems module +# include(joinpath("problems", "TestProblems.jl")) +# using .TestProblems + +# Run tests using the TestRunner extension +CTBase.run_tests(; + args=String.(ARGS), + testset_name="OptimalControl tests", + available_tests=( + "suite/*/test_*", + ), + filename_builder=name -> Symbol(:test_, name), + funcname_builder=name -> Symbol(:test_, name), + verbose=VERBOSE, + showtiming=SHOWTIMING, + test_dir=@__DIR__, +) + +# If running with coverage enabled, remind the user to run the post-processing script +# because .cov files are flushed at process exit and cannot be cleaned up by this script. +if Base.JLOptions().code_coverage != 0 + println( + """ + +================================================================================ +[OptimalControl] Coverage files generated. -include(joinpath(@__DIR__, "problems", "beam.jl")) -include(joinpath(@__DIR__, "problems", "goddard.jl")) +To process them, move them to the coverage/ directory, and generate a report, +please run: -@testset verbose = VERBOSE showtiming = SHOWTIMING "Optimal control tests" begin - include(joinpath(@__DIR__, "test_optimalcontrol_solve_api.jl")) - test_optimalcontrol_solve_api() + julia --project=@. -e 'using Pkg; Pkg.test("OptimalControl"; coverage=true); include("test/coverage.jl")' +================================================================================ +""", + ) end \ No newline at end of file diff --git a/test/suite/reexport/test_ctbase.jl b/test/suite/reexport/test_ctbase.jl new file mode 100644 index 00000000..123b970c --- /dev/null +++ b/test/suite/reexport/test_ctbase.jl @@ -0,0 +1,30 @@ +module TestCtbase + +using Test +using OptimalControl +const VERBOSE = isdefined(Main, :TestOptions) ? Main.TestOptions.VERBOSE : true +const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : true + +function test_ctbase() + @testset "CTBase reexports" verbose = VERBOSE showtiming = SHOWTIMING begin + @testset "Exceptions" begin + for T in ( + CTException, + IncorrectArgument, + PreconditionError, + NotImplemented, + ParsingError, + AmbiguousDescription, + ExtensionError, + ) + @test isdefined(OptimalControl, nameof(T)) + @test T isa DataType + end + end + end +end + +end # module + +# Redefine in outer scope for TestRunner +test_ctbase() = TestCtbase.test_ctbase() \ No newline at end of file diff --git a/test/suite/reexport/test_ctdirect.jl b/test/suite/reexport/test_ctdirect.jl new file mode 100644 index 00000000..0d7e3eb6 --- /dev/null +++ b/test/suite/reexport/test_ctdirect.jl @@ -0,0 +1,29 @@ +module TestCtdirect + +using Test +using OptimalControl +const VERBOSE = isdefined(Main, :TestOptions) ? Main.TestOptions.VERBOSE : true +const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : true + +function test_ctdirect() + @testset "CTDirect reexports" verbose = VERBOSE showtiming = SHOWTIMING begin + @testset "Types" begin + for T in ( + AbstractOptimalControlDiscretizer, + Collocation, + ) + @test isdefined(OptimalControl, nameof(T)) + @test T isa DataType || T isa UnionAll + end + end + @testset "Functions" begin + @test isdefined(OptimalControl, :discretize) + @test discretize isa Function + end + end +end + +end # module + +# Redefine in outer scope for TestRunner +test_ctdirect() = TestCtdirect.test_ctdirect() \ No newline at end of file diff --git a/test/test_optimalcontrol_solve_api.jl b/test/test_optimalcontrol_solve_api.jl deleted file mode 100644 index 57739a04..00000000 --- a/test/test_optimalcontrol_solve_api.jl +++ /dev/null @@ -1,796 +0,0 @@ -# Optimal control-level tests for solve on OCPs. - -struct OCDummyOCP <: CTModels.AbstractOptimalControlProblem end - -struct OCDummyDiscretizedOCP <: CTModels.AbstractOptimizationProblem end - -struct OCDummyInit <: CTModels.AbstractOptimalControlInitialGuess - x0::Vector{Float64} -end - -struct OCDummyStats <: SolverCore.AbstractExecutionStats - tag::Symbol -end - -struct OCDummySolution <: CTModels.AbstractOptimalControlSolution end - -struct OCFakeDiscretizer <: CTDirect.AbstractOptimalControlDiscretizer - calls::Base.RefValue{Int} -end - -function (d::OCFakeDiscretizer)(ocp::CTModels.AbstractOptimalControlProblem) - d.calls[] += 1 - return OCDummyDiscretizedOCP() -end - -struct OCFakeModeler <: CTModels.AbstractOptimizationModeler - model_calls::Base.RefValue{Int} - solution_calls::Base.RefValue{Int} -end - -function (m::OCFakeModeler)( - prob::CTModels.AbstractOptimizationProblem, init::OCDummyInit -)::NLPModels.AbstractNLPModel - m.model_calls[] += 1 - f(z) = sum(z .^ 2) - return ADNLPModels.ADNLPModel(f, init.x0) -end - -function (m::OCFakeModeler)( - prob::CTModels.AbstractOptimizationProblem, - nlp_solution::SolverCore.AbstractExecutionStats, -) - m.solution_calls[] += 1 - return OCDummySolution() -end - -struct OCFakeSolverNLP <: CTSolvers.AbstractOptimizationSolver - calls::Base.RefValue{Int} -end - -function (s::OCFakeSolverNLP)( - nlp::NLPModels.AbstractNLPModel; display::Bool -)::SolverCore.AbstractExecutionStats - s.calls[] += 1 - return OCDummyStats(:solver_called) -end - -function test_optimalcontrol_solve_api() - Test.@testset "raw defaults" verbose = VERBOSE showtiming = SHOWTIMING begin - Test.@test OptimalControl.OptimalControl.__initial_guess() === nothing - end - - Test.@testset "description helpers" verbose = VERBOSE showtiming = SHOWTIMING begin - methods = OptimalControl.available_methods() - Test.@test !isempty(methods) - - first_method = methods[1] - Test.@test first_method[1] === :collocation - Test.@test any( - m -> m[1] === :collocation && (:adnlp in m) && (:ipopt in m), methods - ) - - # Partial descriptions are completed using complete with priority order. - method_from_disc = CTBase.complete(:collocation; descriptions=methods) - Test.@test :collocation in method_from_disc - - method_from_solver = CTBase.complete(:ipopt; descriptions=methods) - Test.@test :ipopt in method_from_solver - - # Discretizer options registry: keys inferred from the Collocation tool - method = (:collocation, :adnlp, :ipopt) - keys_from_method = OptimalControl._discretizer_options_keys(method) - keys_from_type = CTModels.options_keys(OptimalControl.Collocation) - Test.@test keys_from_method == keys_from_type - - # Discretizer symbol helper - for m in methods - Test.@test OptimalControl._get_discretizer_symbol(m) === :collocation - end - - # Error when no discretizer symbol is present in the method - Test.@test_throws OptimalControl.IncorrectArgument OptimalControl._get_discretizer_symbol(( - :adnlp, :ipopt - )) - - # Modeler and solver symbol helpers using registries - for m in methods - msym = OptimalControl._get_modeler_symbol(m) - Test.@test msym in OptimalControl.CTModels.modeler_symbols() - ssym = OptimalControl._get_solver_symbol(m) - Test.@test ssym in CTSolvers.solver_symbols() - end - - # _modeler_options_keys / _solver_options_keys should match options_keys - method_ad_ip = (:collocation, :adnlp, :ipopt) - Test.@test Set(OptimalControl._modeler_options_keys(method_ad_ip)) == - Set(CTModels.options_keys(OptimalControl.ADNLPModeler)) - Test.@test Set(OptimalControl._solver_options_keys(method_ad_ip)) == - Set(CTModels.options_keys(OptimalControl.IpoptSolver)) - - method_exa_mad = (:collocation, :exa, :madnlp) - Test.@test Set(OptimalControl._modeler_options_keys(method_exa_mad)) == - Set(CTModels.options_keys(OptimalControl.ExaModeler)) - Test.@test Set(OptimalControl._solver_options_keys(method_exa_mad)) == - Set(CTModels.options_keys(OptimalControl.MadNLPSolver)) - - # Multiple symbols of the same family in a method should raise an error - Test.@test_throws OptimalControl.IncorrectArgument OptimalControl._get_modeler_symbol(( - :collocation, :adnlp, :exa, :ipopt - )) - Test.@test_throws OptimalControl.IncorrectArgument OptimalControl._get_solver_symbol(( - :collocation, :adnlp, :ipopt, :madnlp - )) - - # _build_modeler_from_method should construct the appropriate modeler - m_ad = OptimalControl._build_modeler_from_method( - (:collocation, :adnlp, :ipopt), (; backend=:manual) - ) - Test.@test m_ad isa OptimalControl.ADNLPModeler - - m_exa = OptimalControl._build_modeler_from_method( - (:collocation, :exa, :ipopt), NamedTuple() - ) - Test.@test m_exa isa OptimalControl.ExaModeler - - # _build_solver_from_method should construct the appropriate solver - s_ip = OptimalControl._build_solver_from_method( - (:collocation, :adnlp, :ipopt), NamedTuple() - ) - Test.@test s_ip isa OptimalControl.IpoptSolver - - s_mad = OptimalControl._build_solver_from_method( - (:collocation, :adnlp, :madnlp), NamedTuple() - ) - Test.@test s_mad isa OptimalControl.MadNLPSolver - - # Modeler options normalization helper - Test.@test OptimalControl._normalize_modeler_options(nothing) === NamedTuple() - Test.@test OptimalControl._normalize_modeler_options((backend=:manual,)) == - (backend=:manual,) - Test.@test OptimalControl._normalize_modeler_options((; backend=:manual)) == - (backend=:manual,) - - Test.@testset "description ambiguity pre-check (ownerless key)" verbose = VERBOSE showtiming = SHOWTIMING begin - method = (:collocation, :adnlp, :ipopt) - - # foo does not correspond to any tool nor to solve -> error - Test.@test_throws OptimalControl.IncorrectArgument begin - OptimalControl._ensure_no_ambiguous_description_kwargs(method, (foo=1,)) - end - end - end - - Test.@testset "option routing helpers" verbose = VERBOSE showtiming = SHOWTIMING begin - # _extract_option_tool without explicit tool tag - v, tool = OptimalControl._extract_option_tool(1.0) - Test.@test v == 1.0 - Test.@test tool === nothing - - # _extract_option_tool with explicit tool tag - v2, tool2 = OptimalControl._extract_option_tool((42, :solver)) - Test.@test v2 == 42 - Test.@test tool2 === :solver - - # Non-ambiguous routing: single owner - v3, owner3 = OptimalControl._route_option_for_description( - :tol, 1e-6, Symbol[:solver], :description - ) - Test.@test v3 == 1e-6 - Test.@test owner3 === :solver - - # Unknown ownership: empty owner list - owners_empty = Symbol[] - Test.@test_throws OptimalControl.IncorrectArgument OptimalControl._route_option_for_description( - :foo, 1, owners_empty, :description - ) - - # Ambiguous ownership in description mode - owners_amb = Symbol[:discretizer, :solver] - err = nothing - try - OptimalControl._route_option_for_description(:foo, 1.0, owners_amb, :description) - catch e - err = e - end - Test.@test err isa OptimalControl.IncorrectArgument - - # Disambiguation via (value, tool) - v4, owner4 = OptimalControl._route_option_for_description( - :foo, (2.0, :solver), owners_amb, :description - ) - Test.@test v4 == 2.0 - Test.@test owner4 === :solver - - # Ambiguous when coming from explicit mode should also throw - Test.@test_throws OptimalControl.IncorrectArgument OptimalControl._route_option_for_description( - :foo, 1.0, owners_amb, :explicit - ) - end - - Test.@testset "description kwarg splitting" verbose = VERBOSE showtiming = SHOWTIMING begin - # Ensure that description-mode parsing and splitting of kwargs produces - # well-typed NamedTuples and routes options to the expected tools. - parsed = OptimalControl._parse_top_level_kwargs_description(( - initial_guess=OCDummyInit([1.0, 2.0]), - display=false, - modeler_options=(backend=:manual,), - tol=1e-6, - )) - - pieces = OptimalControl._split_kwargs_for_description( - (:collocation, :adnlp, :ipopt), parsed - ) - - Test.@test pieces.initial_guess isa OCDummyInit - Test.@test pieces.display == false - Test.@test pieces.disc_kwargs == NamedTuple() - Test.@test pieces.modeler_options == (backend=:manual,) - Test.@test haskey(pieces.solver_kwargs, :tol) - Test.@test pieces.solver_kwargs.tol == 1e-6 - - # Solve-level aliases should be accepted in description mode. - parsed_alias = OptimalControl._parse_top_level_kwargs_description(( - init=OCDummyInit([3.0, 4.0]), - display=false, - modeler_options=(backend=:manual,), - tol=2e-6, - )) - - pieces_alias = OptimalControl._split_kwargs_for_description( - (:collocation, :adnlp, :ipopt), parsed_alias - ) - - Test.@test pieces_alias.initial_guess isa OCDummyInit - Test.@test pieces_alias.display == false - Test.@test pieces_alias.disc_kwargs == NamedTuple() - Test.@test pieces_alias.modeler_options == (backend=:manual,) - Test.@test haskey(pieces_alias.solver_kwargs, :tol) - Test.@test pieces_alias.solver_kwargs.tol == 2e-6 - - # Conflicting aliases for initial_guess should raise. - Test.@test_throws OptimalControl.IncorrectArgument begin - OptimalControl._parse_top_level_kwargs_description(( - initial_guess=OCDummyInit([1.0, 2.0]), i=OCDummyInit([3.0, 4.0]) - )) - end - - Test.@testset "description-mode solve/tool disambiguation" verbose = VERBOSE showtiming = SHOWTIMING begin - init = OCDummyInit([1.0, 2.0]) - - # 1) Alias i tagged :solve -> used as initial_guess, not kept in other_kwargs - parsed_solve = OptimalControl._parse_top_level_kwargs_description(( - i=(init, :solve), tol=1e-6 - )) - - Test.@test parsed_solve.initial_guess isa OCDummyInit - Test.@test parsed_solve.initial_guess === init - Test.@test !haskey(parsed_solve.other_kwargs, :i) - Test.@test haskey(parsed_solve.other_kwargs, :tol) - Test.@test parsed_solve.other_kwargs.tol == 1e-6 - - # 2) Alias i tagged :solver -> ignored by solve, left for the tools - parsed_solver = OptimalControl._parse_top_level_kwargs_description(( - i=(init, :solver), tol=2e-6 - )) - - # initial_guess stays at its default, alias i is kept in other_kwargs - Test.@test parsed_solver.initial_guess === OptimalControl.__initial_guess() - Test.@test haskey(parsed_solver.other_kwargs, :i) - Test.@test parsed_solver.other_kwargs.i == (init, :solver) - Test.@test haskey(parsed_solver.other_kwargs, :tol) - Test.@test parsed_solver.other_kwargs.tol == 2e-6 - - # 3) display tagged :solve -> top-level display - parsed_display_solve = OptimalControl._parse_top_level_kwargs_description(( - display=(false, :solve), - )) - Test.@test parsed_display_solve.display == false - Test.@test !haskey(parsed_display_solve.other_kwargs, :display) - - # 4) display tagged :solver -> ignored by solve, left for the tools - parsed_display_solver = OptimalControl._parse_top_level_kwargs_description(( - display=(false, :solver), - )) - Test.@test parsed_display_solver.display == OptimalControl.__display() - Test.@test haskey(parsed_display_solver.other_kwargs, :display) - Test.@test parsed_display_solver.other_kwargs.display == (false, :solver) - end - end - - Test.@testset "explicit-mode solve kwarg aliases" verbose = VERBOSE showtiming = SHOWTIMING begin - prob = OCDummyOCP() - init = OCDummyInit([1.0, 2.0]) - - discretizer_calls = Ref(0) - model_calls = Ref(0) - solution_calls = Ref(0) - solver_calls = Ref(0) - - discretizer = OCFakeDiscretizer(discretizer_calls) - modeler = OCFakeModeler(model_calls, solution_calls) - solver = OCFakeSolverNLP(solver_calls) - - # Using the "init" alias for initial_guess. - sol_init = solve( - prob; - init=init, - discretizer=discretizer, - modeler=modeler, - solver=solver, - display=false, - ) - Test.@test sol_init isa OCDummySolution - - # Using the short "i" alias for initial_guess. - discretizer_calls[] = 0 - model_calls[] = 0 - solution_calls[] = 0 - solver_calls[] = 0 - - sol_i = solve( - prob; - i=init, - discretizer=discretizer, - modeler=modeler, - solver=solver, - display=false, - ) - Test.@test sol_i isa OCDummySolution - Test.@test discretizer_calls[] == 1 - Test.@test model_calls[] == 1 - Test.@test solver_calls[] == 1 - Test.@test solution_calls[] == 1 - - # Short aliases for components d/m/s in explicit mode. - discretizer_calls[] = 0 - model_calls[] = 0 - solution_calls[] = 0 - solver_calls[] = 0 - - sol_dms = solve( - prob; initial_guess=init, d=discretizer, m=modeler, s=solver, display=false - ) - Test.@test sol_dms isa OCDummySolution - Test.@test discretizer_calls[] == 1 - Test.@test model_calls[] == 1 - Test.@test solver_calls[] == 1 - Test.@test solution_calls[] == 1 - - # Conflicting aliases for initial_guess in explicit mode should raise. - Test.@test_throws OptimalControl.IncorrectArgument begin - solve( - prob; - initial_guess=init, - init=init, - discretizer=discretizer, - modeler=modeler, - solver=solver, - display=false, - ) - end - end - - Test.@testset "display helpers" verbose = VERBOSE showtiming = SHOWTIMING begin - method = (:collocation, :adnlp, :ipopt) - discretizer = OptimalControl.Collocation() - modeler = OptimalControl.ADNLPModeler() - solver = OptimalControl.IpoptSolver() - - buf = sprint() do io - OptimalControl._display_ocp_method( - io, method, discretizer, modeler, solver; display=true - ) - end - Test.@test occursin("ADNLPModels", buf) - Test.@test occursin("NLPModelsIpopt", buf) - end - - # ======================================================================== - # Unit test: solve(ocp, init, discretizer, modeler, solver) - # ======================================================================== - - Test.@testset "solve(ocp, init, discretizer, modeler, solver)" verbose = VERBOSE showtiming = SHOWTIMING begin - prob = OCDummyOCP() - init = OCDummyInit([1.0, 2.0]) - - discretizer_calls = Ref(0) - model_calls = Ref(0) - solution_calls = Ref(0) - solver_calls = Ref(0) - - discretizer = OCFakeDiscretizer(discretizer_calls) - modeler = OCFakeModeler(model_calls, solution_calls) - solver = OCFakeSolverNLP(solver_calls) - - sol = OptimalControl._solve(prob, init, discretizer, modeler, solver; display=false) - - Test.@test sol isa OCDummySolution - Test.@test discretizer_calls[] == 1 - Test.@test model_calls[] == 1 - Test.@test solver_calls[] == 1 - Test.@test solution_calls[] == 1 - end - - Test.@testset "explicit-mode kwarg validation" verbose = VERBOSE showtiming = SHOWTIMING begin - prob = OCDummyOCP() - init = OCDummyInit([1.0, 2.0]) - - discretizer_calls = Ref(0) - model_calls = Ref(0) - solution_calls = Ref(0) - solver_calls = Ref(0) - - discretizer = OCFakeDiscretizer(discretizer_calls) - modeler = OCFakeModeler(model_calls, solution_calls) - solver = OCFakeSolverNLP(solver_calls) - - # modeler_options is forbidden in explicit mode - Test.@test_throws OptimalControl.IncorrectArgument begin - solve( - prob; - initial_guess=init, - discretizer=discretizer, - modeler=modeler, - solver=solver, - display=false, - modeler_options=(backend=:manual,), - ) - end - - # Unknown kwargs are rejected in explicit mode - Test.@test_throws OptimalControl.IncorrectArgument begin - solve( - prob; - initial_guess=init, - discretizer=discretizer, - modeler=modeler, - solver=solver, - display=false, - unknown_kwarg=1, - ) - end - - # Mixing description with explicit components is rejected - Test.@test_throws OptimalControl.IncorrectArgument begin - solve( - prob, - :collocation; - initial_guess=init, - discretizer=discretizer, - display=false, - ) - end - end - - Test.@testset "solve(ocp; kwargs)" verbose = VERBOSE showtiming = SHOWTIMING begin - prob = OCDummyOCP() - init = OCDummyInit([1.0, 2.0]) - - discretizer_calls = Ref(0) - model_calls = Ref(0) - solution_calls = Ref(0) - solver_calls = Ref(0) - - discretizer = OCFakeDiscretizer(discretizer_calls) - modeler = OCFakeModeler(model_calls, solution_calls) - solver = OCFakeSolverNLP(solver_calls) - - sol = solve( - prob; - initial_guess=init, - discretizer=discretizer, - modeler=modeler, - solver=solver, - display=false, - ) - - Test.@test sol isa OCDummySolution - Test.@test discretizer_calls[] == 1 - Test.@test model_calls[] == 1 - Test.@test solver_calls[] == 1 - Test.@test solution_calls[] == 1 - end - - # ======================================================================== - # Integration tests: Beam OCP level with Ipopt and MadNLP - # ======================================================================== - - Test.@testset "Beam OCP level" verbose = VERBOSE showtiming = SHOWTIMING begin - ipopt_options = Dict( - :max_iter => 1000, - :tol => 1e-6, - :print_level => 0, - :mu_strategy => "adaptive", - :linear_solver => "Mumps", - :sb => "yes", - ) - - madnlp_options = Dict(:max_iter => 1000, :tol => 1e-6, :print_level => MadNLP.ERROR) - - beam_data = Beam() - ocp = beam_data.ocp - init = OptimalControl.initial_guess(ocp; beam_data.init...) - discretizer = OptimalControl.Collocation() - - modelers = [OptimalControl.ADNLPModeler(; backend=:manual), OptimalControl.ExaModeler()] - modelers_names = ["ADNLPModeler (manual)", "ExaModeler (CPU)"] - - # ------------------------------------------------------------------ - # OCP level: solve(ocp, init, discretizer, modeler, solver) - # ------------------------------------------------------------------ - - Test.@testset "OCP level (Ipopt)" verbose = VERBOSE showtiming = SHOWTIMING begin - for (modeler, modeler_name) in zip(modelers, modelers_names) - Test.@testset "$(modeler_name)" verbose = VERBOSE showtiming = SHOWTIMING begin - solver = OptimalControl.IpoptSolver(; ipopt_options...) - sol = OptimalControl._solve( - ocp, init, discretizer, modeler, solver; display=false - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - Test.@test objective(sol) ≈ beam_data.obj atol = 1e-2 - Test.@test iterations(sol) <= ipopt_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - end - end - end - - Test.@testset "OCP level (MadNLP)" verbose = VERBOSE showtiming = SHOWTIMING begin - for (modeler, modeler_name) in zip(modelers, modelers_names) - Test.@testset "$(modeler_name)" verbose = VERBOSE showtiming = SHOWTIMING begin - solver = OptimalControl.MadNLPSolver(; madnlp_options...) - sol = OptimalControl._solve( - ocp, init, discretizer, modeler, solver; display=false - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - Test.@test objective(sol) ≈ beam_data.obj atol = 1e-2 - Test.@test iterations(sol) <= madnlp_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - end - end - end - - # ------------------------------------------------------------------ - # OCP level with @init (Ipopt, ADNLPModeler) - # ------------------------------------------------------------------ - - Test.@testset "OCP level with @init (Ipopt, ADNLPModeler)" verbose = VERBOSE showtiming = SHOWTIMING begin - init_macro = OptimalControl.@init ocp begin - x := [0.05, 0.1] - u := 0.1 - end - modeler = OptimalControl.ADNLPModeler(; backend=:manual) - solver = OptimalControl.IpoptSolver(; ipopt_options...) - sol = OptimalControl._solve( - ocp, init_macro, discretizer, modeler, solver; display=false - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - end - - # ------------------------------------------------------------------ - # OCP level: keyword-based API solve(ocp; ...) - # ------------------------------------------------------------------ - - Test.@testset "OCP level keyword API (Ipopt, ADNLPModeler)" verbose = VERBOSE showtiming = SHOWTIMING begin - modeler = OptimalControl.ADNLPModeler(; backend=:manual) - solver = OptimalControl.IpoptSolver(; ipopt_options...) - sol = solve( - ocp; - initial_guess=init, - discretizer=discretizer, - modeler=modeler, - solver=solver, - display=false, - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - Test.@test iterations(sol) <= ipopt_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - end - - # ------------------------------------------------------------------ - # OCP level: description-based API solve(ocp, description; ...) - # ------------------------------------------------------------------ - - Test.@testset "OCP level description API" verbose = VERBOSE showtiming = SHOWTIMING begin - desc_cases = [ - ((:collocation, :adnlp, :ipopt), ipopt_options), - ((:collocation, :adnlp, :madnlp), madnlp_options), - ((:collocation, :exa, :ipopt), ipopt_options), - ((:collocation, :exa, :madnlp), madnlp_options), - ] - - for (method_syms, options) in desc_cases - Test.@testset "description = $(method_syms)" verbose = VERBOSE showtiming = SHOWTIMING begin - sol = solve( - ocp, method_syms...; initial_guess=init, display=false, options... - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - - if :ipopt in method_syms - Test.@test iterations(sol) <= ipopt_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - elseif :madnlp in method_syms - Test.@test iterations(sol) <= madnlp_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - end - end - end - - # modeler_options is allowed in description mode and forwarded to the - # modeler constructor. - Test.@testset "description API with modeler_options" verbose = VERBOSE showtiming = SHOWTIMING begin - sol = solve( - ocp, - :collocation, - :adnlp, - :ipopt; - initial_guess=init, - modeler_options=(backend=:manual,), - display=false, - ipopt_options..., - ) - Test.@test sol isa Solution - Test.@test successful(sol) - end - - # Tagged options using the (value, tool) convention: discretizer options - # are explicitly routed to the discretizer, and Ipopt options to the solver. - Test.@testset "description API with explicit tool tags" verbose = VERBOSE showtiming = SHOWTIMING begin - sol = solve( - ocp, - :collocation, - :adnlp, - :ipopt; - initial_guess=init, - display=false, - # Discretizer options - grid=(get_option_value(discretizer, :grid), :discretizer), - scheme=(get_option_value(discretizer, :scheme), :discretizer), - # Ipopt solver options - max_iter=(ipopt_options[:max_iter], :solver), - tol=(ipopt_options[:tol], :solver), - print_level=(ipopt_options[:print_level], :solver), - mu_strategy=(ipopt_options[:mu_strategy], :solver), - linear_solver=(ipopt_options[:linear_solver], :solver), - sb=(ipopt_options[:sb], :solver), - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - Test.@test iterations(sol) <= ipopt_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - end - end - end - - # ======================================================================== - # Integration tests: Goddard OCP level with Ipopt and MadNLP - # ======================================================================== - - Test.@testset "Goddard OCP level" verbose = VERBOSE showtiming = SHOWTIMING begin - ipopt_options = Dict( - :max_iter => 1000, - :tol => 1e-6, - :print_level => 0, - :mu_strategy => "adaptive", - :linear_solver => "Mumps", - :sb => "yes", - ) - - madnlp_options = Dict(:max_iter => 1000, :tol => 1e-6, :print_level => MadNLP.ERROR) - - gdata = Goddard() - ocp_g = gdata.ocp - init_g = OptimalControl.initial_guess(ocp_g; gdata.init...) - discretizer_g = OptimalControl.Collocation() - - modelers = [OptimalControl.ADNLPModeler(; backend=:manual), OptimalControl.ExaModeler()] - modelers_names = ["ADNLPModeler (manual)", "ExaModeler (CPU)"] - - # ------------------------------------------------------------------ - # OCP level: solve(ocp_g, init_g, discretizer_g, modeler, solver) - # ------------------------------------------------------------------ - - Test.@testset "OCP level (Ipopt)" verbose = VERBOSE showtiming = SHOWTIMING begin - for (modeler, modeler_name) in zip(modelers, modelers_names) - Test.@testset "$(modeler_name)" verbose = VERBOSE showtiming = SHOWTIMING begin - solver = OptimalControl.IpoptSolver(; ipopt_options...) - sol = OptimalControl._solve( - ocp_g, init_g, discretizer_g, modeler, solver; display=false - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - Test.@test objective(sol) ≈ gdata.obj atol = 1e-4 - Test.@test iterations(sol) <= ipopt_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - end - end - end - - Test.@testset "OCP level (MadNLP)" verbose = VERBOSE showtiming = SHOWTIMING begin - for (modeler, modeler_name) in zip(modelers, modelers_names) - Test.@testset "$(modeler_name)" verbose = VERBOSE showtiming = SHOWTIMING begin - solver = OptimalControl.MadNLPSolver(; madnlp_options...) - sol = OptimalControl._solve( - ocp_g, init_g, discretizer_g, modeler, solver; display=false - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - Test.@test objective(sol) ≈ gdata.obj atol = 1e-4 - Test.@test iterations(sol) <= madnlp_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - end - end - end - - # ------------------------------------------------------------------ - # OCP level keyword API (Ipopt, ADNLPModeler) - # ------------------------------------------------------------------ - - Test.@testset "OCP level keyword API (Ipopt, ADNLPModeler)" verbose = VERBOSE showtiming = SHOWTIMING begin - modeler = OptimalControl.ADNLPModeler(; backend=:manual) - solver = OptimalControl.IpoptSolver(; ipopt_options...) - sol = solve( - ocp_g; - initial_guess=init_g, - discretizer=discretizer_g, - modeler=modeler, - solver=solver, - display=false, - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - Test.@test iterations(sol) <= ipopt_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - end - - # ------------------------------------------------------------------ - # OCP level description API (Ipopt and MadNLP) - # ------------------------------------------------------------------ - - Test.@testset "OCP level description API" verbose = VERBOSE showtiming = SHOWTIMING begin - desc_cases = [ - ((:collocation, :adnlp, :ipopt), ipopt_options), - ((:collocation, :adnlp, :madnlp), madnlp_options), - ((:collocation, :exa, :ipopt), ipopt_options), - ((:collocation, :exa, :madnlp), madnlp_options), - ] - - for (method_syms, options) in desc_cases - Test.@testset "description = $(method_syms)" verbose = VERBOSE showtiming = SHOWTIMING begin - sol = solve( - ocp_g, - method_syms...; - initial_guess=init_g, - display=false, - options..., - ) - Test.@test sol isa Solution - Test.@test successful(sol) - Test.@test isfinite(objective(sol)) - - if :ipopt in method_syms - Test.@test iterations(sol) <= ipopt_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - elseif :madnlp in method_syms - Test.@test iterations(sol) <= madnlp_options[:max_iter] - Test.@test constraints_violation(sol) <= 1e-6 - end - end - end - end - end -end \ No newline at end of file From c66440c880dc0e0279a4c3c1e522d5dfcf010a1b Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Wed, 11 Feb 2026 14:13:08 +0100 Subject: [PATCH 06/64] Add CTFlows reexports and tests - Add ctflows.jl with CTFlows types, functions, operators, and macros reexports - Add test_ctflows.jl to verify reexports with proper type checking - Fix test issues: separate types vs functions, handle @Lie macro correctly - Enable ctflows.jl include in OptimalControl.jl - All reexport tests now passing (35/35) --- src/OptimalControl.jl | 2 +- src/imports/ctflows.jl | 36 ++++++++-------------- test/suite/reexport/test_ctflows.jl | 48 +++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 25 deletions(-) create mode 100644 test/suite/reexport/test_ctflows.jl diff --git a/src/OptimalControl.jl b/src/OptimalControl.jl index 2c6064dd..b8031b54 100644 --- a/src/OptimalControl.jl +++ b/src/OptimalControl.jl @@ -13,10 +13,10 @@ using Reexport # Imports include(joinpath(@__DIR__, "imports", "ctbase.jl")) include(joinpath(@__DIR__, "imports", "ctdirect.jl")) +include(joinpath(@__DIR__, "imports", "ctflows.jl")) # include(joinpath(@__DIR__, "imports", "ctparser.jl")) # include(joinpath(@__DIR__, "imports", "plots.jl")) # include(joinpath(@__DIR__, "imports", "ctmodels.jl")) -# include(joinpath(@__DIR__, "imports", "ctflows.jl")) # include(joinpath(@__DIR__, "imports", "ctsolvers.jl")) # include(joinpath(@__DIR__, "imports", "modelers.jl")) # include(joinpath(@__DIR__, "imports", "commonsolve.jl")) diff --git a/src/imports/ctflows.jl b/src/imports/ctflows.jl index 06032bbf..84897975 100644 --- a/src/imports/ctflows.jl +++ b/src/imports/ctflows.jl @@ -1,25 +1,13 @@ +# CTFlows reexports -import CTFlows: - CTFlows #, -# VectorField, -# Lift, -# Hamiltonian, -# HamiltonianLift, -# HamiltonianVectorField, -# Flow, -# ⋅, -# Lie, -# Poisson, -# @Lie, -# * # debug: complete? -# export VectorField, -# Lift, -# Hamiltonian, -# HamiltonianLift, -# HamiltonianVectorField, -# Flow, -# ⋅, -# Lie, -# Poisson, -# @Lie, -# * \ No newline at end of file +@reexport import CTFlows: + Lift, + Hamiltonian, + HamiltonianLift, + HamiltonianVectorField, + Flow, + ⋅, + Lie, + Poisson, + @Lie, + * \ No newline at end of file diff --git a/test/suite/reexport/test_ctflows.jl b/test/suite/reexport/test_ctflows.jl new file mode 100644 index 00000000..41f71c05 --- /dev/null +++ b/test/suite/reexport/test_ctflows.jl @@ -0,0 +1,48 @@ +module TestCtflows + +using Test +using OptimalControl +const VERBOSE = isdefined(Main, :TestOptions) ? Main.TestOptions.VERBOSE : true +const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : true + +function test_ctflows() + @testset "CTFlows reexports" verbose = VERBOSE showtiming = SHOWTIMING begin + @testset "Types" begin + for T in ( + Hamiltonian, + HamiltonianLift, + HamiltonianVectorField, + ) + @test isdefined(OptimalControl, nameof(T)) + @test T isa DataType || T isa UnionAll + end + end + @testset "Functions" begin + for f in ( + :Lift, + :Flow, + ) + @test isdefined(OptimalControl, f) + @test getfield(OptimalControl, f) isa Function + end + end + @testset "Operators" begin + for op in ( + :⋅, + :Lie, + :Poisson, + :*, + ) + @test isdefined(OptimalControl, op) + end + end + @testset "Macros" begin + @test isdefined(OptimalControl, Symbol("@Lie")) + end + end +end + +end # module + +# Redefine in outer scope for TestRunner +test_ctflows() = TestCtflows.test_ctflows() \ No newline at end of file From ee25ee94bdcb304292cbdf69072bae6dac224bdd Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Wed, 11 Feb 2026 15:25:50 +0100 Subject: [PATCH 07/64] Add comprehensive reexport tests and fix syntax errors - Add reexport tests for CTModels, CTParser, CTSolvers, and ExaModels - Fix @reexport import syntax errors by combining multiple import blocks - Enable ctmodels.jl, ctparser.jl, ctsolvers.jl, and examodels.jl imports - Add module prefix exports (CTBase, CTModels, ExaModels) for generated code - Remove unused plots.jl import file - All reexport tests now pass (426/426 tests) --- src/OptimalControl.jl | 10 +- src/imports/ctbase.jl | 6 +- src/imports/ctmodels.jl | 250 +++++++++++--------------- src/imports/ctparser.jl | 11 +- src/imports/ctsolvers.jl | 56 +++++- src/imports/examodels.jl | 5 + src/imports/plots.jl | 2 - test/suite/reexport/test_ctbase.jl | 11 +- test/suite/reexport/test_ctdirect.jl | 2 + test/suite/reexport/test_ctflows.jl | 4 + test/suite/reexport/test_ctmodels.jl | 122 +++++++++++++ test/suite/reexport/test_ctparser.jl | 22 +++ test/suite/reexport/test_ctsolvers.jl | 115 ++++++++++++ test/suite/reexport/test_examodels.jl | 21 +++ 14 files changed, 469 insertions(+), 168 deletions(-) create mode 100644 src/imports/examodels.jl delete mode 100644 src/imports/plots.jl create mode 100644 test/suite/reexport/test_ctmodels.jl create mode 100644 test/suite/reexport/test_ctparser.jl create mode 100644 test/suite/reexport/test_ctsolvers.jl create mode 100644 test/suite/reexport/test_examodels.jl diff --git a/src/OptimalControl.jl b/src/OptimalControl.jl index b8031b54..3ccf930f 100644 --- a/src/OptimalControl.jl +++ b/src/OptimalControl.jl @@ -14,12 +14,10 @@ using Reexport include(joinpath(@__DIR__, "imports", "ctbase.jl")) include(joinpath(@__DIR__, "imports", "ctdirect.jl")) include(joinpath(@__DIR__, "imports", "ctflows.jl")) -# include(joinpath(@__DIR__, "imports", "ctparser.jl")) -# include(joinpath(@__DIR__, "imports", "plots.jl")) -# include(joinpath(@__DIR__, "imports", "ctmodels.jl")) -# include(joinpath(@__DIR__, "imports", "ctsolvers.jl")) -# include(joinpath(@__DIR__, "imports", "modelers.jl")) -# include(joinpath(@__DIR__, "imports", "commonsolve.jl")) +include(joinpath(@__DIR__, "imports", "ctmodels.jl")) +include(joinpath(@__DIR__, "imports", "ctparser.jl")) +include(joinpath(@__DIR__, "imports", "ctsolvers.jl")) +include(joinpath(@__DIR__, "imports", "examodels.jl")) # # solve # include(joinpath(@__DIR__, "solve.jl")) diff --git a/src/imports/ctbase.jl b/src/imports/ctbase.jl index 047fcb6f..c2435f46 100644 --- a/src/imports/ctbase.jl +++ b/src/imports/ctbase.jl @@ -1,7 +1,11 @@ # CTBase reexports -# Exceptions +# Generated code @reexport import CTBase: + CTBase # for generated code (prefix) + +# Exceptions +@reexport import CTBase: CTException, IncorrectArgument, PreconditionError, diff --git a/src/imports/ctmodels.jl b/src/imports/ctmodels.jl index 508478c5..167905d8 100644 --- a/src/imports/ctmodels.jl +++ b/src/imports/ctmodels.jl @@ -1,153 +1,109 @@ -import CTModels: CTModels +# CTModels reexports -# # Abstract types -# import CTModels: -# AbstractOptimalControlProblem, -# AbstractOptimalControlInitialGuess, -# AbstractOptimalControlSolution, -# AbstractOptimizationProblem, -# AbstractOptimizationModeler, -# AbstractOptimizationSolver +# Generated code +@reexport import CTModels: + CTModels # for generated code (prefix) -# PreModel -import CTModels: PreModel +# Display +@reexport import RecipesBase: plot -# Modelers -import CTModels: - ADNLPModeler, - ExaModeler +# Initial guess +@reexport import CTModels: + AbstractOptimalControlInitialGuess, + OptimalControlInitialGuess -# OptimalControlProblem setters, builders -import CTModels: - variable!, - time!, - state!, - control!, - dynamics!, - constraint!, - objective!, - definition!, - time_dependence!, - build +# Serialization +@reexport import CTModels: + export_ocp_solution, + import_ocp_solution -# Initial guess -import CTModels: initial_guess +# OCP +@reexport import CTModels: + + # api types + Model, + AbstractModel, + AbstractOptimalControlProblem, + Solution, + AbstractSolution, + AbstractOptimalControlSolution, + + # accessors + constraint, + constraints, + name, + dimension, + components, + initial_time, + final_time, + time_name, + time_grid, + times, + initial_time_name, + final_time_name, + criterion, + has_mayer_cost, + has_lagrange_cost, + is_mayer_cost_defined, + is_lagrange_cost_defined, + has_fixed_initial_time, + has_free_initial_time, + has_fixed_final_time, + has_free_final_time, + is_autonomous, + is_initial_time_fixed, + is_initial_time_free, + is_final_time_fixed, + is_final_time_free, + state_dimension, + control_dimension, + variable_dimension, + state_name, + control_name, + variable_name, + state_components, + control_components, + variable_components, + + # Constraint accessors + path_constraints_nl, + boundary_constraints_nl, + state_constraints_box, + control_constraints_box, + variable_constraints_box, + dim_path_constraints_nl, + dim_boundary_constraints_nl, + dim_state_constraints_box, + dim_control_constraints_box, + dim_variable_constraints_box, + state, + control, + variable, + costate, + objective, + dynamics, + mayer, + lagrange, + definition, + dual, + iterations, + status, + message, + success, + successful, + constraints_violation, + infos, + get_build_examodel, + is_empty, is_empty_time_grid, + index, time, + model, -#, -# # setters -# variable!, -# time!, -# state!, -# control!, -# dynamics!, -# # constraint!, -# objective!, -# definition!, -# time_dependence!, -# # model -# build, -# Model, -# PreModel, -# Solution, -# # getters -# constraints, -# get_build_examodel, -# times, -# definition, -# dual, -# initial_time, -# initial_time_name, -# final_time, -# final_time_name, -# time_name, -# variable_dimension, -# variable_components, -# variable_name, -# state_dimension, -# state_components, -# state_name, -# control_dimension, -# control_components, -# control_name, -# # constraint, -# dynamics, -# mayer, -# lagrange, -# criterion, -# has_fixed_final_time, -# has_fixed_initial_time, -# has_free_final_time, -# has_free_initial_time, -# has_lagrange_cost, -# has_mayer_cost, -# is_autonomous, -# export_ocp_solution, -# import_ocp_solution, -# time_grid, -# control, -# state, -# # variable, -# costate, -# constraints_violation, -# # objective, -# iterations, -# status, -# message, -# infos, -# successful, -# AbstractOptimalControlProblem, -# AbstractOptimizationProblem, -# AbstractOptimalControlInitialGuess, -# AbstractOptimalControlSolution, -# AbstractOptimizationModeler -# # export AbstractOptimalControlProblem, -# # AbstractOptimizationProblem, -# # AbstractOptimalControlInitialGuess, -# # AbstractOptimalControlSolution, -# # AbstractOptimizationModeler -# export Model, Solution -# export constraints, -# get_build_examodel, -# times, -# definition, -# dual, -# initial_time, -# initial_time_name, -# final_time, -# final_time_name, -# time_name, -# variable_dimension, -# variable_components, -# variable_name, -# state_dimension, -# state_components, -# state_name, -# control_dimension, -# control_components, -# control_name, -# # constraint, -# dynamics, -# mayer, -# lagrange, -# criterion, -# has_fixed_final_time, -# has_fixed_initial_time, -# has_free_final_time, -# has_free_initial_time, -# has_lagrange_cost, -# has_mayer_cost, -# is_autonomous, -# export_ocp_solution, -# import_ocp_solution, -# time_grid, -# control, -# state, -# # variable, -# costate, -# constraints_violation, -# # objective, -# iterations, -# status, -# message, -# infos, -# successful \ No newline at end of file + # Dual constraints accessors + path_constraints_dual, + boundary_constraints_dual, + state_constraints_lb_dual, + state_constraints_ub_dual, + control_constraints_lb_dual, + control_constraints_ub_dual, + variable_constraints_lb_dual, + variable_constraints_ub_dual diff --git a/src/imports/ctparser.jl b/src/imports/ctparser.jl index d2e81b86..6f69cbd8 100644 --- a/src/imports/ctparser.jl +++ b/src/imports/ctparser.jl @@ -1,8 +1,5 @@ -import CTParser: CTParser, @def, @init -export @def, @init +# CTParser reexports -function __init__() - CTParser.prefix_fun!(:OptimalControl) - CTParser.prefix_exa!(:OptimalControl) - CTParser.e_prefix!(:OptimalControl) -end \ No newline at end of file +@reexport import CTParser: + @def, + @init diff --git a/src/imports/ctsolvers.jl b/src/imports/ctsolvers.jl index c751d411..6bbcd803 100644 --- a/src/imports/ctsolvers.jl +++ b/src/imports/ctsolvers.jl @@ -1,8 +1,56 @@ -import CTSolvers: CTSolvers +# CTSolvers reexports + +# DOCP +@reexport import CTSolvers: + DiscretizedOptimalControlProblem, + ocp_model, + nlp_model, + ocp_solution + +# Modelers +@reexport import CTSolvers: + AbstractOptimizationModeler, + ADNLPModeler, + ExaModeler # Solvers -import CTSolvers: +@reexport import CTSolvers: + AbstractOptimizationSolver, IpoptSolver, - MadNLPSolver + MadNLPSolver, + MadNCLSolver, + KnitroSolver + +# Strategies +@reexport import CTSolvers: + + # Types + AbstractStrategy, + StrategyRegistry, + StrategyMetadata, + StrategyOptions, + OptionDefinition, + RoutedOption, + + # Metadata + id, + metadata, + + # Introspection functions + option_names, + option_type, + option_description, + option_default, + option_defaults, + option_value, + option_source, + has_option, + is_user, + is_default, + is_computed, -# AbstractOptimizationSolver \ No newline at end of file + # Utility functions + filter_options, + suggest_options, + options_dict, + route_to \ No newline at end of file diff --git a/src/imports/examodels.jl b/src/imports/examodels.jl new file mode 100644 index 00000000..06559031 --- /dev/null +++ b/src/imports/examodels.jl @@ -0,0 +1,5 @@ +# ExaModels reexports + +# Generated code +@reexport import ExaModels: + ExaModels # for generated code (prefix) diff --git a/src/imports/plots.jl b/src/imports/plots.jl deleted file mode 100644 index 8b57b4e9..00000000 --- a/src/imports/plots.jl +++ /dev/null @@ -1,2 +0,0 @@ -import RecipesBase: RecipesBase, plot -export plot \ No newline at end of file diff --git a/test/suite/reexport/test_ctbase.jl b/test/suite/reexport/test_ctbase.jl index 123b970c..e377f058 100644 --- a/test/suite/reexport/test_ctbase.jl +++ b/test/suite/reexport/test_ctbase.jl @@ -7,6 +7,13 @@ const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : function test_ctbase() @testset "CTBase reexports" verbose = VERBOSE showtiming = SHOWTIMING begin + + @testset "Generated Code Prefix" begin + @test isdefined(OptimalControl, :CTBase) + @test isdefined(Main, :CTBase) + @test CTBase isa Module + end + @testset "Exceptions" begin for T in ( CTException, @@ -17,10 +24,12 @@ function test_ctbase() AmbiguousDescription, ExtensionError, ) - @test isdefined(OptimalControl, nameof(T)) + @test isdefined(OptimalControl, nameof(T)) # check if defined in OptimalControl + @test isdefined(Main, nameof(T)) # check if exported @test T isa DataType end end + end end diff --git a/test/suite/reexport/test_ctdirect.jl b/test/suite/reexport/test_ctdirect.jl index 0d7e3eb6..72ce4009 100644 --- a/test/suite/reexport/test_ctdirect.jl +++ b/test/suite/reexport/test_ctdirect.jl @@ -13,11 +13,13 @@ function test_ctdirect() Collocation, ) @test isdefined(OptimalControl, nameof(T)) + @test isdefined(Main, nameof(T)) @test T isa DataType || T isa UnionAll end end @testset "Functions" begin @test isdefined(OptimalControl, :discretize) + @test isdefined(Main, :discretize) @test discretize isa Function end end diff --git a/test/suite/reexport/test_ctflows.jl b/test/suite/reexport/test_ctflows.jl index 41f71c05..02ba8e0a 100644 --- a/test/suite/reexport/test_ctflows.jl +++ b/test/suite/reexport/test_ctflows.jl @@ -14,6 +14,7 @@ function test_ctflows() HamiltonianVectorField, ) @test isdefined(OptimalControl, nameof(T)) + @test isdefined(Main, nameof(T)) @test T isa DataType || T isa UnionAll end end @@ -23,6 +24,7 @@ function test_ctflows() :Flow, ) @test isdefined(OptimalControl, f) + @test isdefined(Main, f) @test getfield(OptimalControl, f) isa Function end end @@ -34,10 +36,12 @@ function test_ctflows() :*, ) @test isdefined(OptimalControl, op) + @test isdefined(Main, op) end end @testset "Macros" begin @test isdefined(OptimalControl, Symbol("@Lie")) + @test isdefined(Main, Symbol("@Lie")) end end end diff --git a/test/suite/reexport/test_ctmodels.jl b/test/suite/reexport/test_ctmodels.jl new file mode 100644 index 00000000..18fbf95f --- /dev/null +++ b/test/suite/reexport/test_ctmodels.jl @@ -0,0 +1,122 @@ +module TestCtmodels + +using Test +using OptimalControl +const VERBOSE = isdefined(Main, :TestOptions) ? Main.TestOptions.VERBOSE : true +const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : true + +function test_ctmodels() + @testset "CTModels reexports" verbose = VERBOSE showtiming = SHOWTIMING begin + + @testset "Generated Code Prefix" begin + @test isdefined(OptimalControl, :CTModels) + @test isdefined(Main, :CTModels) + @test CTModels isa Module + end + + @testset "Display" begin + @test isdefined(OptimalControl, :plot) + @test isdefined(Main, :plot) + @test plot isa Function + end + + @testset "Initial Guess Types" begin + for T in ( + AbstractOptimalControlInitialGuess, + OptimalControlInitialGuess, + ) + @test isdefined(OptimalControl, nameof(T)) + @test T isa DataType || T isa UnionAll + end + end + + @testset "Serialization Functions" begin + for f in ( + :export_ocp_solution, + :import_ocp_solution, + ) + @test isdefined(OptimalControl, f) + @test isdefined(Main, f) + @test getfield(OptimalControl, f) isa Function + end + end + + @testset "API Types" begin + for T in ( + Model, + AbstractModel, + AbstractOptimalControlProblem, + Solution, + AbstractSolution, + AbstractOptimalControlSolution, + ) + @test isdefined(OptimalControl, nameof(T)) + @test T isa DataType || T isa UnionAll + end + end + + @testset "Accessors" begin + for f in ( + :constraint, :constraints, :name, :dimension, :components, + :initial_time, :final_time, :time_name, :time_grid, :times, + :initial_time_name, :final_time_name, + :criterion, :has_mayer_cost, :has_lagrange_cost, + :is_mayer_cost_defined, :is_lagrange_cost_defined, + :has_fixed_initial_time, :has_free_initial_time, + :has_fixed_final_time, :has_free_final_time, + :is_autonomous, + :is_initial_time_fixed, :is_initial_time_free, + :is_final_time_fixed, :is_final_time_free, + :state_dimension, :control_dimension, :variable_dimension, + :state_name, :control_name, :variable_name, + :state_components, :control_components, :variable_components, + ) + @test isdefined(OptimalControl, f) + @test isdefined(Main, f) + @test getfield(OptimalControl, f) isa Function + end + end + + @testset "Constraint Accessors" begin + for f in ( + :path_constraints_nl, :boundary_constraints_nl, + :state_constraints_box, :control_constraints_box, :variable_constraints_box, + :dim_path_constraints_nl, :dim_boundary_constraints_nl, + :dim_state_constraints_box, :dim_control_constraints_box, + :dim_variable_constraints_box, + :state, :control, :variable, :costate, :objective, + :dynamics, :mayer, :lagrange, + :definition, :dual, + :iterations, :status, :message, :success, :successful, + :constraints_violation, :infos, + :get_build_examodel, + :is_empty, :is_empty_time_grid, + :index, :time, + :model, + ) + @test isdefined(OptimalControl, f) + @test isdefined(Main, f) + @test getfield(OptimalControl, f) isa Function + end + end + + @testset "Dual Constraints Accessors" begin + for f in ( + :path_constraints_dual, :boundary_constraints_dual, + :state_constraints_lb_dual, :state_constraints_ub_dual, + :control_constraints_lb_dual, :control_constraints_ub_dual, + :variable_constraints_lb_dual, :variable_constraints_ub_dual, + ) + @test isdefined(OptimalControl, f) + @test isdefined(Main, f) + @test getfield(OptimalControl, f) isa Function + end + end + + end +end + +end # module + +# Redefine in outer scope for TestRunner +test_ctmodels() = TestCtmodels.test_ctmodels() \ No newline at end of file diff --git a/test/suite/reexport/test_ctparser.jl b/test/suite/reexport/test_ctparser.jl new file mode 100644 index 00000000..e9e09eb7 --- /dev/null +++ b/test/suite/reexport/test_ctparser.jl @@ -0,0 +1,22 @@ +module TestCtparser + +using Test +using OptimalControl +const VERBOSE = isdefined(Main, :TestOptions) ? Main.TestOptions.VERBOSE : true +const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : true + +function test_ctparser() + @testset "CTParser reexports" verbose = VERBOSE showtiming = SHOWTIMING begin + @testset "Macros" begin + @test isdefined(OptimalControl, Symbol("@def")) + @test isdefined(Main, Symbol("@def")) + @test isdefined(OptimalControl, Symbol("@init")) + @test isdefined(Main, Symbol("@init")) + end + end +end + +end # module + +# Redefine in outer scope for TestRunner +test_ctparser() = TestCtparser.test_ctparser() \ No newline at end of file diff --git a/test/suite/reexport/test_ctsolvers.jl b/test/suite/reexport/test_ctsolvers.jl new file mode 100644 index 00000000..6caff81e --- /dev/null +++ b/test/suite/reexport/test_ctsolvers.jl @@ -0,0 +1,115 @@ +module TestCtsolvers + +using Test +using OptimalControl +const VERBOSE = isdefined(Main, :TestOptions) ? Main.TestOptions.VERBOSE : true +const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : true + +function test_ctsolvers() + @testset "CTSolvers reexports" verbose = VERBOSE showtiming = SHOWTIMING begin + @testset "DOCP Types" begin + for T in ( + DiscretizedOptimalControlProblem, + ) + @test isdefined(OptimalControl, nameof(T)) + @test isdefined(Main, nameof(T)) + @test T isa DataType || T isa UnionAll + end + end + @testset "DOCP Functions" begin + for f in ( + :ocp_model, + :nlp_model, + :ocp_solution, + ) + @test isdefined(OptimalControl, f) + @test isdefined(Main, f) + @test getfield(OptimalControl, f) isa Function + end + end + @testset "Modeler Types" begin + for T in ( + AbstractOptimizationModeler, + ADNLPModeler, + ExaModeler, + ) + @test isdefined(OptimalControl, nameof(T)) + @test isdefined(Main, nameof(T)) + @test T isa DataType || T isa UnionAll + end + end + @testset "Solver Types" begin + for T in ( + AbstractOptimizationSolver, + IpoptSolver, + MadNLPSolver, + MadNCLSolver, + KnitroSolver, + ) + @test isdefined(OptimalControl, nameof(T)) + @test isdefined(Main, nameof(T)) + @test T isa DataType || T isa UnionAll + end + end + @testset "Strategy Types" begin + for T in ( + AbstractStrategy, + StrategyRegistry, + StrategyMetadata, + StrategyOptions, + OptionDefinition, + RoutedOption, + ) + @test isdefined(OptimalControl, nameof(T)) + @test isdefined(Main, nameof(T)) + @test T isa DataType || T isa UnionAll + end + end + @testset "Strategy Metadata Functions" begin + for f in ( + :id, + :metadata, + ) + @test isdefined(OptimalControl, f) + @test isdefined(Main, f) + @test getfield(OptimalControl, f) isa Function + end + end + @testset "Strategy Introspection Functions" begin + for f in ( + :option_names, + :option_type, + :option_description, + :option_default, + :option_defaults, + :option_value, + :option_source, + :has_option, + :is_user, + :is_default, + :is_computed, + ) + @test isdefined(OptimalControl, f) + @test isdefined(Main, f) + @test getfield(OptimalControl, f) isa Function + end + end + @testset "Strategy Utility Functions" begin + for f in ( + :filter_options, + :suggest_options, + :options_dict, + :route_to, + ) + @test isdefined(OptimalControl, f) + @test isdefined(Main, f) + @test getfield(OptimalControl, f) isa Function + end + end + end +end + +end # module + +# Redefine in outer scope for TestRunner +test_ctsolvers() = TestCtsolvers.test_ctsolvers() \ No newline at end of file diff --git a/test/suite/reexport/test_examodels.jl b/test/suite/reexport/test_examodels.jl new file mode 100644 index 00000000..970226cb --- /dev/null +++ b/test/suite/reexport/test_examodels.jl @@ -0,0 +1,21 @@ +module TestExamodels + +using Test +using OptimalControl +const VERBOSE = isdefined(Main, :TestOptions) ? Main.TestOptions.VERBOSE : true +const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : true + +function test_examodels() + @testset "ExaModels reexports" verbose = VERBOSE showtiming = SHOWTIMING begin + @testset "Generated Code Prefix" begin + @test isdefined(OptimalControl, :ExaModels) + @test isdefined(Main, :ExaModels) + @test ExaModels isa Module + end + end +end + +end # module + +# Redefine in outer scope for TestRunner +test_examodels() = TestExamodels.test_examodels() \ No newline at end of file From 5cd36f0ef601a538ce648d2e0d0c4e753c1532cd Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Wed, 11 Feb 2026 15:27:29 +0100 Subject: [PATCH 08/64] add save --- .gitignore | 2 +- {docs => .save/docs}/Project.toml | 0 .save/docs/build/api-ctbase.html | 26 + .save/docs/build/api-ctdirect.html | 26 + .save/docs/build/api-ctflows.html | 26 + .save/docs/build/api-ctmodels.html | 26 + .save/docs/build/api-ctparser.html | 26 + .save/docs/build/api-optimalcontrol-dev.html | 29 + .save/docs/build/api-optimalcontrol-user.html | 700 ++++ .../docs/build}/assets/Project.toml | 0 .../docs/build}/assets/affil-lux.jpg | Bin .../src => .save/docs/build}/assets/affil.jpg | Bin .../docs/build}/assets/chariot.png | Bin .../docs/build}/assets/chariot.svg | 0 .../docs/build}/assets/control-toolbox.jpg | Bin .../docs/build}/assets/ct-qr-code.svg | 0 .../docs/build}/assets/custom.css | 0 .save/docs/build/assets/documenter.js | 1378 ++++++++ .../docs/build}/assets/france-2030.png | Bin .../docs/build}/assets/goddard-a100.jpg | Bin .../docs/build}/assets/goddard-h100.jpg | Bin .../docs/build}/assets/jlesc17.jpg | Bin .../build}/assets/juliacon-paris-2025.jpg | Bin .../docs/build}/assets/juliacon2024.jpg | Bin .../docs/build}/assets/juliacon2025.jpg | Bin .../docs/build}/assets/quadrotor-a100.jpg | Bin .../docs/build}/assets/quadrotor-h100.jpg | Bin .../docs/build}/assets/rdnopa-2025.jpg | Bin .../docs/build}/assets/rocket-def.jpg | Bin .../docs/build}/assets/rocket-def.pdf | Bin .../docs/build}/assets/rocket-def.png | Bin .../docs/build}/assets/rocket-def.svg | 0 .../docs/build}/assets/standup.jpg | Bin .../src => .save/docs/build}/assets/star.jpg | Bin .../build/assets/themes/catppuccin-frappe.css | 1 + .../build/assets/themes/catppuccin-latte.css | 1 + .../assets/themes/catppuccin-macchiato.css | 1 + .../build/assets/themes/catppuccin-mocha.css | 1 + .../build/assets/themes/documenter-dark.css | 7 + .../build/assets/themes/documenter-light.css | 9 + .save/docs/build/assets/themeswap.js | 84 + .save/docs/build/assets/warner.js | 68 + .../docs/build}/assets/zhejiang-2025.jpg | Bin ...mple-double-integrator-energy-06fb24be.svg | 199 ++ ...mple-double-integrator-energy-1aba7d99.svg | 162 + ...mple-double-integrator-energy-58bc47a9.svg | 162 + ...mple-double-integrator-energy-e71f4e0b.svg | 178 + .../example-double-integrator-energy.html | 207 ++ ...xample-double-integrator-time-765cb6c7.svg | 179 ++ ...xample-double-integrator-time-b5687fa2.svg | 203 ++ .../build/example-double-integrator-time.html | 167 + .save/docs/build/index.html | 460 +++ .save/docs/build/jlesc17.html | 299 ++ .save/docs/build/juliacon-paris-2025.html | 265 ++ .save/docs/build/juliacon2024.html | 7 + .save/docs/build/manual-abstract.html | 299 ++ .save/docs/build/manual-ai-llm.html | 162 + .save/docs/build/manual-flow-api.html | 103 + .save/docs/build/manual-flow-ocp-14f5fd40.svg | 41 + .save/docs/build/manual-flow-ocp-7ba8f25d.svg | 102 + .save/docs/build/manual-flow-ocp-9f7684fe.svg | 162 + .save/docs/build/manual-flow-ocp-b00ba7c1.svg | 166 + .save/docs/build/manual-flow-ocp-dd4b802c.svg | 213 ++ .save/docs/build/manual-flow-ocp.html | 223 ++ .../build/manual-flow-others-a2c83b5a.svg | 47 + .save/docs/build/manual-flow-others.html | 30 + .../build/manual-initial-guess-88347162.svg | 168 + .save/docs/build/manual-initial-guess.html | 74 + .save/docs/build/manual-model.html | 232 ++ .save/docs/build/manual-plot-0604bdc7.svg | 230 ++ .save/docs/build/manual-plot-074d1bf5.svg | 40 + .save/docs/build/manual-plot-131267e2.svg | 162 + .save/docs/build/manual-plot-1693a92e.svg | 162 + .save/docs/build/manual-plot-18cbe3d1.svg | 38 + .save/docs/build/manual-plot-40553d99.svg | 100 + .save/docs/build/manual-plot-4515ffa9.svg | 162 + .save/docs/build/manual-plot-572fc9de.svg | 137 + .save/docs/build/manual-plot-832c48be.svg | 40 + .save/docs/build/manual-plot-87a9d8d8.svg | 40 + .save/docs/build/manual-plot-93dd69ff.svg | 45 + .save/docs/build/manual-plot-9dd8231f.svg | 153 + .save/docs/build/manual-plot-9f13f6b8.svg | 115 + .save/docs/build/manual-plot-9f661317.svg | 40 + .save/docs/build/manual-plot-a3ec7a51.svg | 216 ++ .save/docs/build/manual-plot-a5612bd4.svg | 135 + .save/docs/build/manual-plot-bd51f12c.svg | 199 ++ .save/docs/build/manual-plot-c7063e9e.svg | 168 + .save/docs/build/manual-plot-d48d6eb5.svg | 119 + .save/docs/build/manual-plot-def718af.svg | 40 + .save/docs/build/manual-plot-dfe6ee03.svg | 197 ++ .save/docs/build/manual-plot-e867ef4c.svg | 115 + .save/docs/build/manual-plot-ea47f22c.svg | 197 ++ .save/docs/build/manual-plot-f4d48806.svg | 162 + .save/docs/build/manual-plot-f9106d4b.svg | 128 + .save/docs/build/manual-plot.html | 412 +++ .save/docs/build/manual-solution-32912690.svg | 162 + .save/docs/build/manual-solution-698e93c0.svg | 41 + .save/docs/build/manual-solution-b2fed91d.svg | 41 + .save/docs/build/manual-solution.html | 135 + .save/docs/build/manual-solve-gpu.html | 73 + .save/docs/build/manual-solve.html | 151 + .save/docs/build/objects.inv | Bin 0 -> 3889 bytes .save/docs/build/rdnopa-2025.html | 91 + .save/docs/build/search_index.js | 3 + .save/docs/build/zhejiang-2025.html | 7 + {docs => .save/docs}/make.jl | 0 {docs => .save/docs}/src/api-ctbase.md | 0 {docs => .save/docs}/src/api-ctdirect.md | 0 {docs => .save/docs}/src/api-ctflows.md | 0 {docs => .save/docs}/src/api-ctmodels.md | 0 {docs => .save/docs}/src/api-ctparser.md | 0 .../docs}/src/api-optimalcontrol-dev.md | 0 .../docs}/src/api-optimalcontrol-user.md | 0 .save/docs/src/assets/Project.toml | 57 + .save/docs/src/assets/affil-lux.jpg | Bin 0 -> 217232 bytes .save/docs/src/assets/affil.jpg | Bin 0 -> 133497 bytes .save/docs/src/assets/chariot.png | Bin 0 -> 20448 bytes .save/docs/src/assets/chariot.svg | 80 + .save/docs/src/assets/control-toolbox.jpg | Bin 0 -> 771699 bytes .save/docs/src/assets/ct-qr-code.svg | 1606 +++++++++ .save/docs/src/assets/custom.css | 36 + .save/docs/src/assets/france-2030.png | Bin 0 -> 50116 bytes .save/docs/src/assets/goddard-a100.jpg | Bin 0 -> 63953 bytes .save/docs/src/assets/goddard-h100.jpg | Bin 0 -> 66204 bytes .save/docs/src/assets/jlesc17.jpg | Bin 0 -> 2911094 bytes .save/docs/src/assets/juliacon-paris-2025.jpg | Bin 0 -> 152839 bytes .save/docs/src/assets/juliacon2024.jpg | Bin 0 -> 899744 bytes .save/docs/src/assets/juliacon2025.jpg | Bin 0 -> 1750365 bytes .save/docs/src/assets/quadrotor-a100.jpg | Bin 0 -> 65936 bytes .save/docs/src/assets/quadrotor-h100.jpg | Bin 0 -> 62286 bytes .save/docs/src/assets/rdnopa-2025.jpg | Bin 0 -> 241670 bytes .save/docs/src/assets/rocket-def.jpg | Bin 0 -> 128442 bytes .save/docs/src/assets/rocket-def.pdf | Bin 0 -> 110651 bytes .save/docs/src/assets/rocket-def.png | Bin 0 -> 238038 bytes .save/docs/src/assets/rocket-def.svg | 517 +++ .save/docs/src/assets/standup.jpg | Bin 0 -> 1914685 bytes .save/docs/src/assets/star.jpg | Bin 0 -> 237252 bytes .save/docs/src/assets/zhejiang-2025.jpg | Bin 0 -> 267974 bytes .../src/example-double-integrator-energy.md | 0 .../src/example-double-integrator-time.md | 0 {docs => .save/docs}/src/index.md | 0 {docs => .save/docs}/src/jlesc17.md | 0 .../docs}/src/juliacon-paris-2025.md | 0 {docs => .save/docs}/src/juliacon2024.md | 0 {docs => .save/docs}/src/manual-abstract.md | 0 {docs => .save/docs}/src/manual-ai-llm.md | 0 {docs => .save/docs}/src/manual-flow-api.md | 0 {docs => .save/docs}/src/manual-flow-ocp.md | 0 .../docs}/src/manual-flow-others.md | 0 .../docs}/src/manual-initial-guess.md | 0 {docs => .save/docs}/src/manual-model.md | 0 {docs => .save/docs}/src/manual-plot.md | 0 {docs => .save/docs}/src/manual-solution.md | 0 {docs => .save/docs}/src/manual-solve-gpu.md | 0 {docs => .save/docs}/src/manual-solve.md | 0 {docs => .save/docs}/src/rdnopa-2025.md | 0 {docs => .save/docs}/src/zhejiang-2025.md | 0 .save/solve.jl | 137 + .save/test/ctdirect/problems/beam.jl | 17 + .save/test/ctdirect/problems/beam2.jl | 19 + .save/test/ctdirect/problems/bolza.jl | 18 + .../ctdirect/problems/double_integrator.jl | 60 + .save/test/ctdirect/problems/fuller.jl | 16 + .save/test/ctdirect/problems/goddard.jl | 187 ++ .save/test/ctdirect/problems/jackson.jl | 27 + .save/test/ctdirect/problems/parametric.jl | 27 + .save/test/ctdirect/problems/robbins.jl | 21 + .../ctdirect/problems/simple_integrator.jl | 17 + .save/test/ctdirect/problems/vanderpol.jl | 19 + .save/test/ctdirect/suite/test_all_ocp.jl | 81 + .save/test/ctdirect/suite/test_constraints.jl | 114 + .../test/ctdirect/suite/test_continuation.jl | 80 + .../ctdirect/suite/test_discretization.jl | 112 + .save/test/ctdirect/suite/test_exa.jl | 30 + .../test/ctdirect/suite/test_initial_guess.jl | 177 + .save/test/ctdirect/suite/test_objective.jl | 60 + .save/test/extras/check_ownership.jl | 39 + .save/test/extras/cons.jl | 98 + .save/test/extras/cons_2.jl | 41 + .save/test/extras/ensemble.jl | 21 + .save/test/extras/export.jl | 27 + .save/test/extras/nonautonomous.jl | 36 + .save/test/extras/ocp.jl | 28 + .save/test/indirect/Goddard.jl | 54 + .save/test/indirect/test_goddard_indirect.jl | 60 + .save/test/problems/beam.jl | 28 + .save/test/problems/goddard.jl | 64 + .save/test/runtests.jl | 52 + .save/test/test_optimalcontrol_solve_api.jl | 796 +++++ docs/src/assets/Manifest.toml | 2860 ----------------- 190 files changed, 16035 insertions(+), 2861 deletions(-) rename {docs => .save/docs}/Project.toml (100%) create mode 100644 .save/docs/build/api-ctbase.html create mode 100644 .save/docs/build/api-ctdirect.html create mode 100644 .save/docs/build/api-ctflows.html create mode 100644 .save/docs/build/api-ctmodels.html create mode 100644 .save/docs/build/api-ctparser.html create mode 100644 .save/docs/build/api-optimalcontrol-dev.html create mode 100644 .save/docs/build/api-optimalcontrol-user.html rename {docs/src => .save/docs/build}/assets/Project.toml (100%) rename {docs/src => .save/docs/build}/assets/affil-lux.jpg (100%) rename {docs/src => .save/docs/build}/assets/affil.jpg (100%) rename {docs/src => .save/docs/build}/assets/chariot.png (100%) rename {docs/src => .save/docs/build}/assets/chariot.svg (100%) rename {docs/src => .save/docs/build}/assets/control-toolbox.jpg (100%) rename {docs/src => .save/docs/build}/assets/ct-qr-code.svg (100%) rename {docs/src => .save/docs/build}/assets/custom.css (100%) create mode 100644 .save/docs/build/assets/documenter.js rename {docs/src => .save/docs/build}/assets/france-2030.png (100%) rename {docs/src => .save/docs/build}/assets/goddard-a100.jpg (100%) rename {docs/src => .save/docs/build}/assets/goddard-h100.jpg (100%) rename {docs/src => .save/docs/build}/assets/jlesc17.jpg (100%) rename {docs/src => .save/docs/build}/assets/juliacon-paris-2025.jpg (100%) rename {docs/src => .save/docs/build}/assets/juliacon2024.jpg (100%) rename {docs/src => .save/docs/build}/assets/juliacon2025.jpg (100%) rename {docs/src => .save/docs/build}/assets/quadrotor-a100.jpg (100%) rename {docs/src => .save/docs/build}/assets/quadrotor-h100.jpg (100%) rename {docs/src => .save/docs/build}/assets/rdnopa-2025.jpg (100%) rename {docs/src => .save/docs/build}/assets/rocket-def.jpg (100%) rename {docs/src => .save/docs/build}/assets/rocket-def.pdf (100%) rename {docs/src => .save/docs/build}/assets/rocket-def.png (100%) rename {docs/src => .save/docs/build}/assets/rocket-def.svg (100%) rename {docs/src => .save/docs/build}/assets/standup.jpg (100%) rename {docs/src => .save/docs/build}/assets/star.jpg (100%) create mode 100644 .save/docs/build/assets/themes/catppuccin-frappe.css create mode 100644 .save/docs/build/assets/themes/catppuccin-latte.css create mode 100644 .save/docs/build/assets/themes/catppuccin-macchiato.css create mode 100644 .save/docs/build/assets/themes/catppuccin-mocha.css create mode 100644 .save/docs/build/assets/themes/documenter-dark.css create mode 100644 .save/docs/build/assets/themes/documenter-light.css create mode 100644 .save/docs/build/assets/themeswap.js create mode 100644 .save/docs/build/assets/warner.js rename {docs/src => .save/docs/build}/assets/zhejiang-2025.jpg (100%) create mode 100644 .save/docs/build/example-double-integrator-energy-06fb24be.svg create mode 100644 .save/docs/build/example-double-integrator-energy-1aba7d99.svg create mode 100644 .save/docs/build/example-double-integrator-energy-58bc47a9.svg create mode 100644 .save/docs/build/example-double-integrator-energy-e71f4e0b.svg create mode 100644 .save/docs/build/example-double-integrator-energy.html create mode 100644 .save/docs/build/example-double-integrator-time-765cb6c7.svg create mode 100644 .save/docs/build/example-double-integrator-time-b5687fa2.svg create mode 100644 .save/docs/build/example-double-integrator-time.html create mode 100644 .save/docs/build/index.html create mode 100644 .save/docs/build/jlesc17.html create mode 100644 .save/docs/build/juliacon-paris-2025.html create mode 100644 .save/docs/build/juliacon2024.html create mode 100644 .save/docs/build/manual-abstract.html create mode 100644 .save/docs/build/manual-ai-llm.html create mode 100644 .save/docs/build/manual-flow-api.html create mode 100644 .save/docs/build/manual-flow-ocp-14f5fd40.svg create mode 100644 .save/docs/build/manual-flow-ocp-7ba8f25d.svg create mode 100644 .save/docs/build/manual-flow-ocp-9f7684fe.svg create mode 100644 .save/docs/build/manual-flow-ocp-b00ba7c1.svg create mode 100644 .save/docs/build/manual-flow-ocp-dd4b802c.svg create mode 100644 .save/docs/build/manual-flow-ocp.html create mode 100644 .save/docs/build/manual-flow-others-a2c83b5a.svg create mode 100644 .save/docs/build/manual-flow-others.html create mode 100644 .save/docs/build/manual-initial-guess-88347162.svg create mode 100644 .save/docs/build/manual-initial-guess.html create mode 100644 .save/docs/build/manual-model.html create mode 100644 .save/docs/build/manual-plot-0604bdc7.svg create mode 100644 .save/docs/build/manual-plot-074d1bf5.svg create mode 100644 .save/docs/build/manual-plot-131267e2.svg create mode 100644 .save/docs/build/manual-plot-1693a92e.svg create mode 100644 .save/docs/build/manual-plot-18cbe3d1.svg create mode 100644 .save/docs/build/manual-plot-40553d99.svg create mode 100644 .save/docs/build/manual-plot-4515ffa9.svg create mode 100644 .save/docs/build/manual-plot-572fc9de.svg create mode 100644 .save/docs/build/manual-plot-832c48be.svg create mode 100644 .save/docs/build/manual-plot-87a9d8d8.svg create mode 100644 .save/docs/build/manual-plot-93dd69ff.svg create mode 100644 .save/docs/build/manual-plot-9dd8231f.svg create mode 100644 .save/docs/build/manual-plot-9f13f6b8.svg create mode 100644 .save/docs/build/manual-plot-9f661317.svg create mode 100644 .save/docs/build/manual-plot-a3ec7a51.svg create mode 100644 .save/docs/build/manual-plot-a5612bd4.svg create mode 100644 .save/docs/build/manual-plot-bd51f12c.svg create mode 100644 .save/docs/build/manual-plot-c7063e9e.svg create mode 100644 .save/docs/build/manual-plot-d48d6eb5.svg create mode 100644 .save/docs/build/manual-plot-def718af.svg create mode 100644 .save/docs/build/manual-plot-dfe6ee03.svg create mode 100644 .save/docs/build/manual-plot-e867ef4c.svg create mode 100644 .save/docs/build/manual-plot-ea47f22c.svg create mode 100644 .save/docs/build/manual-plot-f4d48806.svg create mode 100644 .save/docs/build/manual-plot-f9106d4b.svg create mode 100644 .save/docs/build/manual-plot.html create mode 100644 .save/docs/build/manual-solution-32912690.svg create mode 100644 .save/docs/build/manual-solution-698e93c0.svg create mode 100644 .save/docs/build/manual-solution-b2fed91d.svg create mode 100644 .save/docs/build/manual-solution.html create mode 100644 .save/docs/build/manual-solve-gpu.html create mode 100644 .save/docs/build/manual-solve.html create mode 100644 .save/docs/build/objects.inv create mode 100644 .save/docs/build/rdnopa-2025.html create mode 100644 .save/docs/build/search_index.js create mode 100644 .save/docs/build/zhejiang-2025.html rename {docs => .save/docs}/make.jl (100%) rename {docs => .save/docs}/src/api-ctbase.md (100%) rename {docs => .save/docs}/src/api-ctdirect.md (100%) rename {docs => .save/docs}/src/api-ctflows.md (100%) rename {docs => .save/docs}/src/api-ctmodels.md (100%) rename {docs => .save/docs}/src/api-ctparser.md (100%) rename {docs => .save/docs}/src/api-optimalcontrol-dev.md (100%) rename {docs => .save/docs}/src/api-optimalcontrol-user.md (100%) create mode 100644 .save/docs/src/assets/Project.toml create mode 100644 .save/docs/src/assets/affil-lux.jpg create mode 100644 .save/docs/src/assets/affil.jpg create mode 100644 .save/docs/src/assets/chariot.png create mode 100644 .save/docs/src/assets/chariot.svg create mode 100644 .save/docs/src/assets/control-toolbox.jpg create mode 100644 .save/docs/src/assets/ct-qr-code.svg create mode 100644 .save/docs/src/assets/custom.css create mode 100644 .save/docs/src/assets/france-2030.png create mode 100644 .save/docs/src/assets/goddard-a100.jpg create mode 100644 .save/docs/src/assets/goddard-h100.jpg create mode 100644 .save/docs/src/assets/jlesc17.jpg create mode 100644 .save/docs/src/assets/juliacon-paris-2025.jpg create mode 100644 .save/docs/src/assets/juliacon2024.jpg create mode 100644 .save/docs/src/assets/juliacon2025.jpg create mode 100644 .save/docs/src/assets/quadrotor-a100.jpg create mode 100644 .save/docs/src/assets/quadrotor-h100.jpg create mode 100644 .save/docs/src/assets/rdnopa-2025.jpg create mode 100644 .save/docs/src/assets/rocket-def.jpg create mode 100644 .save/docs/src/assets/rocket-def.pdf create mode 100644 .save/docs/src/assets/rocket-def.png create mode 100644 .save/docs/src/assets/rocket-def.svg create mode 100644 .save/docs/src/assets/standup.jpg create mode 100644 .save/docs/src/assets/star.jpg create mode 100644 .save/docs/src/assets/zhejiang-2025.jpg rename {docs => .save/docs}/src/example-double-integrator-energy.md (100%) rename {docs => .save/docs}/src/example-double-integrator-time.md (100%) rename {docs => .save/docs}/src/index.md (100%) rename {docs => .save/docs}/src/jlesc17.md (100%) rename {docs => .save/docs}/src/juliacon-paris-2025.md (100%) rename {docs => .save/docs}/src/juliacon2024.md (100%) rename {docs => .save/docs}/src/manual-abstract.md (100%) rename {docs => .save/docs}/src/manual-ai-llm.md (100%) rename {docs => .save/docs}/src/manual-flow-api.md (100%) rename {docs => .save/docs}/src/manual-flow-ocp.md (100%) rename {docs => .save/docs}/src/manual-flow-others.md (100%) rename {docs => .save/docs}/src/manual-initial-guess.md (100%) rename {docs => .save/docs}/src/manual-model.md (100%) rename {docs => .save/docs}/src/manual-plot.md (100%) rename {docs => .save/docs}/src/manual-solution.md (100%) rename {docs => .save/docs}/src/manual-solve-gpu.md (100%) rename {docs => .save/docs}/src/manual-solve.md (100%) rename {docs => .save/docs}/src/rdnopa-2025.md (100%) rename {docs => .save/docs}/src/zhejiang-2025.md (100%) create mode 100644 .save/solve.jl create mode 100644 .save/test/ctdirect/problems/beam.jl create mode 100644 .save/test/ctdirect/problems/beam2.jl create mode 100644 .save/test/ctdirect/problems/bolza.jl create mode 100644 .save/test/ctdirect/problems/double_integrator.jl create mode 100644 .save/test/ctdirect/problems/fuller.jl create mode 100644 .save/test/ctdirect/problems/goddard.jl create mode 100644 .save/test/ctdirect/problems/jackson.jl create mode 100644 .save/test/ctdirect/problems/parametric.jl create mode 100644 .save/test/ctdirect/problems/robbins.jl create mode 100644 .save/test/ctdirect/problems/simple_integrator.jl create mode 100644 .save/test/ctdirect/problems/vanderpol.jl create mode 100644 .save/test/ctdirect/suite/test_all_ocp.jl create mode 100644 .save/test/ctdirect/suite/test_constraints.jl create mode 100644 .save/test/ctdirect/suite/test_continuation.jl create mode 100644 .save/test/ctdirect/suite/test_discretization.jl create mode 100644 .save/test/ctdirect/suite/test_exa.jl create mode 100644 .save/test/ctdirect/suite/test_initial_guess.jl create mode 100644 .save/test/ctdirect/suite/test_objective.jl create mode 100644 .save/test/extras/check_ownership.jl create mode 100644 .save/test/extras/cons.jl create mode 100644 .save/test/extras/cons_2.jl create mode 100644 .save/test/extras/ensemble.jl create mode 100644 .save/test/extras/export.jl create mode 100644 .save/test/extras/nonautonomous.jl create mode 100644 .save/test/extras/ocp.jl create mode 100644 .save/test/indirect/Goddard.jl create mode 100644 .save/test/indirect/test_goddard_indirect.jl create mode 100644 .save/test/problems/beam.jl create mode 100644 .save/test/problems/goddard.jl create mode 100644 .save/test/runtests.jl create mode 100644 .save/test/test_optimalcontrol_solve_api.jl delete mode 100644 docs/src/assets/Manifest.toml diff --git a/.gitignore b/.gitignore index ab853b63..acb1f8c4 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,4 @@ Manifest.toml # .tmp/ -.save/ \ No newline at end of file +#.save/ \ No newline at end of file diff --git a/docs/Project.toml b/.save/docs/Project.toml similarity index 100% rename from docs/Project.toml rename to .save/docs/Project.toml diff --git a/.save/docs/build/api-ctbase.html b/.save/docs/build/api-ctbase.html new file mode 100644 index 00000000..ef344e52 --- /dev/null +++ b/.save/docs/build/api-ctbase.html @@ -0,0 +1,26 @@ + +CTBase.jl · OptimalControl.jl

CTBase.jl

The CTBase.jl package is part of the control-toolbox ecosystem.

flowchart TD +B(<a href='api-ctbase.html'>CTBase</a>) +M(<a href='api-ctmodels.html'>CTModels</a>) +P(<a href='api-ctparser.html'>CTParser</a>) +O(<a href='api-optimalcontrol-dev.html'>OptimalControl</a>) +D(<a href='api-ctdirect.html'>CTDirect</a>) +F(<a href='api-ctflows.html'>CTFlows</a>) +O --> D +O --> M +O --> F +O --> P +F --> M +O --> B +F --> B +D --> B +D --> M +P --> M +P --> B +M --> B +style B fill:#FBF275

OptimalControl heavily relies on CTBase. We refer to CTBase API for more details.

diff --git a/.save/docs/build/api-ctdirect.html b/.save/docs/build/api-ctdirect.html new file mode 100644 index 00000000..2688cf7b --- /dev/null +++ b/.save/docs/build/api-ctdirect.html @@ -0,0 +1,26 @@ + +CTDirect.jl · OptimalControl.jl

CTDirect.jl

The CTDirect.jl package is part of the control-toolbox ecosystem.

flowchart TD +B(<a href='api-ctbase.html'>CTBase</a>) +M(<a href='api-ctmodels.html'>CTModels</a>) +P(<a href='api-ctparser.html'>CTParser</a>) +O(<a href='api-optimalcontrol-dev.html'>OptimalControl</a>) +D(<a href='api-ctdirect.html'>CTDirect</a>) +F(<a href='api-ctflows.html'>CTFlows</a>) +O --> D +O --> M +O --> F +O --> P +F --> M +O --> B +F --> B +D --> B +D --> M +P --> M +P --> B +M --> B +style D fill:#FBF275

OptimalControl heavily relies on CTDirect. We refer to CTDirect API for more details.

diff --git a/.save/docs/build/api-ctflows.html b/.save/docs/build/api-ctflows.html new file mode 100644 index 00000000..01690e30 --- /dev/null +++ b/.save/docs/build/api-ctflows.html @@ -0,0 +1,26 @@ + +CTFlows.jl · OptimalControl.jl

CTFlows.jl

The CTFlows.jl package is part of the control-toolbox ecosystem.

flowchart TD +B(<a href='api-ctbase.html'>CTBase</a>) +M(<a href='api-ctmodels.html'>CTModels</a>) +P(<a href='api-ctparser.html'>CTParser</a>) +O(<a href='api-optimalcontrol-dev.html'>OptimalControl</a>) +D(<a href='api-ctdirect.html'>CTDirect</a>) +F(<a href='api-ctflows.html'>CTFlows</a>) +O --> D +O --> M +O --> F +O --> P +F --> M +O --> B +F --> B +D --> B +D --> M +P --> M +P --> B +M --> B +style F fill:#FBF275

OptimalControl heavily relies on CTFlows. We refer to CTFlows API for more details.

diff --git a/.save/docs/build/api-ctmodels.html b/.save/docs/build/api-ctmodels.html new file mode 100644 index 00000000..9ce2f9d3 --- /dev/null +++ b/.save/docs/build/api-ctmodels.html @@ -0,0 +1,26 @@ + +CTModels.jl · OptimalControl.jl

CTModels.jl

The CTModels.jl package is part of the control-toolbox ecosystem.

flowchart TD +B(<a href='api-ctbase.html'>CTBase</a>) +M(<a href='api-ctmodels.html'>CTModels</a>) +P(<a href='api-ctparser.html'>CTParser</a>) +O(<a href='api-optimalcontrol-dev.html'>OptimalControl</a>) +D(<a href='api-ctdirect.html'>CTDirect</a>) +F(<a href='api-ctflows.html'>CTFlows</a>) +O --> D +O --> M +O --> F +O --> P +F --> M +O --> B +F --> B +D --> B +D --> M +P --> M +P --> B +M --> B +style M fill:#FBF275

OptimalControl heavily relies on CTModels. We refer to CTModels API for more details.

diff --git a/.save/docs/build/api-ctparser.html b/.save/docs/build/api-ctparser.html new file mode 100644 index 00000000..d5829dcc --- /dev/null +++ b/.save/docs/build/api-ctparser.html @@ -0,0 +1,26 @@ + +CTParser.jl · OptimalControl.jl

CTParser.jl

The CTParser.jl package is part of the control-toolbox ecosystem.

flowchart TD +B(<a href='api-ctbase.html'>CTBase</a>) +M(<a href='api-ctmodels.html'>CTModels</a>) +P(<a href='api-ctparser.html'>CTParser</a>) +O(<a href='api-optimalcontrol-dev.html'>OptimalControl</a>) +D(<a href='api-ctdirect.html'>CTDirect</a>) +F(<a href='api-ctflows.html'>CTFlows</a>) +O --> D +O --> M +O --> F +O --> P +F --> M +O --> B +F --> B +D --> B +D --> M +P --> M +P --> B +M --> B +style P fill:#FBF275

OptimalControl heavily relies on CTParser. We refer to CTParser API for more details.

diff --git a/.save/docs/build/api-optimalcontrol-dev.html b/.save/docs/build/api-optimalcontrol-dev.html new file mode 100644 index 00000000..0833d847 --- /dev/null +++ b/.save/docs/build/api-optimalcontrol-dev.html @@ -0,0 +1,29 @@ + +OptimalControl.jl · OptimalControl.jl

OptimalControl.jl (Private)

OptimalControl.jl is the root package of the control-toolbox ecosystem.

flowchart TD +B(<a href='api-ctbase.html'>CTBase</a>) +M(<a href='api-ctmodels.html'>CTModels</a>) +P(<a href='api-ctparser.html'>CTParser</a>) +O(<a href='api-optimalcontrol-dev.html'>OptimalControl</a>) +D(<a href='api-ctdirect.html'>CTDirect</a>) +F(<a href='api-ctflows.html'>CTFlows</a>) +O --> D +O --> M +O --> F +O --> P +F --> M +O --> B +F --> B +D --> B +D --> M +P --> M +P --> B +M --> B +style O fill:#FBF275

Index

Documentation

OptimalControl.cleanMethod
clean(d::Tuple{Vararg{Symbol}}) -> Tuple{Vararg{Symbol}}
+

When calling the function solve, the user can provide a description of the method to use to solve the optimal control problem. The description can be a partial description or a full description. The function solve will find the best match from the available methods, thanks to the function getFullDescription. Then, the description is cleaned by the function clean to remove the Symbols that are specific to OptimalControl.jl and so must not be passed to the solver. For instance, the Symbol :direct is specific to OptimalControl.jl and must be removed. It must not be passed to the CTDirect.jl solver.

source
OptimalControl.versionMethod

Return the version of the current module as a string.

This function returns the version number defined in the Project.toml of the package to which the current module belongs. It uses @__MODULE__ to infer the calling context.

Example

julia> version()   # e.g., "1.2.3"
source
diff --git a/.save/docs/build/api-optimalcontrol-user.html b/.save/docs/build/api-optimalcontrol-user.html new file mode 100644 index 00000000..759ee051 --- /dev/null +++ b/.save/docs/build/api-optimalcontrol-user.html @@ -0,0 +1,700 @@ + +OptimalControl.jl - User · OptimalControl.jl

OptimalControl.jl

OptimalControl.jl is the core package of the control-toolbox ecosystem. Below, we group together the documentation of all the functions and types exported by OptimalControl.

Beware!

Even if the following functions are prefixed by another package, such as CTFlows.Lift, they can all be used with OptimalControl. In fact, all functions prefixed with another package are simply reexported. For example, Lift is defined in CTFlows but accessible from OptimalControl.

julia> using OptimalControl
+julia> F(x) = 2x
+julia> H = Lift(F)
+julia> x = 1
+julia> p = 2
+julia> H(x, p)
+4

Exported functions and types

OptimalControl.OptimalControlModule

OptimalControl module.

List of all the exported names:

source

Documentation

Base.:*Method
*(x, y...)

Multiplication operator.

Infix x*y*z*... calls this function with all arguments, i.e. *(x, y, z, ...), which by default then calls (x*y) * z * ... starting from the left.

Juxtaposition such as 2pi also calls *(2, pi). Note that this operation has higher precedence than a literal *. Note also that juxtaposition "0x..." (integer zero times a variable whose name starts with x) is forbidden as it clashes with unsigned integer literals: 0x01 isa UInt8.

Note that overflow is possible for most integer types, including the default Int, when multiplying large numbers.

Examples

julia> 2 * 7 * 8
+112
+
+julia> *(2, 7, 8)
+112
+
+julia> [2 0; 0 3] * [1, 10]  # matrix * vector
+2-element Vector{Int64}:
+  2
+ 30
+
+julia> 1/2pi, 1/2*pi  # juxtaposition has higher precedence
+(0.15915494309189535, 1.5707963267948966)
+
+julia> x = [1, 2]; x'x  # adjoint vector * vector
+5
source
*(
+    F::CTFlowsODE.AbstractFlow,
+    g::Tuple{Real, TF<:CTFlowsODE.AbstractFlow}
+) -> Any
+

Shorthand for concatenate(F, g) when g is a tuple (t_switch, G).

Arguments

  • F::AbstractFlow: The first flow.
  • g::Tuple{ctNumber, AbstractFlow}: Tuple containing the switching time and second flow.

Returns

  • A new flow that switches from F to G at t_switch.

Example

julia> F * (1.0, G)
source
*(
+    F::CTFlowsODE.AbstractFlow,
+    g::Tuple{Real, Any, TF<:CTFlowsODE.AbstractFlow}
+) -> Any
+

Shorthand for concatenate(F, g) when g is a tuple (t_switch, η_switch, G) including a jump.

Arguments

  • F::AbstractFlow: The first flow.
  • g::Tuple{ctNumber, Any, AbstractFlow}: Tuple with switching time, jump value, and second flow.

Returns

  • A flow with a jump at t_switch and a switch from F to G.

Example

julia> F * (1.0, η, G)
source
CTBase.AmbiguousDescriptionType
struct AmbiguousDescription <: CTException

Exception thrown when a description is ambiguous or does not match any known descriptions.

Fields

  • var::Tuple{Vararg{Symbol}}: The ambiguous or incorrect description tuple that caused the error.

Example

julia> complete(:f; descriptions=((:a, :b), (:a, :b, :c)))
+ERROR: AmbiguousDescription: the description (:f,) is ambiguous / incorrect

This error is useful to signal when a user provides a description that cannot be matched to any known valid descriptions.

source
CTBase.CTExceptionType
abstract type CTException <: Exception

Abstract supertype for all custom exceptions in this module.

Use this as the common ancestor for all domain-specific errors to allow catching all exceptions of this family via catch e::CTException.

No fields.

Example

julia> try
+           throw(IncorrectArgument("invalid input"))
+       catch e::CTException
+           println("Caught a domain-specific exception: ", e)
+       end
+Caught a domain-specific exception: IncorrectArgument: invalid input
source
CTBase.ExtensionErrorType
struct ExtensionError <: CTException

Exception thrown when an extension or optional dependency is not loaded but a function requiring it is called.

Fields

  • weakdeps::Tuple{Vararg{Symbol}}: The tuple of symbols representing the missing dependencies.

Constructor

Throws UnauthorizedCall if no weak dependencies are provided.

Example

julia> throw(ExtensionError(:MyExtension))
+ERROR: ExtensionError. Please make: julia> using MyExtension
source
CTFlows.FlowFunction
Flow(
+    vf::VectorField;
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> CTFlowsODE.VectorFieldFlow
+

Constructs a flow object for a classical (non-Hamiltonian) vector field.

This creates a VectorFieldFlow that integrates the ODE system dx/dt = vf(t, x, v) using DifferentialEquations.jl. It handles both fixed and parametric dynamics, as well as jump discontinuities and event stopping.

Keyword Arguments

  • alg, abstol, reltol, saveat, internalnorm: Solver options.
  • kwargs_Flow...: Additional arguments passed to the solver configuration.

Example

julia> vf(t, x, v) = -v * x
+julia> flow = CTFlows.Flow(CTFlows.VectorField(vf))
+julia> x1 = flow(0.0, 1.0, 1.0)
source
Flow(
+    h::CTFlows.AbstractHamiltonian;
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> CTFlowsODE.HamiltonianFlow
+

Constructs a Hamiltonian flow from a scalar Hamiltonian.

This method builds a numerical integrator that simulates the evolution of a Hamiltonian system given a Hamiltonian function h(t, x, p, l) or h(x, p).

Internally, it computes the right-hand side of Hamilton’s equations via automatic differentiation and returns a HamiltonianFlow object.

Keyword Arguments

  • alg, abstol, reltol, saveat, internalnorm: solver options.
  • kwargs_Flow...: forwarded to the solver.

Example

julia> H(x, p) = dot(p, p) + dot(x, x)
+julia> flow = CTFlows.Flow(CTFlows.Hamiltonian(H))
+julia> xf, pf = flow(0.0, x0, p0, 1.0)
source
Flow(
+    hv::HamiltonianVectorField;
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> CTFlowsODE.HamiltonianFlow
+

Constructs a Hamiltonian flow from a precomputed Hamiltonian vector field.

This method assumes you already provide the Hamiltonian vector field (dx/dt, dp/dt) instead of deriving it from a scalar Hamiltonian.

Returns a HamiltonianFlow object that integrates the given system.

Keyword Arguments

  • alg, abstol, reltol, saveat, internalnorm: solver options.
  • kwargs_Flow...: forwarded to the solver.

Example

julia> hv(t, x, p, l) = (∇ₚH, -∇ₓH)
+julia> flow = CTFlows.Flow(CTFlows.HamiltonianVectorField(hv))
+julia> xf, pf = flow(0.0, x0, p0, 1.0, l)
source
Flow(
+    ocp::Model,
+    u::CTFlows.ControlLaw;
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}
+

Construct a flow for an optimal control problem using a given control law.

This method builds the Hamiltonian system associated with the optimal control problem (ocp) and integrates the corresponding state–costate dynamics using the specified control law u.

Arguments

  • ocp::CTModels.Model: An optimal control problem defined using CTModels.
  • u::CTFlows.ControlLaw: A feedback control law generated by ControlLaw(...) or similar.
  • alg: Integration algorithm (default inferred).
  • abstol: Absolute tolerance for the ODE solver.
  • reltol: Relative tolerance for the ODE solver.
  • saveat: Time points at which to save the solution.
  • internalnorm: Optional norm function used by the integrator.
  • kwargs_Flow: Additional keyword arguments passed to the solver.

Returns

A flow object f such that:

  • f(t0, x0, p0, tf) integrates the state and costate from t0 to tf.
  • f((t0, tf), x0, p0) returns the full trajectory over the interval.

Example

julia> u = (x, p) -> p
+julia> f = Flow(ocp, ControlLaw(u))
source
Flow(
+    ocp::Model,
+    u::Function;
+    autonomous,
+    variable,
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}
+

Construct a flow for an optimal control problem using a control function in feedback form.

This method constructs the Hamiltonian and integrates the associated state–costate dynamics using a raw function u. It automatically wraps u as a control law.

Arguments

  • ocp::CTModels.Model: The optimal control problem.
  • u::Function: A feedback control function:
    • If ocp is autonomous: u(x, p)
    • If non-autonomous: u(t, x, p)
  • autonomous::Bool: Whether the control law depends on time.
  • variable::Bool: Whether the OCP involves variable time (e.g., free final time).
  • alg, abstol, reltol, saveat, internalnorm: ODE solver parameters.
  • kwargs_Flow: Additional options.

Returns

A Flow object compatible with function call interfaces for state propagation.

Example

julia> u = (t, x, p) -> t + p
+julia> f = Flow(ocp, u)
source
Flow(
+    ocp::Model,
+    u::Union{CTFlows.ControlLaw{<:Function, T, V}, CTFlows.FeedbackControl{<:Function, T, V}},
+    g::Union{CTFlows.MixedConstraint{<:Function, T, V}, CTFlows.StateConstraint{<:Function, T, V}},
+    μ::CTFlows.Multiplier{<:Function, T, V};
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}
+

Construct a flow for an optimal control problem with control and constraint multipliers in feedback form.

This variant constructs a Hamiltonian system incorporating both the control law and a multiplier law (e.g., for enforcing state or mixed constraints). All inputs must be consistent in time dependence.

Arguments

  • ocp::CTModels.Model: The optimal control problem.
  • u::ControlLaw or FeedbackControl: Feedback control.
  • g::StateConstraint or MixedConstraint: Constraint function.
  • μ::Multiplier: Multiplier function.
  • alg, abstol, reltol, saveat, internalnorm: Solver settings.
  • kwargs_Flow: Additional options.

Returns

A Flow object that integrates the constrained Hamiltonian dynamics.

Example

julia> f = Flow(ocp, (x, p) -> p[1], (x, u) -> x[1] - 1, (x, p) -> x[1]+p[1])

For non-autonomous cases:

julia> f = Flow(ocp, (t, x, p) -> t + p, (t, x, u) -> x - 1, (t, x, p) -> x+p)
Warning

All input functions must match the autonomous/non-autonomous nature of the problem.

source
Flow(
+    ocp::Model,
+    u::Function,
+    g::Function,
+    μ::Function;
+    autonomous,
+    variable,
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}
+

Construct a flow from a raw feedback control, constraint, and multiplier.

This version is for defining flows directly from user functions without wrapping them into ControlLaw, Constraint, or Multiplier types. Automatically wraps and adapts them based on time dependence.

Arguments

  • ocp::CTModels.Model: The optimal control problem.
  • u::Function: Control law.
  • g::Function: Constraint.
  • μ::Function: Multiplier.
  • autonomous::Bool: Whether the system is autonomous.
  • variable::Bool: Whether time is a free variable.
  • alg, abstol, reltol, saveat, internalnorm: Solver parameters.
  • kwargs_Flow: Additional options.

Returns

A Flow object ready for trajectory integration.

source
Flow(
+    dyn::Function;
+    autonomous,
+    variable,
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> CTFlowsODE.ODEFlow
+

Constructs a Flow from a user-defined dynamical system given as a Julia function.

This high-level interface handles:

  • autonomous and non-autonomous systems,
  • presence or absence of additional variables (v),
  • selection of ODE solvers and tolerances,
  • and integrates with the CTFlows event system (e.g., jumps, callbacks).

Arguments

  • dyn: A function defining the vector field. Its signature must match the values of autonomous and variable.
  • autonomous: Whether the dynamics are time-independent (false by default).
  • variable: Whether the dynamics depend on a control or parameter v.
  • alg, abstol, reltol, saveat, internalnorm: Solver settings passed to OrdinaryDiffEq.solve.
  • kwargs_Flow: Additional keyword arguments passed to the solver.

Returns

An ODEFlow object, wrapping both the full solver and its right-hand side (RHS).

Supported Function Signatures for dyn

Depending on the (autonomous, variable) flags:

  • (false, false): dyn(x)
  • (false, true): dyn(x, v)
  • (true, false): dyn(t, x)
  • (true, true): dyn(t, x, v)

Example

julia> dyn(t, x, v) = [-x[1] + v[1] * sin(t)]
+julia> flow = CTFlows.Flow(dyn; autonomous=true, variable=true)
+julia> xT = flow((0.0, 1.0), [1.0], [0.1])
source
CTFlows.HamiltonianType
struct Hamiltonian{TF<:Function, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence} <: CTFlows.AbstractHamiltonian{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}

Encodes the Hamiltonian function H = ⟨p, f⟩ + L in optimal control.

Fields

  • f: a callable of the form:
    • f(x, p)
    • f(t, x, p)
    • f(x, p, v)
    • f(t, x, p, v)

Type Parameters

  • TD: Autonomous or NonAutonomous
  • VD: Fixed or NonFixed

Example

julia> Hf(x, p) = dot(p, [x[2], -x[1]])
+julia> H = Hamiltonian{typeof(Hf), Autonomous, Fixed}(Hf)
+julia> H([1.0, 0.0], [1.0, 1.0])
source
CTFlows.HamiltonianLiftType
struct HamiltonianLift{TV<:VectorField, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence} <: CTFlows.AbstractHamiltonian{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}

Lifts a vector field X into a Hamiltonian function using the canonical symplectic structure.

This is useful to convert a vector field into a Hamiltonian via the identity: H(x, p) = ⟨p, X(x)⟩.

Constructor

Use HamiltonianLift(X::VectorField) where X is a VectorField{...}.

Example

f(x) = [x[2], -x[1]]
+julia> X = VectorField{typeof(f), Autonomous, Fixed}(f)
+julia> H = HamiltonianLift(X)
+julia> H([1.0, 0.0], [0.5, 0.5])
source
CTFlows.HamiltonianVectorFieldType
struct HamiltonianVectorField{TF<:Function, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence} <: CTFlows.AbstractVectorField{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}

Represents the Hamiltonian vector field associated to a Hamiltonian function, typically defined as (∂H/∂p, -∂H/∂x).

Fields

  • f: a callable implementing the Hamiltonian vector field.

Example

julia> f(x, p) = [p[2], -p[1], -x[1], -x[2]]
+julia> XH = HamiltonianVectorField{typeof(f), Autonomous, Fixed}(f)
+julia> XH([1.0, 0.0], [0.5, 0.5])
source
CTBase.IncorrectArgumentType
struct IncorrectArgument <: CTException

Exception thrown when an argument passed to a function or constructor is inconsistent, invalid, or does not satisfy preconditions.

Fields

  • var::String: A descriptive message explaining the nature of the incorrect argument.

Example

julia> throw(IncorrectArgument("the argument must be a non-empty tuple"))
+ERROR: IncorrectArgument: the argument must be a non-empty tuple
source
CTBase.IncorrectMethodType
struct IncorrectMethod <: CTException

Exception thrown when a specified method name or function symbol does not exist.

Fields

  • var::Symbol: The method or function symbol that was expected but not found.

Example

julia> throw(IncorrectMethod(:nonexistent_func))
+ERROR: IncorrectMethod: nonexistent_func is not an existing method
source
CTBase.IncorrectOutputType
struct IncorrectOutput <: CTException

Exception thrown when the output produced by a function is incorrect or inconsistent with expected results.

Fields

  • var::String: A descriptive message explaining the incorrect output.

Example

julia> throw(IncorrectOutput("the function returned NaN"))
+ERROR: IncorrectOutput: the function returned NaN
source
CTFlows.@LieMacro

Compute Lie or Poisson brackets.

This macro provides a unified notation to define recursively nested Lie brackets (for vector fields) or Poisson brackets (for Hamiltonians).

Syntax

  • @Lie [F, G]: computes the Lie bracket [F, G] of two vector fields.
  • @Lie [[F, G], H]: supports arbitrarily nested Lie brackets.
  • @Lie {H, K}: computes the Poisson bracket {H, K} of two Hamiltonians.
  • @Lie {{H, K}, L}: supports arbitrarily nested Poisson brackets.
  • @Lie expr autonomous = false: specifies a non-autonomous system.
  • @Lie expr variable = true: indicates presence of an auxiliary variable v.

Keyword-like arguments can be provided to control the evaluation context for Poisson brackets with raw functions:

  • autonomous = Bool: whether the system is time-independent (default: true).
  • variable = Bool: whether the system depends on an extra variable v (default: false).

Bracket type detection

  • Square brackets [...] denote Lie brackets between VectorField objects.
  • Curly brackets {...} denote Poisson brackets between Hamiltonian objects or between raw functions.
  • The macro automatically dispatches to Lie or Poisson depending on the input pattern.

Return

A callable object representing the specified Lie or Poisson bracket expression. The returned function can be evaluated like any other vector field or Hamiltonian.


Examples

■ Lie brackets with VectorField (autonomous)

julia> F1 = VectorField(x -> [0, -x[3], x[2]])
+julia> F2 = VectorField(x -> [x[3], 0, -x[1]])
+julia> L = @Lie [F1, F2]
+julia> L([1.0, 2.0, 3.0])
+3-element Vector{Float64}:
+  2.0
+ -1.0
+  0.0

■ Lie brackets with VectorField (non-autonomous, with auxiliary variable)

julia> F1 = VectorField((t, x, v) -> [0, -x[3], x[2]]; autonomous=false, variable=true)
+julia> F2 = VectorField((t, x, v) -> [x[3], 0, -x[1]]; autonomous=false, variable=true)
+julia> L = @Lie [F1, F2]
+julia> L(0.0, [1.0, 2.0, 3.0], 1.0)
+3-element Vector{Float64}:
+  2.0
+ -1.0
+  0.0

■ Poisson brackets with Hamiltonian (autonomous)

julia> H1 = Hamiltonian((x, p) -> x[1]^2 + p[2]^2)
+julia> H2 = Hamiltonian((x, p) -> x[2]^2 + p[1]^2)
+julia> P = @Lie {H1, H2}
+julia> P([1.0, 1.0], [3.0, 2.0])
+-4.0

■ Poisson brackets with Hamiltonian (non-autonomous, with variable)

julia> H1 = Hamiltonian((t, x, p, v) -> x[1]^2 + p[2]^2 + v; autonomous=false, variable=true)
+julia> H2 = Hamiltonian((t, x, p, v) -> x[2]^2 + p[1]^2 + v; autonomous=false, variable=true)
+julia> P = @Lie {H1, H2}
+julia> P(1.0, [1.0, 3.0], [4.0, 2.0], 3.0)
+8.0

■ Poisson brackets from raw functions

julia> H1 = (x, p) -> x[1]^2 + p[2]^2
+julia> H2 = (x, p) -> x[2]^2 + p[1]^2
+julia> P = @Lie {H1, H2}
+julia> P([1.0, 1.0], [3.0, 2.0])
+-4.0

■ Poisson bracket with non-autonomous raw functions

julia> H1 = (t, x, p) -> x[1]^2 + p[2]^2 + t
+julia> H2 = (t, x, p) -> x[2]^2 + p[1]^2 + t
+julia> P = @Lie {H1, H2} autonomous = false
+julia> P(3.0, [1.0, 2.0], [4.0, 1.0])
+-8.0

■ Nested brackets

julia> F = VectorField(x -> [-x[1], x[2], x[3]])
+julia> G = VectorField(x -> [x[3], -x[2], 0])
+julia> H = VectorField(x -> [0, 0, -x[1]])
+julia> nested = @Lie [[F, G], H]
+julia> nested([1.0, 2.0, 3.0])
+3-element Vector{Float64}:
+  2.0
+  0.0
+ -6.0
julia> H1 = (x, p) -> x[2]*x[1]^2 + p[1]^2
+julia> H2 = (x, p) -> x[1]*p[2]^2
+julia> H3 = (x, p) -> x[1]*p[2] + x[2]*p[1]
+julia> nested_poisson = @Lie {{H1, H2}, H3}
+julia> nested_poisson([1.0, 2.0], [0.5, 1.0])
+14.0

■ Mixed expressions with arithmetic

julia> F1 = VectorField(x -> [0, -x[3], x[2]])
+julia> F2 = VectorField(x -> [x[3], 0, -x[1]])
+julia> x = [1.0, 2.0, 3.0]
+julia> @Lie [F1, F2](x) + 3 * [F1, F2](x)
+3-element Vector{Float64}:
+  8.0
+ -4.0
+  0.0
julia> H1 = (x, p) -> x[1]^2
+julia> H2 = (x, p) -> p[1]^2
+julia> H3 = (x, p) -> x[1]*p[1]
+julia> x = [1.0, 2.0, 3.0]
+julia> p = [3.0, 2.0, 1.0]
+julia> @Lie {H1, H2}(x, p) + 2 * {H2, H3}(x, p)
+24.0
source
CTFlows.LieFunction

Lie derivative of a scalar function along a vector field.

Example:

julia> φ = x -> [x[2], -x[1]]
+julia> X = VectorField(φ)
+julia> f = x -> x[1]^2 + x[2]^2
+julia> Lie(X,f)([1, 2])
+0
+julia> φ = (t, x, v) -> [t + x[2] + v[1], -x[1] + v[2]]
+julia> X = VectorField(φ, NonAutonomous, NonFixed)
+julia> f = (t, x, v) -> t + x[1]^2 + x[2]^2
+julia> Lie(X, f)(1, [1, 2], [2, 1])
+10
source

Lie derivative of a scalar function along a function with specified dependencies.

Example:

julia> φ = x -> [x[2], -x[1]]
+julia> f = x -> x[1]^2 + x[2]^2
+julia> Lie(φ,f)([1, 2])
+0
+julia> φ = (t, x, v) -> [t + x[2] + v[1], -x[1] + v[2]]
+julia> f = (t, x, v) -> t + x[1]^2 + x[2]^2
+julia> Lie(φ, f, autonomous=false, variable=true)(1, [1, 2], [2, 1])
+10
source

Lie bracket of two vector fields in the autonomous case.

Example:

julia> f = x -> [x[2], 2x[1]]
+julia> g = x -> [3x[2], -x[1]]
+julia> X = VectorField(f)
+julia> Y = VectorField(g)
+julia> Lie(X, Y)([1, 2])
+[7, -14]
source

Lie bracket of two vector fields in the nonautonomous case.

Example:

julia> f = (t, x, v) -> [t + x[2] + v, -2x[1] - v]
+julia> g = (t, x, v) -> [t + 3x[2] + v, -x[1] - v]
+julia> X = VectorField(f, NonAutonomous, NonFixed)
+julia> Y = VectorField(g, NonAutonomous, NonFixed)
+julia> Lie(X, Y)(1, [1, 2], 1)
+[-7, 12]
source
CTFlows.LiftFunction
Lift(
+    X::VectorField
+) -> HamiltonianLift{VectorField{TF, TD, VD}} where {TF<:Function, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}
+

Construct the Hamiltonian lift of a VectorField.

Arguments

  • X::VectorField: The vector field to lift. Its signature determines if it is autonomous and/or variable.

Returns

  • A HamiltonianLift callable object representing the Hamiltonian lift of X.

Examples

julia> HL = Lift(VectorField(x -> [x[1]^2, x[2]^2], autonomous=true, variable=false))
+julia> HL([1, 0], [0, 1])  # returns 0
+
+julia> HL2 = Lift(VectorField((t, x, v) -> [t + x[1]^2, x[2]^2 + v], autonomous=false, variable=true))
+julia> HL2(1, [1, 0], [0, 1], 1)  # returns 1
+
+julia> H = Lift(x -> 2x)
+julia> H(1, 1)  # returns 2
+
+julia> H2 = Lift((t, x, v) -> 2x + t - v, autonomous=false, variable=true)
+julia> H2(1, 1, 1, 1)  # returns 2
+
+# Alternative syntax using symbols for autonomy and variability
+julia> H3 = Lift((t, x, v) -> 2x + t - v, NonAutonomous, NonFixed)
+julia> H3(1, 1, 1, 1)  # returns 2
source
Lift(
+    X::Function;
+    autonomous,
+    variable
+) -> CTFlows.var"#21#22"{<:Function}
+

Construct the Hamiltonian lift of a function.

Arguments

  • X::Function: The function representing the vector field.
  • autonomous::Bool=true: Whether the function is autonomous (time-independent).
  • variable::Bool=false: Whether the function depends on an additional variable argument.

Returns

  • A callable function computing the Hamiltonian lift,

(and variants depending on autonomous and variable).

Details

Depending on the autonomous and variable flags, the returned function has one of the following call signatures:

  • (x, p) if autonomous=true and variable=false
  • (x, p, v) if autonomous=true and variable=true
  • (t, x, p) if autonomous=false and variable=false
  • (t, x, p, v) if autonomous=false and variable=true

Examples

julia> H = Lift(x -> 2x)
+julia> H(1, 1)  # returns 2
+
+julia> H2 = Lift((t, x, v) -> 2x + t - v, autonomous=false, variable=true)
+julia> H2(1, 1, 1, 1)  # returns 2
source
CTModels.ModelType
struct Model{TD<:CTModels.TimeDependence, TimesModelType<:CTModels.AbstractTimesModel, StateModelType<:CTModels.AbstractStateModel, ControlModelType<:CTModels.AbstractControlModel, VariableModelType<:CTModels.AbstractVariableModel, DynamicsModelType<:Function, ObjectiveModelType<:CTModels.AbstractObjectiveModel, ConstraintsModelType<:CTModels.AbstractConstraintsModel, BuildExaModelType<:Union{Nothing, Function}} <: CTModels.AbstractModel

Fields

  • times::CTModels.AbstractTimesModel

  • state::CTModels.AbstractStateModel

  • control::CTModels.AbstractControlModel

  • variable::CTModels.AbstractVariableModel

  • dynamics::Function

  • objective::CTModels.AbstractObjectiveModel

  • constraints::CTModels.AbstractConstraintsModel

  • definition::Expr

  • build_examodel::Union{Nothing, Function}

source
CTBase.NotImplementedType
struct NotImplemented <: CTException

Exception thrown when a method or function has not been implemented yet.

Fields

  • var::String: A message indicating what functionality is not yet implemented.

Example

julia> throw(NotImplemented("feature X is not implemented"))
+ERROR: NotImplemented: feature X is not implemented
source
CTBase.ParsingErrorType
struct ParsingError <: CTException

Exception thrown during parsing when a syntax error or invalid structure is detected.

Fields

  • var::String: A message describing the parsing error.

Example

julia> throw(ParsingError("unexpected token"))
+ERROR: ParsingError: unexpected token
source
CTFlows.PoissonFunction
Poisson(
+    f::CTFlows.AbstractHamiltonian{CTFlows.Autonomous, V<:CTFlows.VariableDependence},
+    g::CTFlows.AbstractHamiltonian{CTFlows.Autonomous, V<:CTFlows.VariableDependence}
+) -> Any
+

Poisson bracket of two Hamiltonian functions (subtype of AbstractHamiltonian). Autonomous case.

Returns a Hamiltonian representing the Poisson bracket {f, g} of two autonomous Hamiltonian functions f and g.

Example

julia> f = (x, p) -> x[2]^2 + 2x[1]^2 + p[1]^2
+julia> g = (x, p) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1]
+julia> F = Hamiltonian(f)
+julia> G = Hamiltonian(g)
+julia> Poisson(f, g)([1, 2], [2, 1])     # -20
+julia> Poisson(f, G)([1, 2], [2, 1])     # -20
+julia> Poisson(F, g)([1, 2], [2, 1])     # -20
source
Poisson(
+    f::CTFlows.AbstractHamiltonian{CTFlows.NonAutonomous, V<:CTFlows.VariableDependence},
+    g::CTFlows.AbstractHamiltonian{CTFlows.NonAutonomous, V<:CTFlows.VariableDependence}
+) -> Any
+

Poisson bracket of two Hamiltonian functions. Non-autonomous case.

Returns a Hamiltonian representing {f, g} where f and g are time-dependent.

Example

julia> f = (t, x, p, v) -> t*v[1]*x[2]^2 + 2x[1]^2 + p[1]^2 + v[2]
+julia> g = (t, x, p, v) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1] + t - v[2]
+julia> F = Hamiltonian(f, autonomous=false, variable=true)
+julia> G = Hamiltonian(g, autonomous=false, variable=true)
+julia> Poisson(F, G)(2, [1, 2], [2, 1], [4, 4])     # -76
+julia> Poisson(f, g, NonAutonomous, NonFixed)(2, [1, 2], [2, 1], [4, 4])     # -76
source
Poisson(
+    f::HamiltonianLift{T<:CTFlows.TimeDependence, V<:CTFlows.VariableDependence},
+    g::HamiltonianLift{T<:CTFlows.TimeDependence, V<:CTFlows.VariableDependence}
+)
+

Poisson bracket of two HamiltonianLift vector fields.

Returns the HamiltonianLift corresponding to the Lie bracket of vector fields f.X and g.X.

Example

julia> f = x -> [x[1]^2 + x[2]^2, 2x[1]^2]
+julia> g = x -> [3x[2]^2, x[2] - x[1]^2]
+julia> F = Lift(f)
+julia> G = Lift(g)
+julia> Poisson(F, G)([1, 2], [2, 1])     # -64
+
+julia> f = (t, x, v) -> [t*v[1]*x[2]^2, 2x[1]^2 + v[2]]
+julia> g = (t, x, v) -> [3x[2]^2 - x[1]^2, t - v[2]]
+julia> F = Lift(f, NonAutonomous, NonFixed)
+julia> G = Lift(g, NonAutonomous, NonFixed)
+julia> Poisson(F, G)(2, [1, 2], [2, 1], [4, 4])     # 100
source
Poisson(
+    f::Function,
+    g::Function;
+    autonomous,
+    variable
+) -> Hamiltonian
+

Poisson bracket of two functions. The time and variable dependence are specified with keyword arguments.

Returns a Hamiltonian computed from the functions promoted as Hamiltonians.

Example

julia> f = (x, p) -> x[2]^2 + 2x[1]^2 + p[1]^2
+julia> g = (x, p) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1]
+julia> Poisson(f, g)([1, 2], [2, 1])     # -20
+
+julia> f = (t, x, p, v) -> t*v[1]*x[2]^2 + 2x[1]^2 + p[1]^2 + v[2]
+julia> g = (t, x, p, v) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1] + t - v[2]
+julia> Poisson(f, g, autonomous=false, variable=true)(2, [1, 2], [2, 1], [4, 4])     # -76
source
Poisson(
+    f::Function,
+    g::CTFlows.AbstractHamiltonian{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}
+) -> Hamiltonian
+

Poisson bracket of a function and a Hamiltonian.

Returns a Hamiltonian representing {f, g} where g is already a Hamiltonian.

Example

julia> f = (x, p) -> x[2]^2 + 2x[1]^2 + p[1]^2
+julia> g = (x, p) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1]
+julia> G = Hamiltonian(g)
+julia> Poisson(f, G)([1, 2], [2, 1])     # -20
+
+julia> f = (t, x, p, v) -> t*v[1]*x[2]^2 + 2x[1]^2 + p[1]^2 + v[2]
+julia> g = (t, x, p, v) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1] + t - v[2]
+julia> G = Hamiltonian(g, autonomous=false, variable=true)
+julia> Poisson(f, G)(2, [1, 2], [2, 1], [4, 4])     # -76
source
Poisson(
+    f::CTFlows.AbstractHamiltonian{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence},
+    g::Function
+) -> Hamiltonian
+

Poisson bracket of a Hamiltonian and a function.

Returns a Hamiltonian representing {f, g} where f is already a Hamiltonian.

Example

julia> f = (x, p) -> x[2]^2 + 2x[1]^2 + p[1]^2
+julia> g = (x, p) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1]
+julia> F = Hamiltonian(f)
+julia> Poisson(F, g)([1, 2], [2, 1])     # -20
+
+julia> f = (t, x, p, v) -> t*v[1]*x[2]^2 + 2x[1]^2 + p[1]^2 + v[2]
+julia> g = (t, x, p, v) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1] + t - v[2]
+julia> F = Hamiltonian(f, autonomous=false, variable=true)
+julia> Poisson(F, g)(2, [1, 2], [2, 1], [4, 4])     # -76
source
CTModels.SolutionType
struct Solution{TimeGridModelType<:CTModels.AbstractTimeGridModel, TimesModelType<:CTModels.AbstractTimesModel, StateModelType<:CTModels.AbstractStateModel, ControlModelType<:CTModels.AbstractControlModel, VariableModelType<:CTModels.AbstractVariableModel, CostateModelType<:Function, ObjectiveValueType<:Real, DualModelType<:CTModels.AbstractDualModel, SolverInfosType<:CTModels.AbstractSolverInfos, ModelType<:CTModels.AbstractModel} <: CTModels.AbstractSolution

Fields

  • time_grid::CTModels.AbstractTimeGridModel

  • times::CTModels.AbstractTimesModel

  • state::CTModels.AbstractStateModel

  • control::CTModels.AbstractControlModel

  • variable::CTModels.AbstractVariableModel

  • costate::Function

  • objective::Real

  • dual::CTModels.AbstractDualModel

  • solver_infos::CTModels.AbstractSolverInfos

  • model::CTModels.AbstractModel

source
CTFlows.VectorFieldType
struct VectorField{TF<:Function, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence} <: CTFlows.AbstractVectorField{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}

Represents a dynamical system dx/dt = f(...) as a vector field.

Fields

  • f: a callable of the form:
    • f(x)
    • f(t, x)
    • f(x, v)
    • f(t, x, v)

Example

f(x) = [x[2], -x[1]]
+vf = VectorField{typeof(f), Autonomous, Fixed}(f)
+vf([1.0, 0.0])
source
CTBase.UnauthorizedCallType
struct UnauthorizedCall <: CTException

Exception thrown when a function call is not authorized in the current context or with the given arguments.

Fields

  • var::String: A message explaining why the call is unauthorized.

Example

julia> throw(UnauthorizedCall("user does not have permission"))
+ERROR: UnauthorizedCall: user does not have permission
source
OptimalControl.available_methodsFunction
available_methods(
+
+) -> Tuple{Vararg{Tuple{Symbol, Symbol, Symbol}}}
+

Return the list of available methods that can be used to solve optimal control problems.

source
CTDirect.build_OCP_solutionFunction
build_OCP_solution(
+    docp::CTDirect.DOCP,
+    nlp_solution::SolverCore.AbstractExecutionStats
+) -> Solution{TimeGridModelType, TimesModelType, StateModelType, ControlModelType, VariableModelType, CostateModelType, Float64, DualModelType, CTModels.SolverInfos{Dict{Symbol, Any}}, ModelType} where {TimeGridModelType<:CTModels.TimeGridModel, TimesModelType<:CTModels.TimesModel, StateModelType<:Union{CTModels.StateModelSolution{TS} where TS<:CTModels.var"#84#85", CTModels.StateModelSolution{TS} where TS<:CTModels.var"#86#87"}, ControlModelType<:Union{CTModels.ControlModelSolution{TS} where TS<:CTModels.var"#88#89", CTModels.ControlModelSolution{TS} where TS<:CTModels.var"#90#91"}, VariableModelType<:Union{CTModels.VariableModelSolution{Vector{Float64}}, CTModels.VariableModelSolution{Float64}}, CostateModelType<:Union{CTModels.var"#92#93", CTModels.var"#94#95"}, DualModelType<:(CTModels.DualModel{PC_Dual, Vector{Float64}, SC_LB_Dual, SC_UB_Dual, CC_LB_Dual, CC_UB_Dual, Vector{Float64}, Vector{Float64}} where {PC_Dual<:Union{CTModels.var"#100#101"{CTModels.var"#96#97"}, CTModels.var"#98#99"{CTModels.var"#96#97"}}, SC_LB_Dual<:Union{CTModels.var"#104#105"{CTModels.var"#102#103"}, CTModels.var"#106#107"{CTModels.var"#102#103"}}, SC_UB_Dual<:Union{CTModels.var"#110#111"{CTModels.var"#108#109"}, CTModels.var"#112#113"{CTModels.var"#108#109"}}, CC_LB_Dual<:Union{CTModels.var"#116#117"{CTModels.var"#114#115"}, CTModels.var"#118#119"{CTModels.var"#114#115"}}, CC_UB_Dual<:Union{CTModels.var"#122#123"{CTModels.var"#120#121"}, CTModels.var"#124#125"{CTModels.var"#120#121"}}}), ModelType<:(Model{<:CTModels.TimeDependence, T} where T<:CTModels.TimesModel)}
+

Build an OCP functional solution from a DOCP discrete solution given as a SolverCore.AbstractExecutionStats object.

Arguments

  • docp: The discretized optimal control problem (DOCP).
  • nlp_solution: A solver execution statistics object.

Returns

  • solution::CTModels.Solution: A functional OCP solution containing trajectories, multipliers, and solver information.

Example

julia> build_OCP_solution(docp, nlp_solution)
+CTModels.Solution(...)
source
build_OCP_solution(
+    docp;
+    primal,
+    dual,
+    multipliers_L,
+    multipliers_U,
+    nlp_model_backend,
+    nlp_solution
+)
+

Build an OCP functional solution from a DOCP discrete solution, given explicit primal variables, and optionally dual variables and bound multipliers.

Arguments

  • docp: The discretized optimal control problem (DOCP).
  • primal: Array of primal decision variables.
  • dual: Array of dual variables (default: nothing).
  • multipliers_L: Lower bound multipliers (default: nothing).
  • multipliers_U: Upper bound multipliers (default: nothing).
  • nlp_model_backend: The NLP model backend (default: ADNLPBackend()).
  • nlp_solution: A solver execution statistics object.

Returns

  • solution::CTModels.Solution: A functional OCP solution with trajectories, multipliers, and solver information.

Example

julia> build_OCP_solution(docp; primal=primal_vars, nlp_solution=nlp_solution)
+CTModels.Solution(...)
source
ExaModels.constraintMethod
constraint(
+    ocp::Model,
+    label::Symbol
+) -> Tuple{Symbol, Any, Any, Any}
+

Get a labelled constraint from the model. Returns a tuple of the form (type, f, lb, ub) where type is the type of the constraint, f is the function, lb is the lower bound and ub is the upper bound.

The function returns an exception if the label is not found in the model.

Arguments

  • model: The model from which to retrieve the constraint.
  • label: The label of the constraint to retrieve.

Returns

  • Tuple: A tuple containing the type, function, lower bound, and upper bound of the constraint.
source
CTModels.constraintsFunction
constraints(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.AbstractObjectiveModel, C<:CTModels.AbstractConstraintsModel}
+) -> CTModels.AbstractConstraintsModel
+

Return the constraints struct.

source
CTModels.controlFunction
control(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel, <:CTModels.AbstractStateModel, T<:CTModels.AbstractControlModel}
+) -> CTModels.AbstractControlModel
+

Return the control struct.

source
control(
+    sol::Solution{<:CTModels.AbstractTimeGridModel, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.ControlModelSolution{TS<:Function}}
+) -> Function
+

Return the control as a function of time.

julia> u  = control(sol)
+julia> t0 = time_grid(sol)[1]
+julia> u0 = u(t0) # control at the initial time
source
CTModels.control_componentsFunction
control_components(ocp::Model) -> Vector{String}
+

Return the names of the components of the control.

source
control_components(sol::Solution) -> Vector{String}
+

Return the names of the components of the control.

source
CTModels.control_dimensionFunction
control_dimension(ocp::Model) -> Int64
+

Return the control dimension.

source
control_dimension(sol::Solution) -> Int64
+

Return the dimension of the control.

source
CTModels.control_nameFunction
control_name(ocp::Model) -> String
+

Return the name of the control.

source
control_name(sol::Solution) -> String
+

Return the name of the control.

source
CTModels.costateFunction
costate(
+    sol::Solution{<:CTModels.AbstractTimeGridModel, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, Co<:Function}
+) -> Function
+

Return the costate as a function of time.

julia> p  = costate(sol)
+julia> t0 = time_grid(sol)[1]
+julia> p0 = p(t0) # costate at the initial time
source
CTModels.criterionFunction
criterion(model::CTModels.MayerObjectiveModel) -> Symbol
+

Return the criterion (:min or :max).

source
criterion(model::CTModels.LagrangeObjectiveModel) -> Symbol
+

Return the criterion (:min or :max).

source
criterion(model::CTModels.BolzaObjectiveModel) -> Symbol
+

Return the criterion (:min or :max).

source
criterion(ocp::Model) -> Symbol
+

Return the type of criterion (:min or :max).

source
CTParser.@defMacro

Define an optimal control problem. One pass parsing of the definition. Can be used writing either ocp = @def begin ... end or @def ocp begin ... end. In the second case, setting log to true will display the parsing steps.

Example

ocp = @def begin
+    tf ∈ R, variable
+    t ∈ [ 0, tf ], time
+    x ∈ R², state
+    u ∈ R, control
+    tf ≥ 0
+    -1 ≤ u(t) ≤ 1
+    q = x₁
+    v = x₂
+    q(0) == 1
+    v(0) == 2
+    q(tf) == 0
+    v(tf) == 0
+    0 ≤ q(t) ≤ 5,       (1)
+    -2 ≤ v(t) ≤ 3,      (2)
+    ẋ(t) == [ v(t), u(t) ]
+    tf → min
+end
+
+@def ocp begin
+    tf ∈ R, variable
+    t ∈ [ 0, tf ], time
+    x ∈ R², state
+    u ∈ R, control
+    tf ≥ 0
+    -1 ≤ u(t) ≤ 1
+    q = x₁
+    v = x₂
+    q(0) == 1
+    v(0) == 2
+    q(tf) == 0
+    v(tf) == 0
+    0 ≤ q(t) ≤ 5,       (1)
+    -2 ≤ v(t) ≤ 3,      (2)
+    ẋ(t) == [ v(t), u(t) ]
+    tf → min
+end true # final boolean to show parsing log
source
CTModels.definitionFunction
definition(ocp::Model) -> Expr
+

Return the model definition of the optimal control problem.

source
definition(ocp::CTModels.PreModel) -> Union{Nothing, Expr}
+

Return the model definition of the optimal control problem or nothing.

source
CTDirect.direct_transcriptionFunction
direct_transcription(
+    ocp::Model,
+    description...;
+    grid_size,
+    disc_method,
+    time_grid,
+    init,
+    lagrange_to_mayer,
+    kwargs...
+) -> CTDirect.DOCP
+

Convert a continuous-time optimal control problem into a discretized nonlinear programming problem.

Arguments

  • ocp::CTModels.Model: Continuous-time optimal control problem.
  • description...: Symbols specifying the NLP model ([:adnlp] or :exa) and/or solver ([:ipopt], :madnlp or :knitro).

Keyword Arguments (optional)

  • grid_size::Int: Number of discretization steps ([250]).
  • disc_method: Discretization scheme (:trapeze, :euler, :euler_implicit, [:midpoint], gauss_legendre_2, gauss_legendre_3).
  • time_grid: Explicit time grid (can be non uniform).
  • init: Initial guess values or existing solution.
  • lagrange_to_mayer::Bool: Convert Lagrange cost to Mayer cost (true or false).
  • kwargs...: Additional arguments passed to the NLP modeler.

Returns

  • docp::CTDirect.DOCP: Discretized optimal control problem ready for NLP solving.

Example

julia> docp = direct_transcription(ocp, :adnlp, :ipopt; grid_size=100, disc_method=:trapeze)
+CTDirect.DOCP(...)
source
CTModels.dualFunction
dual(sol::Solution, model::Model, label::Symbol) -> Any
+

Return the dual variable associated with a constraint identified by its label.

Searches through all constraint types (path, boundary, state, control, and variable constraints) defined in the model and returns the corresponding dual value from the solution.

Arguments

  • sol::Solution: Solution object containing dual variables.
  • model::Model: Model containing constraint definitions.
  • label::Symbol: Symbol corresponding to a constraint label.

Returns

A function of time t for time-dependent constraints, or a scalar/vector for time-invariant duals. If the label is not found, throws an IncorrectArgument exception.

source
CTModels.dynamicsFunction
dynamics(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, D<:Function}
+) -> Function
+

Return the dynamics.

source
CTModels.export_ocp_solutionFunction
export_ocp_solution(
+    sol::CTModels.AbstractSolution;
+    format,
+    filename
+)
+

Export a solution in JLD or JSON formats. Redirect to one of the methods:

Examples

julia> using JSON3
+julia> export_ocp_solution(sol; filename="solution", format=:JSON)
+julia> using JLD2
+julia> export_ocp_solution(sol; filename="solution", format=:JLD)  # JLD is the default
source
export_ocp_solution(
+    ::CTModels.JSON3Tag,
+    sol::Solution;
+    filename
+)
+

Export an optimal control solution to a .json file using the JSON3 format.

This function serializes a CTModels.Solution into a structured JSON dictionary, including all primal and dual information, which can be read by external tools.

Arguments

  • ::CTModels.JSON3Tag: A tag used to dispatch the export method for JSON3.
  • sol::CTModels.Solution: The solution to be saved.

Keyword Arguments

  • filename::String = "solution": Base filename. The .json extension is automatically appended.

Notes

The exported JSON includes the time grid, state, control, costate, objective, solver info, and all constraint duals (if available).

Example

julia> using JSON3
+julia> export_ocp_solution(JSON3Tag(), sol; filename="mysolution")
+# → creates "mysolution.json"
source
export_ocp_solution(
+    ::CTModels.JLD2Tag,
+    sol::Solution;
+    filename
+)
+

Export an optimal control solution to a .jld2 file using the JLD2 format.

This function serializes and saves a CTModels.Solution object to disk, allowing it to be reloaded later.

Arguments

  • ::CTModels.JLD2Tag: A tag used to dispatch the export method for JLD2.
  • sol::CTModels.Solution: The optimal control solution to be saved.

Keyword Arguments

  • filename::String = "solution": Base name of the file. The .jld2 extension is automatically appended.

Example

julia> using JLD2
+julia> export_ocp_solution(JLD2Tag(), sol; filename="mysolution")
+# → creates "mysolution.jld2"
source
CTModels.final_timeFunction
final_time(
+    model::CTModels.TimesModel{<:CTModels.AbstractTimeModel, <:CTModels.FixedTimeModel{T<:Real}}
+) -> Real
+

Get the final time from the times model, from a fixed final time model.

source
final_time(
+    model::CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FreeTimeModel},
+    variable::AbstractArray{T<:Real, 1}
+) -> Any
+

Get the final time from the times model, from a free final time model.

source
final_time(ocp::CTModels.AbstractModel) -> Real
+
source
final_time(
+    ocp::CTModels.AbstractModel,
+    variable::AbstractVector
+) -> Any
+
source
final_time(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FixedTimeModel{T<:Real}}}
+) -> Real
+

Return the final time, for a fixed final time.

source
final_time(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FreeTimeModel}},
+    variable::AbstractArray{T<:Real, 1}
+) -> Any
+

Return the final time, for a free final time.

source
final_time(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FreeTimeModel}},
+    variable::Real
+) -> Real
+

Return the final time, for a free final time.

source
CTModels.final_time_nameFunction
final_time_name(model::CTModels.TimesModel) -> String
+

Get the name of the final time from the times model.

source
final_time_name(ocp::Model) -> String
+

Return the name of the final time.

source
final_time_name(sol::Solution) -> String
+

Return the name of the final time.

source
CTModels.get_build_examodelFunction
get_build_examodel(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.AbstractObjectiveModel, <:CTModels.AbstractConstraintsModel, BE<:Function}
+) -> Function
+

Return the build_examodel.

source
get_build_examodel(
+    _::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.AbstractObjectiveModel, <:CTModels.AbstractConstraintsModel, <:Nothing}
+)
+

Return an error (UnauthorizedCall) since the model is not built with the :exa backend.

source
CTModels.has_fixed_final_timeFunction
has_fixed_final_time(
+    times::CTModels.TimesModel{<:CTModels.AbstractTimeModel, <:CTModels.FixedTimeModel{T<:Real}}
+) -> Bool
+

Check if the final time is fixed. Return true.

source
has_fixed_final_time(
+    times::CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FreeTimeModel}
+) -> Bool
+

Check if the final time is free. Return false.

source
has_fixed_final_time(ocp::Model) -> Bool
+

Check if the final time is fixed.

source
CTModels.has_fixed_initial_timeFunction
has_fixed_initial_time(
+    times::CTModels.TimesModel{<:CTModels.FixedTimeModel{T<:Real}}
+) -> Bool
+

Check if the initial time is fixed. Return true.

source
has_fixed_initial_time(
+    times::CTModels.TimesModel{CTModels.FreeTimeModel}
+) -> Bool
+

Check if the initial time is free. Return false.

source
has_fixed_initial_time(ocp::Model) -> Bool
+

Check if the initial time is fixed.

source
CTModels.has_free_final_timeFunction
has_free_final_time(times::CTModels.TimesModel) -> Bool
+

Check if the final time is free.

source
has_free_final_time(ocp::Model) -> Bool
+

Check if the final time is free.

source
CTModels.has_free_initial_timeFunction
has_free_initial_time(times::CTModels.TimesModel) -> Bool
+

Check if the final time is free.

source
has_free_initial_time(ocp::Model) -> Bool
+

Check if the initial time is free.

source
CTModels.has_lagrange_costFunction
has_lagrange_cost(_::CTModels.MayerObjectiveModel) -> Bool
+

Return false.

source
has_lagrange_cost(
+    _::CTModels.LagrangeObjectiveModel
+) -> Bool
+

Return true.

source
has_lagrange_cost(_::CTModels.BolzaObjectiveModel) -> Bool
+

Return true.

source
has_lagrange_cost(ocp::Model) -> Bool
+

Check if the model has a Lagrange cost.

source
CTModels.has_mayer_costFunction
has_mayer_cost(_::CTModels.MayerObjectiveModel) -> Bool
+

Return true.

source
has_mayer_cost(_::CTModels.LagrangeObjectiveModel) -> Bool
+

Return false.

source
has_mayer_cost(_::CTModels.BolzaObjectiveModel) -> Bool
+

Return true.

source
has_mayer_cost(ocp::Model) -> Bool
+

Check if the model has a Mayer cost.

source
CTModels.import_ocp_solutionFunction
import_ocp_solution(
+    ocp::CTModels.AbstractModel;
+    format,
+    filename
+) -> Any
+

Import a solution from a JLD or JSON file. Redirect to one of the methods:

Examples

julia> using JSON3
+julia> sol = import_ocp_solution(ocp; filename="solution", format=:JSON)
+julia> using JLD2
+julia> sol = import_ocp_solution(ocp; filename="solution", format=:JLD)  # JLD is the default
source
import_ocp_solution(
+    ::CTModels.JSON3Tag,
+    ocp::Model;
+    filename
+)
+

Import an optimal control solution from a .json file exported with export_ocp_solution.

This function reads the JSON contents and reconstructs a CTModels.Solution object, including the discretized primal and dual trajectories.

Arguments

  • ::CTModels.JSON3Tag: A tag used to dispatch the import method for JSON3.
  • ocp::CTModels.Model: The model associated with the optimal control problem. Used to rebuild the full solution.

Keyword Arguments

  • filename::String = "solution": Base filename. The .json extension is automatically appended.

Returns

  • CTModels.Solution: A reconstructed solution instance.

Notes

Handles both vector and matrix encodings of signals. If dual fields are missing or null, the corresponding attributes are set to nothing.

Example

julia> using JSON3
+julia> sol = import_ocp_solution(JSON3Tag(), model; filename="mysolution")
source
import_ocp_solution(
+    ::CTModels.JLD2Tag,
+    ocp::Model;
+    filename
+)
+

Import an optimal control solution from a .jld2 file.

This function loads a previously saved CTModels.Solution from disk.

Arguments

  • ::CTModels.JLD2Tag: A tag used to dispatch the import method for JLD2.
  • ocp::CTModels.Model: The associated model (used for dispatch consistency; not used internally).

Keyword Arguments

  • filename::String = "solution": Base name of the file. The .jld2 extension is automatically appended.

Returns

  • CTModels.Solution: The loaded solution object.

Example

julia> using JLD2
+julia> sol = import_ocp_solution(JLD2Tag(), model; filename="mysolution")
source
CTModels.infosFunction
infos(sol::Solution) -> Dict{Symbol, Any}
+

Return a dictionary of additional infos depending on the solver or nothing.

source
CTModels.initial_timeFunction
initial_time(
+    model::CTModels.TimesModel{<:CTModels.FixedTimeModel{T<:Real}}
+) -> Real
+

Get the initial time from the times model, from a fixed initial time model.

source
initial_time(
+    model::CTModels.TimesModel{CTModels.FreeTimeModel},
+    variable::AbstractArray{T<:Real, 1}
+) -> Any
+

Get the initial time from the times model, from a free initial time model.

source
initial_time(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{CTModels.FixedTimeModel{T<:Real}}}
+) -> Real
+

Return the initial time, for a fixed initial time.

source
initial_time(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{CTModels.FreeTimeModel}},
+    variable::AbstractArray{T<:Real, 1}
+) -> Any
+

Return the initial time, for a free initial time.

source
initial_time(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{CTModels.FreeTimeModel}},
+    variable::Real
+) -> Real
+

Return the initial time, for a free initial time.

source
CTModels.initial_time_nameFunction
initial_time_name(model::CTModels.TimesModel) -> String
+

Get the name of the initial time from the times model.

source
initial_time_name(ocp::Model) -> String
+

Return the name of the initial time.

source
initial_time_name(sol::Solution) -> String
+

Return the name of the initial time.

source
CTModels.iterationsFunction
iterations(sol::Solution) -> Int64
+

Return the number of iterations (if solved by an iterative method).

source
CTModels.lagrangeFunction
lagrange(
+    model::CTModels.LagrangeObjectiveModel{L<:Function}
+) -> Function
+

Return the Lagrange function.

source
lagrange(
+    model::CTModels.BolzaObjectiveModel{<:Function, L<:Function}
+) -> Function
+

Return the Lagrange function.

source
lagrange(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, CTModels.LagrangeObjectiveModel{L<:Function}}
+) -> Function
+

Return the Lagrange cost.

source
lagrange(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.BolzaObjectiveModel{<:Function, L<:Function}}
+) -> Any
+

Return the Lagrange cost.

source
CTModels.mayerFunction
mayer(
+    model::CTModels.MayerObjectiveModel{M<:Function}
+) -> Function
+

Return the Mayer function.

source
mayer(
+    model::CTModels.BolzaObjectiveModel{M<:Function}
+) -> Function
+

Return the Mayer function.

source
mayer(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.MayerObjectiveModel{M<:Function}}
+) -> Any
+

Return the Mayer cost.

source
mayer(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.BolzaObjectiveModel{M<:Function}}
+) -> Any
+

Return the Mayer cost.

source
CTModels.messageFunction
message(sol::Solution) -> String
+

Return the message associated to the status criterion.

source
CTDirect.nlp_modelFunction
nlp_model(docp::CTDirect.DOCP) -> Any
+

Return the nonlinear programming (NLP) model associated with a given discretized optimal control problem (DOCP).

Arguments

  • docp::DOCP: The discretized optimal control problem.

Returns

  • nlp::Any: The underlying NLP model stored in docp.

Example

julia> nlp_model(docp)
+NLPModel(...)
source
CTDirect.ocp_modelFunction
ocp_model(docp::CTDirect.DOCP) -> Model
+

Return the continuous-time optimal control problem (OCP) model associated with a given discretized optimal control problem (DOCP).

Arguments

  • docp::DOCP: The discretized optimal control problem.

Returns

  • ocp::Any: The underlying OCP model stored in docp.

Example

julia> ocp_model(docp)
+OCPModel(...)
source
RecipesBase.plotMethod
plot(
+    sol::Solution,
+    description::Symbol...;
+    layout,
+    control,
+    time,
+    state_style,
+    state_bounds_style,
+    control_style,
+    control_bounds_style,
+    costate_style,
+    time_style,
+    path_style,
+    path_bounds_style,
+    dual_style,
+    size,
+    color,
+    kwargs...
+) -> Plots.Plot
+

Plot the components of an optimal control solution.

This is the main user-facing function to visualise the solution of an optimal control problem solved with the control-toolbox ecosystem.

It generates a set of subplots showing the evolution of the state, control, costate, path constraints, and dual variables over time, depending on the problem and the user’s choices.

Arguments

  • sol::CTModels.Solution: The optimal control solution to visualise.
  • description::Symbol...: A variable number of symbols indicating which components to include in the plot. Common values include:
    • :state – plot the state.
    • :costate – plot the costate (adjoint).
    • :control – plot the control.
    • :path – plot the path constraints.
    • :dual – plot the dual variables (or Lagrange multipliers) associated with path constraints.

If no symbols are provided, a default set is used based on the problem and styles.

Keyword Arguments (Optional)

  • layout::Symbol = :group: Specifies how to arrange plots.

    • :group: Fewer plots, grouping similar variables together (e.g., all states in one subplot).
    • :split: One plot per variable component, stacked in a layout.
  • control::Symbol = :components: Defines how to represent control inputs.

    • :components: One curve per control component.
    • :norm: Single curve showing the Euclidean norm ‖u(t)‖.
    • :all: Plot both components and norm.
  • time::Symbol = :default: Time normalisation for plots.

    • :default: Real time scale.
    • :normalize or :normalise: Normalised to the interval [0, 1].
  • color: set the color of the all the graphs.

Style Options (Optional)

All style-related keyword arguments can be either a NamedTuple of plotting attributes or the Symbol :none referring to not plot the associated element. These allow you to customise color, line style, markers, etc.

  • time_style: Style for vertical lines at initial and final times.
  • state_style: Style for state components.
  • costate_style: Style for costate components.
  • control_style: Style for control components.
  • path_style: Style for path constraint values.
  • dual_style: Style for dual variables.

Bounds Decorations (Optional)

Use these options to customise bounds on the plots if applicable and defined in the model. Set to :none to hide.

  • state_bounds_style: Style for state bounds.
  • control_bounds_style: Style for control bounds.
  • path_bounds_style: Style for path constraint bounds.

Returns

  • A Plots.Plot object, which can be displayed, saved, or further customised.

Example

# basic plot
+julia> plot(sol)
+
+# plot only the state and control
+julia> plot(sol, :state, :control)
+
+# customise layout and styles, no costate
+julia> plot(sol;
+       layout = :group,
+       control = :all,
+       state_style = (color=:blue, linestyle=:solid),
+       control_style = (color=:red, linestyle=:dash),
+       costate_style = :none)       
source
RecipesBase.plot!Method
plot!(
+    p::Plots.Plot,
+    sol::Solution,
+    description::Symbol...;
+    layout,
+    control,
+    time,
+    state_style,
+    state_bounds_style,
+    control_style,
+    control_bounds_style,
+    costate_style,
+    time_style,
+    path_style,
+    path_bounds_style,
+    dual_style,
+    color,
+    kwargs...
+) -> Plots.Plot
+

Modify Plot p with the optimal control solution sol.

See plot for full behavior and keyword arguments.

source
CTDirect.set_initial_guessFunction
set_initial_guess(docp::CTDirect.DOCP, init) -> Any
+

Set the initial guess for the decision variables in a discretized optimal control problem.

Arguments

  • docp::DOCP: The discretized optimal control problem.
  • init: Initial guess values as a named tuple or existing solution.

Returns

  • nothing

Example

julia> set_initial_guess(docp, init)
source
CommonSolve.solveMethod
solve(
+    ocp::Model,
+    description::Symbol...;
+    display,
+    kwargs...
+) -> Solution{TimeGridModelType, TimesModelType, StateModelType, ControlModelType, VariableModelType, CostateModelType, Float64, DualModelType, CTModels.SolverInfos{Dict{Symbol, Any}}, ModelType} where {TimeGridModelType<:CTModels.TimeGridModel, TimesModelType<:CTModels.TimesModel, StateModelType<:Union{CTModels.StateModelSolution{TS} where TS<:CTModels.var"#84#85", CTModels.StateModelSolution{TS} where TS<:CTModels.var"#86#87"}, ControlModelType<:Union{CTModels.ControlModelSolution{TS} where TS<:CTModels.var"#88#89", CTModels.ControlModelSolution{TS} where TS<:CTModels.var"#90#91"}, VariableModelType<:Union{CTModels.VariableModelSolution{Vector{Float64}}, CTModels.VariableModelSolution{Float64}}, CostateModelType<:Union{CTModels.var"#92#93", CTModels.var"#94#95"}, DualModelType<:(CTModels.DualModel{PC_Dual, Vector{Float64}, SC_LB_Dual, SC_UB_Dual, CC_LB_Dual, CC_UB_Dual, Vector{Float64}, Vector{Float64}} where {PC_Dual<:Union{CTModels.var"#100#101"{CTModels.var"#96#97"}, CTModels.var"#98#99"{CTModels.var"#96#97"}}, SC_LB_Dual<:Union{CTModels.var"#104#105"{CTModels.var"#102#103"}, CTModels.var"#106#107"{CTModels.var"#102#103"}}, SC_UB_Dual<:Union{CTModels.var"#110#111"{CTModels.var"#108#109"}, CTModels.var"#112#113"{CTModels.var"#108#109"}}, CC_LB_Dual<:Union{CTModels.var"#116#117"{CTModels.var"#114#115"}, CTModels.var"#118#119"{CTModels.var"#114#115"}}, CC_UB_Dual<:Union{CTModels.var"#122#123"{CTModels.var"#120#121"}, CTModels.var"#124#125"{CTModels.var"#120#121"}}}), ModelType<:(Model{<:CTModels.TimeDependence, T} where T<:CTModels.TimesModel)}
+

Solve the optimal control problem ocp by the method given by the (optional) description. The get the list of available methods:

julia> available_methods()

The higher in the list, the higher is the priority. The keyword arguments are specific to the chosen method and represent the options of the solver.

Arguments

  • ocp::OptimalControlModel: the optimal control problem to solve.
  • description::Symbol...: the description of the method used to solve the problem.
  • kwargs...: the options of the method.

Examples

The simplest way to solve the optimal control problem is to call the function without any argument.

julia> sol = solve(ocp)

The method description is a list of Symbols. The default is

julia> sol = solve(ocp, :direct, :adnlp, :ipopt)

You can provide a partial description, the function will find the best match.

julia> sol = solve(ocp, :direct)
Note

See the resolution methods section for more details about the available methods.

The keyword arguments are specific to the chosen method and correspond to the options of the different solvers. For example, the keyword max_iter is an Ipopt option that may be used to set the maximum number of iterations.

julia> sol = solve(ocp, :direct, :ipopt, max_iter=100)
Note

See the direct method section for more details about associated options. These options also detailed in the CTDirect.solve documentation. This main solve method redirects to CTDirect.solve when the :direct Symbol is given in the description. See also the NLP solvers section for more details about Ipopt or MadNLP options.

To help the solve converge, an initial guess can be provided within the keyword init. You can provide the initial guess for the state, control, and variable.

julia> sol = solve(ocp, init=(state=[-0.5, 0.2], control=0.5))
Note

See how to set an initial guess for more details.

source
CTModels.stateFunction
state(
+    ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel, T<:CTModels.AbstractStateModel}
+) -> CTModels.AbstractStateModel
+

Return the state struct.

source
state(
+    sol::Solution{<:CTModels.AbstractTimeGridModel, <:CTModels.AbstractTimesModel, <:CTModels.StateModelSolution{TS<:Function}}
+) -> Function
+

Return the state as a function of time.

julia> x  = state(sol)
+julia> t0 = time_grid(sol)[1]
+julia> x0 = x(t0) # state at the initial time
source
CTModels.state_componentsFunction
state_components(ocp::Model) -> Vector{String}
+

Return the names of the components of the state.

source
state_components(sol::Solution) -> Vector{String}
+

Return the names of the components of the state.

source
CTModels.state_dimensionFunction
state_dimension(ocp::CTModels.PreModel) -> Int64
+
source
state_dimension(ocp::Model) -> Int64
+

Return the state dimension.

source
state_dimension(sol::Solution) -> Int64
+

Return the dimension of the state.

source
CTModels.state_nameFunction
state_name(ocp::Model) -> String
+

Return the name of the state.

source
state_name(sol::Solution) -> String
+

Return the name of the state.

source
CTModels.statusFunction
status(sol::Solution) -> Symbol
+

Return the status criterion (a Symbol).

source
CTModels.time_gridFunction
time_grid(
+    sol::Solution{<:CTModels.TimeGridModel{T<:Union{StepRangeLen, AbstractVector{<:Real}}}}
+) -> Union{StepRangeLen, AbstractVector{<:Real}}
+

Return the time grid.

source
CTModels.time_nameFunction
time_name(model::CTModels.TimesModel) -> String
+

Get the name of the time variable from the times model.

source
time_name(ocp::Model) -> String
+

Return the name of the time.

source
time_name(sol::Solution) -> String
+

Return the name of the time component.

source
CTModels.timesFunction
times(
+    ocp::Model{<:CTModels.TimeDependence, T<:CTModels.TimesModel}
+) -> CTModels.TimesModel
+

Return the times struct.

source
ExaModels.variableMethod
variable(
+    sol::Solution
+) -> Union{Real, AbstractVector{<:Real}}
+

Return the variable or nothing.

julia> v = variable(sol)
source
CTModels.variable_componentsFunction
variable_components(ocp::Model) -> Vector{String}
+

Return the names of the components of the variable.

source
variable_components(sol::Solution) -> Vector{String}
+

Return the names of the components of the variable.

source
CTModels.variable_dimensionFunction
variable_dimension(ocp::Model) -> Int64
+

Return the variable dimension.

source
variable_dimension(sol::Solution) -> Int64
+

Return the dimension of the variable.

source
CTModels.variable_nameFunction
variable_name(ocp::Model) -> String
+

Return the name of the variable.

source
variable_name(sol::Solution) -> String
+

Return the name of the variable.

source
CTFlows.:⋅Function

Lie derivative of a scalar function along a vector field in the autonomous case.

Example:

julia> φ = x -> [x[2], -x[1]]
+julia> X = VectorField(φ)
+julia> f = x -> x[1]^2 + x[2]^2
+julia> (X⋅f)([1, 2])
+0
source

Lie derivative of a scalar function along a vector field in the nonautonomous case.

Example:

julia> φ = (t, x, v) -> [t + x[2] + v[1], -x[1] + v[2]]
+julia> X = VectorField(φ, NonAutonomous, NonFixed)
+julia> f = (t, x, v) -> t + x[1]^2 + x[2]^2
+julia> (X⋅f)(1, [1, 2], [2, 1])
+10
source

Lie derivative of a scalar function along a function (considered autonomous and non-variable).

Example:

julia> φ = x -> [x[2], -x[1]]
+julia> f = x -> x[1]^2 + x[2]^2
+julia> (φ⋅f)([1, 2])
+0
+julia> φ = (t, x, v) -> [t + x[2] + v[1], -x[1] + v[2]]
+julia> f = (t, x, v) -> t + x[1]^2 + x[2]^2
+julia> (φ⋅f)(1, [1, 2], [2, 1])
+MethodError
source
diff --git a/docs/src/assets/Project.toml b/.save/docs/build/assets/Project.toml similarity index 100% rename from docs/src/assets/Project.toml rename to .save/docs/build/assets/Project.toml diff --git a/docs/src/assets/affil-lux.jpg b/.save/docs/build/assets/affil-lux.jpg similarity index 100% rename from docs/src/assets/affil-lux.jpg rename to .save/docs/build/assets/affil-lux.jpg diff --git a/docs/src/assets/affil.jpg b/.save/docs/build/assets/affil.jpg similarity index 100% rename from docs/src/assets/affil.jpg rename to .save/docs/build/assets/affil.jpg diff --git a/docs/src/assets/chariot.png b/.save/docs/build/assets/chariot.png similarity index 100% rename from docs/src/assets/chariot.png rename to .save/docs/build/assets/chariot.png diff --git a/docs/src/assets/chariot.svg b/.save/docs/build/assets/chariot.svg similarity index 100% rename from docs/src/assets/chariot.svg rename to .save/docs/build/assets/chariot.svg diff --git a/docs/src/assets/control-toolbox.jpg b/.save/docs/build/assets/control-toolbox.jpg similarity index 100% rename from docs/src/assets/control-toolbox.jpg rename to .save/docs/build/assets/control-toolbox.jpg diff --git a/docs/src/assets/ct-qr-code.svg b/.save/docs/build/assets/ct-qr-code.svg similarity index 100% rename from docs/src/assets/ct-qr-code.svg rename to .save/docs/build/assets/ct-qr-code.svg diff --git a/docs/src/assets/custom.css b/.save/docs/build/assets/custom.css similarity index 100% rename from docs/src/assets/custom.css rename to .save/docs/build/assets/custom.css diff --git a/.save/docs/build/assets/documenter.js b/.save/docs/build/assets/documenter.js new file mode 100644 index 00000000..e10d1e60 --- /dev/null +++ b/.save/docs/build/assets/documenter.js @@ -0,0 +1,1378 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +/////////////////////////////////// + +// to open and scroll to +function openTarget() { + const hash = decodeURIComponent(location.hash.substring(1)); + if (hash) { + const target = document.getElementById(hash); + if (target) { + const details = target.closest("details"); + if (details) details.open = true; + } + } +} +openTarget(); // onload +window.addEventListener("hashchange", openTarget); +window.addEventListener("load", openTarget); + +////////////////////////////////////// +// for the global expand/collapse butter + +function accordion() { + document.body + .querySelectorAll("details.docstring") + .forEach((e) => e.setAttribute("open", "true")); +} + +function noccordion() { + document.body + .querySelectorAll("details.docstring") + .forEach((e) => e.removeAttribute("open")); +} + +function expandAll() { + let me = document.getElementById("documenter-article-toggle-button"); + me.setAttribute("open", "true"); + $(me).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(me).prop("title", "Collapse all docstrings"); + accordion(); +} + +function collapseAll() { + let me = document.getElementById("documenter-article-toggle-button"); + me.removeAttribute("open"); + $(me).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(me).prop("title", "Expand all docstrings"); + noccordion(); +} + +$(document).on("click", ".docs-article-toggle-button", function () { + var isExpanded = this.hasAttribute("open"); + if (isExpanded) { + collapseAll(); + isExpanded = false; + } else { + expandAll(); + isExpanded = true; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { +$(document).ready(function () { + $(".footnote-ref").hover( + function () { + var id = $(this).attr("href"); + var footnoteContent = $(id).clone().find("a").remove().end().html(); + + var $preview = $(this).next(".footnote-preview"); + + $preview.html(footnoteContent).css({ + display: "block", + left: "50%", + transform: "translateX(-50%)", + }); + + repositionPreview($preview, $(this)); + }, + function () { + var $preview = $(this).next(".footnote-preview"); + $preview.css({ + display: "none", + left: "", + transform: "", + "--arrow-left": "", + }); + }, + ); + + function repositionPreview($preview, $ref) { + var previewRect = $preview[0].getBoundingClientRect(); + var refRect = $ref[0].getBoundingClientRect(); + var viewportWidth = $(window).width(); + + if (previewRect.right > viewportWidth) { + var excessRight = previewRect.right - viewportWidth; + $preview.css("left", `calc(50% - ${excessRight + 10}px)`); + } else if (previewRect.left < 0) { + var excessLeft = 0 - previewRect.left; + $preview.css("left", `calc(50% + ${excessLeft + 10}px)`); + } + + var newPreviewRect = $preview[0].getBoundingClientRect(); + + var arrowLeft = refRect.left + refRect.width / 2 - newPreviewRect.left; + + $preview.css("--arrow-left", arrowLeft + "px"); + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let meta = $("div[data-docstringscollapsed]").data(); + if (!meta?.docstringscollapsed) { + $("#documenter-article-toggle-button").trigger({ + type: "click", + }); + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +/* +To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +PSEUDOCODE: + +Searching happens automatically as the user types or adjusts the selected filters. +To preserve responsiveness, as much as possible of the slow parts of the search are done +in a web worker. Searching and result generation are done in the worker, and filtering and +DOM updates are done in the main thread. The filters are in the main thread as they should +be very quick to apply. This lets filters be changed without re-searching with minisearch +(which is possible even if filtering is on the worker thread) and also lets filters be +changed _while_ the worker is searching and without message passing (neither of which are +possible if filtering is on the worker thread) + +SEARCH WORKER: + +Import minisearch + +Build index + +On message from main thread + run search + find the first 200 unique results from each category, and compute their divs for display + note that this is necessary and sufficient information for the main thread to find the + first 200 unique results from any given filter set + post results to main thread + +MAIN: + +Launch worker + +Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) + +On text update + if worker is not running, launch_search() + +launch_search + set worker_is_running to true, set last_search_text to the search text + post the search query to worker + +on message from worker + if last_search_text is not the same as the text in the search field, + the latest search result is not reflective of the latest search query, so update again + launch_search() + otherwise + set worker_is_running to false + + regardless, display the new search results to the user + save the unfiltered_results as a global + update_search() + +on filter click + adjust the filter selection + update_search() + +update_search + apply search filters by looping through the unfiltered_results and finding the first 200 + unique results that match the filters + + Update the DOM +*/ + +/////// SEARCH WORKER /////// + +function worker_function(documenterSearchIndex, documenterBaseURL, filters) { + importScripts( + "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js", + ); + + let data = documenterSearchIndex.map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; + }); + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", + ]); + + let index = new MiniSearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip special characters `@!+-*/^&|%<>=:.` which are used in julia macro and function names. + word = word + .replace(/^[^a-zA-Z0-9@!+\-/*^&%|<>._=:]+/, "") + .replace(/[^a-zA-Z0-9@!+\-/*^&%|<>._=:]+$/, ""); + + word = word.toLowerCase(); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not + // find anything if searching for "add!", only for the entire qualification + tokenize: (string) => { + const tokens = []; + let remaining = string; + + // julia specific patterns + const patterns = [ + // Module qualified names (e.g., Base.sort, Module.Submodule. function) + /\b[A-Za-z0-9_1*(?:\.[A-Z][A-Za-z0-9_1*)*\.[a-z_][A-Za-z0-9_!]*\b/g, + // Macro calls (e.g., @time, @async) + /@[A-Za-z0-9_]*/g, + // Type parameters (e.g., Array{T,N}, Vector{Int}) + /\b[A-Za-z0-9_]*\{[^}]+\}/g, + // Function names with module qualification (e.g., Base.+, Base.:^) + /\b[A-Za-z0-9_]*\.:[A-Za-z0-9_!+\-*/^&|%<>=.]+/g, + // Operators as complete tokens (e.g., !=, aã, ||, ^, .=, →) + /[!<>=+\-*/^&|%:.]+/g, + // Function signatures with type annotations (e.g., f(x::Int)) + /\b[A-Za-z0-9_!]*\([^)]*::[^)]*\)/g, + // Numbers (integers, floats, scientific notation) + /\b\d+(?:\.\d+)? (?:[eE][+-]?\d+)?\b/g, + ]; + + // apply patterns in order of specificity + for (const pattern of patterns) { + pattern.lastIndex = 0; //reset regex state + let match; + while ((match = pattern.exec(remaining)) != null) { + const token = match[0].trim(); + if (token && !tokens.includes(token)) { + tokens.push(token); + } + } + } + + // splitting the content if something remains + const basicTokens = remaining + .split(/[\s\-,;()[\]{}]+/) + .filter((t) => t.trim()); + for (const token of basicTokens) { + if (token && !tokens.includes(token)) { + tokens.push(token); + } + } + + return tokens.filter((token) => token.length > 0); + }, + // options which will be applied during the search + searchOptions: { + prefix: true, + boost: { title: 100 }, + fuzzy: 2, + }, + }); + + index.addAll(data); + + /** + * Used to map characters to HTML entities. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + }; + + /** + * Used to match HTML entities and HTML characters. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const reUnescapedHtml = /[&<>"']/g; + const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** + * Escape function from lodash + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + function escape(string) { + return string && reHasUnescapedHtml.test(string) + ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) + : string || ""; + } + + /** + * RegX escape function from MDN + * Refer: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ + function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + } + + /** + * Make the result component given a minisearch result data object and the value + * of the search input as queryString. To view the result object structure, refer: + * https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ + function make_search_result(result, querystring) { + let search_divider = `
`; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + searchstring = escapeRegExp(querystring); + let textindex = new RegExp(`${searchstring}`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length, + ), + ) + : ""; // cut-off text before and after from the match + + text = text.length ? escape(text) : ""; + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`${escape(searchstring)}`, "i"), // For first occurrence + '$&', + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
+
${escape(result.title)}
+
${result.category}
+
+

+ ${display_result} +

+
+ ${display_link} +
+
+ ${search_divider} + `; + + return result_div; + } + + function calculateCustomScore(result, query) { + const titleLower = result.title.toLowerCase(); + const queryLower = query.toLowerCase(); + + // Tier 1 : Exact title match + if (titleLower == queryLower) { + return 10000 + result.score; + } + + // Tier 2 : Title contains exact query + if (titleLower.includes(queryLower)) { + const position = titleLower.indexOf(queryLower); + // prefer matches at the beginning + return 5000 + result.score - position * 10; + } + + // Tier 3 : All query words in title + const queryWords = queryLower.trim().split(/\s+/); + const titleWords = titleLower.trim().split(/\s+/); + const allWordsInTitle = queryWords.every((qw) => + titleWords.some((tw) => tw.includes(qw)), + ); + if (allWordsInTitle) { + return 2000 + result.score; + } + + return result.score; + } + + self.onmessage = function (e) { + let query = e.data; + let results = index.search(query, { + filter: (result) => { + // Only return relevant results + return result.score >= 1; + }, + combineWith: "AND", + }); + + // calculate custom scores for all results + results = results.map((result) => ({ + ...result, + customScore: calculateCustomScore(result, query), + })); + + // sort by custom score in descending order + results.sort((a, b) => b.customScore - a.customScore); + + // Pre-filter to deduplicate and limit to 200 per category to the extent + // possible without knowing what the filters are. + let filtered_results = []; + let counts = {}; + for (let filter of filters) { + counts[filter] = 0; + } + let present = {}; + + for (let result of results) { + cat = result.category; + cnt = counts[cat]; + if (cnt < 200) { + id = cat + "---" + result.location; + if (present[id]) { + continue; + } + present[id] = true; + filtered_results.push({ + location: result.location, + category: cat, + div: make_search_result(result, query), + }); + } + } + + postMessage(filtered_results); + }; +} + +/////// SEARCH MAIN /////// + +function runSearchMainCode() { + // `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! + const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), + ]; + const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; + const worker_blob = new Blob([worker_str], { type: "text/javascript" }); + const worker = new Worker(URL.createObjectURL(worker_blob)); + + // Whether the worker is currently handling a search. This is a boolean + // as the worker only ever handles 1 or 0 searches at a time. + var worker_is_running = false; + + // The last search text that was sent to the worker. This is used to determine + // if the worker should be launched again when it reports back results. + var last_search_text = ""; + + // The results of the last search. This, in combination with the state of the filters + // in the DOM, is used compute the results to display on calls to update_search. + var unfiltered_results = []; + + // Which filter is currently selected + var selected_filter = ""; + + document.addEventListener("reset-filter", function () { + selected_filter = ""; + update_search(); + }); + + //update the url with search query + function updateSearchURL(query) { + const url = new URL(window.location); + + if (query && query.trim() !== "") { + url.searchParams.set("q", query); + } else { + // remove the 'q' param if it exists + if (url.searchParams.has("q")) { + url.searchParams.delete("q"); + } + } + + // Add or remove the filter parameter based on selected_filter + if (selected_filter && selected_filter.trim() !== "") { + url.searchParams.set("filter", selected_filter); + } else { + // remove the 'filter' param if it exists + if (url.searchParams.has("filter")) { + url.searchParams.delete("filter"); + } + } + + // Only update history if there are parameters, otherwise use the base URL + if (url.search) { + window.history.replaceState({}, "", url); + } else { + window.history.replaceState({}, "", url.pathname + url.hash); + } + } + + $(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } + }); + + function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + updateSearchURL(last_search_text); + worker.postMessage(last_search_text); + } + + worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } + + unfiltered_results = e.data; + update_search(); + }; + + $(document).on("click", ".search-filter", function () { + let search_input = $(".documenter-search-input"); + let cursor_position = search_input[0].selectionStart; + + if ($(this).hasClass("search-filter-selected")) { + selected_filter = ""; + } else { + selected_filter = $(this).text().toLowerCase(); + } + + // This updates search results and toggles classes for UI: + update_search(); + + search_input.focus(); + search_input.setSelectionRange(cursor_position, cursor_position); + }); + + /** + * Make/Update the search component + */ + function update_search() { + let querystring = $(".documenter-search-input").val(); + updateSearchURL(querystring); + + if (querystring.trim()) { + if (selected_filter == "") { + results = unfiltered_results; + } else { + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); + } + + let search_result_container = ``; + let modal_filters = make_modal_body_filters(); + let search_divider = `
`; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; + links.push(result.location); + } + } + + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
${count_str}
`; + + search_result_container = ` +
+ ${modal_filters} + ${search_divider} + ${result_count} +
+ ${search_results} +
+
+ `; + } else { + search_result_container = ` +
+ ${modal_filters} + ${search_divider} +
0 result(s)
+
+
No result found!
+ `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(` +
Type something to get started!
+ `); + } + } + + //url param checking + function checkURLForSearch() { + const urlParams = new URLSearchParams(window.location.search); + const searchQuery = urlParams.get("q"); + const filterParam = urlParams.get("filter"); + + // Set the selected filter if present in URL + if (filterParam) { + selected_filter = filterParam.toLowerCase(); + } + + // Trigger input event if there's a search query to perform the search + if (searchQuery) { + $(".documenter-search-input").val(searchQuery).trigger("input"); + } + } + setTimeout(checkURLForSearch, 100); + + /** + * Make the modal filter html + * + * @returns string + */ + function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); + + return ` +
+ Filters: + ${str} +
`; + } +} + +function waitUntilSearchIndexAvailable() { + // It is possible that the documenter.js script runs before the page + // has finished loading and documenterSearchIndex gets defined. + // So we need to wait until the search index actually loads before setting + // up all the search-related stuff. + if ( + typeof documenterSearchIndex !== "undefined" && + typeof $ !== "undefined" + ) { + runSearchMainCode(); + } else { + console.warn("Search Index or jQuery not available, waiting"); + setTimeout(waitUntilSearchIndexAvailable, 100); + } +} + +// The actual entry point to the search code +waitUntilSearchIndexAvailable(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let search_modal_header = ` + + `; + + let initial_search_body = ` +
Type something to get started!
+ `; + + let search_modal_footer = ` +
+
+ + Ctrl + + / to search + + esc to close +
+
+ + + to navigate + + Enter to select +
+
+ `; + + $(document.body).append( + ` + + `, + ); + + function checkURLForSearch() { + const urlParams = new URLSearchParams(window.location.search); + const searchQuery = urlParams.get("q"); + + if (searchQuery) { + //only if there is a search query, open the modal + openModal(); + } + } + + //this function will be called whenever the page will load + checkURLForSearch(); + + document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); + }); + + document + .querySelector(".close-search-modal") + .addEventListener("click", () => { + closeModal(); + }); + + $(document).on("click", ".search-result-link", function () { + closeModal(); + }); + + document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } else if ( + document.querySelector("#search-modal")?.classList.contains("is-active") + ) { + const searchResults = document.querySelectorAll(".search-result-link"); + + if (event.key === "ArrowDown") { + event.preventDefault(); + if (searchResults.length > 0) { + const currentFocused = document.activeElement; + const currentIndex = + Array.from(searchResults).indexOf(currentFocused); + const nextIndex = + currentIndex < searchResults.length - 1 ? currentIndex + 1 : 0; + searchResults[nextIndex].focus(); + } + } else if (event.key === "ArrowUp") { + event.preventDefault(); + if (searchResults.length > 0) { + const currentFocused = document.activeElement; + const currentIndex = + Array.from(searchResults).indexOf(currentFocused); + const prevIndex = + currentIndex > 0 ? currentIndex - 1 : searchResults.length - 1; + searchResults[prevIndex].focus(); + } + } + } + }); + + //event listener for the link icon to copy the URL + $(document).on("click", ".link-icon", function () { + const currentUrl = window.location.href; + + navigator.clipboard + .writeText(currentUrl) + .then(() => { + const $linkIcon = $(this); + $linkIcon.removeClass("fa-link").addClass("fa-check"); + + setTimeout(() => { + $linkIcon.removeClass("fa-check").addClass("fa-link"); + }, 1000); + }) + .catch((err) => { + console.error("Failed to copy URL: ", err); + }); + }); + + // Functions to open and close a modal + function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); + } + + function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
Type something to get started!
+ `; + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); + + document.dispatchEvent(new CustomEvent("reset-filter")); + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + } + + document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + + // if the target is just "#", don't navigate (it's the current version) + if (target_href === "#") { + return; + } + + // try to stay on the same page when switching versions + // get the current page path relative to the version root + var current_page = window.location.pathname; + + // resolve the documenterBaseURL to an absolute path + // documenterBaseURL is a relative path (usually "."), so we need to resolve it + var base_url_absolute = new URL(documenterBaseURL, window.location.href) + .pathname; + if (!base_url_absolute.endsWith("/")) { + base_url_absolute = base_url_absolute + "/"; + } + + // extract the page path after the version directory + // e.g., if we're on /stable/man/guide.html, we want "man/guide.html" + var page_path = ""; + if (current_page.startsWith(base_url_absolute)) { + page_path = current_page.substring(base_url_absolute.length); + } + + // construct the target URL with the same page path + var target_url = target_href; + if (page_path && page_path !== "" && page_path !== "index.html") { + // remove trailing slash from target_href if present + if (target_url.endsWith("/")) { + target_url = target_url.slice(0, -1); + } + target_url = target_url + "/" + page_path; + } + + // check if the target page exists, fallback to homepage if it doesn't + fetch(target_url, { method: "HEAD" }) + .then(function (response) { + if (response.ok) { + window.location.href = target_url; + } else { + // page doesn't exist in the target version, go to homepage + window.location.href = target_href; + } + }) + .catch(function (error) { + // network error or other failure - use homepage + window.location.href = target_href; + }); + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "", + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "", + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/docs/src/assets/france-2030.png b/.save/docs/build/assets/france-2030.png similarity index 100% rename from docs/src/assets/france-2030.png rename to .save/docs/build/assets/france-2030.png diff --git a/docs/src/assets/goddard-a100.jpg b/.save/docs/build/assets/goddard-a100.jpg similarity index 100% rename from docs/src/assets/goddard-a100.jpg rename to .save/docs/build/assets/goddard-a100.jpg diff --git a/docs/src/assets/goddard-h100.jpg b/.save/docs/build/assets/goddard-h100.jpg similarity index 100% rename from docs/src/assets/goddard-h100.jpg rename to .save/docs/build/assets/goddard-h100.jpg diff --git a/docs/src/assets/jlesc17.jpg b/.save/docs/build/assets/jlesc17.jpg similarity index 100% rename from docs/src/assets/jlesc17.jpg rename to .save/docs/build/assets/jlesc17.jpg diff --git a/docs/src/assets/juliacon-paris-2025.jpg b/.save/docs/build/assets/juliacon-paris-2025.jpg similarity index 100% rename from docs/src/assets/juliacon-paris-2025.jpg rename to .save/docs/build/assets/juliacon-paris-2025.jpg diff --git a/docs/src/assets/juliacon2024.jpg b/.save/docs/build/assets/juliacon2024.jpg similarity index 100% rename from docs/src/assets/juliacon2024.jpg rename to .save/docs/build/assets/juliacon2024.jpg diff --git a/docs/src/assets/juliacon2025.jpg b/.save/docs/build/assets/juliacon2025.jpg similarity index 100% rename from docs/src/assets/juliacon2025.jpg rename to .save/docs/build/assets/juliacon2025.jpg diff --git a/docs/src/assets/quadrotor-a100.jpg b/.save/docs/build/assets/quadrotor-a100.jpg similarity index 100% rename from docs/src/assets/quadrotor-a100.jpg rename to .save/docs/build/assets/quadrotor-a100.jpg diff --git a/docs/src/assets/quadrotor-h100.jpg b/.save/docs/build/assets/quadrotor-h100.jpg similarity index 100% rename from docs/src/assets/quadrotor-h100.jpg rename to .save/docs/build/assets/quadrotor-h100.jpg diff --git a/docs/src/assets/rdnopa-2025.jpg b/.save/docs/build/assets/rdnopa-2025.jpg similarity index 100% rename from docs/src/assets/rdnopa-2025.jpg rename to .save/docs/build/assets/rdnopa-2025.jpg diff --git a/docs/src/assets/rocket-def.jpg b/.save/docs/build/assets/rocket-def.jpg similarity index 100% rename from docs/src/assets/rocket-def.jpg rename to .save/docs/build/assets/rocket-def.jpg diff --git a/docs/src/assets/rocket-def.pdf b/.save/docs/build/assets/rocket-def.pdf similarity index 100% rename from docs/src/assets/rocket-def.pdf rename to .save/docs/build/assets/rocket-def.pdf diff --git a/docs/src/assets/rocket-def.png b/.save/docs/build/assets/rocket-def.png similarity index 100% rename from docs/src/assets/rocket-def.png rename to .save/docs/build/assets/rocket-def.png diff --git a/docs/src/assets/rocket-def.svg b/.save/docs/build/assets/rocket-def.svg similarity index 100% rename from docs/src/assets/rocket-def.svg rename to .save/docs/build/assets/rocket-def.svg diff --git a/docs/src/assets/standup.jpg b/.save/docs/build/assets/standup.jpg similarity index 100% rename from docs/src/assets/standup.jpg rename to .save/docs/build/assets/standup.jpg diff --git a/docs/src/assets/star.jpg b/.save/docs/build/assets/star.jpg similarity index 100% rename from docs/src/assets/star.jpg rename to .save/docs/build/assets/star.jpg diff --git a/.save/docs/build/assets/themes/catppuccin-frappe.css b/.save/docs/build/assets/themes/catppuccin-frappe.css new file mode 100644 index 00000000..97bdba91 --- /dev/null +++ b/.save/docs/build/assets/themes/catppuccin-frappe.css @@ -0,0 +1 @@ +html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe .file-name,html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-frappe .pagination-previous:focus,html.theme--catppuccin-frappe .pagination-next:focus,html.theme--catppuccin-frappe .pagination-link:focus,html.theme--catppuccin-frappe .pagination-ellipsis:focus,html.theme--catppuccin-frappe .file-cta:focus,html.theme--catppuccin-frappe .file-name:focus,html.theme--catppuccin-frappe .select select:focus,html.theme--catppuccin-frappe .textarea:focus,html.theme--catppuccin-frappe .input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-frappe .button:focus,html.theme--catppuccin-frappe .is-focused.pagination-previous,html.theme--catppuccin-frappe .is-focused.pagination-next,html.theme--catppuccin-frappe .is-focused.pagination-link,html.theme--catppuccin-frappe .is-focused.pagination-ellipsis,html.theme--catppuccin-frappe .is-focused.file-cta,html.theme--catppuccin-frappe .is-focused.file-name,html.theme--catppuccin-frappe .select select.is-focused,html.theme--catppuccin-frappe .is-focused.textarea,html.theme--catppuccin-frappe .is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-focused.button,html.theme--catppuccin-frappe .pagination-previous:active,html.theme--catppuccin-frappe .pagination-next:active,html.theme--catppuccin-frappe .pagination-link:active,html.theme--catppuccin-frappe .pagination-ellipsis:active,html.theme--catppuccin-frappe .file-cta:active,html.theme--catppuccin-frappe .file-name:active,html.theme--catppuccin-frappe .select select:active,html.theme--catppuccin-frappe .textarea:active,html.theme--catppuccin-frappe .input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-frappe .button:active,html.theme--catppuccin-frappe .is-active.pagination-previous,html.theme--catppuccin-frappe .is-active.pagination-next,html.theme--catppuccin-frappe .is-active.pagination-link,html.theme--catppuccin-frappe .is-active.pagination-ellipsis,html.theme--catppuccin-frappe .is-active.file-cta,html.theme--catppuccin-frappe .is-active.file-name,html.theme--catppuccin-frappe .select select.is-active,html.theme--catppuccin-frappe .is-active.textarea,html.theme--catppuccin-frappe .is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .is-active.button{outline:none}html.theme--catppuccin-frappe .pagination-previous[disabled],html.theme--catppuccin-frappe .pagination-next[disabled],html.theme--catppuccin-frappe .pagination-link[disabled],html.theme--catppuccin-frappe .pagination-ellipsis[disabled],html.theme--catppuccin-frappe .file-cta[disabled],html.theme--catppuccin-frappe .file-name[disabled],html.theme--catppuccin-frappe .select select[disabled],html.theme--catppuccin-frappe .textarea[disabled],html.theme--catppuccin-frappe .input[disabled],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-frappe .button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-frappe .file-name,html.theme--catppuccin-frappe fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-frappe .select select,fieldset[disabled] html.theme--catppuccin-frappe .textarea,fieldset[disabled] html.theme--catppuccin-frappe .input,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe fieldset[disabled] .select select,html.theme--catppuccin-frappe .select fieldset[disabled] select,html.theme--catppuccin-frappe fieldset[disabled] .textarea,html.theme--catppuccin-frappe fieldset[disabled] .input,html.theme--catppuccin-frappe fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-frappe .button,html.theme--catppuccin-frappe fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-frappe .tabs,html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .breadcrumb,html.theme--catppuccin-frappe .file,html.theme--catppuccin-frappe .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-frappe .admonition:not(:last-child),html.theme--catppuccin-frappe .tabs:not(:last-child),html.theme--catppuccin-frappe .pagination:not(:last-child),html.theme--catppuccin-frappe .message:not(:last-child),html.theme--catppuccin-frappe .level:not(:last-child),html.theme--catppuccin-frappe .breadcrumb:not(:last-child),html.theme--catppuccin-frappe .block:not(:last-child),html.theme--catppuccin-frappe .title:not(:last-child),html.theme--catppuccin-frappe .subtitle:not(:last-child),html.theme--catppuccin-frappe .table-container:not(:last-child),html.theme--catppuccin-frappe .table:not(:last-child),html.theme--catppuccin-frappe .progress:not(:last-child),html.theme--catppuccin-frappe .notification:not(:last-child),html.theme--catppuccin-frappe .content:not(:last-child),html.theme--catppuccin-frappe .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .modal-close,html.theme--catppuccin-frappe .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-frappe .modal-close::before,html.theme--catppuccin-frappe .delete::before,html.theme--catppuccin-frappe .modal-close::after,html.theme--catppuccin-frappe .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-frappe .modal-close::before,html.theme--catppuccin-frappe .delete::before{height:2px;width:50%}html.theme--catppuccin-frappe .modal-close::after,html.theme--catppuccin-frappe .delete::after{height:50%;width:2px}html.theme--catppuccin-frappe .modal-close:hover,html.theme--catppuccin-frappe .delete:hover,html.theme--catppuccin-frappe .modal-close:focus,html.theme--catppuccin-frappe .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-frappe .modal-close:active,html.theme--catppuccin-frappe .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-frappe .is-small.modal-close,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-frappe .is-small.delete,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-frappe .is-medium.modal-close,html.theme--catppuccin-frappe .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-frappe .is-large.modal-close,html.theme--catppuccin-frappe .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-frappe .control.is-loading::after,html.theme--catppuccin-frappe .select.is-loading::after,html.theme--catppuccin-frappe .loader,html.theme--catppuccin-frappe .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #838ba7;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-frappe .hero-video,html.theme--catppuccin-frappe .modal-background,html.theme--catppuccin-frappe .modal,html.theme--catppuccin-frappe .image.is-square img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-frappe .image.is-square .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-frappe .image.is-1by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-frappe .image.is-1by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-frappe .image.is-5by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-frappe .image.is-5by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-frappe .image.is-4by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-frappe .image.is-4by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-frappe .image.is-3by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-frappe .image.is-5by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-frappe .image.is-5by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-frappe .image.is-16by9 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-frappe .image.is-16by9 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-frappe .image.is-2by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-frappe .image.is-2by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-frappe .image.is-3by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-frappe .image.is-3by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-frappe .image.is-4by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-frappe .image.is-4by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-frappe .image.is-3by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-frappe .image.is-3by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-frappe .image.is-2by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-frappe .image.is-2by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-frappe .image.is-3by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-frappe .image.is-9by16 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-frappe .image.is-9by16 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-frappe .image.is-1by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-frappe .image.is-1by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-frappe .image.is-1by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-frappe .image.is-1by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-frappe .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{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}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#414559 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#2b2e3c !important}.has-background-dark{background-color:#414559 !important}.has-text-primary{color:#8caaee !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#6089e7 !important}.has-background-primary{background-color:#8caaee !important}.has-text-primary-light{color:#edf2fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c1d1f6 !important}.has-background-primary-light{background-color:#edf2fc !important}.has-text-primary-dark{color:#153a8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#1c4cbb !important}.has-background-primary-dark{background-color:#153a8e !important}.has-text-link{color:#8caaee !important}a.has-text-link:hover,a.has-text-link:focus{color:#6089e7 !important}.has-background-link{background-color:#8caaee !important}.has-text-link-light{color:#edf2fc !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c1d1f6 !important}.has-background-link-light{background-color:#edf2fc !important}.has-text-link-dark{color:#153a8e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1c4cbb !important}.has-background-link-dark{background-color:#153a8e !important}.has-text-info{color:#81c8be !important}a.has-text-info:hover,a.has-text-info:focus{color:#5db9ac !important}.has-background-info{background-color:#81c8be !important}.has-text-info-light{color:#f1f9f8 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#cde9e5 !important}.has-background-info-light{background-color:#f1f9f8 !important}.has-text-info-dark{color:#2d675f !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#3c8a7f !important}.has-background-info-dark{background-color:#2d675f !important}.has-text-success{color:#a6d189 !important}a.has-text-success:hover,a.has-text-success:focus{color:#8ac364 !important}.has-background-success{background-color:#a6d189 !important}.has-text-success-light{color:#f4f9f0 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#d8ebcc !important}.has-background-success-light{background-color:#f4f9f0 !important}.has-text-success-dark{color:#446a29 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#5b8f38 !important}.has-background-success-dark{background-color:#446a29 !important}.has-text-warning{color:#e5c890 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#dbb467 !important}.has-background-warning{background-color:#e5c890 !important}.has-text-warning-light{color:#fbf7ee !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f1e2c5 !important}.has-background-warning-light{background-color:#fbf7ee !important}.has-text-warning-dark{color:#78591c !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#a17726 !important}.has-background-warning-dark{background-color:#78591c !important}.has-text-danger{color:#e78284 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#df575a !important}.has-background-danger{background-color:#e78284 !important}.has-text-danger-light{color:#fceeee !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f3c3c4 !important}.has-background-danger-light{background-color:#fceeee !important}.has-text-danger-dark{color:#9a1e20 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c52629 !important}.has-background-danger-dark{background-color:#9a1e20 !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:#414559 !important}.has-background-grey-darker{background-color:#414559 !important}.has-text-grey-dark{color:#51576d !important}.has-background-grey-dark{background-color:#51576d !important}.has-text-grey{color:#626880 !important}.has-background-grey{background-color:#626880 !important}.has-text-grey-light{color:#737994 !important}.has-background-grey-light{background-color:#737994 !important}.has-text-grey-lighter{color:#838ba7 !important}.has-background-grey-lighter{background-color:#838ba7 !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-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !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-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin: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}.m-1{margin:.25rem !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}.m-2{margin:.5rem !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}.m-3{margin:.75rem !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}.m-4{margin:1rem !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}.m-5{margin:1.5rem !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}.m-6{margin:3rem !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}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !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}.p-1{padding:.25rem !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}.p-2{padding:.5rem !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}.p-3{padding:.75rem !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}.p-4{padding:1rem !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}.p-5{padding:1.5rem !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}.p-6{padding:3rem !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}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink{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: 1055px){.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: 1056px){.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: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) 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}.is-underlined{text-decoration:underline !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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",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: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) 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:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.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: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) 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}}html.theme--catppuccin-frappe html{background-color:#303446;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-frappe article,html.theme--catppuccin-frappe aside,html.theme--catppuccin-frappe figure,html.theme--catppuccin-frappe footer,html.theme--catppuccin-frappe header,html.theme--catppuccin-frappe hgroup,html.theme--catppuccin-frappe section{display:block}html.theme--catppuccin-frappe body,html.theme--catppuccin-frappe button,html.theme--catppuccin-frappe input,html.theme--catppuccin-frappe optgroup,html.theme--catppuccin-frappe select,html.theme--catppuccin-frappe textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-frappe code,html.theme--catppuccin-frappe pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-frappe body{color:#c6d0f5;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-frappe a{color:#8caaee;cursor:pointer;text-decoration:none}html.theme--catppuccin-frappe a strong{color:currentColor}html.theme--catppuccin-frappe a:hover{color:#99d1db}html.theme--catppuccin-frappe code{background-color:#292c3c;color:#c6d0f5;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-frappe hr{background-color:#292c3c;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-frappe img{height:auto;max-width:100%}html.theme--catppuccin-frappe input[type="checkbox"],html.theme--catppuccin-frappe input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-frappe small{font-size:.875em}html.theme--catppuccin-frappe span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-frappe strong{color:#b0bef1;font-weight:700}html.theme--catppuccin-frappe fieldset{border:none}html.theme--catppuccin-frappe pre{-webkit-overflow-scrolling:touch;background-color:#292c3c;color:#c6d0f5;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-frappe pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-frappe table td,html.theme--catppuccin-frappe table th{vertical-align:top}html.theme--catppuccin-frappe table td:not([align]),html.theme--catppuccin-frappe table th:not([align]){text-align:inherit}html.theme--catppuccin-frappe table th{color:#b0bef1}html.theme--catppuccin-frappe .box{background-color:#51576d;border-radius:8px;box-shadow:none;color:#c6d0f5;display:block;padding:1.25rem}html.theme--catppuccin-frappe a.box:hover,html.theme--catppuccin-frappe a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #8caaee}html.theme--catppuccin-frappe a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #8caaee}html.theme--catppuccin-frappe .button{background-color:#292c3c;border-color:#484d69;border-width:1px;color:#8caaee;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-frappe .button strong{color:inherit}html.theme--catppuccin-frappe .button .icon,html.theme--catppuccin-frappe .button .icon.is-small,html.theme--catppuccin-frappe .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-frappe .button .icon.is-medium,html.theme--catppuccin-frappe .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-frappe .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-frappe .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-frappe .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-frappe .button:hover,html.theme--catppuccin-frappe .button.is-hovered{border-color:#737994;color:#b0bef1}html.theme--catppuccin-frappe .button:focus,html.theme--catppuccin-frappe .button.is-focused{border-color:#737994;color:#769aeb}html.theme--catppuccin-frappe .button:focus:not(:active),html.theme--catppuccin-frappe .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button:active,html.theme--catppuccin-frappe .button.is-active{border-color:#51576d;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text{background-color:transparent;border-color:transparent;color:#c6d0f5;text-decoration:underline}html.theme--catppuccin-frappe .button.is-text:hover,html.theme--catppuccin-frappe .button.is-text.is-hovered,html.theme--catppuccin-frappe .button.is-text:focus,html.theme--catppuccin-frappe .button.is-text.is-focused{background-color:#292c3c;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text:active,html.theme--catppuccin-frappe .button.is-text.is-active{background-color:#1f212d;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-frappe .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#8caaee;text-decoration:none}html.theme--catppuccin-frappe .button.is-ghost:hover,html.theme--catppuccin-frappe .button.is-ghost.is-hovered{color:#8caaee;text-decoration:underline}html.theme--catppuccin-frappe .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:hover,html.theme--catppuccin-frappe .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:focus,html.theme--catppuccin-frappe .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:focus:not(:active),html.theme--catppuccin-frappe .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .button.is-white:active,html.theme--catppuccin-frappe .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-frappe .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted:hover,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-frappe .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-outlined:hover,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-white.is-outlined:focus,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:hover,html.theme--catppuccin-frappe .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:focus,html.theme--catppuccin-frappe .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:focus:not(:active),html.theme--catppuccin-frappe .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .button.is-black:active,html.theme--catppuccin-frappe .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-frappe .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted:hover,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-outlined:hover,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-black.is-outlined:focus,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:hover,html.theme--catppuccin-frappe .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:focus,html.theme--catppuccin-frappe .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:focus:not(:active),html.theme--catppuccin-frappe .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .button.is-light:active,html.theme--catppuccin-frappe .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-frappe .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted:hover,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-outlined:hover,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-light.is-outlined:focus,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-dark,html.theme--catppuccin-frappe .content kbd.button{background-color:#414559;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:hover,html.theme--catppuccin-frappe .content kbd.button:hover,html.theme--catppuccin-frappe .button.is-dark.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-hovered{background-color:#3c3f52;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:focus,html.theme--catppuccin-frappe .content kbd.button:focus,html.theme--catppuccin-frappe .button.is-dark.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:focus:not(:active),html.theme--catppuccin-frappe .content kbd.button:focus:not(:active),html.theme--catppuccin-frappe .button.is-dark.is-focused:not(:active),html.theme--catppuccin-frappe .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .button.is-dark:active,html.theme--catppuccin-frappe .content kbd.button:active,html.theme--catppuccin-frappe .button.is-dark.is-active,html.theme--catppuccin-frappe .content kbd.button.is-active{background-color:#363a4a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark[disabled],html.theme--catppuccin-frappe .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button{background-color:#414559;border-color:#414559;box-shadow:none}html.theme--catppuccin-frappe .button.is-dark.is-inverted,html.theme--catppuccin-frappe .content kbd.button.is-inverted{background-color:#fff;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted:hover,html.theme--catppuccin-frappe .content kbd.button.is-inverted:hover,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-dark.is-inverted[disabled],html.theme--catppuccin-frappe .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-loading::after,html.theme--catppuccin-frappe .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined,html.theme--catppuccin-frappe .content kbd.button.is-outlined{background-color:transparent;border-color:#414559;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-outlined:hover,html.theme--catppuccin-frappe .content kbd.button.is-outlined:hover,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-dark.is-outlined:focus,html.theme--catppuccin-frappe .content kbd.button.is-outlined:focus,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-focused{background-color:#414559;border-color:#414559;color:#fff}html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #414559 #414559 !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined[disabled],html.theme--catppuccin-frappe .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-outlined{background-color:transparent;border-color:#414559;box-shadow:none;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #414559 #414559 !important}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-primary,html.theme--catppuccin-frappe details.docstring>section>a.button.docs-sourcelink{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:hover,html.theme--catppuccin-frappe details.docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-hovered,html.theme--catppuccin-frappe details.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:focus,html.theme--catppuccin-frappe details.docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-focused,html.theme--catppuccin-frappe details.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:focus:not(:active),html.theme--catppuccin-frappe details.docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-frappe .button.is-primary.is-focused:not(:active),html.theme--catppuccin-frappe details.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button.is-primary:active,html.theme--catppuccin-frappe details.docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-frappe .button.is-primary.is-active,html.theme--catppuccin-frappe details.docstring>section>a.button.is-active.docs-sourcelink{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary[disabled],html.theme--catppuccin-frappe details.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary,fieldset[disabled] html.theme--catppuccin-frappe details.docstring>section>a.button.docs-sourcelink{background-color:#8caaee;border-color:#8caaee;box-shadow:none}html.theme--catppuccin-frappe .button.is-primary.is-inverted,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted:hover,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-primary.is-inverted[disabled],html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-loading::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-outlined:hover,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-frappe .button.is-primary.is-outlined:focus,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined[disabled],html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8caaee;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-light,html.theme--catppuccin-frappe details.docstring>section>a.button.is-light.docs-sourcelink{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .button.is-primary.is-light:hover,html.theme--catppuccin-frappe details.docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-light.is-hovered,html.theme--catppuccin-frappe details.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e2eafb;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-primary.is-light:active,html.theme--catppuccin-frappe details.docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-frappe .button.is-primary.is-light.is-active,html.theme--catppuccin-frappe details.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d7e1f9;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-link{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:hover,html.theme--catppuccin-frappe .button.is-link.is-hovered{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:focus,html.theme--catppuccin-frappe .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:focus:not(:active),html.theme--catppuccin-frappe .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button.is-link:active,html.theme--catppuccin-frappe .button.is-link.is-active{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link{background-color:#8caaee;border-color:#8caaee;box-shadow:none}html.theme--catppuccin-frappe .button.is-link.is-inverted{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted:hover,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-link.is-outlined{background-color:transparent;border-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-outlined:hover,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-link.is-outlined:focus,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-focused{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-outlined{background-color:transparent;border-color:#8caaee;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-light{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .button.is-link.is-light:hover,html.theme--catppuccin-frappe .button.is-link.is-light.is-hovered{background-color:#e2eafb;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-link.is-light:active,html.theme--catppuccin-frappe .button.is-link.is-light.is-active{background-color:#d7e1f9;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-info{background-color:#81c8be;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:hover,html.theme--catppuccin-frappe .button.is-info.is-hovered{background-color:#78c4b9;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:focus,html.theme--catppuccin-frappe .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:focus:not(:active),html.theme--catppuccin-frappe .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .button.is-info:active,html.theme--catppuccin-frappe .button.is-info.is-active{background-color:#6fc0b5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info{background-color:#81c8be;border-color:#81c8be;box-shadow:none}html.theme--catppuccin-frappe .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted:hover,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-info.is-outlined{background-color:transparent;border-color:#81c8be;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-outlined:hover,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-info.is-outlined:focus,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-focused{background-color:#81c8be;border-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #81c8be #81c8be !important}html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-outlined{background-color:transparent;border-color:#81c8be;box-shadow:none;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #81c8be #81c8be !important}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-light{background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .button.is-info.is-light:hover,html.theme--catppuccin-frappe .button.is-info.is-light.is-hovered{background-color:#e8f5f3;border-color:transparent;color:#2d675f}html.theme--catppuccin-frappe .button.is-info.is-light:active,html.theme--catppuccin-frappe .button.is-info.is-light.is-active{background-color:#dff1ef;border-color:transparent;color:#2d675f}html.theme--catppuccin-frappe .button.is-success{background-color:#a6d189;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:hover,html.theme--catppuccin-frappe .button.is-success.is-hovered{background-color:#9fcd80;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:focus,html.theme--catppuccin-frappe .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:focus:not(:active),html.theme--catppuccin-frappe .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .button.is-success:active,html.theme--catppuccin-frappe .button.is-success.is-active{background-color:#98ca77;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success{background-color:#a6d189;border-color:#a6d189;box-shadow:none}html.theme--catppuccin-frappe .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted:hover,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-success.is-outlined{background-color:transparent;border-color:#a6d189;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-outlined:hover,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-success.is-outlined:focus,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-focused{background-color:#a6d189;border-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6d189 #a6d189 !important}html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-outlined{background-color:transparent;border-color:#a6d189;box-shadow:none;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6d189 #a6d189 !important}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-light{background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .button.is-success.is-light:hover,html.theme--catppuccin-frappe .button.is-success.is-light.is-hovered{background-color:#edf6e7;border-color:transparent;color:#446a29}html.theme--catppuccin-frappe .button.is-success.is-light:active,html.theme--catppuccin-frappe .button.is-success.is-light.is-active{background-color:#e6f2de;border-color:transparent;color:#446a29}html.theme--catppuccin-frappe .button.is-warning{background-color:#e5c890;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:hover,html.theme--catppuccin-frappe .button.is-warning.is-hovered{background-color:#e3c386;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:focus,html.theme--catppuccin-frappe .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:focus:not(:active),html.theme--catppuccin-frappe .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .button.is-warning:active,html.theme--catppuccin-frappe .button.is-warning.is-active{background-color:#e0be7b;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning{background-color:#e5c890;border-color:#e5c890;box-shadow:none}html.theme--catppuccin-frappe .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted:hover,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined{background-color:transparent;border-color:#e5c890;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-outlined:hover,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-warning.is-outlined:focus,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-focused{background-color:#e5c890;border-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #e5c890 #e5c890 !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-outlined{background-color:transparent;border-color:#e5c890;box-shadow:none;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e5c890 #e5c890 !important}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-light{background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .button.is-warning.is-light:hover,html.theme--catppuccin-frappe .button.is-warning.is-light.is-hovered{background-color:#f9f2e4;border-color:transparent;color:#78591c}html.theme--catppuccin-frappe .button.is-warning.is-light:active,html.theme--catppuccin-frappe .button.is-warning.is-light.is-active{background-color:#f6edda;border-color:transparent;color:#78591c}html.theme--catppuccin-frappe .button.is-danger{background-color:#e78284;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:hover,html.theme--catppuccin-frappe .button.is-danger.is-hovered{background-color:#e57779;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:focus,html.theme--catppuccin-frappe .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:focus:not(:active),html.theme--catppuccin-frappe .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .button.is-danger:active,html.theme--catppuccin-frappe .button.is-danger.is-active{background-color:#e36d6f;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger{background-color:#e78284;border-color:#e78284;box-shadow:none}html.theme--catppuccin-frappe .button.is-danger.is-inverted{background-color:#fff;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted:hover,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined{background-color:transparent;border-color:#e78284;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-outlined:hover,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-danger.is-outlined:focus,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-focused{background-color:#e78284;border-color:#e78284;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #e78284 #e78284 !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-outlined{background-color:transparent;border-color:#e78284;box-shadow:none;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e78284 #e78284 !important}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-light{background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .button.is-danger.is-light:hover,html.theme--catppuccin-frappe .button.is-danger.is-light.is-hovered{background-color:#fae3e4;border-color:transparent;color:#9a1e20}html.theme--catppuccin-frappe .button.is-danger.is-light:active,html.theme--catppuccin-frappe .button.is-danger.is-light.is-active{background-color:#f8d8d9;border-color:transparent;color:#9a1e20}html.theme--catppuccin-frappe .button.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-frappe .button.is-small:not(.is-rounded),html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-frappe .button.is-normal{font-size:1rem}html.theme--catppuccin-frappe .button.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .button.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button{background-color:#737994;border-color:#626880;box-shadow:none;opacity:.5}html.theme--catppuccin-frappe .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-frappe .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-frappe .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-frappe .button.is-static{background-color:#292c3c;border-color:#626880;color:#838ba7;box-shadow:none;pointer-events:none}html.theme--catppuccin-frappe .button.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-frappe .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-frappe .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-frappe .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-frappe .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-frappe .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-frappe .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-frappe .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-frappe .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-frappe .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-frappe .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-frappe .buttons.has-addons .button:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-frappe .buttons.has-addons .button:focus,html.theme--catppuccin-frappe .buttons.has-addons .button.is-focused,html.theme--catppuccin-frappe .buttons.has-addons .button:active,html.theme--catppuccin-frappe .buttons.has-addons .button.is-active,html.theme--catppuccin-frappe .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-frappe .buttons.has-addons .button:focus:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-frappe .buttons.has-addons .button:active:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-frappe .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .buttons.is-centered{justify-content:center}html.theme--catppuccin-frappe .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-frappe .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .button.is-responsive.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-frappe .button.is-responsive,html.theme--catppuccin-frappe .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-frappe .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-frappe .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .button.is-responsive.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-frappe .button.is-responsive,html.theme--catppuccin-frappe .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-frappe .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-frappe .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-frappe .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-frappe .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-frappe .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-frappe .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-frappe .content li+li{margin-top:0.25em}html.theme--catppuccin-frappe .content p:not(:last-child),html.theme--catppuccin-frappe .content dl:not(:last-child),html.theme--catppuccin-frappe .content ol:not(:last-child),html.theme--catppuccin-frappe .content ul:not(:last-child),html.theme--catppuccin-frappe .content blockquote:not(:last-child),html.theme--catppuccin-frappe .content pre:not(:last-child),html.theme--catppuccin-frappe .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-frappe .content h1,html.theme--catppuccin-frappe .content h2,html.theme--catppuccin-frappe .content h3,html.theme--catppuccin-frappe .content h4,html.theme--catppuccin-frappe .content h5,html.theme--catppuccin-frappe .content h6{color:#c6d0f5;font-weight:600;line-height:1.125}html.theme--catppuccin-frappe .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-frappe .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-frappe .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-frappe .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-frappe .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-frappe .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-frappe .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-frappe .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-frappe .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-frappe .content blockquote{background-color:#292c3c;border-left:5px solid #626880;padding:1.25em 1.5em}html.theme--catppuccin-frappe .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-frappe .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-frappe .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-frappe .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-frappe .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-frappe .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-frappe .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-frappe .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-frappe .content ul ul ul{list-style-type:square}html.theme--catppuccin-frappe .content dd{margin-left:2em}html.theme--catppuccin-frappe .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-frappe .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-frappe .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-frappe .content figure img{display:inline-block}html.theme--catppuccin-frappe .content figure figcaption{font-style:italic}html.theme--catppuccin-frappe .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-frappe .content sup,html.theme--catppuccin-frappe .content sub{font-size:75%}html.theme--catppuccin-frappe .content table{width:100%}html.theme--catppuccin-frappe .content table td,html.theme--catppuccin-frappe .content table th{border:1px solid #626880;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-frappe .content table th{color:#b0bef1}html.theme--catppuccin-frappe .content table th:not([align]){text-align:inherit}html.theme--catppuccin-frappe .content table thead td,html.theme--catppuccin-frappe .content table thead th{border-width:0 0 2px;color:#b0bef1}html.theme--catppuccin-frappe .content table tfoot td,html.theme--catppuccin-frappe .content table tfoot th{border-width:2px 0 0;color:#b0bef1}html.theme--catppuccin-frappe .content table tbody tr:last-child td,html.theme--catppuccin-frappe .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-frappe .content .tabs li+li{margin-top:0}html.theme--catppuccin-frappe .content.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-frappe .content.is-normal{font-size:1rem}html.theme--catppuccin-frappe .content.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .content.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-frappe .icon.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-frappe .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-frappe .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-frappe .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-frappe .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-frappe .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-frappe div.icon-text{display:flex}html.theme--catppuccin-frappe .image,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-frappe .image img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-frappe .image img.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-frappe .image.is-fullwidth,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-frappe .image.is-square img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-frappe .image.is-square .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-frappe .image.is-1by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-frappe .image.is-1by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-frappe .image.is-5by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-frappe .image.is-5by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-frappe .image.is-4by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-frappe .image.is-4by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-frappe .image.is-3by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-frappe .image.is-5by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-frappe .image.is-5by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-frappe .image.is-16by9 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-frappe .image.is-16by9 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-frappe .image.is-2by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-frappe .image.is-2by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-frappe .image.is-3by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-frappe .image.is-3by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-frappe .image.is-4by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-frappe .image.is-4by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-frappe .image.is-3by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-frappe .image.is-3by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-frappe .image.is-2by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-frappe .image.is-2by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-frappe .image.is-3by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-frappe .image.is-9by16 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-frappe .image.is-9by16 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-frappe .image.is-1by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-frappe .image.is-1by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-frappe .image.is-1by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-frappe .image.is-1by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-frappe .image.is-square,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-frappe .image.is-1by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-frappe .image.is-5by4,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-frappe .image.is-4by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-frappe .image.is-3by2,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-frappe .image.is-5by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-frappe .image.is-16by9,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-frappe .image.is-2by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-frappe .image.is-3by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-frappe .image.is-4by5,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-frappe .image.is-3by4,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-frappe .image.is-2by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-frappe .image.is-3by5,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-frappe .image.is-9by16,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-frappe .image.is-1by2,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-frappe .image.is-1by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-frappe .image.is-16x16,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-frappe .image.is-24x24,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-frappe .image.is-32x32,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-frappe .image.is-48x48,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-frappe .image.is-64x64,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-frappe .image.is-96x96,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-frappe .image.is-128x128,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-frappe .notification{background-color:#292c3c;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-frappe .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-frappe .notification strong{color:currentColor}html.theme--catppuccin-frappe .notification code,html.theme--catppuccin-frappe .notification pre{background:#fff}html.theme--catppuccin-frappe .notification pre code{background:transparent}html.theme--catppuccin-frappe .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-frappe .notification .title,html.theme--catppuccin-frappe .notification .subtitle,html.theme--catppuccin-frappe .notification .content{color:currentColor}html.theme--catppuccin-frappe .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-dark,html.theme--catppuccin-frappe .content kbd.notification{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .notification.is-primary,html.theme--catppuccin-frappe details.docstring>section>a.notification.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .notification.is-primary.is-light,html.theme--catppuccin-frappe details.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .notification.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .notification.is-link.is-light{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .notification.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-info.is-light{background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .notification.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-success.is-light{background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .notification.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-warning.is-light{background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .notification.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .notification.is-danger.is-light{background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-frappe .progress::-webkit-progress-bar{background-color:#51576d}html.theme--catppuccin-frappe .progress::-webkit-progress-value{background-color:#838ba7}html.theme--catppuccin-frappe .progress::-moz-progress-bar{background-color:#838ba7}html.theme--catppuccin-frappe .progress::-ms-fill{background-color:#838ba7;border:none}html.theme--catppuccin-frappe .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-frappe .content kbd.progress::-webkit-progress-value{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-frappe .content kbd.progress::-moz-progress-bar{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark::-ms-fill,html.theme--catppuccin-frappe .content kbd.progress::-ms-fill{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark:indeterminate,html.theme--catppuccin-frappe .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #414559 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-frappe details.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-frappe details.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary::-ms-fill,html.theme--catppuccin-frappe details.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary:indeterminate,html.theme--catppuccin-frappe details.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #8caaee 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-link::-webkit-progress-value{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link::-moz-progress-bar{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link::-ms-fill{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link:indeterminate{background-image:linear-gradient(to right, #8caaee 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-info::-webkit-progress-value{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info::-moz-progress-bar{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info::-ms-fill{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info:indeterminate{background-image:linear-gradient(to right, #81c8be 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-success::-webkit-progress-value{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success::-moz-progress-bar{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success::-ms-fill{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6d189 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-warning::-webkit-progress-value{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning::-moz-progress-bar{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning::-ms-fill{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #e5c890 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-danger::-webkit-progress-value{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger::-moz-progress-bar{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger::-ms-fill{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #e78284 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#51576d;background-image:linear-gradient(to right, #c6d0f5 30%, #51576d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-frappe .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-frappe .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-frappe .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-frappe .progress.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-frappe .progress.is-medium{height:1.25rem}html.theme--catppuccin-frappe .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-frappe .table{background-color:#51576d;color:#c6d0f5}html.theme--catppuccin-frappe .table td,html.theme--catppuccin-frappe .table th{border:1px solid #626880;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-frappe .table td.is-white,html.theme--catppuccin-frappe .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .table td.is-black,html.theme--catppuccin-frappe .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .table td.is-light,html.theme--catppuccin-frappe .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-dark,html.theme--catppuccin-frappe .table th.is-dark{background-color:#414559;border-color:#414559;color:#fff}html.theme--catppuccin-frappe .table td.is-primary,html.theme--catppuccin-frappe .table th.is-primary{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-link,html.theme--catppuccin-frappe .table th.is-link{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-info,html.theme--catppuccin-frappe .table th.is-info{background-color:#81c8be;border-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-success,html.theme--catppuccin-frappe .table th.is-success{background-color:#a6d189;border-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-warning,html.theme--catppuccin-frappe .table th.is-warning{background-color:#e5c890;border-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-danger,html.theme--catppuccin-frappe .table th.is-danger{background-color:#e78284;border-color:#e78284;color:#fff}html.theme--catppuccin-frappe .table td.is-narrow,html.theme--catppuccin-frappe .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-frappe .table td.is-selected,html.theme--catppuccin-frappe .table th.is-selected{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-selected a,html.theme--catppuccin-frappe .table td.is-selected strong,html.theme--catppuccin-frappe .table th.is-selected a,html.theme--catppuccin-frappe .table th.is-selected strong{color:currentColor}html.theme--catppuccin-frappe .table td.is-vcentered,html.theme--catppuccin-frappe .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-frappe .table th{color:#b0bef1}html.theme--catppuccin-frappe .table th:not([align]){text-align:left}html.theme--catppuccin-frappe .table tr.is-selected{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table tr.is-selected a,html.theme--catppuccin-frappe .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-frappe .table tr.is-selected td,html.theme--catppuccin-frappe .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-frappe .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table thead td,html.theme--catppuccin-frappe .table thead th{border-width:0 0 2px;color:#b0bef1}html.theme--catppuccin-frappe .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table tfoot td,html.theme--catppuccin-frappe .table tfoot th{border-width:2px 0 0;color:#b0bef1}html.theme--catppuccin-frappe .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table tbody tr:last-child td,html.theme--catppuccin-frappe .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-frappe .table.is-bordered td,html.theme--catppuccin-frappe .table.is-bordered th{border-width:1px}html.theme--catppuccin-frappe .table.is-bordered tr:last-child td,html.theme--catppuccin-frappe .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-frappe .table.is-fullwidth{width:100%}html.theme--catppuccin-frappe .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#414559}html.theme--catppuccin-frappe .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#414559}html.theme--catppuccin-frappe .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#454a5f}html.theme--catppuccin-frappe .table.is-narrow td,html.theme--catppuccin-frappe .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-frappe .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#414559}html.theme--catppuccin-frappe .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-frappe .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .tags .tag,html.theme--catppuccin-frappe .tags .content kbd,html.theme--catppuccin-frappe .content .tags kbd,html.theme--catppuccin-frappe .tags details.docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-frappe .tags .tag:not(:last-child),html.theme--catppuccin-frappe .tags .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags kbd:not(:last-child),html.theme--catppuccin-frappe .tags details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-frappe .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-frappe .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-frappe .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .tags.are-medium details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-frappe .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .tags.are-large details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-frappe .tags.is-centered{justify-content:center}html.theme--catppuccin-frappe .tags.is-centered .tag,html.theme--catppuccin-frappe .tags.is-centered .content kbd,html.theme--catppuccin-frappe .content .tags.is-centered kbd,html.theme--catppuccin-frappe .tags.is-centered details.docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-frappe .tags.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .tags.is-right .tag:not(:first-child),html.theme--catppuccin-frappe .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-frappe .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-frappe .tags.is-right details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-frappe .tags.is-right .tag:not(:last-child),html.theme--catppuccin-frappe .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-frappe .tags.is-right details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-frappe .tags.has-addons .tag,html.theme--catppuccin-frappe .tags.has-addons .content kbd,html.theme--catppuccin-frappe .content .tags.has-addons kbd,html.theme--catppuccin-frappe .tags.has-addons details.docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-frappe .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-frappe .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-frappe .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-frappe .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-frappe .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-frappe .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-frappe .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-frappe .tag:not(body),html.theme--catppuccin-frappe .content kbd:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#292c3c;border-radius:.4em;color:#c6d0f5;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-frappe .tag:not(body) .delete,html.theme--catppuccin-frappe .content kbd:not(body) .delete,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-frappe .tag.is-white:not(body),html.theme--catppuccin-frappe .content kbd.is-white:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .tag.is-black:not(body),html.theme--catppuccin-frappe .content kbd.is-black:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .tag.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-light:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-dark:not(body),html.theme--catppuccin-frappe .content kbd:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-frappe .content details.docstring>section>kbd:not(body){background-color:#414559;color:#fff}html.theme--catppuccin-frappe .tag.is-primary:not(body),html.theme--catppuccin-frappe .content kbd.is-primary:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink:not(body){background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .tag.is-primary.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .tag.is-link:not(body),html.theme--catppuccin-frappe .content kbd.is-link:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .tag.is-link.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-link.is-light:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .tag.is-info:not(body),html.theme--catppuccin-frappe .content kbd.is-info:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-info.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-info.is-light:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .tag.is-success:not(body),html.theme--catppuccin-frappe .content kbd.is-success:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-success.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-success.is-light:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .tag.is-warning:not(body),html.theme--catppuccin-frappe .content kbd.is-warning:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-warning.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .tag.is-danger:not(body),html.theme--catppuccin-frappe .content kbd.is-danger:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .tag.is-danger.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .tag.is-normal:not(body),html.theme--catppuccin-frappe .content kbd.is-normal:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-frappe .tag.is-medium:not(body),html.theme--catppuccin-frappe .content kbd.is-medium:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-frappe .tag.is-large:not(body),html.theme--catppuccin-frappe .content kbd.is-large:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-frappe .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-frappe .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-frappe .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-frappe .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-frappe .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-frappe .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-frappe .tag.is-delete:not(body),html.theme--catppuccin-frappe .content kbd.is-delete:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-frappe .tag.is-delete:not(body)::before,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::before,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-frappe .tag.is-delete:not(body)::after,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::after,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-frappe .tag.is-delete:not(body)::before,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::before,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-frappe .tag.is-delete:not(body)::after,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::after,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-frappe .tag.is-delete:not(body):hover,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):hover,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-frappe .tag.is-delete:not(body):focus,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):focus,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1f212d}html.theme--catppuccin-frappe .tag.is-delete:not(body):active,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):active,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#14161e}html.theme--catppuccin-frappe .tag.is-rounded:not(body),html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-frappe .content kbd.is-rounded:not(body),html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-frappe a.tag:hover,html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-frappe .title,html.theme--catppuccin-frappe .subtitle{word-break:break-word}html.theme--catppuccin-frappe .title em,html.theme--catppuccin-frappe .title span,html.theme--catppuccin-frappe .subtitle em,html.theme--catppuccin-frappe .subtitle span{font-weight:inherit}html.theme--catppuccin-frappe .title sub,html.theme--catppuccin-frappe .subtitle sub{font-size:.75em}html.theme--catppuccin-frappe .title sup,html.theme--catppuccin-frappe .subtitle sup{font-size:.75em}html.theme--catppuccin-frappe .title .tag,html.theme--catppuccin-frappe .title .content kbd,html.theme--catppuccin-frappe .content .title kbd,html.theme--catppuccin-frappe .title details.docstring>section>a.docs-sourcelink,html.theme--catppuccin-frappe .subtitle .tag,html.theme--catppuccin-frappe .subtitle .content kbd,html.theme--catppuccin-frappe .content .subtitle kbd,html.theme--catppuccin-frappe .subtitle details.docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-frappe .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-frappe .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-frappe .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-frappe .title.is-1{font-size:3rem}html.theme--catppuccin-frappe .title.is-2{font-size:2.5rem}html.theme--catppuccin-frappe .title.is-3{font-size:2rem}html.theme--catppuccin-frappe .title.is-4{font-size:1.5rem}html.theme--catppuccin-frappe .title.is-5{font-size:1.25rem}html.theme--catppuccin-frappe .title.is-6{font-size:1rem}html.theme--catppuccin-frappe .title.is-7{font-size:.75rem}html.theme--catppuccin-frappe .subtitle{color:#737994;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-frappe .subtitle strong{color:#737994;font-weight:600}html.theme--catppuccin-frappe .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-frappe .subtitle.is-1{font-size:3rem}html.theme--catppuccin-frappe .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-frappe .subtitle.is-3{font-size:2rem}html.theme--catppuccin-frappe .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-frappe .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-frappe .subtitle.is-6{font-size:1rem}html.theme--catppuccin-frappe .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-frappe .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-frappe .number{align-items:center;background-color:#292c3c;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{background-color:#303446;border-color:#626880;border-radius:.4em;color:#838ba7}html.theme--catppuccin-frappe .select select::-moz-placeholder,html.theme--catppuccin-frappe .textarea::-moz-placeholder,html.theme--catppuccin-frappe .input::-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select::-webkit-input-placeholder,html.theme--catppuccin-frappe .textarea::-webkit-input-placeholder,html.theme--catppuccin-frappe .input::-webkit-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:-moz-placeholder,html.theme--catppuccin-frappe .textarea:-moz-placeholder,html.theme--catppuccin-frappe .input:-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:-ms-input-placeholder,html.theme--catppuccin-frappe .textarea:-ms-input-placeholder,html.theme--catppuccin-frappe .input:-ms-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:hover,html.theme--catppuccin-frappe .textarea:hover,html.theme--catppuccin-frappe .input:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-frappe .select select.is-hovered,html.theme--catppuccin-frappe .is-hovered.textarea,html.theme--catppuccin-frappe .is-hovered.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#737994}html.theme--catppuccin-frappe .select select:focus,html.theme--catppuccin-frappe .textarea:focus,html.theme--catppuccin-frappe .input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-frappe .select select.is-focused,html.theme--catppuccin-frappe .is-focused.textarea,html.theme--catppuccin-frappe .is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .select select:active,html.theme--catppuccin-frappe .textarea:active,html.theme--catppuccin-frappe .input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-frappe .select select.is-active,html.theme--catppuccin-frappe .is-active.textarea,html.theme--catppuccin-frappe .is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#8caaee;box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select select[disabled],html.theme--catppuccin-frappe .textarea[disabled],html.theme--catppuccin-frappe .input[disabled],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-frappe .select select,fieldset[disabled] html.theme--catppuccin-frappe .textarea,fieldset[disabled] html.theme--catppuccin-frappe .input,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{background-color:#737994;border-color:#292c3c;box-shadow:none;color:#f1f4fd}html.theme--catppuccin-frappe .select select[disabled]::-moz-placeholder,html.theme--catppuccin-frappe .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-frappe .input[disabled]::-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]:-moz-placeholder,html.theme--catppuccin-frappe .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-frappe .input[disabled]:-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-frappe .textarea[readonly],html.theme--catppuccin-frappe .input[readonly],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-frappe .is-white.textarea,html.theme--catppuccin-frappe .is-white.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-frappe .is-white.textarea:focus,html.theme--catppuccin-frappe .is-white.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-frappe .is-white.is-focused.textarea,html.theme--catppuccin-frappe .is-white.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-white.textarea:active,html.theme--catppuccin-frappe .is-white.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-frappe .is-white.is-active.textarea,html.theme--catppuccin-frappe .is-white.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .is-black.textarea,html.theme--catppuccin-frappe .is-black.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-frappe .is-black.textarea:focus,html.theme--catppuccin-frappe .is-black.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-frappe .is-black.is-focused.textarea,html.theme--catppuccin-frappe .is-black.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-black.textarea:active,html.theme--catppuccin-frappe .is-black.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-frappe .is-black.is-active.textarea,html.theme--catppuccin-frappe .is-black.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .is-light.textarea,html.theme--catppuccin-frappe .is-light.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-frappe .is-light.textarea:focus,html.theme--catppuccin-frappe .is-light.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-frappe .is-light.is-focused.textarea,html.theme--catppuccin-frappe .is-light.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-light.textarea:active,html.theme--catppuccin-frappe .is-light.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-frappe .is-light.is-active.textarea,html.theme--catppuccin-frappe .is-light.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .is-dark.textarea,html.theme--catppuccin-frappe .content kbd.textarea,html.theme--catppuccin-frappe .is-dark.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-frappe .content kbd.input{border-color:#414559}html.theme--catppuccin-frappe .is-dark.textarea:focus,html.theme--catppuccin-frappe .content kbd.textarea:focus,html.theme--catppuccin-frappe .is-dark.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-frappe .content kbd.input:focus,html.theme--catppuccin-frappe .is-dark.is-focused.textarea,html.theme--catppuccin-frappe .content kbd.is-focused.textarea,html.theme--catppuccin-frappe .is-dark.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .content kbd.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-dark.textarea:active,html.theme--catppuccin-frappe .content kbd.textarea:active,html.theme--catppuccin-frappe .is-dark.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-frappe .content kbd.input:active,html.theme--catppuccin-frappe .is-dark.is-active.textarea,html.theme--catppuccin-frappe .content kbd.is-active.textarea,html.theme--catppuccin-frappe .is-dark.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .content kbd.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .is-primary.textarea,html.theme--catppuccin-frappe details.docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-frappe details.docstring>section>a.input.docs-sourcelink{border-color:#8caaee}html.theme--catppuccin-frappe .is-primary.textarea:focus,html.theme--catppuccin-frappe details.docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-frappe .is-primary.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-frappe details.docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-frappe .is-primary.is-focused.textarea,html.theme--catppuccin-frappe details.docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe details.docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.textarea:active,html.theme--catppuccin-frappe details.docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-frappe .is-primary.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-frappe details.docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-frappe .is-primary.is-active.textarea,html.theme--catppuccin-frappe details.docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe details.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .is-link.textarea,html.theme--catppuccin-frappe .is-link.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#8caaee}html.theme--catppuccin-frappe .is-link.textarea:focus,html.theme--catppuccin-frappe .is-link.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-frappe .is-link.is-focused.textarea,html.theme--catppuccin-frappe .is-link.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-link.textarea:active,html.theme--catppuccin-frappe .is-link.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-frappe .is-link.is-active.textarea,html.theme--catppuccin-frappe .is-link.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .is-info.textarea,html.theme--catppuccin-frappe .is-info.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#81c8be}html.theme--catppuccin-frappe .is-info.textarea:focus,html.theme--catppuccin-frappe .is-info.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-frappe .is-info.is-focused.textarea,html.theme--catppuccin-frappe .is-info.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-info.textarea:active,html.theme--catppuccin-frappe .is-info.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-frappe .is-info.is-active.textarea,html.theme--catppuccin-frappe .is-info.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .is-success.textarea,html.theme--catppuccin-frappe .is-success.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6d189}html.theme--catppuccin-frappe .is-success.textarea:focus,html.theme--catppuccin-frappe .is-success.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-frappe .is-success.is-focused.textarea,html.theme--catppuccin-frappe .is-success.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-success.textarea:active,html.theme--catppuccin-frappe .is-success.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-frappe .is-success.is-active.textarea,html.theme--catppuccin-frappe .is-success.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .is-warning.textarea,html.theme--catppuccin-frappe .is-warning.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#e5c890}html.theme--catppuccin-frappe .is-warning.textarea:focus,html.theme--catppuccin-frappe .is-warning.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-frappe .is-warning.is-focused.textarea,html.theme--catppuccin-frappe .is-warning.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-warning.textarea:active,html.theme--catppuccin-frappe .is-warning.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-frappe .is-warning.is-active.textarea,html.theme--catppuccin-frappe .is-warning.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .is-danger.textarea,html.theme--catppuccin-frappe .is-danger.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#e78284}html.theme--catppuccin-frappe .is-danger.textarea:focus,html.theme--catppuccin-frappe .is-danger.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-frappe .is-danger.is-focused.textarea,html.theme--catppuccin-frappe .is-danger.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-danger.textarea:active,html.theme--catppuccin-frappe .is-danger.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-frappe .is-danger.is-active.textarea,html.theme--catppuccin-frappe .is-danger.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .is-small.textarea,html.theme--catppuccin-frappe .is-small.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-frappe .is-medium.textarea,html.theme--catppuccin-frappe .is-medium.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .is-large.textarea,html.theme--catppuccin-frappe .is-large.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .is-fullwidth.textarea,html.theme--catppuccin-frappe .is-fullwidth.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-frappe .is-inline.textarea,html.theme--catppuccin-frappe .is-inline.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-frappe .input.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-frappe .input.is-static,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-frappe .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-frappe .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-frappe .textarea[rows]{height:initial}html.theme--catppuccin-frappe .textarea.has-fixed-size{resize:none}html.theme--catppuccin-frappe .radio,html.theme--catppuccin-frappe .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-frappe .radio input,html.theme--catppuccin-frappe .checkbox input{cursor:pointer}html.theme--catppuccin-frappe .radio:hover,html.theme--catppuccin-frappe .checkbox:hover{color:#99d1db}html.theme--catppuccin-frappe .radio[disabled],html.theme--catppuccin-frappe .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-frappe .radio,fieldset[disabled] html.theme--catppuccin-frappe .checkbox,html.theme--catppuccin-frappe .radio input[disabled],html.theme--catppuccin-frappe .checkbox input[disabled]{color:#f1f4fd;cursor:not-allowed}html.theme--catppuccin-frappe .radio+.radio{margin-left:.5em}html.theme--catppuccin-frappe .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-frappe .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading)::after{border-color:#8caaee;right:1.125em;z-index:4}html.theme--catppuccin-frappe .select.is-rounded select,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-frappe .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-frappe .select select::-ms-expand{display:none}html.theme--catppuccin-frappe .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-frappe .select select:hover{border-color:#292c3c}html.theme--catppuccin-frappe .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-frappe .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-frappe .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#99d1db}html.theme--catppuccin-frappe .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-frappe .select.is-white select{border-color:#fff}html.theme--catppuccin-frappe .select.is-white select:hover,html.theme--catppuccin-frappe .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-frappe .select.is-white select:focus,html.theme--catppuccin-frappe .select.is-white select.is-focused,html.theme--catppuccin-frappe .select.is-white select:active,html.theme--catppuccin-frappe .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-frappe .select.is-black select:hover,html.theme--catppuccin-frappe .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-frappe .select.is-black select:focus,html.theme--catppuccin-frappe .select.is-black select.is-focused,html.theme--catppuccin-frappe .select.is-black select:active,html.theme--catppuccin-frappe .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-frappe .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-frappe .select.is-light select:hover,html.theme--catppuccin-frappe .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-frappe .select.is-light select:focus,html.theme--catppuccin-frappe .select.is-light select.is-focused,html.theme--catppuccin-frappe .select.is-light select:active,html.theme--catppuccin-frappe .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .select.is-dark:not(:hover)::after,html.theme--catppuccin-frappe .content kbd.select:not(:hover)::after{border-color:#414559}html.theme--catppuccin-frappe .select.is-dark select,html.theme--catppuccin-frappe .content kbd.select select{border-color:#414559}html.theme--catppuccin-frappe .select.is-dark select:hover,html.theme--catppuccin-frappe .content kbd.select select:hover,html.theme--catppuccin-frappe .select.is-dark select.is-hovered,html.theme--catppuccin-frappe .content kbd.select select.is-hovered{border-color:#363a4a}html.theme--catppuccin-frappe .select.is-dark select:focus,html.theme--catppuccin-frappe .content kbd.select select:focus,html.theme--catppuccin-frappe .select.is-dark select.is-focused,html.theme--catppuccin-frappe .content kbd.select select.is-focused,html.theme--catppuccin-frappe .select.is-dark select:active,html.theme--catppuccin-frappe .content kbd.select select:active,html.theme--catppuccin-frappe .select.is-dark select.is-active,html.theme--catppuccin-frappe .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .select.is-primary:not(:hover)::after,html.theme--catppuccin-frappe details.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-primary select,html.theme--catppuccin-frappe details.docstring>section>a.select.docs-sourcelink select{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-primary select:hover,html.theme--catppuccin-frappe details.docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-frappe .select.is-primary select.is-hovered,html.theme--catppuccin-frappe details.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#769aeb}html.theme--catppuccin-frappe .select.is-primary select:focus,html.theme--catppuccin-frappe details.docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-frappe .select.is-primary select.is-focused,html.theme--catppuccin-frappe details.docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-frappe .select.is-primary select:active,html.theme--catppuccin-frappe details.docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-frappe .select.is-primary select.is-active,html.theme--catppuccin-frappe details.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select.is-link:not(:hover)::after{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-link select{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-link select:hover,html.theme--catppuccin-frappe .select.is-link select.is-hovered{border-color:#769aeb}html.theme--catppuccin-frappe .select.is-link select:focus,html.theme--catppuccin-frappe .select.is-link select.is-focused,html.theme--catppuccin-frappe .select.is-link select:active,html.theme--catppuccin-frappe .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select.is-info:not(:hover)::after{border-color:#81c8be}html.theme--catppuccin-frappe .select.is-info select{border-color:#81c8be}html.theme--catppuccin-frappe .select.is-info select:hover,html.theme--catppuccin-frappe .select.is-info select.is-hovered{border-color:#6fc0b5}html.theme--catppuccin-frappe .select.is-info select:focus,html.theme--catppuccin-frappe .select.is-info select.is-focused,html.theme--catppuccin-frappe .select.is-info select:active,html.theme--catppuccin-frappe .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .select.is-success:not(:hover)::after{border-color:#a6d189}html.theme--catppuccin-frappe .select.is-success select{border-color:#a6d189}html.theme--catppuccin-frappe .select.is-success select:hover,html.theme--catppuccin-frappe .select.is-success select.is-hovered{border-color:#98ca77}html.theme--catppuccin-frappe .select.is-success select:focus,html.theme--catppuccin-frappe .select.is-success select.is-focused,html.theme--catppuccin-frappe .select.is-success select:active,html.theme--catppuccin-frappe .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .select.is-warning:not(:hover)::after{border-color:#e5c890}html.theme--catppuccin-frappe .select.is-warning select{border-color:#e5c890}html.theme--catppuccin-frappe .select.is-warning select:hover,html.theme--catppuccin-frappe .select.is-warning select.is-hovered{border-color:#e0be7b}html.theme--catppuccin-frappe .select.is-warning select:focus,html.theme--catppuccin-frappe .select.is-warning select.is-focused,html.theme--catppuccin-frappe .select.is-warning select:active,html.theme--catppuccin-frappe .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .select.is-danger:not(:hover)::after{border-color:#e78284}html.theme--catppuccin-frappe .select.is-danger select{border-color:#e78284}html.theme--catppuccin-frappe .select.is-danger select:hover,html.theme--catppuccin-frappe .select.is-danger select.is-hovered{border-color:#e36d6f}html.theme--catppuccin-frappe .select.is-danger select:focus,html.theme--catppuccin-frappe .select.is-danger select.is-focused,html.theme--catppuccin-frappe .select.is-danger select:active,html.theme--catppuccin-frappe .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .select.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-frappe .select.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .select.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .select.is-disabled::after{border-color:#f1f4fd !important;opacity:0.5}html.theme--catppuccin-frappe .select.is-fullwidth{width:100%}html.theme--catppuccin-frappe .select.is-fullwidth select{width:100%}html.theme--catppuccin-frappe .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-frappe .select.is-loading.is-small:after,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-frappe .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-frappe .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-frappe .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-frappe .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:hover .file-cta,html.theme--catppuccin-frappe .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:focus .file-cta,html.theme--catppuccin-frappe .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:active .file-cta,html.theme--catppuccin-frappe .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-black:hover .file-cta,html.theme--catppuccin-frappe .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-black:focus .file-cta,html.theme--catppuccin-frappe .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-black:active .file-cta,html.theme--catppuccin-frappe .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:hover .file-cta,html.theme--catppuccin-frappe .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:focus .file-cta,html.theme--catppuccin-frappe .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:active .file-cta,html.theme--catppuccin-frappe .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-dark .file-cta,html.theme--catppuccin-frappe .content kbd.file .file-cta{background-color:#414559;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-dark:hover .file-cta,html.theme--catppuccin-frappe .content kbd.file:hover .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-hovered .file-cta{background-color:#3c3f52;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-dark:focus .file-cta,html.theme--catppuccin-frappe .content kbd.file:focus .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-focused .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(65,69,89,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-dark:active .file-cta,html.theme--catppuccin-frappe .content kbd.file:active .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-active .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-active .file-cta{background-color:#363a4a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary .file-cta,html.theme--catppuccin-frappe details.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary:hover .file-cta,html.theme--catppuccin-frappe details.docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-frappe details.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary:focus .file-cta,html.theme--catppuccin-frappe details.docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-focused .file-cta,html.theme--catppuccin-frappe details.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(140,170,238,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-primary:active .file-cta,html.theme--catppuccin-frappe details.docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-active .file-cta,html.theme--catppuccin-frappe details.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link .file-cta{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link:hover .file-cta,html.theme--catppuccin-frappe .file.is-link.is-hovered .file-cta{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link:focus .file-cta,html.theme--catppuccin-frappe .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(140,170,238,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-link:active .file-cta,html.theme--catppuccin-frappe .file.is-link.is-active .file-cta{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-info .file-cta{background-color:#81c8be;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:hover .file-cta,html.theme--catppuccin-frappe .file.is-info.is-hovered .file-cta{background-color:#78c4b9;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:focus .file-cta,html.theme--catppuccin-frappe .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(129,200,190,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:active .file-cta,html.theme--catppuccin-frappe .file.is-info.is-active .file-cta{background-color:#6fc0b5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success .file-cta{background-color:#a6d189;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:hover .file-cta,html.theme--catppuccin-frappe .file.is-success.is-hovered .file-cta{background-color:#9fcd80;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:focus .file-cta,html.theme--catppuccin-frappe .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,209,137,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:active .file-cta,html.theme--catppuccin-frappe .file.is-success.is-active .file-cta{background-color:#98ca77;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning .file-cta{background-color:#e5c890;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:hover .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-hovered .file-cta{background-color:#e3c386;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:focus .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(229,200,144,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:active .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-active .file-cta{background-color:#e0be7b;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-danger .file-cta{background-color:#e78284;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-danger:hover .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-hovered .file-cta{background-color:#e57779;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-danger:focus .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(231,130,132,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-danger:active .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-active .file-cta{background-color:#e36d6f;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-frappe .file.is-normal{font-size:1rem}html.theme--catppuccin-frappe .file.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-frappe .file.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-frappe .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-frappe .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-frappe .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-frappe .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-frappe .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-frappe .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-frappe .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-frappe .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-frappe .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-frappe .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-frappe .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-frappe .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-frappe .file.is-centered{justify-content:center}html.theme--catppuccin-frappe .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-frappe .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-frappe .file.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-frappe .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-frappe .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-frappe .file-label:hover .file-cta{background-color:#3c3f52;color:#b0bef1}html.theme--catppuccin-frappe .file-label:hover .file-name{border-color:#5c6279}html.theme--catppuccin-frappe .file-label:active .file-cta{background-color:#363a4a;color:#b0bef1}html.theme--catppuccin-frappe .file-label:active .file-name{border-color:#575c72}html.theme--catppuccin-frappe .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe .file-name{border-color:#626880;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-frappe .file-cta{background-color:#414559;color:#c6d0f5}html.theme--catppuccin-frappe .file-name{border-color:#626880;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-frappe .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-frappe .file-icon .fa{font-size:14px}html.theme--catppuccin-frappe .label{color:#b0bef1;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-frappe .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-frappe .label.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-frappe .label.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .label.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-frappe .help.is-white{color:#fff}html.theme--catppuccin-frappe .help.is-black{color:#0a0a0a}html.theme--catppuccin-frappe .help.is-light{color:#f5f5f5}html.theme--catppuccin-frappe .help.is-dark,html.theme--catppuccin-frappe .content kbd.help{color:#414559}html.theme--catppuccin-frappe .help.is-primary,html.theme--catppuccin-frappe details.docstring>section>a.help.docs-sourcelink{color:#8caaee}html.theme--catppuccin-frappe .help.is-link{color:#8caaee}html.theme--catppuccin-frappe .help.is-info{color:#81c8be}html.theme--catppuccin-frappe .help.is-success{color:#a6d189}html.theme--catppuccin-frappe .help.is-warning{color:#e5c890}html.theme--catppuccin-frappe .help.is-danger{color:#e78284}html.theme--catppuccin-frappe .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-frappe .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-frappe .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-frappe .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-frappe .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-frappe .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-frappe .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-frappe .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-frappe .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field.is-horizontal{display:flex}}html.theme--catppuccin-frappe .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-frappe .field-label.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-frappe .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-frappe .field-body .field{margin-bottom:0}html.theme--catppuccin-frappe .field-body>.field{flex-shrink:1}html.theme--catppuccin-frappe .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-frappe .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-frappe .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-frappe .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select:focus~.icon{color:#414559}html.theme--catppuccin-frappe .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-frappe .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-frappe .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-frappe .control.has-icons-left .icon,html.theme--catppuccin-frappe .control.has-icons-right .icon{color:#626880;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-frappe .control.has-icons-left .input,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-frappe .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-frappe .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-frappe .control.has-icons-right .input,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-frappe .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-frappe .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-frappe .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-frappe .control.is-loading.is-small:after,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-frappe .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-frappe .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-frappe .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-frappe .breadcrumb a{align-items:center;color:#8caaee;display:initial;justify-content:center;padding:0 .75em}html.theme--catppuccin-frappe .breadcrumb a:hover{color:#99d1db}html.theme--catppuccin-frappe .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-frappe .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-frappe .breadcrumb li.is-active a{color:#b0bef1;cursor:default;pointer-events:none}html.theme--catppuccin-frappe .breadcrumb li+li::before{color:#737994;content:"\0002f"}html.theme--catppuccin-frappe .breadcrumb ul,html.theme--catppuccin-frappe .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-frappe .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-frappe .breadcrumb.is-centered ol,html.theme--catppuccin-frappe .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-frappe .breadcrumb.is-right ol,html.theme--catppuccin-frappe .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-frappe .breadcrumb.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-frappe .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-frappe .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-frappe .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-frappe .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-frappe .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#c6d0f5;max-width:100%;position:relative}html.theme--catppuccin-frappe .card-footer:first-child,html.theme--catppuccin-frappe .card-content:first-child,html.theme--catppuccin-frappe .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-frappe .card-footer:last-child,html.theme--catppuccin-frappe .card-content:last-child,html.theme--catppuccin-frappe .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-frappe .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-frappe .card-header-title{align-items:center;color:#b0bef1;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-frappe .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-frappe .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-frappe .card-image{display:block;position:relative}html.theme--catppuccin-frappe .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-frappe .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-frappe .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-frappe .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-frappe .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-frappe .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-frappe .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-frappe .dropdown.is-active .dropdown-menu,html.theme--catppuccin-frappe .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-frappe .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-frappe .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-frappe .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-frappe .dropdown-content{background-color:#292c3c;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-frappe .dropdown-item{color:#c6d0f5;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-frappe a.dropdown-item,html.theme--catppuccin-frappe button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-frappe a.dropdown-item:hover,html.theme--catppuccin-frappe button.dropdown-item:hover{background-color:#292c3c;color:#0a0a0a}html.theme--catppuccin-frappe a.dropdown-item.is-active,html.theme--catppuccin-frappe button.dropdown-item.is-active{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-frappe .level{align-items:center;justify-content:space-between}html.theme--catppuccin-frappe .level code{border-radius:.4em}html.theme--catppuccin-frappe .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-frappe .level.is-mobile{display:flex}html.theme--catppuccin-frappe .level.is-mobile .level-left,html.theme--catppuccin-frappe .level.is-mobile .level-right{display:flex}html.theme--catppuccin-frappe .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-frappe .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-frappe .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level{display:flex}html.theme--catppuccin-frappe .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-frappe .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-frappe .level-item .title,html.theme--catppuccin-frappe .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-frappe .level-left,html.theme--catppuccin-frappe .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .level-left .level-item.is-flexible,html.theme--catppuccin-frappe .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-left .level-item:not(:last-child),html.theme--catppuccin-frappe .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-frappe .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-left{display:flex}}html.theme--catppuccin-frappe .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-right{display:flex}}html.theme--catppuccin-frappe .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-frappe .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-frappe .media .media{border-top:1px solid rgba(98,104,128,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-frappe .media .media .content:not(:last-child),html.theme--catppuccin-frappe .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-frappe .media .media .media{padding-top:.5rem}html.theme--catppuccin-frappe .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-frappe .media+.media{border-top:1px solid rgba(98,104,128,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-frappe .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-frappe .media-left,html.theme--catppuccin-frappe .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .media-left{margin-right:1rem}html.theme--catppuccin-frappe .media-right{margin-left:1rem}html.theme--catppuccin-frappe .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .media-content{overflow-x:auto}}html.theme--catppuccin-frappe .menu{font-size:1rem}html.theme--catppuccin-frappe .menu.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-frappe .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .menu.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .menu-list{line-height:1.25}html.theme--catppuccin-frappe .menu-list a{border-radius:3px;color:#c6d0f5;display:block;padding:0.5em 0.75em}html.theme--catppuccin-frappe .menu-list a:hover{background-color:#292c3c;color:#b0bef1}html.theme--catppuccin-frappe .menu-list a.is-active{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .menu-list li ul{border-left:1px solid #626880;margin:.75em;padding-left:.75em}html.theme--catppuccin-frappe .menu-label{color:#f1f4fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-frappe .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-frappe .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-frappe .message{background-color:#292c3c;border-radius:.4em;font-size:1rem}html.theme--catppuccin-frappe .message strong{color:currentColor}html.theme--catppuccin-frappe .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-frappe .message.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-frappe .message.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .message.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .message.is-white{background-color:#fff}html.theme--catppuccin-frappe .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-frappe .message.is-black{background-color:#fafafa}html.theme--catppuccin-frappe .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-frappe .message.is-light{background-color:#fafafa}html.theme--catppuccin-frappe .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-frappe .message.is-dark,html.theme--catppuccin-frappe .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-frappe .message.is-dark .message-header,html.theme--catppuccin-frappe .content kbd.message .message-header{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .message.is-dark .message-body,html.theme--catppuccin-frappe .content kbd.message .message-body{border-color:#414559}html.theme--catppuccin-frappe .message.is-primary,html.theme--catppuccin-frappe details.docstring>section>a.message.docs-sourcelink{background-color:#edf2fc}html.theme--catppuccin-frappe .message.is-primary .message-header,html.theme--catppuccin-frappe details.docstring>section>a.message.docs-sourcelink .message-header{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .message.is-primary .message-body,html.theme--catppuccin-frappe details.docstring>section>a.message.docs-sourcelink .message-body{border-color:#8caaee;color:#153a8e}html.theme--catppuccin-frappe .message.is-link{background-color:#edf2fc}html.theme--catppuccin-frappe .message.is-link .message-header{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .message.is-link .message-body{border-color:#8caaee;color:#153a8e}html.theme--catppuccin-frappe .message.is-info{background-color:#f1f9f8}html.theme--catppuccin-frappe .message.is-info .message-header{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-info .message-body{border-color:#81c8be;color:#2d675f}html.theme--catppuccin-frappe .message.is-success{background-color:#f4f9f0}html.theme--catppuccin-frappe .message.is-success .message-header{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-success .message-body{border-color:#a6d189;color:#446a29}html.theme--catppuccin-frappe .message.is-warning{background-color:#fbf7ee}html.theme--catppuccin-frappe .message.is-warning .message-header{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-warning .message-body{border-color:#e5c890;color:#78591c}html.theme--catppuccin-frappe .message.is-danger{background-color:#fceeee}html.theme--catppuccin-frappe .message.is-danger .message-header{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .message.is-danger .message-body{border-color:#e78284;color:#9a1e20}html.theme--catppuccin-frappe .message-header{align-items:center;background-color:#c6d0f5;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-frappe .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-frappe .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .message-body{border-color:#626880;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#c6d0f5;padding:1.25em 1.5em}html.theme--catppuccin-frappe .message-body code,html.theme--catppuccin-frappe .message-body pre{background-color:#fff}html.theme--catppuccin-frappe .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-frappe .modal.is-active{display:flex}html.theme--catppuccin-frappe .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-frappe .modal-content,html.theme--catppuccin-frappe .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-frappe .modal-content,html.theme--catppuccin-frappe .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-frappe .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-frappe .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-frappe .modal-card-head,html.theme--catppuccin-frappe .modal-card-foot{align-items:center;background-color:#292c3c;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-frappe .modal-card-head{border-bottom:1px solid #626880;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-frappe .modal-card-title{color:#c6d0f5;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-frappe .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #626880}html.theme--catppuccin-frappe .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-frappe .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#303446;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-frappe .navbar{background-color:#8caaee;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-frappe .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-frappe .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-frappe .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-dark,html.theme--catppuccin-frappe .content kbd.navbar{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-burger,html.theme--catppuccin-frappe .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#414559;color:#fff}}html.theme--catppuccin-frappe .navbar.is-primary,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-burger,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee;color:#fff}}html.theme--catppuccin-frappe .navbar.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee;color:#fff}}html.theme--catppuccin-frappe .navbar.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#81c8be;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6d189;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#e5c890;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#e78284;color:#fff}}html.theme--catppuccin-frappe .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-frappe .navbar.has-shadow{box-shadow:0 2px 0 0 #292c3c}html.theme--catppuccin-frappe .navbar.is-fixed-bottom,html.theme--catppuccin-frappe .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #292c3c}html.theme--catppuccin-frappe .navbar.is-fixed-top{top:0}html.theme--catppuccin-frappe html.has-navbar-fixed-top,html.theme--catppuccin-frappe body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-frappe .navbar-brand,html.theme--catppuccin-frappe .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-frappe .navbar-brand a.navbar-item:focus,html.theme--catppuccin-frappe .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-frappe .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-frappe .navbar-burger{color:#c6d0f5;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-frappe .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}html.theme--catppuccin-frappe .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-frappe .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-frappe .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-frappe .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-frappe .navbar-menu{display:none}html.theme--catppuccin-frappe .navbar-item,html.theme--catppuccin-frappe .navbar-link{color:#c6d0f5;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-frappe .navbar-item .icon:only-child,html.theme--catppuccin-frappe .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-frappe a.navbar-item,html.theme--catppuccin-frappe .navbar-link{cursor:pointer}html.theme--catppuccin-frappe a.navbar-item:focus,html.theme--catppuccin-frappe a.navbar-item:focus-within,html.theme--catppuccin-frappe a.navbar-item:hover,html.theme--catppuccin-frappe a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar-link:focus,html.theme--catppuccin-frappe .navbar-link:focus-within,html.theme--catppuccin-frappe .navbar-link:hover,html.theme--catppuccin-frappe .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#8caaee}html.theme--catppuccin-frappe .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .navbar-item img{max-height:1.75rem}html.theme--catppuccin-frappe .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-frappe .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-frappe .navbar-item.is-tab:focus,html.theme--catppuccin-frappe .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#8caaee}html.theme--catppuccin-frappe .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#8caaee;border-bottom-style:solid;border-bottom-width:3px;color:#8caaee;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-frappe .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-frappe .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-frappe .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-frappe .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .navbar>.container{display:block}html.theme--catppuccin-frappe .navbar-brand .navbar-item,html.theme--catppuccin-frappe .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-frappe .navbar-link::after{display:none}html.theme--catppuccin-frappe .navbar-menu{background-color:#8caaee;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-frappe .navbar-menu.is-active{display:block}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch,html.theme--catppuccin-frappe .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-frappe .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-frappe .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-frappe html.has-navbar-fixed-top-touch,html.theme--catppuccin-frappe body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar,html.theme--catppuccin-frappe .navbar-menu,html.theme--catppuccin-frappe .navbar-start,html.theme--catppuccin-frappe .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-frappe .navbar{min-height:4rem}html.theme--catppuccin-frappe .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-frappe .navbar.is-spaced .navbar-start,html.theme--catppuccin-frappe .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-frappe .navbar.is-spaced a.navbar-item,html.theme--catppuccin-frappe .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#838ba7}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8caaee}html.theme--catppuccin-frappe .navbar-burger{display:none}html.theme--catppuccin-frappe .navbar-item,html.theme--catppuccin-frappe .navbar-link{align-items:center;display:flex}html.theme--catppuccin-frappe .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-frappe .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-frappe .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-frappe .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-frappe .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-frappe .navbar-dropdown{background-color:#8caaee;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-frappe .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#838ba7}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8caaee}.navbar.is-spaced html.theme--catppuccin-frappe .navbar-dropdown,html.theme--catppuccin-frappe .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-frappe .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-frappe .navbar-divider{display:block}html.theme--catppuccin-frappe .navbar>.container .navbar-brand,html.theme--catppuccin-frappe .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-frappe .navbar>.container .navbar-menu,html.theme--catppuccin-frappe .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-frappe .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-frappe html.has-navbar-fixed-top-desktop,html.theme--catppuccin-frappe body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-frappe html.has-spaced-navbar-fixed-top,html.theme--catppuccin-frappe body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-frappe html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-frappe body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-frappe a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar-link.is-active{color:#8caaee}html.theme--catppuccin-frappe a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-frappe .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-frappe .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-frappe .pagination.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-frappe .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .pagination.is-rounded .pagination-previous,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-frappe .pagination.is-rounded .pagination-next,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-frappe .pagination.is-rounded .pagination-link,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-frappe .pagination,html.theme--catppuccin-frappe .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link{border-color:#626880;color:#8caaee;min-width:2.5em}html.theme--catppuccin-frappe .pagination-previous:hover,html.theme--catppuccin-frappe .pagination-next:hover,html.theme--catppuccin-frappe .pagination-link:hover{border-color:#737994;color:#99d1db}html.theme--catppuccin-frappe .pagination-previous:focus,html.theme--catppuccin-frappe .pagination-next:focus,html.theme--catppuccin-frappe .pagination-link:focus{border-color:#737994}html.theme--catppuccin-frappe .pagination-previous:active,html.theme--catppuccin-frappe .pagination-next:active,html.theme--catppuccin-frappe .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-frappe .pagination-previous[disabled],html.theme--catppuccin-frappe .pagination-previous.is-disabled,html.theme--catppuccin-frappe .pagination-next[disabled],html.theme--catppuccin-frappe .pagination-next.is-disabled,html.theme--catppuccin-frappe .pagination-link[disabled],html.theme--catppuccin-frappe .pagination-link.is-disabled{background-color:#626880;border-color:#626880;box-shadow:none;color:#f1f4fd;opacity:0.5}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-frappe .pagination-link.is-current{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .pagination-ellipsis{color:#737994;pointer-events:none}html.theme--catppuccin-frappe .pagination-list{flex-wrap:wrap}html.theme--catppuccin-frappe .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .pagination{flex-wrap:wrap}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-frappe .pagination-previous{order:2}html.theme--catppuccin-frappe .pagination-next{order:3}html.theme--catppuccin-frappe .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-frappe .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-frappe .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-frappe .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-frappe .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-frappe .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-frappe .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-frappe .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-frappe .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-frappe .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-frappe .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-frappe .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-frappe .panel.is-dark .panel-heading,html.theme--catppuccin-frappe .content kbd.panel .panel-heading{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-frappe .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#414559}html.theme--catppuccin-frappe .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-frappe .content kbd.panel .panel-block.is-active .panel-icon{color:#414559}html.theme--catppuccin-frappe .panel.is-primary .panel-heading,html.theme--catppuccin-frappe details.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-frappe details.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#8caaee}html.theme--catppuccin-frappe .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-frappe details.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel.is-link .panel-heading{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .panel.is-link .panel-tabs a.is-active{border-bottom-color:#8caaee}html.theme--catppuccin-frappe .panel.is-link .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel.is-info .panel-heading{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-info .panel-tabs a.is-active{border-bottom-color:#81c8be}html.theme--catppuccin-frappe .panel.is-info .panel-block.is-active .panel-icon{color:#81c8be}html.theme--catppuccin-frappe .panel.is-success .panel-heading{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6d189}html.theme--catppuccin-frappe .panel.is-success .panel-block.is-active .panel-icon{color:#a6d189}html.theme--catppuccin-frappe .panel.is-warning .panel-heading{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#e5c890}html.theme--catppuccin-frappe .panel.is-warning .panel-block.is-active .panel-icon{color:#e5c890}html.theme--catppuccin-frappe .panel.is-danger .panel-heading{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#e78284}html.theme--catppuccin-frappe .panel.is-danger .panel-block.is-active .panel-icon{color:#e78284}html.theme--catppuccin-frappe .panel-tabs:not(:last-child),html.theme--catppuccin-frappe .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-frappe .panel-heading{background-color:#51576d;border-radius:8px 8px 0 0;color:#b0bef1;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-frappe .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-frappe .panel-tabs a{border-bottom:1px solid #626880;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-frappe .panel-tabs a.is-active{border-bottom-color:#51576d;color:#769aeb}html.theme--catppuccin-frappe .panel-list a{color:#c6d0f5}html.theme--catppuccin-frappe .panel-list a:hover{color:#8caaee}html.theme--catppuccin-frappe .panel-block{align-items:center;color:#b0bef1;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-frappe .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-frappe .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-frappe .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-frappe .panel-block.is-active{border-left-color:#8caaee;color:#769aeb}html.theme--catppuccin-frappe .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-frappe a.panel-block,html.theme--catppuccin-frappe label.panel-block{cursor:pointer}html.theme--catppuccin-frappe a.panel-block:hover,html.theme--catppuccin-frappe label.panel-block:hover{background-color:#292c3c}html.theme--catppuccin-frappe .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f1f4fd;margin-right:.75em}html.theme--catppuccin-frappe .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-frappe .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}html.theme--catppuccin-frappe .tabs a{align-items:center;border-bottom-color:#626880;border-bottom-style:solid;border-bottom-width:1px;color:#c6d0f5;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-frappe .tabs a:hover{border-bottom-color:#b0bef1;color:#b0bef1}html.theme--catppuccin-frappe .tabs li{display:block}html.theme--catppuccin-frappe .tabs li.is-active a{border-bottom-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .tabs ul{align-items:center;border-bottom-color:#626880;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-frappe .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-frappe .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-frappe .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-frappe .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-frappe .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-frappe .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-frappe .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-frappe .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-frappe .tabs.is-boxed a:hover{background-color:#292c3c;border-bottom-color:#626880}html.theme--catppuccin-frappe .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#626880;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-frappe .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .tabs.is-toggle a{border-color:#626880;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-frappe .tabs.is-toggle a:hover{background-color:#292c3c;border-color:#737994;z-index:2}html.theme--catppuccin-frappe .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-frappe .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-frappe .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-frappe .tabs.is-toggle li.is-active a{background-color:#8caaee;border-color:#8caaee;color:#fff;z-index:1}html.theme--catppuccin-frappe .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-frappe .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-frappe .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-frappe .tabs.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-frappe .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .column.is-narrow,html.theme--catppuccin-frappe .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full,html.theme--catppuccin-frappe .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters,html.theme--catppuccin-frappe .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds,html.theme--catppuccin-frappe .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half,html.theme--catppuccin-frappe .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third,html.theme--catppuccin-frappe .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter,html.theme--catppuccin-frappe .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth,html.theme--catppuccin-frappe .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths,html.theme--catppuccin-frappe .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths,html.theme--catppuccin-frappe .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths,html.theme--catppuccin-frappe .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters,html.theme--catppuccin-frappe .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds,html.theme--catppuccin-frappe .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half,html.theme--catppuccin-frappe .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third,html.theme--catppuccin-frappe .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter,html.theme--catppuccin-frappe .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth,html.theme--catppuccin-frappe .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths,html.theme--catppuccin-frappe .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths,html.theme--catppuccin-frappe .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths,html.theme--catppuccin-frappe .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-frappe .column.is-0,html.theme--catppuccin-frappe .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0,html.theme--catppuccin-frappe .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-frappe .column.is-1,html.theme--catppuccin-frappe .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1,html.theme--catppuccin-frappe .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2,html.theme--catppuccin-frappe .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2,html.theme--catppuccin-frappe .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3,html.theme--catppuccin-frappe .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3,html.theme--catppuccin-frappe .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-frappe .column.is-4,html.theme--catppuccin-frappe .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4,html.theme--catppuccin-frappe .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5,html.theme--catppuccin-frappe .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5,html.theme--catppuccin-frappe .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6,html.theme--catppuccin-frappe .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6,html.theme--catppuccin-frappe .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-frappe .column.is-7,html.theme--catppuccin-frappe .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7,html.theme--catppuccin-frappe .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8,html.theme--catppuccin-frappe .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8,html.theme--catppuccin-frappe .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9,html.theme--catppuccin-frappe .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9,html.theme--catppuccin-frappe .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-frappe .column.is-10,html.theme--catppuccin-frappe .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10,html.theme--catppuccin-frappe .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11,html.theme--catppuccin-frappe .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11,html.theme--catppuccin-frappe .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12,html.theme--catppuccin-frappe .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12,html.theme--catppuccin-frappe .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-frappe .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-frappe .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-frappe .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-frappe .columns.is-centered{justify-content:center}html.theme--catppuccin-frappe .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-frappe .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-frappe .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-frappe .columns.is-mobile{display:flex}html.theme--catppuccin-frappe .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-frappe .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-desktop{display:flex}}html.theme--catppuccin-frappe .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-frappe .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-frappe .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-frappe .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-frappe .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-frappe .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-frappe .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-frappe .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-frappe .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-frappe .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-frappe .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-frappe .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-frappe .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-frappe .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-frappe .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-frappe .tile.is-child{margin:0 !important}html.theme--catppuccin-frappe .tile.is-parent{padding:.75rem}html.theme--catppuccin-frappe .tile.is-vertical{flex-direction:column}html.theme--catppuccin-frappe .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .tile:not(.is-child){display:flex}html.theme--catppuccin-frappe .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .tile.is-3{flex:none;width:25%}html.theme--catppuccin-frappe .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .tile.is-6{flex:none;width:50%}html.theme--catppuccin-frappe .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .tile.is-9{flex:none;width:75%}html.theme--catppuccin-frappe .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-frappe .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-frappe .hero .navbar{background:none}html.theme--catppuccin-frappe .hero .tabs ul{border-bottom:none}html.theme--catppuccin-frappe .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-white strong{color:inherit}html.theme--catppuccin-frappe .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-frappe .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-frappe .hero.is-white .navbar-item,html.theme--catppuccin-frappe .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-frappe .hero.is-white a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-white .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-frappe .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-frappe .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-black strong{color:inherit}html.theme--catppuccin-frappe .hero.is-black .title{color:#fff}html.theme--catppuccin-frappe .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-frappe .hero.is-black .navbar-item,html.theme--catppuccin-frappe .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-black a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-black .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-frappe .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-light strong{color:inherit}html.theme--catppuccin-frappe .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-frappe .hero.is-light .navbar-item,html.theme--catppuccin-frappe .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-light .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-frappe .hero.is-dark,html.theme--catppuccin-frappe .content kbd.hero{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-dark strong,html.theme--catppuccin-frappe .content kbd.hero strong{color:inherit}html.theme--catppuccin-frappe .hero.is-dark .title,html.theme--catppuccin-frappe .content kbd.hero .title{color:#fff}html.theme--catppuccin-frappe .hero.is-dark .subtitle,html.theme--catppuccin-frappe .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-frappe .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-dark .subtitle strong,html.theme--catppuccin-frappe .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-dark .navbar-menu,html.theme--catppuccin-frappe .content kbd.hero .navbar-menu{background-color:#414559}}html.theme--catppuccin-frappe .hero.is-dark .navbar-item,html.theme--catppuccin-frappe .content kbd.hero .navbar-item,html.theme--catppuccin-frappe .hero.is-dark .navbar-link,html.theme--catppuccin-frappe .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-dark .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.hero .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.hero .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .hero.is-dark .tabs a,html.theme--catppuccin-frappe .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-dark .tabs a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs li.is-active a{color:#414559 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#414559}html.theme--catppuccin-frappe .hero.is-dark.is-bold,html.theme--catppuccin-frappe .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #262f41 0%, #414559 71%, #47476c 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-frappe .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #262f41 0%, #414559 71%, #47476c 100%)}}html.theme--catppuccin-frappe .hero.is-primary,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-primary strong,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-frappe .hero.is-primary .title,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-frappe .hero.is-primary .subtitle,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-primary .subtitle strong,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-primary .navbar-menu,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#8caaee}}html.theme--catppuccin-frappe .hero.is-primary .navbar-item,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-frappe .hero.is-primary .navbar-link,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-primary .navbar-link:hover,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .hero.is-primary .tabs a,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-primary .tabs a:hover,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#8caaee !important;opacity:1}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .hero.is-primary.is-bold,html.theme--catppuccin-frappe details.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-frappe details.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}}html.theme--catppuccin-frappe .hero.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-link strong{color:inherit}html.theme--catppuccin-frappe .hero.is-link .title{color:#fff}html.theme--catppuccin-frappe .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-link .navbar-menu{background-color:#8caaee}}html.theme--catppuccin-frappe .hero.is-link .navbar-item,html.theme--catppuccin-frappe .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-link a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-link .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-link .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-link .tabs li.is-active a{color:#8caaee !important;opacity:1}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .hero.is-link.is-bold{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}}html.theme--catppuccin-frappe .hero.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-info strong{color:inherit}html.theme--catppuccin-frappe .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-info .navbar-menu{background-color:#81c8be}}html.theme--catppuccin-frappe .hero.is-info .navbar-item,html.theme--catppuccin-frappe .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-info .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-info .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-info .tabs li.is-active a{color:#81c8be !important;opacity:1}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .hero.is-info.is-bold{background-image:linear-gradient(141deg, #52c4a1 0%, #81c8be 71%, #8fd2d4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #52c4a1 0%, #81c8be 71%, #8fd2d4 100%)}}html.theme--catppuccin-frappe .hero.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-success strong{color:inherit}html.theme--catppuccin-frappe .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-success .navbar-menu{background-color:#a6d189}}html.theme--catppuccin-frappe .hero.is-success .navbar-item,html.theme--catppuccin-frappe .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-success .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-success .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-success .tabs li.is-active a{color:#a6d189 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .hero.is-success.is-bold{background-image:linear-gradient(141deg, #9ccd5a 0%, #a6d189 71%, #a8dc98 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #9ccd5a 0%, #a6d189 71%, #a8dc98 100%)}}html.theme--catppuccin-frappe .hero.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-warning strong{color:inherit}html.theme--catppuccin-frappe .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-warning .navbar-menu{background-color:#e5c890}}html.theme--catppuccin-frappe .hero.is-warning .navbar-item,html.theme--catppuccin-frappe .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-warning .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-warning .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-warning .tabs li.is-active a{color:#e5c890 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #e5a05d 0%, #e5c890 71%, #ede0a2 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e5a05d 0%, #e5c890 71%, #ede0a2 100%)}}html.theme--catppuccin-frappe .hero.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-danger strong{color:inherit}html.theme--catppuccin-frappe .hero.is-danger .title{color:#fff}html.theme--catppuccin-frappe .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-danger .navbar-menu{background-color:#e78284}}html.theme--catppuccin-frappe .hero.is-danger .navbar-item,html.theme--catppuccin-frappe .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-danger .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-danger .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-danger .tabs li.is-active a{color:#e78284 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#e78284}html.theme--catppuccin-frappe .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #e94d6a 0%, #e78284 71%, #eea294 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e94d6a 0%, #e78284 71%, #eea294 100%)}}html.theme--catppuccin-frappe .hero.is-small .hero-body,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-frappe .hero.is-halfheight .hero-body,html.theme--catppuccin-frappe .hero.is-fullheight .hero-body,html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-frappe .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-frappe .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-frappe .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-frappe .hero-video{overflow:hidden}html.theme--catppuccin-frappe .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-frappe .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero-video{display:none}}html.theme--catppuccin-frappe .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero-buttons .button{display:flex}html.theme--catppuccin-frappe .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-frappe .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-frappe .hero-head,html.theme--catppuccin-frappe .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero-body{padding:3rem 3rem}}html.theme--catppuccin-frappe .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .section{padding:3rem 3rem}html.theme--catppuccin-frappe .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-frappe .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-frappe .footer{background-color:#292c3c;padding:3rem 1.5rem 6rem}html.theme--catppuccin-frappe h1 .docs-heading-anchor,html.theme--catppuccin-frappe h1 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h1 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h2 .docs-heading-anchor,html.theme--catppuccin-frappe h2 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h2 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h3 .docs-heading-anchor,html.theme--catppuccin-frappe h3 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h3 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h4 .docs-heading-anchor,html.theme--catppuccin-frappe h4 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h4 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h5 .docs-heading-anchor,html.theme--catppuccin-frappe h5 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h5 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h6 .docs-heading-anchor,html.theme--catppuccin-frappe h6 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h6 .docs-heading-anchor:visited{color:#c6d0f5}html.theme--catppuccin-frappe h1 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h2 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h3 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h4 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h5 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-frappe h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-frappe h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-frappe .docs-light-only{display:none !important}html.theme--catppuccin-frappe pre{position:relative;overflow:hidden}html.theme--catppuccin-frappe pre code,html.theme--catppuccin-frappe pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-frappe pre code:first-of-type,html.theme--catppuccin-frappe pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-frappe pre code:last-of-type,html.theme--catppuccin-frappe pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-frappe pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#c6d0f5;cursor:pointer;text-align:center}html.theme--catppuccin-frappe pre .copy-button:focus,html.theme--catppuccin-frappe pre .copy-button:hover{opacity:1;background:rgba(198,208,245,0.1);color:#8caaee}html.theme--catppuccin-frappe pre .copy-button.success{color:#a6d189;opacity:1}html.theme--catppuccin-frappe pre .copy-button.error{color:#e78284;opacity:1}html.theme--catppuccin-frappe pre:hover .copy-button{opacity:1}html.theme--catppuccin-frappe .link-icon:hover{color:#8caaee}html.theme--catppuccin-frappe .admonition{background-color:#292c3c;border-style:solid;border-width:2px;border-color:#b5bfe2;border-radius:4px;font-size:1rem}html.theme--catppuccin-frappe .admonition strong{color:currentColor}html.theme--catppuccin-frappe .admonition.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-frappe .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .admonition.is-default{background-color:#292c3c;border-color:#b5bfe2}html.theme--catppuccin-frappe .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#b5bfe2}html.theme--catppuccin-frappe .admonition.is-default>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-info{background-color:#292c3c;border-color:#81c8be}html.theme--catppuccin-frappe .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#81c8be}html.theme--catppuccin-frappe .admonition.is-info>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-success{background-color:#292c3c;border-color:#a6d189}html.theme--catppuccin-frappe .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6d189}html.theme--catppuccin-frappe .admonition.is-success>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-warning{background-color:#292c3c;border-color:#e5c890}html.theme--catppuccin-frappe .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#e5c890}html.theme--catppuccin-frappe .admonition.is-warning>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-danger{background-color:#292c3c;border-color:#e78284}html.theme--catppuccin-frappe .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#e78284}html.theme--catppuccin-frappe .admonition.is-danger>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-compat{background-color:#292c3c;border-color:#99d1db}html.theme--catppuccin-frappe .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#99d1db}html.theme--catppuccin-frappe .admonition.is-compat>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-todo{background-color:#292c3c;border-color:#ca9ee6}html.theme--catppuccin-frappe .admonition.is-todo>.admonition-header{background-color:rgba(0,0,0,0);color:#ca9ee6}html.theme--catppuccin-frappe .admonition.is-todo>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition-header{color:#b5bfe2;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-frappe .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-frappe .admonition-header .admonition-anchor{opacity:0;margin-left:0.5em;font-size:0.75em;color:inherit;text-decoration:none;transition:opacity 0.2s ease-in-out}html.theme--catppuccin-frappe .admonition-header .admonition-anchor:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-frappe .admonition-header .admonition-anchor:hover{opacity:1 !important;text-decoration:none}html.theme--catppuccin-frappe .admonition-header:hover .admonition-anchor{opacity:0.8}html.theme--catppuccin-frappe details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-frappe details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-frappe details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-frappe .admonition-body{color:#c6d0f5;padding:0.5rem .75rem}html.theme--catppuccin-frappe .admonition-body pre{background-color:#292c3c}html.theme--catppuccin-frappe .admonition-body code{background-color:#292c3c}html.theme--catppuccin-frappe details.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #626880;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-frappe details.docstring>summary{list-style-type:none;align-items:stretch;padding:0.5rem .75rem;background-color:#292c3c;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #626880;overflow:auto}html.theme--catppuccin-frappe details.docstring>summary code{background-color:transparent}html.theme--catppuccin-frappe details.docstring>summary .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-frappe details.docstring>summary .docstring-binding{margin-right:0.3em}html.theme--catppuccin-frappe details.docstring>summary .docstring-category{margin-left:0.3em}html.theme--catppuccin-frappe details.docstring>summary::before{content:'\f054';font-family:"Font Awesome 6 Free";font-weight:900;min-width:1.1rem;color:#2E63BD;display:inline-block}html.theme--catppuccin-frappe details.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #626880}html.theme--catppuccin-frappe details.docstring>section:last-child{border-bottom:none}html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-frappe details.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-frappe details.docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-frappe details.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-frappe details.docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-frappe details.docstring[open]>summary::before{content:"\f078"}html.theme--catppuccin-frappe .documenter-example-output{background-color:#303446}html.theme--catppuccin-frappe .warning-overlay-base,html.theme--catppuccin-frappe .dev-warning-overlay,html.theme--catppuccin-frappe .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-frappe .warning-overlay-base .outdated-warning-closer,html.theme--catppuccin-frappe .dev-warning-overlay .outdated-warning-closer,html.theme--catppuccin-frappe .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-frappe .warning-overlay-base a,html.theme--catppuccin-frappe .dev-warning-overlay a,html.theme--catppuccin-frappe .outdated-warning-overlay a{color:#8caaee}html.theme--catppuccin-frappe .warning-overlay-base a:hover,html.theme--catppuccin-frappe .dev-warning-overlay a:hover,html.theme--catppuccin-frappe .outdated-warning-overlay a:hover{color:#99d1db}html.theme--catppuccin-frappe .outdated-warning-overlay{background-color:#292c3c;color:#c6d0f5;border-bottom:3px solid rgba(0,0,0,0)}html.theme--catppuccin-frappe .dev-warning-overlay{background-color:#292c3c;color:#c6d0f5;border-bottom:3px solid rgba(0,0,0,0)}html.theme--catppuccin-frappe .footnote-reference{position:relative;display:inline-block}html.theme--catppuccin-frappe .footnote-preview{display:none;position:absolute;z-index:1000;max-width:300px;width:max-content;background-color:#303446;border:1px solid #99d1db;padding:10px;border-radius:5px;top:calc(100% + 10px);left:50%;transform:translateX(-50%);box-sizing:border-box;--arrow-left: 50%}html.theme--catppuccin-frappe .footnote-preview::before{content:"";position:absolute;top:-10px;left:var(--arrow-left);transform:translateX(-50%);border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #99d1db}html.theme--catppuccin-frappe .content pre{border:2px solid #626880;border-radius:4px}html.theme--catppuccin-frappe .content code{font-weight:inherit}html.theme--catppuccin-frappe .content a code{color:#8caaee}html.theme--catppuccin-frappe .content a:hover code{color:#99d1db}html.theme--catppuccin-frappe .content h1 code,html.theme--catppuccin-frappe .content h2 code,html.theme--catppuccin-frappe .content h3 code,html.theme--catppuccin-frappe .content h4 code,html.theme--catppuccin-frappe .content h5 code,html.theme--catppuccin-frappe .content h6 code{color:#c6d0f5}html.theme--catppuccin-frappe .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-frappe .content blockquote>ul:first-child,html.theme--catppuccin-frappe .content blockquote>ol:first-child,html.theme--catppuccin-frappe .content .admonition-body>ul:first-child,html.theme--catppuccin-frappe .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-frappe pre,html.theme--catppuccin-frappe code{font-variant-ligatures:no-contextual}html.theme--catppuccin-frappe .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-frappe .breadcrumb a.is-disabled,html.theme--catppuccin-frappe .breadcrumb a.is-disabled:hover{color:#b0bef1}html.theme--catppuccin-frappe .hljs{background:initial !important}html.theme--catppuccin-frappe .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-frappe .katex-display,html.theme--catppuccin-frappe mjx-container,html.theme--catppuccin-frappe .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-frappe html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-frappe li.no-marker{list-style:none}html.theme--catppuccin-frappe #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-frappe #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main{width:100%}html.theme--catppuccin-frappe #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-frappe #documenter .docs-main>header,html.theme--catppuccin-frappe #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar{background-color:#303446;border-bottom:1px solid #626880;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow:hidden}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-frappe #documenter .docs-main section.footnotes{border-top:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li details.docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-frappe .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #626880;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-frappe #documenter .docs-sidebar{display:flex;flex-direction:column;color:#c6d0f5;background-color:#292c3c;border-right:1px solid #626880;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-frappe #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name a:hover{color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #626880;display:none;padding:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #626880;padding-bottom:1.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#c6d0f5;background:#292c3c}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#c6d0f5;background-color:#313548}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #626880;border-bottom:1px solid #626880;background-color:#232634}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#232634;color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#313548;color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-frappe #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3a3e54}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4a506c}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3a3e54}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4a506c}}html.theme--catppuccin-frappe kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-frappe .search-min-width-50{min-width:50%}html.theme--catppuccin-frappe .search-min-height-100{min-height:100%}html.theme--catppuccin-frappe .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-frappe .search-result-link{border-radius:0.7em;transition:all 300ms;border:1px solid transparent}html.theme--catppuccin-frappe .search-result-link:hover,html.theme--catppuccin-frappe .search-result-link:focus{background-color:rgba(0,128,128,0.1);outline:none;border-color:#81c8be}html.theme--catppuccin-frappe .search-result-link .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-frappe .property-search-result-badge,html.theme--catppuccin-frappe .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-frappe .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:hover .search-filter,html.theme--catppuccin-frappe .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-frappe .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-frappe .search-filter:hover,html.theme--catppuccin-frappe .search-filter:focus{color:#333}html.theme--catppuccin-frappe .search-filter-selected{color:#414559;background-color:#babbf1}html.theme--catppuccin-frappe .search-filter-selected:hover,html.theme--catppuccin-frappe .search-filter-selected:focus{color:#414559}html.theme--catppuccin-frappe .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-frappe .search-divider{border-bottom:1px solid #626880}html.theme--catppuccin-frappe .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-frappe .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-frappe .w-100{width:100%}html.theme--catppuccin-frappe .gap-2{gap:0.5rem}html.theme--catppuccin-frappe .gap-4{gap:1rem}html.theme--catppuccin-frappe .gap-8{gap:2rem}html.theme--catppuccin-frappe{background-color:#303446;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-frappe a{transition:all 200ms ease}html.theme--catppuccin-frappe .label{color:#c6d0f5}html.theme--catppuccin-frappe .button,html.theme--catppuccin-frappe .control.has-icons-left .icon,html.theme--catppuccin-frappe .control.has-icons-right .icon,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .select,html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea{height:2.5em;color:#c6d0f5}html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#c6d0f5}html.theme--catppuccin-frappe .select:after,html.theme--catppuccin-frappe .select select{border-width:1px}html.theme--catppuccin-frappe .menu-list a{transition:all 300ms ease}html.theme--catppuccin-frappe .modal-card-foot,html.theme--catppuccin-frappe .modal-card-head{border-color:#626880}html.theme--catppuccin-frappe .navbar{border-radius:.4em}html.theme--catppuccin-frappe .navbar.is-transparent{background:none}html.theme--catppuccin-frappe .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .navbar .navbar-menu{background-color:#8caaee;border-radius:0 0 .4em .4em}}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){color:#414559}html.theme--catppuccin-frappe .tag.is-link:not(body),html.theme--catppuccin-frappe details.docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-frappe .content kbd.is-link:not(body){color:#414559}html.theme--catppuccin-frappe .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-frappe .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-frappe .ansi span.sgr3{font-style:italic}html.theme--catppuccin-frappe .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-frappe .ansi span.sgr7{color:#303446;background-color:#c6d0f5}html.theme--catppuccin-frappe .ansi span.sgr8{color:transparent}html.theme--catppuccin-frappe .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-frappe .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-frappe .ansi span.sgr30{color:#51576d}html.theme--catppuccin-frappe .ansi span.sgr31{color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr32{color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr33{color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr34{color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr35{color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr36{color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr37{color:#b5bfe2}html.theme--catppuccin-frappe .ansi span.sgr40{background-color:#51576d}html.theme--catppuccin-frappe .ansi span.sgr41{background-color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr42{background-color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr43{background-color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr44{background-color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr45{background-color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr46{background-color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr47{background-color:#b5bfe2}html.theme--catppuccin-frappe .ansi span.sgr90{color:#626880}html.theme--catppuccin-frappe .ansi span.sgr91{color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr92{color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr93{color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr94{color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr95{color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr96{color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr97{color:#a5adce}html.theme--catppuccin-frappe .ansi span.sgr100{background-color:#626880}html.theme--catppuccin-frappe .ansi span.sgr101{background-color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr102{background-color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr103{background-color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr104{background-color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr105{background-color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr106{background-color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr107{background-color:#a5adce}html.theme--catppuccin-frappe code.language-julia-repl>span.hljs-meta{color:#a6d189;font-weight:bolder}html.theme--catppuccin-frappe code .hljs{color:#c6d0f5;background:#303446}html.theme--catppuccin-frappe code .hljs-keyword{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-built_in{color:#e78284}html.theme--catppuccin-frappe code .hljs-type{color:#e5c890}html.theme--catppuccin-frappe code .hljs-literal{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-number{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-operator{color:#81c8be}html.theme--catppuccin-frappe code .hljs-punctuation{color:#b5bfe2}html.theme--catppuccin-frappe code .hljs-property{color:#81c8be}html.theme--catppuccin-frappe code .hljs-regexp{color:#f4b8e4}html.theme--catppuccin-frappe code .hljs-string{color:#a6d189}html.theme--catppuccin-frappe code .hljs-char.escape_{color:#a6d189}html.theme--catppuccin-frappe code .hljs-subst{color:#a5adce}html.theme--catppuccin-frappe code .hljs-symbol{color:#eebebe}html.theme--catppuccin-frappe code .hljs-variable{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-variable.language_{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-variable.constant_{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-title{color:#8caaee}html.theme--catppuccin-frappe code .hljs-title.class_{color:#e5c890}html.theme--catppuccin-frappe code .hljs-title.function_{color:#8caaee}html.theme--catppuccin-frappe code .hljs-params{color:#c6d0f5}html.theme--catppuccin-frappe code .hljs-comment{color:#626880}html.theme--catppuccin-frappe code .hljs-doctag{color:#e78284}html.theme--catppuccin-frappe code .hljs-meta{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-section{color:#8caaee}html.theme--catppuccin-frappe code .hljs-tag{color:#a5adce}html.theme--catppuccin-frappe code .hljs-name{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-attr{color:#8caaee}html.theme--catppuccin-frappe code .hljs-attribute{color:#a6d189}html.theme--catppuccin-frappe code .hljs-bullet{color:#81c8be}html.theme--catppuccin-frappe code .hljs-code{color:#a6d189}html.theme--catppuccin-frappe code .hljs-emphasis{color:#e78284;font-style:italic}html.theme--catppuccin-frappe code .hljs-strong{color:#e78284;font-weight:bold}html.theme--catppuccin-frappe code .hljs-formula{color:#81c8be}html.theme--catppuccin-frappe code .hljs-link{color:#85c1dc;font-style:italic}html.theme--catppuccin-frappe code .hljs-quote{color:#a6d189;font-style:italic}html.theme--catppuccin-frappe code .hljs-selector-tag{color:#e5c890}html.theme--catppuccin-frappe code .hljs-selector-id{color:#8caaee}html.theme--catppuccin-frappe code .hljs-selector-class{color:#81c8be}html.theme--catppuccin-frappe code .hljs-selector-attr{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-selector-pseudo{color:#81c8be}html.theme--catppuccin-frappe code .hljs-template-tag{color:#eebebe}html.theme--catppuccin-frappe code .hljs-template-variable{color:#eebebe}html.theme--catppuccin-frappe code .hljs-addition{color:#a6d189;background:rgba(166,227,161,0.15)}html.theme--catppuccin-frappe code .hljs-deletion{color:#e78284;background:rgba(243,139,168,0.15)}html.theme--catppuccin-frappe .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover,html.theme--catppuccin-frappe .search-result-link:focus{background-color:#414559}html.theme--catppuccin-frappe .search-result-link .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:hover .search-filter,html.theme--catppuccin-frappe .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:focus .search-filter{color:#414559 !important;background-color:#babbf1 !important}html.theme--catppuccin-frappe .search-result-title{color:#c6d0f5}html.theme--catppuccin-frappe .search-result-highlight{background-color:#e78284;color:#292c3c}html.theme--catppuccin-frappe .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-frappe .w-100{width:100%}html.theme--catppuccin-frappe .gap-2{gap:0.5rem}html.theme--catppuccin-frappe .gap-4{gap:1rem} diff --git a/.save/docs/build/assets/themes/catppuccin-latte.css b/.save/docs/build/assets/themes/catppuccin-latte.css new file mode 100644 index 00000000..7f1e6c62 --- /dev/null +++ b/.save/docs/build/assets/themes/catppuccin-latte.css @@ -0,0 +1 @@ +html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte .file-name,html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-latte .pagination-previous:focus,html.theme--catppuccin-latte .pagination-next:focus,html.theme--catppuccin-latte .pagination-link:focus,html.theme--catppuccin-latte .pagination-ellipsis:focus,html.theme--catppuccin-latte .file-cta:focus,html.theme--catppuccin-latte .file-name:focus,html.theme--catppuccin-latte .select select:focus,html.theme--catppuccin-latte .textarea:focus,html.theme--catppuccin-latte .input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-latte .button:focus,html.theme--catppuccin-latte .is-focused.pagination-previous,html.theme--catppuccin-latte .is-focused.pagination-next,html.theme--catppuccin-latte .is-focused.pagination-link,html.theme--catppuccin-latte .is-focused.pagination-ellipsis,html.theme--catppuccin-latte .is-focused.file-cta,html.theme--catppuccin-latte .is-focused.file-name,html.theme--catppuccin-latte .select select.is-focused,html.theme--catppuccin-latte .is-focused.textarea,html.theme--catppuccin-latte .is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-focused.button,html.theme--catppuccin-latte .pagination-previous:active,html.theme--catppuccin-latte .pagination-next:active,html.theme--catppuccin-latte .pagination-link:active,html.theme--catppuccin-latte .pagination-ellipsis:active,html.theme--catppuccin-latte .file-cta:active,html.theme--catppuccin-latte .file-name:active,html.theme--catppuccin-latte .select select:active,html.theme--catppuccin-latte .textarea:active,html.theme--catppuccin-latte .input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-latte .button:active,html.theme--catppuccin-latte .is-active.pagination-previous,html.theme--catppuccin-latte .is-active.pagination-next,html.theme--catppuccin-latte .is-active.pagination-link,html.theme--catppuccin-latte .is-active.pagination-ellipsis,html.theme--catppuccin-latte .is-active.file-cta,html.theme--catppuccin-latte .is-active.file-name,html.theme--catppuccin-latte .select select.is-active,html.theme--catppuccin-latte .is-active.textarea,html.theme--catppuccin-latte .is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .is-active.button{outline:none}html.theme--catppuccin-latte .pagination-previous[disabled],html.theme--catppuccin-latte .pagination-next[disabled],html.theme--catppuccin-latte .pagination-link[disabled],html.theme--catppuccin-latte .pagination-ellipsis[disabled],html.theme--catppuccin-latte .file-cta[disabled],html.theme--catppuccin-latte .file-name[disabled],html.theme--catppuccin-latte .select select[disabled],html.theme--catppuccin-latte .textarea[disabled],html.theme--catppuccin-latte .input[disabled],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-latte .button[disabled],fieldset[disabled] html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-latte .file-name,html.theme--catppuccin-latte fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-latte .select select,fieldset[disabled] html.theme--catppuccin-latte .textarea,fieldset[disabled] html.theme--catppuccin-latte .input,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte fieldset[disabled] .select select,html.theme--catppuccin-latte .select fieldset[disabled] select,html.theme--catppuccin-latte fieldset[disabled] .textarea,html.theme--catppuccin-latte fieldset[disabled] .input,html.theme--catppuccin-latte fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-latte .button,html.theme--catppuccin-latte fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-latte .tabs,html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .breadcrumb,html.theme--catppuccin-latte .file,html.theme--catppuccin-latte .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-latte .admonition:not(:last-child),html.theme--catppuccin-latte .tabs:not(:last-child),html.theme--catppuccin-latte .pagination:not(:last-child),html.theme--catppuccin-latte .message:not(:last-child),html.theme--catppuccin-latte .level:not(:last-child),html.theme--catppuccin-latte .breadcrumb:not(:last-child),html.theme--catppuccin-latte .block:not(:last-child),html.theme--catppuccin-latte .title:not(:last-child),html.theme--catppuccin-latte .subtitle:not(:last-child),html.theme--catppuccin-latte .table-container:not(:last-child),html.theme--catppuccin-latte .table:not(:last-child),html.theme--catppuccin-latte .progress:not(:last-child),html.theme--catppuccin-latte .notification:not(:last-child),html.theme--catppuccin-latte .content:not(:last-child),html.theme--catppuccin-latte .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .modal-close,html.theme--catppuccin-latte .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-latte .modal-close::before,html.theme--catppuccin-latte .delete::before,html.theme--catppuccin-latte .modal-close::after,html.theme--catppuccin-latte .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-latte .modal-close::before,html.theme--catppuccin-latte .delete::before{height:2px;width:50%}html.theme--catppuccin-latte .modal-close::after,html.theme--catppuccin-latte .delete::after{height:50%;width:2px}html.theme--catppuccin-latte .modal-close:hover,html.theme--catppuccin-latte .delete:hover,html.theme--catppuccin-latte .modal-close:focus,html.theme--catppuccin-latte .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-latte .modal-close:active,html.theme--catppuccin-latte .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-latte .is-small.modal-close,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-latte .is-small.delete,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-latte .is-medium.modal-close,html.theme--catppuccin-latte .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-latte .is-large.modal-close,html.theme--catppuccin-latte .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-latte .control.is-loading::after,html.theme--catppuccin-latte .select.is-loading::after,html.theme--catppuccin-latte .loader,html.theme--catppuccin-latte .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #8c8fa1;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-latte .hero-video,html.theme--catppuccin-latte .modal-background,html.theme--catppuccin-latte .modal,html.theme--catppuccin-latte .image.is-square img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-latte .image.is-square .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-latte .image.is-1by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-latte .image.is-1by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-latte .image.is-5by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-latte .image.is-5by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-latte .image.is-4by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-latte .image.is-4by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-latte .image.is-3by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-latte .image.is-5by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-latte .image.is-5by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-latte .image.is-16by9 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-latte .image.is-16by9 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-latte .image.is-2by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-latte .image.is-2by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-latte .image.is-3by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-latte .image.is-3by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-latte .image.is-4by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-latte .image.is-4by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-latte .image.is-3by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-latte .image.is-3by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-latte .image.is-2by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-latte .image.is-2by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-latte .image.is-3by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-latte .image.is-9by16 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-latte .image.is-9by16 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-latte .image.is-1by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-latte .image.is-1by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-latte .image.is-1by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-latte .image.is-1by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-latte .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{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}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#ccd0da !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#aeb5c5 !important}.has-background-dark{background-color:#ccd0da !important}.has-text-primary{color:#1e66f5 !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#0a4ed6 !important}.has-background-primary{background-color:#1e66f5 !important}.has-text-primary-light{color:#ebf2fe !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bbd1fc !important}.has-background-primary-light{background-color:#ebf2fe !important}.has-text-primary-dark{color:#0a52e1 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#286df5 !important}.has-background-primary-dark{background-color:#0a52e1 !important}.has-text-link{color:#1e66f5 !important}a.has-text-link:hover,a.has-text-link:focus{color:#0a4ed6 !important}.has-background-link{background-color:#1e66f5 !important}.has-text-link-light{color:#ebf2fe !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bbd1fc !important}.has-background-link-light{background-color:#ebf2fe !important}.has-text-link-dark{color:#0a52e1 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#286df5 !important}.has-background-link-dark{background-color:#0a52e1 !important}.has-text-info{color:#179299 !important}a.has-text-info:hover,a.has-text-info:focus{color:#10686d !important}.has-background-info{background-color:#179299 !important}.has-text-info-light{color:#edfcfc !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c1f3f6 !important}.has-background-info-light{background-color:#edfcfc !important}.has-text-info-dark{color:#1cb2ba !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#2ad5df !important}.has-background-info-dark{background-color:#1cb2ba !important}.has-text-success{color:#40a02b !important}a.has-text-success:hover,a.has-text-success:focus{color:#307820 !important}.has-background-success{background-color:#40a02b !important}.has-text-success-light{color:#f1fbef !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#cef0c7 !important}.has-background-success-light{background-color:#f1fbef !important}.has-text-success-dark{color:#40a12b !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#50c936 !important}.has-background-success-dark{background-color:#40a12b !important}.has-text-warning{color:#df8e1d !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#b27117 !important}.has-background-warning{background-color:#df8e1d !important}.has-text-warning-light{color:#fdf6ed !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f7e0c0 !important}.has-background-warning-light{background-color:#fdf6ed !important}.has-text-warning-dark{color:#9e6515 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#cb811a !important}.has-background-warning-dark{background-color:#9e6515 !important}.has-text-danger{color:#d20f39 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a20c2c !important}.has-background-danger{background-color:#d20f39 !important}.has-text-danger-light{color:#feecf0 !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fabcca !important}.has-background-danger-light{background-color:#feecf0 !important}.has-text-danger-dark{color:#e9113f !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f13c63 !important}.has-background-danger-dark{background-color:#e9113f !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:#ccd0da !important}.has-background-grey-darker{background-color:#ccd0da !important}.has-text-grey-dark{color:#bcc0cc !important}.has-background-grey-dark{background-color:#bcc0cc !important}.has-text-grey{color:#acb0be !important}.has-background-grey{background-color:#acb0be !important}.has-text-grey-light{color:#9ca0b0 !important}.has-background-grey-light{background-color:#9ca0b0 !important}.has-text-grey-lighter{color:#8c8fa1 !important}.has-background-grey-lighter{background-color:#8c8fa1 !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-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !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-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin: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}.m-1{margin:.25rem !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}.m-2{margin:.5rem !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}.m-3{margin:.75rem !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}.m-4{margin:1rem !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}.m-5{margin:1.5rem !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}.m-6{margin:3rem !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}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !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}.p-1{padding:.25rem !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}.p-2{padding:.5rem !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}.p-3{padding:.75rem !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}.p-4{padding:1rem !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}.p-5{padding:1.5rem !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}.p-6{padding:3rem !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}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink{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: 1055px){.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: 1056px){.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: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) 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}.is-underlined{text-decoration:underline !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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",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: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) 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:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.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: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) 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}}html.theme--catppuccin-latte html{background-color:#eff1f5;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-latte article,html.theme--catppuccin-latte aside,html.theme--catppuccin-latte figure,html.theme--catppuccin-latte footer,html.theme--catppuccin-latte header,html.theme--catppuccin-latte hgroup,html.theme--catppuccin-latte section{display:block}html.theme--catppuccin-latte body,html.theme--catppuccin-latte button,html.theme--catppuccin-latte input,html.theme--catppuccin-latte optgroup,html.theme--catppuccin-latte select,html.theme--catppuccin-latte textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-latte code,html.theme--catppuccin-latte pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-latte body{color:#4c4f69;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-latte a{color:#1e66f5;cursor:pointer;text-decoration:none}html.theme--catppuccin-latte a strong{color:currentColor}html.theme--catppuccin-latte a:hover{color:#04a5e5}html.theme--catppuccin-latte code{background-color:#e6e9ef;color:#4c4f69;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-latte hr{background-color:#e6e9ef;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-latte img{height:auto;max-width:100%}html.theme--catppuccin-latte input[type="checkbox"],html.theme--catppuccin-latte input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-latte small{font-size:.875em}html.theme--catppuccin-latte span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-latte strong{color:#41445a;font-weight:700}html.theme--catppuccin-latte fieldset{border:none}html.theme--catppuccin-latte pre{-webkit-overflow-scrolling:touch;background-color:#e6e9ef;color:#4c4f69;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-latte pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-latte table td,html.theme--catppuccin-latte table th{vertical-align:top}html.theme--catppuccin-latte table td:not([align]),html.theme--catppuccin-latte table th:not([align]){text-align:inherit}html.theme--catppuccin-latte table th{color:#41445a}html.theme--catppuccin-latte .box{background-color:#bcc0cc;border-radius:8px;box-shadow:none;color:#4c4f69;display:block;padding:1.25rem}html.theme--catppuccin-latte a.box:hover,html.theme--catppuccin-latte a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1e66f5}html.theme--catppuccin-latte a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1e66f5}html.theme--catppuccin-latte .button{background-color:#e6e9ef;border-color:#fff;border-width:1px;color:#1e66f5;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-latte .button strong{color:inherit}html.theme--catppuccin-latte .button .icon,html.theme--catppuccin-latte .button .icon.is-small,html.theme--catppuccin-latte .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-latte .button .icon.is-medium,html.theme--catppuccin-latte .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-latte .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-latte .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-latte .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-latte .button:hover,html.theme--catppuccin-latte .button.is-hovered{border-color:#9ca0b0;color:#41445a}html.theme--catppuccin-latte .button:focus,html.theme--catppuccin-latte .button.is-focused{border-color:#9ca0b0;color:#0b57ef}html.theme--catppuccin-latte .button:focus:not(:active),html.theme--catppuccin-latte .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button:active,html.theme--catppuccin-latte .button.is-active{border-color:#bcc0cc;color:#41445a}html.theme--catppuccin-latte .button.is-text{background-color:transparent;border-color:transparent;color:#4c4f69;text-decoration:underline}html.theme--catppuccin-latte .button.is-text:hover,html.theme--catppuccin-latte .button.is-text.is-hovered,html.theme--catppuccin-latte .button.is-text:focus,html.theme--catppuccin-latte .button.is-text.is-focused{background-color:#e6e9ef;color:#41445a}html.theme--catppuccin-latte .button.is-text:active,html.theme--catppuccin-latte .button.is-text.is-active{background-color:#d6dbe5;color:#41445a}html.theme--catppuccin-latte .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-latte .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1e66f5;text-decoration:none}html.theme--catppuccin-latte .button.is-ghost:hover,html.theme--catppuccin-latte .button.is-ghost.is-hovered{color:#1e66f5;text-decoration:underline}html.theme--catppuccin-latte .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:hover,html.theme--catppuccin-latte .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:focus,html.theme--catppuccin-latte .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:focus:not(:active),html.theme--catppuccin-latte .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .button.is-white:active,html.theme--catppuccin-latte .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-latte .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted:hover,html.theme--catppuccin-latte .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-latte .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-white.is-outlined:hover,html.theme--catppuccin-latte .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-white.is-outlined:focus,html.theme--catppuccin-latte .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:hover,html.theme--catppuccin-latte .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:focus,html.theme--catppuccin-latte .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:focus:not(:active),html.theme--catppuccin-latte .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .button.is-black:active,html.theme--catppuccin-latte .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-latte .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted:hover,html.theme--catppuccin-latte .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-outlined:hover,html.theme--catppuccin-latte .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-black.is-outlined:focus,html.theme--catppuccin-latte .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:hover,html.theme--catppuccin-latte .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:focus,html.theme--catppuccin-latte .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:focus:not(:active),html.theme--catppuccin-latte .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .button.is-light:active,html.theme--catppuccin-latte .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-latte .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted:hover,html.theme--catppuccin-latte .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-outlined:hover,html.theme--catppuccin-latte .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-light.is-outlined:focus,html.theme--catppuccin-latte .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark,html.theme--catppuccin-latte .content kbd.button{background-color:#ccd0da;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:hover,html.theme--catppuccin-latte .content kbd.button:hover,html.theme--catppuccin-latte .button.is-dark.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-hovered{background-color:#c5c9d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:focus,html.theme--catppuccin-latte .content kbd.button:focus,html.theme--catppuccin-latte .button.is-dark.is-focused,html.theme--catppuccin-latte .content kbd.button.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:focus:not(:active),html.theme--catppuccin-latte .content kbd.button:focus:not(:active),html.theme--catppuccin-latte .button.is-dark.is-focused:not(:active),html.theme--catppuccin-latte .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .button.is-dark:active,html.theme--catppuccin-latte .content kbd.button:active,html.theme--catppuccin-latte .button.is-dark.is-active,html.theme--catppuccin-latte .content kbd.button.is-active{background-color:#bdc2cf;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark[disabled],html.theme--catppuccin-latte .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button{background-color:#ccd0da;border-color:#ccd0da;box-shadow:none}html.theme--catppuccin-latte .button.is-dark.is-inverted,html.theme--catppuccin-latte .content kbd.button.is-inverted{background-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted:hover,html.theme--catppuccin-latte .content kbd.button.is-inverted:hover,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-inverted[disabled],html.theme--catppuccin-latte .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-loading::after,html.theme--catppuccin-latte .content kbd.button.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-dark.is-outlined,html.theme--catppuccin-latte .content kbd.button.is-outlined{background-color:transparent;border-color:#ccd0da;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-outlined:hover,html.theme--catppuccin-latte .content kbd.button.is-outlined:hover,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-dark.is-outlined:focus,html.theme--catppuccin-latte .content kbd.button.is-outlined:focus,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-focused{background-color:#ccd0da;border-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #ccd0da #ccd0da !important}html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-dark.is-outlined[disabled],html.theme--catppuccin-latte .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-outlined{background-color:transparent;border-color:#ccd0da;box-shadow:none;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ccd0da #ccd0da !important}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-primary,html.theme--catppuccin-latte details.docstring>section>a.button.docs-sourcelink{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:hover,html.theme--catppuccin-latte details.docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-hovered,html.theme--catppuccin-latte details.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:focus,html.theme--catppuccin-latte details.docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-focused,html.theme--catppuccin-latte details.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:focus:not(:active),html.theme--catppuccin-latte details.docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-latte .button.is-primary.is-focused:not(:active),html.theme--catppuccin-latte details.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button.is-primary:active,html.theme--catppuccin-latte details.docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-latte .button.is-primary.is-active,html.theme--catppuccin-latte details.docstring>section>a.button.is-active.docs-sourcelink{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary[disabled],html.theme--catppuccin-latte details.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary,fieldset[disabled] html.theme--catppuccin-latte details.docstring>section>a.button.docs-sourcelink{background-color:#1e66f5;border-color:#1e66f5;box-shadow:none}html.theme--catppuccin-latte .button.is-primary.is-inverted,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted:hover,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-primary.is-inverted[disabled],html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-loading::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-primary.is-outlined,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-outlined:hover,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-latte .button.is-primary.is-outlined:focus,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-primary.is-outlined[disabled],html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-latte details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#1e66f5;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-latte details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-light,html.theme--catppuccin-latte details.docstring>section>a.button.is-light.docs-sourcelink{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .button.is-primary.is-light:hover,html.theme--catppuccin-latte details.docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-light.is-hovered,html.theme--catppuccin-latte details.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#dfe9fe;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-primary.is-light:active,html.theme--catppuccin-latte details.docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-latte .button.is-primary.is-light.is-active,html.theme--catppuccin-latte details.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d3e1fd;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-link{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:hover,html.theme--catppuccin-latte .button.is-link.is-hovered{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:focus,html.theme--catppuccin-latte .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:focus:not(:active),html.theme--catppuccin-latte .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button.is-link:active,html.theme--catppuccin-latte .button.is-link.is-active{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link{background-color:#1e66f5;border-color:#1e66f5;box-shadow:none}html.theme--catppuccin-latte .button.is-link.is-inverted{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted:hover,html.theme--catppuccin-latte .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-link.is-outlined{background-color:transparent;border-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-outlined:hover,html.theme--catppuccin-latte .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-link.is-outlined:focus,html.theme--catppuccin-latte .button.is-link.is-outlined.is-focused{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-outlined{background-color:transparent;border-color:#1e66f5;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-link.is-light{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .button.is-link.is-light:hover,html.theme--catppuccin-latte .button.is-link.is-light.is-hovered{background-color:#dfe9fe;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-link.is-light:active,html.theme--catppuccin-latte .button.is-link.is-light.is-active{background-color:#d3e1fd;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-info{background-color:#179299;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:hover,html.theme--catppuccin-latte .button.is-info.is-hovered{background-color:#15878e;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:focus,html.theme--catppuccin-latte .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:focus:not(:active),html.theme--catppuccin-latte .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .button.is-info:active,html.theme--catppuccin-latte .button.is-info.is-active{background-color:#147d83;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info{background-color:#179299;border-color:#179299;box-shadow:none}html.theme--catppuccin-latte .button.is-info.is-inverted{background-color:#fff;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted:hover,html.theme--catppuccin-latte .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#179299}html.theme--catppuccin-latte .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-info.is-outlined{background-color:transparent;border-color:#179299;color:#179299}html.theme--catppuccin-latte .button.is-info.is-outlined:hover,html.theme--catppuccin-latte .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-info.is-outlined:focus,html.theme--catppuccin-latte .button.is-info.is-outlined.is-focused{background-color:#179299;border-color:#179299;color:#fff}html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #179299 #179299 !important}html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-outlined{background-color:transparent;border-color:#179299;box-shadow:none;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #179299 #179299 !important}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-info.is-light{background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .button.is-info.is-light:hover,html.theme--catppuccin-latte .button.is-info.is-light.is-hovered{background-color:#e2f9fb;border-color:transparent;color:#1cb2ba}html.theme--catppuccin-latte .button.is-info.is-light:active,html.theme--catppuccin-latte .button.is-info.is-light.is-active{background-color:#d7f7f9;border-color:transparent;color:#1cb2ba}html.theme--catppuccin-latte .button.is-success{background-color:#40a02b;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:hover,html.theme--catppuccin-latte .button.is-success.is-hovered{background-color:#3c9628;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:focus,html.theme--catppuccin-latte .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:focus:not(:active),html.theme--catppuccin-latte .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .button.is-success:active,html.theme--catppuccin-latte .button.is-success.is-active{background-color:#388c26;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success{background-color:#40a02b;border-color:#40a02b;box-shadow:none}html.theme--catppuccin-latte .button.is-success.is-inverted{background-color:#fff;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted:hover,html.theme--catppuccin-latte .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-success.is-outlined{background-color:transparent;border-color:#40a02b;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-outlined:hover,html.theme--catppuccin-latte .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-success.is-outlined:focus,html.theme--catppuccin-latte .button.is-success.is-outlined.is-focused{background-color:#40a02b;border-color:#40a02b;color:#fff}html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #40a02b #40a02b !important}html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-outlined{background-color:transparent;border-color:#40a02b;box-shadow:none;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #40a02b #40a02b !important}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-success.is-light{background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .button.is-success.is-light:hover,html.theme--catppuccin-latte .button.is-success.is-light.is-hovered{background-color:#e8f8e5;border-color:transparent;color:#40a12b}html.theme--catppuccin-latte .button.is-success.is-light:active,html.theme--catppuccin-latte .button.is-success.is-light.is-active{background-color:#e0f5db;border-color:transparent;color:#40a12b}html.theme--catppuccin-latte .button.is-warning{background-color:#df8e1d;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:hover,html.theme--catppuccin-latte .button.is-warning.is-hovered{background-color:#d4871c;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:focus,html.theme--catppuccin-latte .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:focus:not(:active),html.theme--catppuccin-latte .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .button.is-warning:active,html.theme--catppuccin-latte .button.is-warning.is-active{background-color:#c8801a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning{background-color:#df8e1d;border-color:#df8e1d;box-shadow:none}html.theme--catppuccin-latte .button.is-warning.is-inverted{background-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted:hover,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-warning.is-outlined{background-color:transparent;border-color:#df8e1d;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-outlined:hover,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-warning.is-outlined:focus,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-focused{background-color:#df8e1d;border-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #df8e1d #df8e1d !important}html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-outlined{background-color:transparent;border-color:#df8e1d;box-shadow:none;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #df8e1d #df8e1d !important}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-light{background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .button.is-warning.is-light:hover,html.theme--catppuccin-latte .button.is-warning.is-light.is-hovered{background-color:#fbf1e2;border-color:transparent;color:#9e6515}html.theme--catppuccin-latte .button.is-warning.is-light:active,html.theme--catppuccin-latte .button.is-warning.is-light.is-active{background-color:#faebd6;border-color:transparent;color:#9e6515}html.theme--catppuccin-latte .button.is-danger{background-color:#d20f39;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:hover,html.theme--catppuccin-latte .button.is-danger.is-hovered{background-color:#c60e36;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:focus,html.theme--catppuccin-latte .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:focus:not(:active),html.theme--catppuccin-latte .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .button.is-danger:active,html.theme--catppuccin-latte .button.is-danger.is-active{background-color:#ba0d33;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger{background-color:#d20f39;border-color:#d20f39;box-shadow:none}html.theme--catppuccin-latte .button.is-danger.is-inverted{background-color:#fff;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted:hover,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-danger.is-outlined{background-color:transparent;border-color:#d20f39;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-outlined:hover,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-danger.is-outlined:focus,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-focused{background-color:#d20f39;border-color:#d20f39;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #d20f39 #d20f39 !important}html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-outlined{background-color:transparent;border-color:#d20f39;box-shadow:none;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #d20f39 #d20f39 !important}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-light{background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .button.is-danger.is-light:hover,html.theme--catppuccin-latte .button.is-danger.is-light.is-hovered{background-color:#fde0e6;border-color:transparent;color:#e9113f}html.theme--catppuccin-latte .button.is-danger.is-light:active,html.theme--catppuccin-latte .button.is-danger.is-light.is-active{background-color:#fcd4dd;border-color:transparent;color:#e9113f}html.theme--catppuccin-latte .button.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-latte .button.is-small:not(.is-rounded),html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-latte .button.is-normal{font-size:1rem}html.theme--catppuccin-latte .button.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .button.is-large{font-size:1.5rem}html.theme--catppuccin-latte .button[disabled],fieldset[disabled] html.theme--catppuccin-latte .button{background-color:#9ca0b0;border-color:#acb0be;box-shadow:none;opacity:.5}html.theme--catppuccin-latte .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-latte .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-latte .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-latte .button.is-static{background-color:#e6e9ef;border-color:#acb0be;color:#8c8fa1;box-shadow:none;pointer-events:none}html.theme--catppuccin-latte .button.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-latte .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-latte .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-latte .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-latte .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-latte .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-latte .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-latte .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-latte .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-latte .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-latte .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-latte .buttons.has-addons .button:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-latte .buttons.has-addons .button:focus,html.theme--catppuccin-latte .buttons.has-addons .button.is-focused,html.theme--catppuccin-latte .buttons.has-addons .button:active,html.theme--catppuccin-latte .buttons.has-addons .button.is-active,html.theme--catppuccin-latte .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-latte .buttons.has-addons .button:focus:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-latte .buttons.has-addons .button:active:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-latte .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .buttons.is-centered{justify-content:center}html.theme--catppuccin-latte .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-latte .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-latte .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .button.is-responsive.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-latte .button.is-responsive,html.theme--catppuccin-latte .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-latte .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-latte .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .button.is-responsive.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-latte .button.is-responsive,html.theme--catppuccin-latte .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-latte .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-latte .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-latte .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-latte .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-latte .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-latte .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-latte .content li+li{margin-top:0.25em}html.theme--catppuccin-latte .content p:not(:last-child),html.theme--catppuccin-latte .content dl:not(:last-child),html.theme--catppuccin-latte .content ol:not(:last-child),html.theme--catppuccin-latte .content ul:not(:last-child),html.theme--catppuccin-latte .content blockquote:not(:last-child),html.theme--catppuccin-latte .content pre:not(:last-child),html.theme--catppuccin-latte .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-latte .content h1,html.theme--catppuccin-latte .content h2,html.theme--catppuccin-latte .content h3,html.theme--catppuccin-latte .content h4,html.theme--catppuccin-latte .content h5,html.theme--catppuccin-latte .content h6{color:#4c4f69;font-weight:600;line-height:1.125}html.theme--catppuccin-latte .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-latte .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-latte .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-latte .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-latte .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-latte .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-latte .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-latte .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-latte .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-latte .content blockquote{background-color:#e6e9ef;border-left:5px solid #acb0be;padding:1.25em 1.5em}html.theme--catppuccin-latte .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-latte .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-latte .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-latte .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-latte .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-latte .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-latte .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-latte .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-latte .content ul ul ul{list-style-type:square}html.theme--catppuccin-latte .content dd{margin-left:2em}html.theme--catppuccin-latte .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-latte .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-latte .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-latte .content figure img{display:inline-block}html.theme--catppuccin-latte .content figure figcaption{font-style:italic}html.theme--catppuccin-latte .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-latte .content sup,html.theme--catppuccin-latte .content sub{font-size:75%}html.theme--catppuccin-latte .content table{width:100%}html.theme--catppuccin-latte .content table td,html.theme--catppuccin-latte .content table th{border:1px solid #acb0be;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-latte .content table th{color:#41445a}html.theme--catppuccin-latte .content table th:not([align]){text-align:inherit}html.theme--catppuccin-latte .content table thead td,html.theme--catppuccin-latte .content table thead th{border-width:0 0 2px;color:#41445a}html.theme--catppuccin-latte .content table tfoot td,html.theme--catppuccin-latte .content table tfoot th{border-width:2px 0 0;color:#41445a}html.theme--catppuccin-latte .content table tbody tr:last-child td,html.theme--catppuccin-latte .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-latte .content .tabs li+li{margin-top:0}html.theme--catppuccin-latte .content.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-latte .content.is-normal{font-size:1rem}html.theme--catppuccin-latte .content.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .content.is-large{font-size:1.5rem}html.theme--catppuccin-latte .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-latte .icon.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-latte .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-latte .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-latte .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-latte .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-latte .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-latte div.icon-text{display:flex}html.theme--catppuccin-latte .image,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-latte .image img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-latte .image img.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-latte .image.is-fullwidth,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-latte .image.is-square img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-latte .image.is-square .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-latte .image.is-1by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-latte .image.is-1by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-latte .image.is-5by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-latte .image.is-5by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-latte .image.is-4by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-latte .image.is-4by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-latte .image.is-3by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-latte .image.is-5by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-latte .image.is-5by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-latte .image.is-16by9 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-latte .image.is-16by9 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-latte .image.is-2by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-latte .image.is-2by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-latte .image.is-3by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-latte .image.is-3by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-latte .image.is-4by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-latte .image.is-4by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-latte .image.is-3by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-latte .image.is-3by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-latte .image.is-2by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-latte .image.is-2by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-latte .image.is-3by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-latte .image.is-9by16 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-latte .image.is-9by16 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-latte .image.is-1by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-latte .image.is-1by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-latte .image.is-1by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-latte .image.is-1by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-latte .image.is-square,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-latte .image.is-1by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-latte .image.is-5by4,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-latte .image.is-4by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-latte .image.is-3by2,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-latte .image.is-5by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-latte .image.is-16by9,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-latte .image.is-2by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-latte .image.is-3by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-latte .image.is-4by5,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-latte .image.is-3by4,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-latte .image.is-2by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-latte .image.is-3by5,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-latte .image.is-9by16,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-latte .image.is-1by2,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-latte .image.is-1by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-latte .image.is-16x16,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-latte .image.is-24x24,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-latte .image.is-32x32,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-latte .image.is-48x48,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-latte .image.is-64x64,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-latte .image.is-96x96,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-latte .image.is-128x128,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-latte .notification{background-color:#e6e9ef;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-latte .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-latte .notification strong{color:currentColor}html.theme--catppuccin-latte .notification code,html.theme--catppuccin-latte .notification pre{background:#fff}html.theme--catppuccin-latte .notification pre code{background:transparent}html.theme--catppuccin-latte .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-latte .notification .title,html.theme--catppuccin-latte .notification .subtitle,html.theme--catppuccin-latte .notification .content{color:currentColor}html.theme--catppuccin-latte .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .notification.is-dark,html.theme--catppuccin-latte .content kbd.notification{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .notification.is-primary,html.theme--catppuccin-latte details.docstring>section>a.notification.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .notification.is-primary.is-light,html.theme--catppuccin-latte details.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .notification.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .notification.is-link.is-light{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .notification.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .notification.is-info.is-light{background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .notification.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .notification.is-success.is-light{background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .notification.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .notification.is-warning.is-light{background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .notification.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .notification.is-danger.is-light{background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-latte .progress::-webkit-progress-bar{background-color:#bcc0cc}html.theme--catppuccin-latte .progress::-webkit-progress-value{background-color:#8c8fa1}html.theme--catppuccin-latte .progress::-moz-progress-bar{background-color:#8c8fa1}html.theme--catppuccin-latte .progress::-ms-fill{background-color:#8c8fa1;border:none}html.theme--catppuccin-latte .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-latte .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-latte .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-latte .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-latte .content kbd.progress::-webkit-progress-value{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-latte .content kbd.progress::-moz-progress-bar{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark::-ms-fill,html.theme--catppuccin-latte .content kbd.progress::-ms-fill{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark:indeterminate,html.theme--catppuccin-latte .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #ccd0da 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-latte details.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-latte details.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary::-ms-fill,html.theme--catppuccin-latte details.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary:indeterminate,html.theme--catppuccin-latte details.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #1e66f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-link::-webkit-progress-value{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link::-moz-progress-bar{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link::-ms-fill{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1e66f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-info::-webkit-progress-value{background-color:#179299}html.theme--catppuccin-latte .progress.is-info::-moz-progress-bar{background-color:#179299}html.theme--catppuccin-latte .progress.is-info::-ms-fill{background-color:#179299}html.theme--catppuccin-latte .progress.is-info:indeterminate{background-image:linear-gradient(to right, #179299 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-success::-webkit-progress-value{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success::-moz-progress-bar{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success::-ms-fill{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success:indeterminate{background-image:linear-gradient(to right, #40a02b 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-warning::-webkit-progress-value{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning::-moz-progress-bar{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning::-ms-fill{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #df8e1d 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-danger::-webkit-progress-value{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger::-moz-progress-bar{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger::-ms-fill{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #d20f39 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#bcc0cc;background-image:linear-gradient(to right, #4c4f69 30%, #bcc0cc 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-latte .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-latte .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-latte .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-latte .progress.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-latte .progress.is-medium{height:1.25rem}html.theme--catppuccin-latte .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-latte .table{background-color:#bcc0cc;color:#4c4f69}html.theme--catppuccin-latte .table td,html.theme--catppuccin-latte .table th{border:1px solid #acb0be;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-latte .table td.is-white,html.theme--catppuccin-latte .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .table td.is-black,html.theme--catppuccin-latte .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .table td.is-light,html.theme--catppuccin-latte .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .table td.is-dark,html.theme--catppuccin-latte .table th.is-dark{background-color:#ccd0da;border-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .table td.is-primary,html.theme--catppuccin-latte .table th.is-primary{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-link,html.theme--catppuccin-latte .table th.is-link{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-info,html.theme--catppuccin-latte .table th.is-info{background-color:#179299;border-color:#179299;color:#fff}html.theme--catppuccin-latte .table td.is-success,html.theme--catppuccin-latte .table th.is-success{background-color:#40a02b;border-color:#40a02b;color:#fff}html.theme--catppuccin-latte .table td.is-warning,html.theme--catppuccin-latte .table th.is-warning{background-color:#df8e1d;border-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .table td.is-danger,html.theme--catppuccin-latte .table th.is-danger{background-color:#d20f39;border-color:#d20f39;color:#fff}html.theme--catppuccin-latte .table td.is-narrow,html.theme--catppuccin-latte .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-latte .table td.is-selected,html.theme--catppuccin-latte .table th.is-selected{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-selected a,html.theme--catppuccin-latte .table td.is-selected strong,html.theme--catppuccin-latte .table th.is-selected a,html.theme--catppuccin-latte .table th.is-selected strong{color:currentColor}html.theme--catppuccin-latte .table td.is-vcentered,html.theme--catppuccin-latte .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-latte .table th{color:#41445a}html.theme--catppuccin-latte .table th:not([align]){text-align:left}html.theme--catppuccin-latte .table tr.is-selected{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table tr.is-selected a,html.theme--catppuccin-latte .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-latte .table tr.is-selected td,html.theme--catppuccin-latte .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-latte .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table thead td,html.theme--catppuccin-latte .table thead th{border-width:0 0 2px;color:#41445a}html.theme--catppuccin-latte .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table tfoot td,html.theme--catppuccin-latte .table tfoot th{border-width:2px 0 0;color:#41445a}html.theme--catppuccin-latte .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table tbody tr:last-child td,html.theme--catppuccin-latte .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-latte .table.is-bordered td,html.theme--catppuccin-latte .table.is-bordered th{border-width:1px}html.theme--catppuccin-latte .table.is-bordered tr:last-child td,html.theme--catppuccin-latte .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-latte .table.is-fullwidth{width:100%}html.theme--catppuccin-latte .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#ccd0da}html.theme--catppuccin-latte .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#ccd0da}html.theme--catppuccin-latte .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#d2d5de}html.theme--catppuccin-latte .table.is-narrow td,html.theme--catppuccin-latte .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-latte .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#ccd0da}html.theme--catppuccin-latte .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-latte .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .tags .tag,html.theme--catppuccin-latte .tags .content kbd,html.theme--catppuccin-latte .content .tags kbd,html.theme--catppuccin-latte .tags details.docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-latte .tags .tag:not(:last-child),html.theme--catppuccin-latte .tags .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags kbd:not(:last-child),html.theme--catppuccin-latte .tags details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-latte .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-latte .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-latte .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .tags.are-medium details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-latte .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .tags.are-large details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-latte .tags.is-centered{justify-content:center}html.theme--catppuccin-latte .tags.is-centered .tag,html.theme--catppuccin-latte .tags.is-centered .content kbd,html.theme--catppuccin-latte .content .tags.is-centered kbd,html.theme--catppuccin-latte .tags.is-centered details.docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-latte .tags.is-right{justify-content:flex-end}html.theme--catppuccin-latte .tags.is-right .tag:not(:first-child),html.theme--catppuccin-latte .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-latte .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-latte .tags.is-right details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-latte .tags.is-right .tag:not(:last-child),html.theme--catppuccin-latte .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-latte .tags.is-right details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-latte .tags.has-addons .tag,html.theme--catppuccin-latte .tags.has-addons .content kbd,html.theme--catppuccin-latte .content .tags.has-addons kbd,html.theme--catppuccin-latte .tags.has-addons details.docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-latte .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-latte .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-latte .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-latte .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-latte .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-latte .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-latte .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-latte .tag:not(body),html.theme--catppuccin-latte .content kbd:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#e6e9ef;border-radius:.4em;color:#4c4f69;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-latte .tag:not(body) .delete,html.theme--catppuccin-latte .content kbd:not(body) .delete,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-latte .tag.is-white:not(body),html.theme--catppuccin-latte .content kbd.is-white:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .tag.is-black:not(body),html.theme--catppuccin-latte .content kbd.is-black:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .tag.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-light:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .tag.is-dark:not(body),html.theme--catppuccin-latte .content kbd:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-latte .content details.docstring>section>kbd:not(body){background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .tag.is-primary:not(body),html.theme--catppuccin-latte .content kbd.is-primary:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink:not(body){background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .tag.is-primary.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .tag.is-link:not(body),html.theme--catppuccin-latte .content kbd.is-link:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .tag.is-link.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-link.is-light:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .tag.is-info:not(body),html.theme--catppuccin-latte .content kbd.is-info:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#179299;color:#fff}html.theme--catppuccin-latte .tag.is-info.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-info.is-light:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .tag.is-success:not(body),html.theme--catppuccin-latte .content kbd.is-success:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .tag.is-success.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-success.is-light:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .tag.is-warning:not(body),html.theme--catppuccin-latte .content kbd.is-warning:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .tag.is-warning.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .tag.is-danger:not(body),html.theme--catppuccin-latte .content kbd.is-danger:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .tag.is-danger.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .tag.is-normal:not(body),html.theme--catppuccin-latte .content kbd.is-normal:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-latte .tag.is-medium:not(body),html.theme--catppuccin-latte .content kbd.is-medium:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-latte .tag.is-large:not(body),html.theme--catppuccin-latte .content kbd.is-large:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-latte .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-latte .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-latte .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-latte .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-latte .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-latte .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-latte .tag.is-delete:not(body),html.theme--catppuccin-latte .content kbd.is-delete:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-latte .tag.is-delete:not(body)::before,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::before,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-latte .tag.is-delete:not(body)::after,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::after,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-latte .tag.is-delete:not(body)::before,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::before,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-latte .tag.is-delete:not(body)::after,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::after,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-latte .tag.is-delete:not(body):hover,html.theme--catppuccin-latte .content kbd.is-delete:not(body):hover,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-latte .tag.is-delete:not(body):focus,html.theme--catppuccin-latte .content kbd.is-delete:not(body):focus,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#d6dbe5}html.theme--catppuccin-latte .tag.is-delete:not(body):active,html.theme--catppuccin-latte .content kbd.is-delete:not(body):active,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#c7cedb}html.theme--catppuccin-latte .tag.is-rounded:not(body),html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-latte .content kbd.is-rounded:not(body),html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-latte a.tag:hover,html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-latte .title,html.theme--catppuccin-latte .subtitle{word-break:break-word}html.theme--catppuccin-latte .title em,html.theme--catppuccin-latte .title span,html.theme--catppuccin-latte .subtitle em,html.theme--catppuccin-latte .subtitle span{font-weight:inherit}html.theme--catppuccin-latte .title sub,html.theme--catppuccin-latte .subtitle sub{font-size:.75em}html.theme--catppuccin-latte .title sup,html.theme--catppuccin-latte .subtitle sup{font-size:.75em}html.theme--catppuccin-latte .title .tag,html.theme--catppuccin-latte .title .content kbd,html.theme--catppuccin-latte .content .title kbd,html.theme--catppuccin-latte .title details.docstring>section>a.docs-sourcelink,html.theme--catppuccin-latte .subtitle .tag,html.theme--catppuccin-latte .subtitle .content kbd,html.theme--catppuccin-latte .content .subtitle kbd,html.theme--catppuccin-latte .subtitle details.docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-latte .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-latte .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-latte .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-latte .title.is-1{font-size:3rem}html.theme--catppuccin-latte .title.is-2{font-size:2.5rem}html.theme--catppuccin-latte .title.is-3{font-size:2rem}html.theme--catppuccin-latte .title.is-4{font-size:1.5rem}html.theme--catppuccin-latte .title.is-5{font-size:1.25rem}html.theme--catppuccin-latte .title.is-6{font-size:1rem}html.theme--catppuccin-latte .title.is-7{font-size:.75rem}html.theme--catppuccin-latte .subtitle{color:#9ca0b0;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-latte .subtitle strong{color:#9ca0b0;font-weight:600}html.theme--catppuccin-latte .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-latte .subtitle.is-1{font-size:3rem}html.theme--catppuccin-latte .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-latte .subtitle.is-3{font-size:2rem}html.theme--catppuccin-latte .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-latte .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-latte .subtitle.is-6{font-size:1rem}html.theme--catppuccin-latte .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-latte .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-latte .number{align-items:center;background-color:#e6e9ef;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{background-color:#eff1f5;border-color:#acb0be;border-radius:.4em;color:#8c8fa1}html.theme--catppuccin-latte .select select::-moz-placeholder,html.theme--catppuccin-latte .textarea::-moz-placeholder,html.theme--catppuccin-latte .input::-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-latte .select select::-webkit-input-placeholder,html.theme--catppuccin-latte .textarea::-webkit-input-placeholder,html.theme--catppuccin-latte .input::-webkit-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:-moz-placeholder,html.theme--catppuccin-latte .textarea:-moz-placeholder,html.theme--catppuccin-latte .input:-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:-ms-input-placeholder,html.theme--catppuccin-latte .textarea:-ms-input-placeholder,html.theme--catppuccin-latte .input:-ms-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:hover,html.theme--catppuccin-latte .textarea:hover,html.theme--catppuccin-latte .input:hover,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-latte .select select.is-hovered,html.theme--catppuccin-latte .is-hovered.textarea,html.theme--catppuccin-latte .is-hovered.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#9ca0b0}html.theme--catppuccin-latte .select select:focus,html.theme--catppuccin-latte .textarea:focus,html.theme--catppuccin-latte .input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-latte .select select.is-focused,html.theme--catppuccin-latte .is-focused.textarea,html.theme--catppuccin-latte .is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .select select:active,html.theme--catppuccin-latte .textarea:active,html.theme--catppuccin-latte .input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-latte .select select.is-active,html.theme--catppuccin-latte .is-active.textarea,html.theme--catppuccin-latte .is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1e66f5;box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select select[disabled],html.theme--catppuccin-latte .textarea[disabled],html.theme--catppuccin-latte .input[disabled],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-latte .select select,fieldset[disabled] html.theme--catppuccin-latte .textarea,fieldset[disabled] html.theme--catppuccin-latte .input,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{background-color:#9ca0b0;border-color:#e6e9ef;box-shadow:none;color:#616587}html.theme--catppuccin-latte .select select[disabled]::-moz-placeholder,html.theme--catppuccin-latte .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-latte .input[disabled]::-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]:-moz-placeholder,html.theme--catppuccin-latte .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-latte .input[disabled]:-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-latte .textarea[readonly],html.theme--catppuccin-latte .input[readonly],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-latte .is-white.textarea,html.theme--catppuccin-latte .is-white.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-latte .is-white.textarea:focus,html.theme--catppuccin-latte .is-white.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-latte .is-white.is-focused.textarea,html.theme--catppuccin-latte .is-white.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-white.textarea:active,html.theme--catppuccin-latte .is-white.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-latte .is-white.is-active.textarea,html.theme--catppuccin-latte .is-white.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .is-black.textarea,html.theme--catppuccin-latte .is-black.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-latte .is-black.textarea:focus,html.theme--catppuccin-latte .is-black.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-latte .is-black.is-focused.textarea,html.theme--catppuccin-latte .is-black.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-black.textarea:active,html.theme--catppuccin-latte .is-black.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-latte .is-black.is-active.textarea,html.theme--catppuccin-latte .is-black.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .is-light.textarea,html.theme--catppuccin-latte .is-light.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-latte .is-light.textarea:focus,html.theme--catppuccin-latte .is-light.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-latte .is-light.is-focused.textarea,html.theme--catppuccin-latte .is-light.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-light.textarea:active,html.theme--catppuccin-latte .is-light.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-latte .is-light.is-active.textarea,html.theme--catppuccin-latte .is-light.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .is-dark.textarea,html.theme--catppuccin-latte .content kbd.textarea,html.theme--catppuccin-latte .is-dark.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-latte .content kbd.input{border-color:#ccd0da}html.theme--catppuccin-latte .is-dark.textarea:focus,html.theme--catppuccin-latte .content kbd.textarea:focus,html.theme--catppuccin-latte .is-dark.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-latte .content kbd.input:focus,html.theme--catppuccin-latte .is-dark.is-focused.textarea,html.theme--catppuccin-latte .content kbd.is-focused.textarea,html.theme--catppuccin-latte .is-dark.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .content kbd.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-dark.textarea:active,html.theme--catppuccin-latte .content kbd.textarea:active,html.theme--catppuccin-latte .is-dark.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-latte .content kbd.input:active,html.theme--catppuccin-latte .is-dark.is-active.textarea,html.theme--catppuccin-latte .content kbd.is-active.textarea,html.theme--catppuccin-latte .is-dark.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .content kbd.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .is-primary.textarea,html.theme--catppuccin-latte details.docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-latte details.docstring>section>a.input.docs-sourcelink{border-color:#1e66f5}html.theme--catppuccin-latte .is-primary.textarea:focus,html.theme--catppuccin-latte details.docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-latte .is-primary.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-latte details.docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-latte .is-primary.is-focused.textarea,html.theme--catppuccin-latte details.docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte details.docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-latte .is-primary.textarea:active,html.theme--catppuccin-latte details.docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-latte .is-primary.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-latte details.docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-latte .is-primary.is-active.textarea,html.theme--catppuccin-latte details.docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte details.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .is-link.textarea,html.theme--catppuccin-latte .is-link.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1e66f5}html.theme--catppuccin-latte .is-link.textarea:focus,html.theme--catppuccin-latte .is-link.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-latte .is-link.is-focused.textarea,html.theme--catppuccin-latte .is-link.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-link.textarea:active,html.theme--catppuccin-latte .is-link.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-latte .is-link.is-active.textarea,html.theme--catppuccin-latte .is-link.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .is-info.textarea,html.theme--catppuccin-latte .is-info.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#179299}html.theme--catppuccin-latte .is-info.textarea:focus,html.theme--catppuccin-latte .is-info.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-latte .is-info.is-focused.textarea,html.theme--catppuccin-latte .is-info.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-info.textarea:active,html.theme--catppuccin-latte .is-info.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-latte .is-info.is-active.textarea,html.theme--catppuccin-latte .is-info.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .is-success.textarea,html.theme--catppuccin-latte .is-success.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#40a02b}html.theme--catppuccin-latte .is-success.textarea:focus,html.theme--catppuccin-latte .is-success.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-latte .is-success.is-focused.textarea,html.theme--catppuccin-latte .is-success.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-success.textarea:active,html.theme--catppuccin-latte .is-success.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-latte .is-success.is-active.textarea,html.theme--catppuccin-latte .is-success.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .is-warning.textarea,html.theme--catppuccin-latte .is-warning.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#df8e1d}html.theme--catppuccin-latte .is-warning.textarea:focus,html.theme--catppuccin-latte .is-warning.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-latte .is-warning.is-focused.textarea,html.theme--catppuccin-latte .is-warning.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-warning.textarea:active,html.theme--catppuccin-latte .is-warning.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-latte .is-warning.is-active.textarea,html.theme--catppuccin-latte .is-warning.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .is-danger.textarea,html.theme--catppuccin-latte .is-danger.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#d20f39}html.theme--catppuccin-latte .is-danger.textarea:focus,html.theme--catppuccin-latte .is-danger.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-latte .is-danger.is-focused.textarea,html.theme--catppuccin-latte .is-danger.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-danger.textarea:active,html.theme--catppuccin-latte .is-danger.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-latte .is-danger.is-active.textarea,html.theme--catppuccin-latte .is-danger.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .is-small.textarea,html.theme--catppuccin-latte .is-small.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-latte .is-medium.textarea,html.theme--catppuccin-latte .is-medium.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .is-large.textarea,html.theme--catppuccin-latte .is-large.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-latte .is-fullwidth.textarea,html.theme--catppuccin-latte .is-fullwidth.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-latte .is-inline.textarea,html.theme--catppuccin-latte .is-inline.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-latte .input.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-latte .input.is-static,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-latte .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-latte .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-latte .textarea[rows]{height:initial}html.theme--catppuccin-latte .textarea.has-fixed-size{resize:none}html.theme--catppuccin-latte .radio,html.theme--catppuccin-latte .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-latte .radio input,html.theme--catppuccin-latte .checkbox input{cursor:pointer}html.theme--catppuccin-latte .radio:hover,html.theme--catppuccin-latte .checkbox:hover{color:#04a5e5}html.theme--catppuccin-latte .radio[disabled],html.theme--catppuccin-latte .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-latte .radio,fieldset[disabled] html.theme--catppuccin-latte .checkbox,html.theme--catppuccin-latte .radio input[disabled],html.theme--catppuccin-latte .checkbox input[disabled]{color:#616587;cursor:not-allowed}html.theme--catppuccin-latte .radio+.radio{margin-left:.5em}html.theme--catppuccin-latte .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-latte .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading)::after{border-color:#1e66f5;right:1.125em;z-index:4}html.theme--catppuccin-latte .select.is-rounded select,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-latte .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-latte .select select::-ms-expand{display:none}html.theme--catppuccin-latte .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-latte .select select:hover{border-color:#e6e9ef}html.theme--catppuccin-latte .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-latte .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-latte .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#04a5e5}html.theme--catppuccin-latte .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-latte .select.is-white select{border-color:#fff}html.theme--catppuccin-latte .select.is-white select:hover,html.theme--catppuccin-latte .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-latte .select.is-white select:focus,html.theme--catppuccin-latte .select.is-white select.is-focused,html.theme--catppuccin-latte .select.is-white select:active,html.theme--catppuccin-latte .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-latte .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-latte .select.is-black select:hover,html.theme--catppuccin-latte .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-latte .select.is-black select:focus,html.theme--catppuccin-latte .select.is-black select.is-focused,html.theme--catppuccin-latte .select.is-black select:active,html.theme--catppuccin-latte .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-latte .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-latte .select.is-light select:hover,html.theme--catppuccin-latte .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-latte .select.is-light select:focus,html.theme--catppuccin-latte .select.is-light select.is-focused,html.theme--catppuccin-latte .select.is-light select:active,html.theme--catppuccin-latte .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .select.is-dark:not(:hover)::after,html.theme--catppuccin-latte .content kbd.select:not(:hover)::after{border-color:#ccd0da}html.theme--catppuccin-latte .select.is-dark select,html.theme--catppuccin-latte .content kbd.select select{border-color:#ccd0da}html.theme--catppuccin-latte .select.is-dark select:hover,html.theme--catppuccin-latte .content kbd.select select:hover,html.theme--catppuccin-latte .select.is-dark select.is-hovered,html.theme--catppuccin-latte .content kbd.select select.is-hovered{border-color:#bdc2cf}html.theme--catppuccin-latte .select.is-dark select:focus,html.theme--catppuccin-latte .content kbd.select select:focus,html.theme--catppuccin-latte .select.is-dark select.is-focused,html.theme--catppuccin-latte .content kbd.select select.is-focused,html.theme--catppuccin-latte .select.is-dark select:active,html.theme--catppuccin-latte .content kbd.select select:active,html.theme--catppuccin-latte .select.is-dark select.is-active,html.theme--catppuccin-latte .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .select.is-primary:not(:hover)::after,html.theme--catppuccin-latte details.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-primary select,html.theme--catppuccin-latte details.docstring>section>a.select.docs-sourcelink select{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-primary select:hover,html.theme--catppuccin-latte details.docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-latte .select.is-primary select.is-hovered,html.theme--catppuccin-latte details.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#0b57ef}html.theme--catppuccin-latte .select.is-primary select:focus,html.theme--catppuccin-latte details.docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-latte .select.is-primary select.is-focused,html.theme--catppuccin-latte details.docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-latte .select.is-primary select:active,html.theme--catppuccin-latte details.docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-latte .select.is-primary select.is-active,html.theme--catppuccin-latte details.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select.is-link:not(:hover)::after{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-link select{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-link select:hover,html.theme--catppuccin-latte .select.is-link select.is-hovered{border-color:#0b57ef}html.theme--catppuccin-latte .select.is-link select:focus,html.theme--catppuccin-latte .select.is-link select.is-focused,html.theme--catppuccin-latte .select.is-link select:active,html.theme--catppuccin-latte .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select.is-info:not(:hover)::after{border-color:#179299}html.theme--catppuccin-latte .select.is-info select{border-color:#179299}html.theme--catppuccin-latte .select.is-info select:hover,html.theme--catppuccin-latte .select.is-info select.is-hovered{border-color:#147d83}html.theme--catppuccin-latte .select.is-info select:focus,html.theme--catppuccin-latte .select.is-info select.is-focused,html.theme--catppuccin-latte .select.is-info select:active,html.theme--catppuccin-latte .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .select.is-success:not(:hover)::after{border-color:#40a02b}html.theme--catppuccin-latte .select.is-success select{border-color:#40a02b}html.theme--catppuccin-latte .select.is-success select:hover,html.theme--catppuccin-latte .select.is-success select.is-hovered{border-color:#388c26}html.theme--catppuccin-latte .select.is-success select:focus,html.theme--catppuccin-latte .select.is-success select.is-focused,html.theme--catppuccin-latte .select.is-success select:active,html.theme--catppuccin-latte .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .select.is-warning:not(:hover)::after{border-color:#df8e1d}html.theme--catppuccin-latte .select.is-warning select{border-color:#df8e1d}html.theme--catppuccin-latte .select.is-warning select:hover,html.theme--catppuccin-latte .select.is-warning select.is-hovered{border-color:#c8801a}html.theme--catppuccin-latte .select.is-warning select:focus,html.theme--catppuccin-latte .select.is-warning select.is-focused,html.theme--catppuccin-latte .select.is-warning select:active,html.theme--catppuccin-latte .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .select.is-danger:not(:hover)::after{border-color:#d20f39}html.theme--catppuccin-latte .select.is-danger select{border-color:#d20f39}html.theme--catppuccin-latte .select.is-danger select:hover,html.theme--catppuccin-latte .select.is-danger select.is-hovered{border-color:#ba0d33}html.theme--catppuccin-latte .select.is-danger select:focus,html.theme--catppuccin-latte .select.is-danger select.is-focused,html.theme--catppuccin-latte .select.is-danger select:active,html.theme--catppuccin-latte .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .select.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-latte .select.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .select.is-large{font-size:1.5rem}html.theme--catppuccin-latte .select.is-disabled::after{border-color:#616587 !important;opacity:0.5}html.theme--catppuccin-latte .select.is-fullwidth{width:100%}html.theme--catppuccin-latte .select.is-fullwidth select{width:100%}html.theme--catppuccin-latte .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-latte .select.is-loading.is-small:after,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-latte .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-latte .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-latte .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-latte .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:hover .file-cta,html.theme--catppuccin-latte .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:focus .file-cta,html.theme--catppuccin-latte .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:active .file-cta,html.theme--catppuccin-latte .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-black:hover .file-cta,html.theme--catppuccin-latte .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-black:focus .file-cta,html.theme--catppuccin-latte .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-latte .file.is-black:active .file-cta,html.theme--catppuccin-latte .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:hover .file-cta,html.theme--catppuccin-latte .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:focus .file-cta,html.theme--catppuccin-latte .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:active .file-cta,html.theme--catppuccin-latte .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark .file-cta,html.theme--catppuccin-latte .content kbd.file .file-cta{background-color:#ccd0da;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:hover .file-cta,html.theme--catppuccin-latte .content kbd.file:hover .file-cta,html.theme--catppuccin-latte .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-latte .content kbd.file.is-hovered .file-cta{background-color:#c5c9d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:focus .file-cta,html.theme--catppuccin-latte .content kbd.file:focus .file-cta,html.theme--catppuccin-latte .file.is-dark.is-focused .file-cta,html.theme--catppuccin-latte .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(204,208,218,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:active .file-cta,html.theme--catppuccin-latte .content kbd.file:active .file-cta,html.theme--catppuccin-latte .file.is-dark.is-active .file-cta,html.theme--catppuccin-latte .content kbd.file.is-active .file-cta{background-color:#bdc2cf;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-primary .file-cta,html.theme--catppuccin-latte details.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-primary:hover .file-cta,html.theme--catppuccin-latte details.docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-latte .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-latte details.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-primary:focus .file-cta,html.theme--catppuccin-latte details.docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-latte .file.is-primary.is-focused .file-cta,html.theme--catppuccin-latte details.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(30,102,245,0.25);color:#fff}html.theme--catppuccin-latte .file.is-primary:active .file-cta,html.theme--catppuccin-latte details.docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-latte .file.is-primary.is-active .file-cta,html.theme--catppuccin-latte details.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link .file-cta{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link:hover .file-cta,html.theme--catppuccin-latte .file.is-link.is-hovered .file-cta{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link:focus .file-cta,html.theme--catppuccin-latte .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(30,102,245,0.25);color:#fff}html.theme--catppuccin-latte .file.is-link:active .file-cta,html.theme--catppuccin-latte .file.is-link.is-active .file-cta{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info .file-cta{background-color:#179299;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info:hover .file-cta,html.theme--catppuccin-latte .file.is-info.is-hovered .file-cta{background-color:#15878e;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info:focus .file-cta,html.theme--catppuccin-latte .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(23,146,153,0.25);color:#fff}html.theme--catppuccin-latte .file.is-info:active .file-cta,html.theme--catppuccin-latte .file.is-info.is-active .file-cta{background-color:#147d83;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success .file-cta{background-color:#40a02b;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success:hover .file-cta,html.theme--catppuccin-latte .file.is-success.is-hovered .file-cta{background-color:#3c9628;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success:focus .file-cta,html.theme--catppuccin-latte .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(64,160,43,0.25);color:#fff}html.theme--catppuccin-latte .file.is-success:active .file-cta,html.theme--catppuccin-latte .file.is-success.is-active .file-cta{background-color:#388c26;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning .file-cta{background-color:#df8e1d;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning:hover .file-cta,html.theme--catppuccin-latte .file.is-warning.is-hovered .file-cta{background-color:#d4871c;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning:focus .file-cta,html.theme--catppuccin-latte .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(223,142,29,0.25);color:#fff}html.theme--catppuccin-latte .file.is-warning:active .file-cta,html.theme--catppuccin-latte .file.is-warning.is-active .file-cta{background-color:#c8801a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger .file-cta{background-color:#d20f39;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger:hover .file-cta,html.theme--catppuccin-latte .file.is-danger.is-hovered .file-cta{background-color:#c60e36;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger:focus .file-cta,html.theme--catppuccin-latte .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(210,15,57,0.25);color:#fff}html.theme--catppuccin-latte .file.is-danger:active .file-cta,html.theme--catppuccin-latte .file.is-danger.is-active .file-cta{background-color:#ba0d33;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-latte .file.is-normal{font-size:1rem}html.theme--catppuccin-latte .file.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-latte .file.is-large{font-size:1.5rem}html.theme--catppuccin-latte .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-latte .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-latte .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-latte .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-latte .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-latte .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-latte .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-latte .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-latte .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-latte .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-latte .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-latte .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-latte .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-latte .file.is-centered{justify-content:center}html.theme--catppuccin-latte .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-latte .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-latte .file.is-right{justify-content:flex-end}html.theme--catppuccin-latte .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-latte .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-latte .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-latte .file-label:hover .file-cta{background-color:#c5c9d5;color:#41445a}html.theme--catppuccin-latte .file-label:hover .file-name{border-color:#a5a9b8}html.theme--catppuccin-latte .file-label:active .file-cta{background-color:#bdc2cf;color:#41445a}html.theme--catppuccin-latte .file-label:active .file-name{border-color:#9ea2b3}html.theme--catppuccin-latte .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte .file-name{border-color:#acb0be;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-latte .file-cta{background-color:#ccd0da;color:#4c4f69}html.theme--catppuccin-latte .file-name{border-color:#acb0be;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-latte .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-latte .file-icon .fa{font-size:14px}html.theme--catppuccin-latte .label{color:#41445a;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-latte .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-latte .label.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-latte .label.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .label.is-large{font-size:1.5rem}html.theme--catppuccin-latte .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-latte .help.is-white{color:#fff}html.theme--catppuccin-latte .help.is-black{color:#0a0a0a}html.theme--catppuccin-latte .help.is-light{color:#f5f5f5}html.theme--catppuccin-latte .help.is-dark,html.theme--catppuccin-latte .content kbd.help{color:#ccd0da}html.theme--catppuccin-latte .help.is-primary,html.theme--catppuccin-latte details.docstring>section>a.help.docs-sourcelink{color:#1e66f5}html.theme--catppuccin-latte .help.is-link{color:#1e66f5}html.theme--catppuccin-latte .help.is-info{color:#179299}html.theme--catppuccin-latte .help.is-success{color:#40a02b}html.theme--catppuccin-latte .help.is-warning{color:#df8e1d}html.theme--catppuccin-latte .help.is-danger{color:#d20f39}html.theme--catppuccin-latte .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-latte .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-latte .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-latte .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-latte .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-latte .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-latte .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-latte .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-latte .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-latte .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field.is-horizontal{display:flex}}html.theme--catppuccin-latte .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-latte .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-latte .field-label.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-latte .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-latte .field-body .field{margin-bottom:0}html.theme--catppuccin-latte .field-body>.field{flex-shrink:1}html.theme--catppuccin-latte .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-latte .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-latte .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-latte .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right .select:focus~.icon{color:#ccd0da}html.theme--catppuccin-latte .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-latte .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-latte .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-latte .control.has-icons-left .icon,html.theme--catppuccin-latte .control.has-icons-right .icon{color:#acb0be;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-latte .control.has-icons-left .input,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-latte .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-latte .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-latte .control.has-icons-right .input,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-latte .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-latte .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-latte .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-latte .control.is-loading.is-small:after,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-latte .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-latte .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-latte .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-latte .breadcrumb a{align-items:center;color:#1e66f5;display:initial;justify-content:center;padding:0 .75em}html.theme--catppuccin-latte .breadcrumb a:hover{color:#04a5e5}html.theme--catppuccin-latte .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-latte .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-latte .breadcrumb li.is-active a{color:#41445a;cursor:default;pointer-events:none}html.theme--catppuccin-latte .breadcrumb li+li::before{color:#9ca0b0;content:"\0002f"}html.theme--catppuccin-latte .breadcrumb ul,html.theme--catppuccin-latte .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-latte .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-latte .breadcrumb.is-centered ol,html.theme--catppuccin-latte .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-latte .breadcrumb.is-right ol,html.theme--catppuccin-latte .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-latte .breadcrumb.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-latte .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-latte .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-latte .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-latte .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-latte .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-latte .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#4c4f69;max-width:100%;position:relative}html.theme--catppuccin-latte .card-footer:first-child,html.theme--catppuccin-latte .card-content:first-child,html.theme--catppuccin-latte .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-latte .card-footer:last-child,html.theme--catppuccin-latte .card-content:last-child,html.theme--catppuccin-latte .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-latte .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-latte .card-header-title{align-items:center;color:#41445a;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-latte .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-latte .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-latte .card-image{display:block;position:relative}html.theme--catppuccin-latte .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-latte .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-latte .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-latte .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-latte .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-latte .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-latte .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-latte .dropdown.is-active .dropdown-menu,html.theme--catppuccin-latte .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-latte .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-latte .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-latte .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-latte .dropdown-content{background-color:#e6e9ef;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-latte .dropdown-item{color:#4c4f69;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-latte a.dropdown-item,html.theme--catppuccin-latte button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-latte a.dropdown-item:hover,html.theme--catppuccin-latte button.dropdown-item:hover{background-color:#e6e9ef;color:#0a0a0a}html.theme--catppuccin-latte a.dropdown-item.is-active,html.theme--catppuccin-latte button.dropdown-item.is-active{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-latte .level{align-items:center;justify-content:space-between}html.theme--catppuccin-latte .level code{border-radius:.4em}html.theme--catppuccin-latte .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-latte .level.is-mobile{display:flex}html.theme--catppuccin-latte .level.is-mobile .level-left,html.theme--catppuccin-latte .level.is-mobile .level-right{display:flex}html.theme--catppuccin-latte .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-latte .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-latte .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level{display:flex}html.theme--catppuccin-latte .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-latte .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-latte .level-item .title,html.theme--catppuccin-latte .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-latte .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-latte .level-left,html.theme--catppuccin-latte .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .level-left .level-item.is-flexible,html.theme--catppuccin-latte .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-left .level-item:not(:last-child),html.theme--catppuccin-latte .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-latte .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-latte .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-left{display:flex}}html.theme--catppuccin-latte .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-right{display:flex}}html.theme--catppuccin-latte .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-latte .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-latte .media .media{border-top:1px solid rgba(172,176,190,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-latte .media .media .content:not(:last-child),html.theme--catppuccin-latte .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-latte .media .media .media{padding-top:.5rem}html.theme--catppuccin-latte .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-latte .media+.media{border-top:1px solid rgba(172,176,190,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-latte .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-latte .media-left,html.theme--catppuccin-latte .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .media-left{margin-right:1rem}html.theme--catppuccin-latte .media-right{margin-left:1rem}html.theme--catppuccin-latte .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-latte .media-content{overflow-x:auto}}html.theme--catppuccin-latte .menu{font-size:1rem}html.theme--catppuccin-latte .menu.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-latte .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .menu.is-large{font-size:1.5rem}html.theme--catppuccin-latte .menu-list{line-height:1.25}html.theme--catppuccin-latte .menu-list a{border-radius:3px;color:#4c4f69;display:block;padding:0.5em 0.75em}html.theme--catppuccin-latte .menu-list a:hover{background-color:#e6e9ef;color:#41445a}html.theme--catppuccin-latte .menu-list a.is-active{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .menu-list li ul{border-left:1px solid #acb0be;margin:.75em;padding-left:.75em}html.theme--catppuccin-latte .menu-label{color:#616587;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-latte .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-latte .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-latte .message{background-color:#e6e9ef;border-radius:.4em;font-size:1rem}html.theme--catppuccin-latte .message strong{color:currentColor}html.theme--catppuccin-latte .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-latte .message.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-latte .message.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .message.is-large{font-size:1.5rem}html.theme--catppuccin-latte .message.is-white{background-color:#fff}html.theme--catppuccin-latte .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-latte .message.is-black{background-color:#fafafa}html.theme--catppuccin-latte .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-latte .message.is-light{background-color:#fafafa}html.theme--catppuccin-latte .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-latte .message.is-dark,html.theme--catppuccin-latte .content kbd.message{background-color:#f9fafb}html.theme--catppuccin-latte .message.is-dark .message-header,html.theme--catppuccin-latte .content kbd.message .message-header{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .message.is-dark .message-body,html.theme--catppuccin-latte .content kbd.message .message-body{border-color:#ccd0da}html.theme--catppuccin-latte .message.is-primary,html.theme--catppuccin-latte details.docstring>section>a.message.docs-sourcelink{background-color:#ebf2fe}html.theme--catppuccin-latte .message.is-primary .message-header,html.theme--catppuccin-latte details.docstring>section>a.message.docs-sourcelink .message-header{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .message.is-primary .message-body,html.theme--catppuccin-latte details.docstring>section>a.message.docs-sourcelink .message-body{border-color:#1e66f5;color:#0a52e1}html.theme--catppuccin-latte .message.is-link{background-color:#ebf2fe}html.theme--catppuccin-latte .message.is-link .message-header{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .message.is-link .message-body{border-color:#1e66f5;color:#0a52e1}html.theme--catppuccin-latte .message.is-info{background-color:#edfcfc}html.theme--catppuccin-latte .message.is-info .message-header{background-color:#179299;color:#fff}html.theme--catppuccin-latte .message.is-info .message-body{border-color:#179299;color:#1cb2ba}html.theme--catppuccin-latte .message.is-success{background-color:#f1fbef}html.theme--catppuccin-latte .message.is-success .message-header{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .message.is-success .message-body{border-color:#40a02b;color:#40a12b}html.theme--catppuccin-latte .message.is-warning{background-color:#fdf6ed}html.theme--catppuccin-latte .message.is-warning .message-header{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .message.is-warning .message-body{border-color:#df8e1d;color:#9e6515}html.theme--catppuccin-latte .message.is-danger{background-color:#feecf0}html.theme--catppuccin-latte .message.is-danger .message-header{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .message.is-danger .message-body{border-color:#d20f39;color:#e9113f}html.theme--catppuccin-latte .message-header{align-items:center;background-color:#4c4f69;border-radius:.4em .4em 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-latte .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-latte .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .message-body{border-color:#acb0be;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#4c4f69;padding:1.25em 1.5em}html.theme--catppuccin-latte .message-body code,html.theme--catppuccin-latte .message-body pre{background-color:#fff}html.theme--catppuccin-latte .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-latte .modal.is-active{display:flex}html.theme--catppuccin-latte .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-latte .modal-content,html.theme--catppuccin-latte .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-latte .modal-content,html.theme--catppuccin-latte .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-latte .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-latte .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-latte .modal-card-head,html.theme--catppuccin-latte .modal-card-foot{align-items:center;background-color:#e6e9ef;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-latte .modal-card-head{border-bottom:1px solid #acb0be;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-latte .modal-card-title{color:#4c4f69;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-latte .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #acb0be}html.theme--catppuccin-latte .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-latte .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#eff1f5;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-latte .navbar{background-color:#1e66f5;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-latte .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-latte .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-latte .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-latte .navbar.is-dark,html.theme--catppuccin-latte .content kbd.navbar{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-burger,html.theme--catppuccin-latte .content kbd.navbar .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#ccd0da;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-latte .navbar.is-primary,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-burger,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5;color:#fff}}html.theme--catppuccin-latte .navbar.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5;color:#fff}}html.theme--catppuccin-latte .navbar.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#179299;color:#fff}}html.theme--catppuccin-latte .navbar.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#40a02b;color:#fff}}html.theme--catppuccin-latte .navbar.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#df8e1d;color:#fff}}html.theme--catppuccin-latte .navbar.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#d20f39;color:#fff}}html.theme--catppuccin-latte .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-latte .navbar.has-shadow{box-shadow:0 2px 0 0 #e6e9ef}html.theme--catppuccin-latte .navbar.is-fixed-bottom,html.theme--catppuccin-latte .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #e6e9ef}html.theme--catppuccin-latte .navbar.is-fixed-top{top:0}html.theme--catppuccin-latte html.has-navbar-fixed-top,html.theme--catppuccin-latte body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom,html.theme--catppuccin-latte body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-latte .navbar-brand,html.theme--catppuccin-latte .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-latte .navbar-brand a.navbar-item:focus,html.theme--catppuccin-latte .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-latte .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-latte .navbar-burger{color:#4c4f69;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-latte .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}html.theme--catppuccin-latte .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-latte .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-latte .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-latte .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-latte .navbar-menu{display:none}html.theme--catppuccin-latte .navbar-item,html.theme--catppuccin-latte .navbar-link{color:#4c4f69;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-latte .navbar-item .icon:only-child,html.theme--catppuccin-latte .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-latte a.navbar-item,html.theme--catppuccin-latte .navbar-link{cursor:pointer}html.theme--catppuccin-latte a.navbar-item:focus,html.theme--catppuccin-latte a.navbar-item:focus-within,html.theme--catppuccin-latte a.navbar-item:hover,html.theme--catppuccin-latte a.navbar-item.is-active,html.theme--catppuccin-latte .navbar-link:focus,html.theme--catppuccin-latte .navbar-link:focus-within,html.theme--catppuccin-latte .navbar-link:hover,html.theme--catppuccin-latte .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}html.theme--catppuccin-latte .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .navbar-item img{max-height:1.75rem}html.theme--catppuccin-latte .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-latte .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-latte .navbar-item.is-tab:focus,html.theme--catppuccin-latte .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1e66f5}html.theme--catppuccin-latte .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1e66f5;border-bottom-style:solid;border-bottom-width:3px;color:#1e66f5;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-latte .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-latte .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-latte .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-latte .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .navbar>.container{display:block}html.theme--catppuccin-latte .navbar-brand .navbar-item,html.theme--catppuccin-latte .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-latte .navbar-link::after{display:none}html.theme--catppuccin-latte .navbar-menu{background-color:#1e66f5;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-latte .navbar-menu.is-active{display:block}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch,html.theme--catppuccin-latte .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-latte .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-latte .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-latte .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-latte html.has-navbar-fixed-top-touch,html.theme--catppuccin-latte body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-latte body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar,html.theme--catppuccin-latte .navbar-menu,html.theme--catppuccin-latte .navbar-start,html.theme--catppuccin-latte .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-latte .navbar{min-height:4rem}html.theme--catppuccin-latte .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-latte .navbar.is-spaced .navbar-start,html.theme--catppuccin-latte .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-latte .navbar.is-spaced a.navbar-item,html.theme--catppuccin-latte .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8c8fa1}html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}html.theme--catppuccin-latte .navbar-burger{display:none}html.theme--catppuccin-latte .navbar-item,html.theme--catppuccin-latte .navbar-link{align-items:center;display:flex}html.theme--catppuccin-latte .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-latte .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-latte .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-latte .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-latte .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-latte .navbar-dropdown{background-color:#1e66f5;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-latte .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-latte .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8c8fa1}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}.navbar.is-spaced html.theme--catppuccin-latte .navbar-dropdown,html.theme--catppuccin-latte .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-latte .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-latte .navbar-divider{display:block}html.theme--catppuccin-latte .navbar>.container .navbar-brand,html.theme--catppuccin-latte .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-latte .navbar>.container .navbar-menu,html.theme--catppuccin-latte .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-latte .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-latte .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-latte html.has-navbar-fixed-top-desktop,html.theme--catppuccin-latte body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-latte body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-latte html.has-spaced-navbar-fixed-top,html.theme--catppuccin-latte body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-latte html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-latte body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-latte a.navbar-item.is-active,html.theme--catppuccin-latte .navbar-link.is-active{color:#1e66f5}html.theme--catppuccin-latte a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-latte .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-latte .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-latte .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-latte .pagination.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-latte .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-latte .pagination.is-rounded .pagination-previous,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-latte .pagination.is-rounded .pagination-next,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-latte .pagination.is-rounded .pagination-link,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-latte .pagination,html.theme--catppuccin-latte .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link{border-color:#acb0be;color:#1e66f5;min-width:2.5em}html.theme--catppuccin-latte .pagination-previous:hover,html.theme--catppuccin-latte .pagination-next:hover,html.theme--catppuccin-latte .pagination-link:hover{border-color:#9ca0b0;color:#04a5e5}html.theme--catppuccin-latte .pagination-previous:focus,html.theme--catppuccin-latte .pagination-next:focus,html.theme--catppuccin-latte .pagination-link:focus{border-color:#9ca0b0}html.theme--catppuccin-latte .pagination-previous:active,html.theme--catppuccin-latte .pagination-next:active,html.theme--catppuccin-latte .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-latte .pagination-previous[disabled],html.theme--catppuccin-latte .pagination-previous.is-disabled,html.theme--catppuccin-latte .pagination-next[disabled],html.theme--catppuccin-latte .pagination-next.is-disabled,html.theme--catppuccin-latte .pagination-link[disabled],html.theme--catppuccin-latte .pagination-link.is-disabled{background-color:#acb0be;border-color:#acb0be;box-shadow:none;color:#616587;opacity:0.5}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-latte .pagination-link.is-current{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .pagination-ellipsis{color:#9ca0b0;pointer-events:none}html.theme--catppuccin-latte .pagination-list{flex-wrap:wrap}html.theme--catppuccin-latte .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-latte .pagination{flex-wrap:wrap}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-latte .pagination-previous{order:2}html.theme--catppuccin-latte .pagination-next{order:3}html.theme--catppuccin-latte .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-latte .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-latte .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-latte .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-latte .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-latte .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-latte .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-latte .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-latte .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-latte .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-latte .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-latte .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-latte .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-latte .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-latte .panel.is-dark .panel-heading,html.theme--catppuccin-latte .content kbd.panel .panel-heading{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-latte .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#ccd0da}html.theme--catppuccin-latte .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-latte .content kbd.panel .panel-block.is-active .panel-icon{color:#ccd0da}html.theme--catppuccin-latte .panel.is-primary .panel-heading,html.theme--catppuccin-latte details.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-latte details.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#1e66f5}html.theme--catppuccin-latte .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-latte details.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel.is-link .panel-heading{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1e66f5}html.theme--catppuccin-latte .panel.is-link .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel.is-info .panel-heading{background-color:#179299;color:#fff}html.theme--catppuccin-latte .panel.is-info .panel-tabs a.is-active{border-bottom-color:#179299}html.theme--catppuccin-latte .panel.is-info .panel-block.is-active .panel-icon{color:#179299}html.theme--catppuccin-latte .panel.is-success .panel-heading{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .panel.is-success .panel-tabs a.is-active{border-bottom-color:#40a02b}html.theme--catppuccin-latte .panel.is-success .panel-block.is-active .panel-icon{color:#40a02b}html.theme--catppuccin-latte .panel.is-warning .panel-heading{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#df8e1d}html.theme--catppuccin-latte .panel.is-warning .panel-block.is-active .panel-icon{color:#df8e1d}html.theme--catppuccin-latte .panel.is-danger .panel-heading{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#d20f39}html.theme--catppuccin-latte .panel.is-danger .panel-block.is-active .panel-icon{color:#d20f39}html.theme--catppuccin-latte .panel-tabs:not(:last-child),html.theme--catppuccin-latte .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-latte .panel-heading{background-color:#bcc0cc;border-radius:8px 8px 0 0;color:#41445a;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-latte .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-latte .panel-tabs a{border-bottom:1px solid #acb0be;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-latte .panel-tabs a.is-active{border-bottom-color:#bcc0cc;color:#0b57ef}html.theme--catppuccin-latte .panel-list a{color:#4c4f69}html.theme--catppuccin-latte .panel-list a:hover{color:#1e66f5}html.theme--catppuccin-latte .panel-block{align-items:center;color:#41445a;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-latte .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-latte .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-latte .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-latte .panel-block.is-active{border-left-color:#1e66f5;color:#0b57ef}html.theme--catppuccin-latte .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-latte a.panel-block,html.theme--catppuccin-latte label.panel-block{cursor:pointer}html.theme--catppuccin-latte a.panel-block:hover,html.theme--catppuccin-latte label.panel-block:hover{background-color:#e6e9ef}html.theme--catppuccin-latte .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#616587;margin-right:.75em}html.theme--catppuccin-latte .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-latte .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}html.theme--catppuccin-latte .tabs a{align-items:center;border-bottom-color:#acb0be;border-bottom-style:solid;border-bottom-width:1px;color:#4c4f69;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-latte .tabs a:hover{border-bottom-color:#41445a;color:#41445a}html.theme--catppuccin-latte .tabs li{display:block}html.theme--catppuccin-latte .tabs li.is-active a{border-bottom-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .tabs ul{align-items:center;border-bottom-color:#acb0be;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-latte .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-latte .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-latte .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-latte .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-latte .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-latte .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-latte .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-latte .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-latte .tabs.is-boxed a:hover{background-color:#e6e9ef;border-bottom-color:#acb0be}html.theme--catppuccin-latte .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#acb0be;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-latte .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .tabs.is-toggle a{border-color:#acb0be;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-latte .tabs.is-toggle a:hover{background-color:#e6e9ef;border-color:#9ca0b0;z-index:2}html.theme--catppuccin-latte .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-latte .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-latte .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-latte .tabs.is-toggle li.is-active a{background-color:#1e66f5;border-color:#1e66f5;color:#fff;z-index:1}html.theme--catppuccin-latte .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-latte .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-latte .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-latte .tabs.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-latte .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-latte .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-latte .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-latte .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-latte .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-latte .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-latte .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-latte .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-latte .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-latte .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .column.is-narrow,html.theme--catppuccin-latte .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full,html.theme--catppuccin-latte .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters,html.theme--catppuccin-latte .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds,html.theme--catppuccin-latte .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half,html.theme--catppuccin-latte .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third,html.theme--catppuccin-latte .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter,html.theme--catppuccin-latte .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth,html.theme--catppuccin-latte .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths,html.theme--catppuccin-latte .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths,html.theme--catppuccin-latte .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths,html.theme--catppuccin-latte .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters,html.theme--catppuccin-latte .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds,html.theme--catppuccin-latte .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half,html.theme--catppuccin-latte .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third,html.theme--catppuccin-latte .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter,html.theme--catppuccin-latte .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth,html.theme--catppuccin-latte .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths,html.theme--catppuccin-latte .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths,html.theme--catppuccin-latte .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths,html.theme--catppuccin-latte .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-latte .column.is-0,html.theme--catppuccin-latte .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0,html.theme--catppuccin-latte .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-latte .column.is-1,html.theme--catppuccin-latte .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1,html.theme--catppuccin-latte .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2,html.theme--catppuccin-latte .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2,html.theme--catppuccin-latte .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3,html.theme--catppuccin-latte .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3,html.theme--catppuccin-latte .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-latte .column.is-4,html.theme--catppuccin-latte .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4,html.theme--catppuccin-latte .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5,html.theme--catppuccin-latte .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5,html.theme--catppuccin-latte .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6,html.theme--catppuccin-latte .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6,html.theme--catppuccin-latte .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-latte .column.is-7,html.theme--catppuccin-latte .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7,html.theme--catppuccin-latte .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8,html.theme--catppuccin-latte .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8,html.theme--catppuccin-latte .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9,html.theme--catppuccin-latte .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9,html.theme--catppuccin-latte .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-latte .column.is-10,html.theme--catppuccin-latte .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10,html.theme--catppuccin-latte .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11,html.theme--catppuccin-latte .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11,html.theme--catppuccin-latte .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12,html.theme--catppuccin-latte .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12,html.theme--catppuccin-latte .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-latte .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-latte .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-latte .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-latte .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-latte .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-latte .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-latte .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-latte .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-latte .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-latte .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-latte .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-latte .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-latte .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-latte .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-latte .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-latte .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-latte .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-latte .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-latte .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-latte .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-latte .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-latte .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-latte .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-latte .columns.is-centered{justify-content:center}html.theme--catppuccin-latte .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-latte .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-latte .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-latte .columns.is-mobile{display:flex}html.theme--catppuccin-latte .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-latte .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-desktop{display:flex}}html.theme--catppuccin-latte .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-latte .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-latte .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-latte .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-latte .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-latte .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-latte .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-latte .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-latte .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-latte .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-latte .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-latte .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-latte .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-latte .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-latte .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-latte .tile.is-child{margin:0 !important}html.theme--catppuccin-latte .tile.is-parent{padding:.75rem}html.theme--catppuccin-latte .tile.is-vertical{flex-direction:column}html.theme--catppuccin-latte .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .tile:not(.is-child){display:flex}html.theme--catppuccin-latte .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-latte .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-latte .tile.is-3{flex:none;width:25%}html.theme--catppuccin-latte .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-latte .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-latte .tile.is-6{flex:none;width:50%}html.theme--catppuccin-latte .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-latte .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-latte .tile.is-9{flex:none;width:75%}html.theme--catppuccin-latte .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-latte .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-latte .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-latte .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-latte .hero .navbar{background:none}html.theme--catppuccin-latte .hero .tabs ul{border-bottom:none}html.theme--catppuccin-latte .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-white strong{color:inherit}html.theme--catppuccin-latte .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-latte .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-latte .hero.is-white .navbar-item,html.theme--catppuccin-latte .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-latte .hero.is-white a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-white .navbar-link:hover,html.theme--catppuccin-latte .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-latte .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-latte .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-black strong{color:inherit}html.theme--catppuccin-latte .hero.is-black .title{color:#fff}html.theme--catppuccin-latte .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-latte .hero.is-black .navbar-item,html.theme--catppuccin-latte .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-black a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-black .navbar-link:hover,html.theme--catppuccin-latte .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-latte .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-light strong{color:inherit}html.theme--catppuccin-latte .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-latte .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-latte .hero.is-light .navbar-item,html.theme--catppuccin-latte .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-light .navbar-link:hover,html.theme--catppuccin-latte .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-latte .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-latte .hero.is-dark,html.theme--catppuccin-latte .content kbd.hero{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-dark strong,html.theme--catppuccin-latte .content kbd.hero strong{color:inherit}html.theme--catppuccin-latte .hero.is-dark .title,html.theme--catppuccin-latte .content kbd.hero .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .subtitle,html.theme--catppuccin-latte .content kbd.hero .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-latte .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-latte .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-dark .subtitle strong,html.theme--catppuccin-latte .content kbd.hero .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-dark .navbar-menu,html.theme--catppuccin-latte .content kbd.hero .navbar-menu{background-color:#ccd0da}}html.theme--catppuccin-latte .hero.is-dark .navbar-item,html.theme--catppuccin-latte .content kbd.hero .navbar-item,html.theme--catppuccin-latte .hero.is-dark .navbar-link,html.theme--catppuccin-latte .content kbd.hero .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-dark .navbar-link:hover,html.theme--catppuccin-latte .content kbd.hero .navbar-link:hover,html.theme--catppuccin-latte .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.hero .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .tabs a,html.theme--catppuccin-latte .content kbd.hero .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-latte .hero.is-dark .tabs a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs li.is-active a{color:#ccd0da !important;opacity:1}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .hero.is-dark.is-bold,html.theme--catppuccin-latte .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #a7b8cc 0%, #ccd0da 71%, #d9dbe6 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-latte .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a7b8cc 0%, #ccd0da 71%, #d9dbe6 100%)}}html.theme--catppuccin-latte .hero.is-primary,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-primary strong,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-latte .hero.is-primary .title,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-latte .hero.is-primary .subtitle,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-primary .subtitle strong,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-primary .navbar-menu,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#1e66f5}}html.theme--catppuccin-latte .hero.is-primary .navbar-item,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-latte .hero.is-primary .navbar-link,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-primary .navbar-link:hover,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-latte .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .hero.is-primary .tabs a,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-primary .tabs a:hover,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#1e66f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .hero.is-primary.is-bold,html.theme--catppuccin-latte details.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-latte details.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}}html.theme--catppuccin-latte .hero.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-link strong{color:inherit}html.theme--catppuccin-latte .hero.is-link .title{color:#fff}html.theme--catppuccin-latte .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-link .navbar-menu{background-color:#1e66f5}}html.theme--catppuccin-latte .hero.is-link .navbar-item,html.theme--catppuccin-latte .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-link a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-link .navbar-link:hover,html.theme--catppuccin-latte .hero.is-link .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-link .tabs li.is-active a{color:#1e66f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}}html.theme--catppuccin-latte .hero.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-info strong{color:inherit}html.theme--catppuccin-latte .hero.is-info .title{color:#fff}html.theme--catppuccin-latte .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-info .navbar-menu{background-color:#179299}}html.theme--catppuccin-latte .hero.is-info .navbar-item,html.theme--catppuccin-latte .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-info a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-info .navbar-link:hover,html.theme--catppuccin-latte .hero.is-info .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-info .tabs li.is-active a{color:#179299 !important;opacity:1}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#179299}html.theme--catppuccin-latte .hero.is-info.is-bold{background-image:linear-gradient(141deg, #0a7367 0%, #179299 71%, #1591b4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0a7367 0%, #179299 71%, #1591b4 100%)}}html.theme--catppuccin-latte .hero.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-success strong{color:inherit}html.theme--catppuccin-latte .hero.is-success .title{color:#fff}html.theme--catppuccin-latte .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-success .navbar-menu{background-color:#40a02b}}html.theme--catppuccin-latte .hero.is-success .navbar-item,html.theme--catppuccin-latte .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-success a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-success .navbar-link:hover,html.theme--catppuccin-latte .hero.is-success .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-success .tabs li.is-active a{color:#40a02b !important;opacity:1}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#40a02b}html.theme--catppuccin-latte .hero.is-success.is-bold{background-image:linear-gradient(141deg, #3c7f19 0%, #40a02b 71%, #2dba2b 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #3c7f19 0%, #40a02b 71%, #2dba2b 100%)}}html.theme--catppuccin-latte .hero.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-warning strong{color:inherit}html.theme--catppuccin-latte .hero.is-warning .title{color:#fff}html.theme--catppuccin-latte .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-warning .navbar-menu{background-color:#df8e1d}}html.theme--catppuccin-latte .hero.is-warning .navbar-item,html.theme--catppuccin-latte .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-warning .navbar-link:hover,html.theme--catppuccin-latte .hero.is-warning .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-warning .tabs li.is-active a{color:#df8e1d !important;opacity:1}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #bc560d 0%, #df8e1d 71%, #eaba2b 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #bc560d 0%, #df8e1d 71%, #eaba2b 100%)}}html.theme--catppuccin-latte .hero.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-danger strong{color:inherit}html.theme--catppuccin-latte .hero.is-danger .title{color:#fff}html.theme--catppuccin-latte .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-danger .navbar-menu{background-color:#d20f39}}html.theme--catppuccin-latte .hero.is-danger .navbar-item,html.theme--catppuccin-latte .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-danger .navbar-link:hover,html.theme--catppuccin-latte .hero.is-danger .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-danger .tabs li.is-active a{color:#d20f39 !important;opacity:1}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#d20f39}html.theme--catppuccin-latte .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ab0343 0%, #d20f39 71%, #f00a16 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ab0343 0%, #d20f39 71%, #f00a16 100%)}}html.theme--catppuccin-latte .hero.is-small .hero-body,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-latte .hero.is-halfheight .hero-body,html.theme--catppuccin-latte .hero.is-fullheight .hero-body,html.theme--catppuccin-latte .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-latte .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-latte .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-latte .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-latte .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-latte .hero-video{overflow:hidden}html.theme--catppuccin-latte .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-latte .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero-video{display:none}}html.theme--catppuccin-latte .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero-buttons .button{display:flex}html.theme--catppuccin-latte .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-latte .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-latte .hero-head,html.theme--catppuccin-latte .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero-body{padding:3rem 3rem}}html.theme--catppuccin-latte .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .section{padding:3rem 3rem}html.theme--catppuccin-latte .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-latte .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-latte .footer{background-color:#e6e9ef;padding:3rem 1.5rem 6rem}html.theme--catppuccin-latte h1 .docs-heading-anchor,html.theme--catppuccin-latte h1 .docs-heading-anchor:hover,html.theme--catppuccin-latte h1 .docs-heading-anchor:visited,html.theme--catppuccin-latte h2 .docs-heading-anchor,html.theme--catppuccin-latte h2 .docs-heading-anchor:hover,html.theme--catppuccin-latte h2 .docs-heading-anchor:visited,html.theme--catppuccin-latte h3 .docs-heading-anchor,html.theme--catppuccin-latte h3 .docs-heading-anchor:hover,html.theme--catppuccin-latte h3 .docs-heading-anchor:visited,html.theme--catppuccin-latte h4 .docs-heading-anchor,html.theme--catppuccin-latte h4 .docs-heading-anchor:hover,html.theme--catppuccin-latte h4 .docs-heading-anchor:visited,html.theme--catppuccin-latte h5 .docs-heading-anchor,html.theme--catppuccin-latte h5 .docs-heading-anchor:hover,html.theme--catppuccin-latte h5 .docs-heading-anchor:visited,html.theme--catppuccin-latte h6 .docs-heading-anchor,html.theme--catppuccin-latte h6 .docs-heading-anchor:hover,html.theme--catppuccin-latte h6 .docs-heading-anchor:visited{color:#4c4f69}html.theme--catppuccin-latte h1 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h2 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h3 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h4 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h5 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-latte h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-latte h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-latte .docs-dark-only{display:none !important}html.theme--catppuccin-latte pre{position:relative;overflow:hidden}html.theme--catppuccin-latte pre code,html.theme--catppuccin-latte pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-latte pre code:first-of-type,html.theme--catppuccin-latte pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-latte pre code:last-of-type,html.theme--catppuccin-latte pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-latte pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#4c4f69;cursor:pointer;text-align:center}html.theme--catppuccin-latte pre .copy-button:focus,html.theme--catppuccin-latte pre .copy-button:hover{opacity:1;background:rgba(76,79,105,0.1);color:#1e66f5}html.theme--catppuccin-latte pre .copy-button.success{color:#40a02b;opacity:1}html.theme--catppuccin-latte pre .copy-button.error{color:#d20f39;opacity:1}html.theme--catppuccin-latte pre:hover .copy-button{opacity:1}html.theme--catppuccin-latte .link-icon:hover{color:#1e66f5}html.theme--catppuccin-latte .admonition{background-color:#e6e9ef;border-style:solid;border-width:2px;border-color:#5c5f77;border-radius:4px;font-size:1rem}html.theme--catppuccin-latte .admonition strong{color:currentColor}html.theme--catppuccin-latte .admonition.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-latte .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-latte .admonition.is-default{background-color:#e6e9ef;border-color:#5c5f77}html.theme--catppuccin-latte .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#5c5f77}html.theme--catppuccin-latte .admonition.is-default>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-info{background-color:#e6e9ef;border-color:#179299}html.theme--catppuccin-latte .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#179299}html.theme--catppuccin-latte .admonition.is-info>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-success{background-color:#e6e9ef;border-color:#40a02b}html.theme--catppuccin-latte .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#40a02b}html.theme--catppuccin-latte .admonition.is-success>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-warning{background-color:#e6e9ef;border-color:#df8e1d}html.theme--catppuccin-latte .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#df8e1d}html.theme--catppuccin-latte .admonition.is-warning>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-danger{background-color:#e6e9ef;border-color:#d20f39}html.theme--catppuccin-latte .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#d20f39}html.theme--catppuccin-latte .admonition.is-danger>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-compat{background-color:#e6e9ef;border-color:#04a5e5}html.theme--catppuccin-latte .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#04a5e5}html.theme--catppuccin-latte .admonition.is-compat>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-todo{background-color:#e6e9ef;border-color:#8839ef}html.theme--catppuccin-latte .admonition.is-todo>.admonition-header{background-color:rgba(0,0,0,0);color:#8839ef}html.theme--catppuccin-latte .admonition.is-todo>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition-header{color:#5c5f77;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-latte .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-latte .admonition-header .admonition-anchor{opacity:0;margin-left:0.5em;font-size:0.75em;color:inherit;text-decoration:none;transition:opacity 0.2s ease-in-out}html.theme--catppuccin-latte .admonition-header .admonition-anchor:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-latte .admonition-header .admonition-anchor:hover{opacity:1 !important;text-decoration:none}html.theme--catppuccin-latte .admonition-header:hover .admonition-anchor{opacity:0.8}html.theme--catppuccin-latte details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-latte details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-latte details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-latte .admonition-body{color:#4c4f69;padding:0.5rem .75rem}html.theme--catppuccin-latte .admonition-body pre{background-color:#e6e9ef}html.theme--catppuccin-latte .admonition-body code{background-color:#e6e9ef}html.theme--catppuccin-latte details.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #acb0be;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-latte details.docstring>summary{list-style-type:none;align-items:stretch;padding:0.5rem .75rem;background-color:#e6e9ef;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #acb0be;overflow:auto}html.theme--catppuccin-latte details.docstring>summary code{background-color:transparent}html.theme--catppuccin-latte details.docstring>summary .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-latte details.docstring>summary .docstring-binding{margin-right:0.3em}html.theme--catppuccin-latte details.docstring>summary .docstring-category{margin-left:0.3em}html.theme--catppuccin-latte details.docstring>summary::before{content:'\f054';font-family:"Font Awesome 6 Free";font-weight:900;min-width:1.1rem;color:#2E63BD;display:inline-block}html.theme--catppuccin-latte details.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #acb0be}html.theme--catppuccin-latte details.docstring>section:last-child{border-bottom:none}html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-latte details.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-latte details.docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-latte details.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-latte details.docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-latte details.docstring[open]>summary::before{content:"\f078"}html.theme--catppuccin-latte .documenter-example-output{background-color:#eff1f5}html.theme--catppuccin-latte .warning-overlay-base,html.theme--catppuccin-latte .dev-warning-overlay,html.theme--catppuccin-latte .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-latte .warning-overlay-base .outdated-warning-closer,html.theme--catppuccin-latte .dev-warning-overlay .outdated-warning-closer,html.theme--catppuccin-latte .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-latte .warning-overlay-base a,html.theme--catppuccin-latte .dev-warning-overlay a,html.theme--catppuccin-latte .outdated-warning-overlay a{color:#1e66f5}html.theme--catppuccin-latte .warning-overlay-base a:hover,html.theme--catppuccin-latte .dev-warning-overlay a:hover,html.theme--catppuccin-latte .outdated-warning-overlay a:hover{color:#04a5e5}html.theme--catppuccin-latte .outdated-warning-overlay{background-color:#e6e9ef;color:#4c4f69;border-bottom:3px solid rgba(0,0,0,0)}html.theme--catppuccin-latte .dev-warning-overlay{background-color:#e6e9ef;color:#4c4f69;border-bottom:3px solid rgba(0,0,0,0)}html.theme--catppuccin-latte .footnote-reference{position:relative;display:inline-block}html.theme--catppuccin-latte .footnote-preview{display:none;position:absolute;z-index:1000;max-width:300px;width:max-content;background-color:#eff1f5;border:1px solid #04a5e5;padding:10px;border-radius:5px;top:calc(100% + 10px);left:50%;transform:translateX(-50%);box-sizing:border-box;--arrow-left: 50%}html.theme--catppuccin-latte .footnote-preview::before{content:"";position:absolute;top:-10px;left:var(--arrow-left);transform:translateX(-50%);border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #04a5e5}html.theme--catppuccin-latte .content pre{border:2px solid #acb0be;border-radius:4px}html.theme--catppuccin-latte .content code{font-weight:inherit}html.theme--catppuccin-latte .content a code{color:#1e66f5}html.theme--catppuccin-latte .content a:hover code{color:#04a5e5}html.theme--catppuccin-latte .content h1 code,html.theme--catppuccin-latte .content h2 code,html.theme--catppuccin-latte .content h3 code,html.theme--catppuccin-latte .content h4 code,html.theme--catppuccin-latte .content h5 code,html.theme--catppuccin-latte .content h6 code{color:#4c4f69}html.theme--catppuccin-latte .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-latte .content blockquote>ul:first-child,html.theme--catppuccin-latte .content blockquote>ol:first-child,html.theme--catppuccin-latte .content .admonition-body>ul:first-child,html.theme--catppuccin-latte .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-latte pre,html.theme--catppuccin-latte code{font-variant-ligatures:no-contextual}html.theme--catppuccin-latte .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-latte .breadcrumb a.is-disabled,html.theme--catppuccin-latte .breadcrumb a.is-disabled:hover{color:#41445a}html.theme--catppuccin-latte .hljs{background:initial !important}html.theme--catppuccin-latte .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-latte .katex-display,html.theme--catppuccin-latte mjx-container,html.theme--catppuccin-latte .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-latte html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-latte li.no-marker{list-style:none}html.theme--catppuccin-latte #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-latte #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main{width:100%}html.theme--catppuccin-latte #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-latte #documenter .docs-main>header,html.theme--catppuccin-latte #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar{background-color:#eff1f5;border-bottom:1px solid #acb0be;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow:hidden}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-latte #documenter .docs-main section.footnotes{border-top:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-latte #documenter .docs-main section.footnotes li details.docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-latte .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-latte #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #acb0be;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-latte #documenter .docs-sidebar{display:flex;flex-direction:column;color:#4c4f69;background-color:#e6e9ef;border-right:1px solid #acb0be;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-latte #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name a:hover{color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #acb0be;display:none;padding:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #acb0be;padding-bottom:1.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#4c4f69;background:#e6e9ef}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#4c4f69;background-color:#f2f4f7}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #acb0be;border-bottom:1px solid #acb0be;background-color:#dce0e8}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#dce0e8;color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#f2f4f7;color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-latte #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#fff}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#fff}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#fff}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#fff}}html.theme--catppuccin-latte kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-latte .search-min-width-50{min-width:50%}html.theme--catppuccin-latte .search-min-height-100{min-height:100%}html.theme--catppuccin-latte .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-latte .search-result-link{border-radius:0.7em;transition:all 300ms;border:1px solid transparent}html.theme--catppuccin-latte .search-result-link:hover,html.theme--catppuccin-latte .search-result-link:focus{background-color:rgba(0,128,128,0.1);outline:none;border-color:#179299}html.theme--catppuccin-latte .search-result-link .property-search-result-badge,html.theme--catppuccin-latte .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-latte .property-search-result-badge,html.theme--catppuccin-latte .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-latte .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:hover .search-filter,html.theme--catppuccin-latte .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-latte .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-latte .search-filter:hover,html.theme--catppuccin-latte .search-filter:focus{color:#333}html.theme--catppuccin-latte .search-filter-selected{color:#ccd0da;background-color:#7287fd}html.theme--catppuccin-latte .search-filter-selected:hover,html.theme--catppuccin-latte .search-filter-selected:focus{color:#ccd0da}html.theme--catppuccin-latte .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-latte .search-divider{border-bottom:1px solid #acb0be}html.theme--catppuccin-latte .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-latte .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-latte .w-100{width:100%}html.theme--catppuccin-latte .gap-2{gap:0.5rem}html.theme--catppuccin-latte .gap-4{gap:1rem}html.theme--catppuccin-latte .gap-8{gap:2rem}html.theme--catppuccin-latte{background-color:#eff1f5;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-latte a{transition:all 200ms ease}html.theme--catppuccin-latte .label{color:#4c4f69}html.theme--catppuccin-latte .button,html.theme--catppuccin-latte .control.has-icons-left .icon,html.theme--catppuccin-latte .control.has-icons-right .icon,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .select,html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea{height:2.5em;color:#4c4f69}html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#4c4f69}html.theme--catppuccin-latte .select:after,html.theme--catppuccin-latte .select select{border-width:1px}html.theme--catppuccin-latte .menu-list a{transition:all 300ms ease}html.theme--catppuccin-latte .modal-card-foot,html.theme--catppuccin-latte .modal-card-head{border-color:#acb0be}html.theme--catppuccin-latte .navbar{border-radius:.4em}html.theme--catppuccin-latte .navbar.is-transparent{background:none}html.theme--catppuccin-latte .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .navbar .navbar-menu{background-color:#1e66f5;border-radius:0 0 .4em .4em}}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){color:#ccd0da}html.theme--catppuccin-latte .tag.is-link:not(body),html.theme--catppuccin-latte details.docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-latte .content kbd.is-link:not(body){color:#ccd0da}html.theme--catppuccin-latte .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-latte .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-latte .ansi span.sgr3{font-style:italic}html.theme--catppuccin-latte .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-latte .ansi span.sgr7{color:#eff1f5;background-color:#4c4f69}html.theme--catppuccin-latte .ansi span.sgr8{color:transparent}html.theme--catppuccin-latte .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-latte .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-latte .ansi span.sgr30{color:#5c5f77}html.theme--catppuccin-latte .ansi span.sgr31{color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr32{color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr33{color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr34{color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr35{color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr36{color:#179299}html.theme--catppuccin-latte .ansi span.sgr37{color:#acb0be}html.theme--catppuccin-latte .ansi span.sgr40{background-color:#5c5f77}html.theme--catppuccin-latte .ansi span.sgr41{background-color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr42{background-color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr43{background-color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr44{background-color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr45{background-color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr46{background-color:#179299}html.theme--catppuccin-latte .ansi span.sgr47{background-color:#acb0be}html.theme--catppuccin-latte .ansi span.sgr90{color:#6c6f85}html.theme--catppuccin-latte .ansi span.sgr91{color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr92{color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr93{color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr94{color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr95{color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr96{color:#179299}html.theme--catppuccin-latte .ansi span.sgr97{color:#bcc0cc}html.theme--catppuccin-latte .ansi span.sgr100{background-color:#6c6f85}html.theme--catppuccin-latte .ansi span.sgr101{background-color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr102{background-color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr103{background-color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr104{background-color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr105{background-color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr106{background-color:#179299}html.theme--catppuccin-latte .ansi span.sgr107{background-color:#bcc0cc}html.theme--catppuccin-latte code.language-julia-repl>span.hljs-meta{color:#40a02b;font-weight:bolder}html.theme--catppuccin-latte code .hljs{color:#4c4f69;background:#eff1f5}html.theme--catppuccin-latte code .hljs-keyword{color:#8839ef}html.theme--catppuccin-latte code .hljs-built_in{color:#d20f39}html.theme--catppuccin-latte code .hljs-type{color:#df8e1d}html.theme--catppuccin-latte code .hljs-literal{color:#fe640b}html.theme--catppuccin-latte code .hljs-number{color:#fe640b}html.theme--catppuccin-latte code .hljs-operator{color:#179299}html.theme--catppuccin-latte code .hljs-punctuation{color:#5c5f77}html.theme--catppuccin-latte code .hljs-property{color:#179299}html.theme--catppuccin-latte code .hljs-regexp{color:#ea76cb}html.theme--catppuccin-latte code .hljs-string{color:#40a02b}html.theme--catppuccin-latte code .hljs-char.escape_{color:#40a02b}html.theme--catppuccin-latte code .hljs-subst{color:#6c6f85}html.theme--catppuccin-latte code .hljs-symbol{color:#dd7878}html.theme--catppuccin-latte code .hljs-variable{color:#8839ef}html.theme--catppuccin-latte code .hljs-variable.language_{color:#8839ef}html.theme--catppuccin-latte code .hljs-variable.constant_{color:#fe640b}html.theme--catppuccin-latte code .hljs-title{color:#1e66f5}html.theme--catppuccin-latte code .hljs-title.class_{color:#df8e1d}html.theme--catppuccin-latte code .hljs-title.function_{color:#1e66f5}html.theme--catppuccin-latte code .hljs-params{color:#4c4f69}html.theme--catppuccin-latte code .hljs-comment{color:#acb0be}html.theme--catppuccin-latte code .hljs-doctag{color:#d20f39}html.theme--catppuccin-latte code .hljs-meta{color:#fe640b}html.theme--catppuccin-latte code .hljs-section{color:#1e66f5}html.theme--catppuccin-latte code .hljs-tag{color:#6c6f85}html.theme--catppuccin-latte code .hljs-name{color:#8839ef}html.theme--catppuccin-latte code .hljs-attr{color:#1e66f5}html.theme--catppuccin-latte code .hljs-attribute{color:#40a02b}html.theme--catppuccin-latte code .hljs-bullet{color:#179299}html.theme--catppuccin-latte code .hljs-code{color:#40a02b}html.theme--catppuccin-latte code .hljs-emphasis{color:#d20f39;font-style:italic}html.theme--catppuccin-latte code .hljs-strong{color:#d20f39;font-weight:bold}html.theme--catppuccin-latte code .hljs-formula{color:#179299}html.theme--catppuccin-latte code .hljs-link{color:#209fb5;font-style:italic}html.theme--catppuccin-latte code .hljs-quote{color:#40a02b;font-style:italic}html.theme--catppuccin-latte code .hljs-selector-tag{color:#df8e1d}html.theme--catppuccin-latte code .hljs-selector-id{color:#1e66f5}html.theme--catppuccin-latte code .hljs-selector-class{color:#179299}html.theme--catppuccin-latte code .hljs-selector-attr{color:#8839ef}html.theme--catppuccin-latte code .hljs-selector-pseudo{color:#179299}html.theme--catppuccin-latte code .hljs-template-tag{color:#dd7878}html.theme--catppuccin-latte code .hljs-template-variable{color:#dd7878}html.theme--catppuccin-latte code .hljs-addition{color:#40a02b;background:rgba(166,227,161,0.15)}html.theme--catppuccin-latte code .hljs-deletion{color:#d20f39;background:rgba(243,139,168,0.15)}html.theme--catppuccin-latte .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover,html.theme--catppuccin-latte .search-result-link:focus{background-color:#ccd0da}html.theme--catppuccin-latte .search-result-link .property-search-result-badge,html.theme--catppuccin-latte .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:hover .search-filter,html.theme--catppuccin-latte .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:focus .search-filter{color:#ccd0da !important;background-color:#7287fd !important}html.theme--catppuccin-latte .search-result-title{color:#4c4f69}html.theme--catppuccin-latte .search-result-highlight{background-color:#d20f39;color:#e6e9ef}html.theme--catppuccin-latte .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-latte .w-100{width:100%}html.theme--catppuccin-latte .gap-2{gap:0.5rem}html.theme--catppuccin-latte .gap-4{gap:1rem} diff --git a/.save/docs/build/assets/themes/catppuccin-macchiato.css b/.save/docs/build/assets/themes/catppuccin-macchiato.css new file mode 100644 index 00000000..6d461ed0 --- /dev/null +++ b/.save/docs/build/assets/themes/catppuccin-macchiato.css @@ -0,0 +1 @@ +html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato .file-name,html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-macchiato .pagination-previous:focus,html.theme--catppuccin-macchiato .pagination-next:focus,html.theme--catppuccin-macchiato .pagination-link:focus,html.theme--catppuccin-macchiato .pagination-ellipsis:focus,html.theme--catppuccin-macchiato .file-cta:focus,html.theme--catppuccin-macchiato .file-name:focus,html.theme--catppuccin-macchiato .select select:focus,html.theme--catppuccin-macchiato .textarea:focus,html.theme--catppuccin-macchiato .input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-macchiato .button:focus,html.theme--catppuccin-macchiato .is-focused.pagination-previous,html.theme--catppuccin-macchiato .is-focused.pagination-next,html.theme--catppuccin-macchiato .is-focused.pagination-link,html.theme--catppuccin-macchiato .is-focused.pagination-ellipsis,html.theme--catppuccin-macchiato .is-focused.file-cta,html.theme--catppuccin-macchiato .is-focused.file-name,html.theme--catppuccin-macchiato .select select.is-focused,html.theme--catppuccin-macchiato .is-focused.textarea,html.theme--catppuccin-macchiato .is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-focused.button,html.theme--catppuccin-macchiato .pagination-previous:active,html.theme--catppuccin-macchiato .pagination-next:active,html.theme--catppuccin-macchiato .pagination-link:active,html.theme--catppuccin-macchiato .pagination-ellipsis:active,html.theme--catppuccin-macchiato .file-cta:active,html.theme--catppuccin-macchiato .file-name:active,html.theme--catppuccin-macchiato .select select:active,html.theme--catppuccin-macchiato .textarea:active,html.theme--catppuccin-macchiato .input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-macchiato .button:active,html.theme--catppuccin-macchiato .is-active.pagination-previous,html.theme--catppuccin-macchiato .is-active.pagination-next,html.theme--catppuccin-macchiato .is-active.pagination-link,html.theme--catppuccin-macchiato .is-active.pagination-ellipsis,html.theme--catppuccin-macchiato .is-active.file-cta,html.theme--catppuccin-macchiato .is-active.file-name,html.theme--catppuccin-macchiato .select select.is-active,html.theme--catppuccin-macchiato .is-active.textarea,html.theme--catppuccin-macchiato .is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .is-active.button{outline:none}html.theme--catppuccin-macchiato .pagination-previous[disabled],html.theme--catppuccin-macchiato .pagination-next[disabled],html.theme--catppuccin-macchiato .pagination-link[disabled],html.theme--catppuccin-macchiato .pagination-ellipsis[disabled],html.theme--catppuccin-macchiato .file-cta[disabled],html.theme--catppuccin-macchiato .file-name[disabled],html.theme--catppuccin-macchiato .select select[disabled],html.theme--catppuccin-macchiato .textarea[disabled],html.theme--catppuccin-macchiato .input[disabled],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-macchiato .button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-macchiato .file-name,html.theme--catppuccin-macchiato fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-macchiato .select select,fieldset[disabled] html.theme--catppuccin-macchiato .textarea,fieldset[disabled] html.theme--catppuccin-macchiato .input,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato fieldset[disabled] .select select,html.theme--catppuccin-macchiato .select fieldset[disabled] select,html.theme--catppuccin-macchiato fieldset[disabled] .textarea,html.theme--catppuccin-macchiato fieldset[disabled] .input,html.theme--catppuccin-macchiato fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-macchiato .button,html.theme--catppuccin-macchiato fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-macchiato .tabs,html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .breadcrumb,html.theme--catppuccin-macchiato .file,html.theme--catppuccin-macchiato .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-macchiato .admonition:not(:last-child),html.theme--catppuccin-macchiato .tabs:not(:last-child),html.theme--catppuccin-macchiato .pagination:not(:last-child),html.theme--catppuccin-macchiato .message:not(:last-child),html.theme--catppuccin-macchiato .level:not(:last-child),html.theme--catppuccin-macchiato .breadcrumb:not(:last-child),html.theme--catppuccin-macchiato .block:not(:last-child),html.theme--catppuccin-macchiato .title:not(:last-child),html.theme--catppuccin-macchiato .subtitle:not(:last-child),html.theme--catppuccin-macchiato .table-container:not(:last-child),html.theme--catppuccin-macchiato .table:not(:last-child),html.theme--catppuccin-macchiato .progress:not(:last-child),html.theme--catppuccin-macchiato .notification:not(:last-child),html.theme--catppuccin-macchiato .content:not(:last-child),html.theme--catppuccin-macchiato .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .modal-close,html.theme--catppuccin-macchiato .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-macchiato .modal-close::before,html.theme--catppuccin-macchiato .delete::before,html.theme--catppuccin-macchiato .modal-close::after,html.theme--catppuccin-macchiato .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-macchiato .modal-close::before,html.theme--catppuccin-macchiato .delete::before{height:2px;width:50%}html.theme--catppuccin-macchiato .modal-close::after,html.theme--catppuccin-macchiato .delete::after{height:50%;width:2px}html.theme--catppuccin-macchiato .modal-close:hover,html.theme--catppuccin-macchiato .delete:hover,html.theme--catppuccin-macchiato .modal-close:focus,html.theme--catppuccin-macchiato .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-macchiato .modal-close:active,html.theme--catppuccin-macchiato .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-macchiato .is-small.modal-close,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-macchiato .is-small.delete,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-macchiato .is-medium.modal-close,html.theme--catppuccin-macchiato .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-macchiato .is-large.modal-close,html.theme--catppuccin-macchiato .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-macchiato .control.is-loading::after,html.theme--catppuccin-macchiato .select.is-loading::after,html.theme--catppuccin-macchiato .loader,html.theme--catppuccin-macchiato .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #8087a2;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-macchiato .hero-video,html.theme--catppuccin-macchiato .modal-background,html.theme--catppuccin-macchiato .modal,html.theme--catppuccin-macchiato .image.is-square img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-macchiato .image.is-square .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-macchiato .image.is-1by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-macchiato .image.is-1by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-macchiato .image.is-5by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-macchiato .image.is-4by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-macchiato .image.is-3by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-macchiato .image.is-5by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-16by9 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-macchiato .image.is-16by9 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-macchiato .image.is-2by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-macchiato .image.is-3by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-macchiato .image.is-4by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-macchiato .image.is-3by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-macchiato .image.is-2by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-macchiato .image.is-3by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-9by16 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-macchiato .image.is-9by16 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-macchiato .image.is-1by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-macchiato .image.is-1by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-macchiato .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{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}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363a4f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#212431 !important}.has-background-dark{background-color:#363a4f !important}.has-text-primary{color:#8aadf4 !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#5b8cf0 !important}.has-background-primary{background-color:#8aadf4 !important}.has-text-primary-light{color:#ecf2fd !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bed1f9 !important}.has-background-primary-light{background-color:#ecf2fd !important}.has-text-primary-dark{color:#0e3b95 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#124dc4 !important}.has-background-primary-dark{background-color:#0e3b95 !important}.has-text-link{color:#8aadf4 !important}a.has-text-link:hover,a.has-text-link:focus{color:#5b8cf0 !important}.has-background-link{background-color:#8aadf4 !important}.has-text-link-light{color:#ecf2fd !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bed1f9 !important}.has-background-link-light{background-color:#ecf2fd !important}.has-text-link-dark{color:#0e3b95 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#124dc4 !important}.has-background-link-dark{background-color:#0e3b95 !important}.has-text-info{color:#8bd5ca !important}a.has-text-info:hover,a.has-text-info:focus{color:#66c7b9 !important}.has-background-info{background-color:#8bd5ca !important}.has-text-info-light{color:#f0faf8 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#cbece7 !important}.has-background-info-light{background-color:#f0faf8 !important}.has-text-info-dark{color:#276d62 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#359284 !important}.has-background-info-dark{background-color:#276d62 !important}.has-text-success{color:#a6da95 !important}a.has-text-success:hover,a.has-text-success:focus{color:#86cd6f !important}.has-background-success{background-color:#a6da95 !important}.has-text-success-light{color:#f2faf0 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#d3edca !important}.has-background-success-light{background-color:#f2faf0 !important}.has-text-success-dark{color:#386e26 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#4b9333 !important}.has-background-success-dark{background-color:#386e26 !important}.has-text-warning{color:#eed49f !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#e6c174 !important}.has-background-warning{background-color:#eed49f !important}.has-text-warning-light{color:#fcf7ee !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f4e4c2 !important}.has-background-warning-light{background-color:#fcf7ee !important}.has-text-warning-dark{color:#7e5c16 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#a97b1e !important}.has-background-warning-dark{background-color:#7e5c16 !important}.has-text-danger{color:#ed8796 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#e65b6f !important}.has-background-danger{background-color:#ed8796 !important}.has-text-danger-light{color:#fcedef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f6c1c9 !important}.has-background-danger-light{background-color:#fcedef !important}.has-text-danger-dark{color:#971729 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c31d36 !important}.has-background-danger-dark{background-color:#971729 !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:#363a4f !important}.has-background-grey-darker{background-color:#363a4f !important}.has-text-grey-dark{color:#494d64 !important}.has-background-grey-dark{background-color:#494d64 !important}.has-text-grey{color:#5b6078 !important}.has-background-grey{background-color:#5b6078 !important}.has-text-grey-light{color:#6e738d !important}.has-background-grey-light{background-color:#6e738d !important}.has-text-grey-lighter{color:#8087a2 !important}.has-background-grey-lighter{background-color:#8087a2 !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-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !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-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin: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}.m-1{margin:.25rem !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}.m-2{margin:.5rem !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}.m-3{margin:.75rem !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}.m-4{margin:1rem !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}.m-5{margin:1.5rem !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}.m-6{margin:3rem !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}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !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}.p-1{padding:.25rem !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}.p-2{padding:.5rem !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}.p-3{padding:.75rem !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}.p-4{padding:1rem !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}.p-5{padding:1.5rem !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}.p-6{padding:3rem !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}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink{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: 1055px){.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: 1056px){.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: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) 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}.is-underlined{text-decoration:underline !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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",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: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) 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:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.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: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) 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}}html.theme--catppuccin-macchiato html{background-color:#24273a;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-macchiato article,html.theme--catppuccin-macchiato aside,html.theme--catppuccin-macchiato figure,html.theme--catppuccin-macchiato footer,html.theme--catppuccin-macchiato header,html.theme--catppuccin-macchiato hgroup,html.theme--catppuccin-macchiato section{display:block}html.theme--catppuccin-macchiato body,html.theme--catppuccin-macchiato button,html.theme--catppuccin-macchiato input,html.theme--catppuccin-macchiato optgroup,html.theme--catppuccin-macchiato select,html.theme--catppuccin-macchiato textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-macchiato code,html.theme--catppuccin-macchiato pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-macchiato body{color:#cad3f5;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-macchiato a{color:#8aadf4;cursor:pointer;text-decoration:none}html.theme--catppuccin-macchiato a strong{color:currentColor}html.theme--catppuccin-macchiato a:hover{color:#91d7e3}html.theme--catppuccin-macchiato code{background-color:#1e2030;color:#cad3f5;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-macchiato hr{background-color:#1e2030;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-macchiato img{height:auto;max-width:100%}html.theme--catppuccin-macchiato input[type="checkbox"],html.theme--catppuccin-macchiato input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-macchiato small{font-size:.875em}html.theme--catppuccin-macchiato span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-macchiato strong{color:#b5c1f1;font-weight:700}html.theme--catppuccin-macchiato fieldset{border:none}html.theme--catppuccin-macchiato pre{-webkit-overflow-scrolling:touch;background-color:#1e2030;color:#cad3f5;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-macchiato pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-macchiato table td,html.theme--catppuccin-macchiato table th{vertical-align:top}html.theme--catppuccin-macchiato table td:not([align]),html.theme--catppuccin-macchiato table th:not([align]){text-align:inherit}html.theme--catppuccin-macchiato table th{color:#b5c1f1}html.theme--catppuccin-macchiato .box{background-color:#494d64;border-radius:8px;box-shadow:none;color:#cad3f5;display:block;padding:1.25rem}html.theme--catppuccin-macchiato a.box:hover,html.theme--catppuccin-macchiato a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #8aadf4}html.theme--catppuccin-macchiato a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #8aadf4}html.theme--catppuccin-macchiato .button{background-color:#1e2030;border-color:#3b3f5f;border-width:1px;color:#8aadf4;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-macchiato .button strong{color:inherit}html.theme--catppuccin-macchiato .button .icon,html.theme--catppuccin-macchiato .button .icon.is-small,html.theme--catppuccin-macchiato .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-macchiato .button .icon.is-medium,html.theme--catppuccin-macchiato .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-macchiato .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-macchiato .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-macchiato .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-macchiato .button:hover,html.theme--catppuccin-macchiato .button.is-hovered{border-color:#6e738d;color:#b5c1f1}html.theme--catppuccin-macchiato .button:focus,html.theme--catppuccin-macchiato .button.is-focused{border-color:#6e738d;color:#739df2}html.theme--catppuccin-macchiato .button:focus:not(:active),html.theme--catppuccin-macchiato .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button:active,html.theme--catppuccin-macchiato .button.is-active{border-color:#494d64;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text{background-color:transparent;border-color:transparent;color:#cad3f5;text-decoration:underline}html.theme--catppuccin-macchiato .button.is-text:hover,html.theme--catppuccin-macchiato .button.is-text.is-hovered,html.theme--catppuccin-macchiato .button.is-text:focus,html.theme--catppuccin-macchiato .button.is-text.is-focused{background-color:#1e2030;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text:active,html.theme--catppuccin-macchiato .button.is-text.is-active{background-color:#141620;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-macchiato .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#8aadf4;text-decoration:none}html.theme--catppuccin-macchiato .button.is-ghost:hover,html.theme--catppuccin-macchiato .button.is-ghost.is-hovered{color:#8aadf4;text-decoration:underline}html.theme--catppuccin-macchiato .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:hover,html.theme--catppuccin-macchiato .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:focus,html.theme--catppuccin-macchiato .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:focus:not(:active),html.theme--catppuccin-macchiato .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .button.is-white:active,html.theme--catppuccin-macchiato .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-macchiato .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-macchiato .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-white.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:hover,html.theme--catppuccin-macchiato .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:focus,html.theme--catppuccin-macchiato .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:focus:not(:active),html.theme--catppuccin-macchiato .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .button.is-black:active,html.theme--catppuccin-macchiato .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-macchiato .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-black.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:hover,html.theme--catppuccin-macchiato .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:focus,html.theme--catppuccin-macchiato .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:focus:not(:active),html.theme--catppuccin-macchiato .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .button.is-light:active,html.theme--catppuccin-macchiato .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-macchiato .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-light.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-dark,html.theme--catppuccin-macchiato .content kbd.button{background-color:#363a4f;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:hover,html.theme--catppuccin-macchiato .content kbd.button:hover,html.theme--catppuccin-macchiato .button.is-dark.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-hovered{background-color:#313447;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:focus,html.theme--catppuccin-macchiato .content kbd.button:focus,html.theme--catppuccin-macchiato .button.is-dark.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:focus:not(:active),html.theme--catppuccin-macchiato .content kbd.button:focus:not(:active),html.theme--catppuccin-macchiato .button.is-dark.is-focused:not(:active),html.theme--catppuccin-macchiato .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .button.is-dark:active,html.theme--catppuccin-macchiato .content kbd.button:active,html.theme--catppuccin-macchiato .button.is-dark.is-active,html.theme--catppuccin-macchiato .content kbd.button.is-active{background-color:#2c2f40;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark[disabled],html.theme--catppuccin-macchiato .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button{background-color:#363a4f;border-color:#363a4f;box-shadow:none}html.theme--catppuccin-macchiato .button.is-dark.is-inverted,html.theme--catppuccin-macchiato .content kbd.button.is-inverted{background-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted:hover,html.theme--catppuccin-macchiato .content kbd.button.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-dark.is-inverted[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-loading::after,html.theme--catppuccin-macchiato .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined,html.theme--catppuccin-macchiato .content kbd.button.is-outlined{background-color:transparent;border-color:#363a4f;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-outlined:hover,html.theme--catppuccin-macchiato .content kbd.button.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-dark.is-outlined:focus,html.theme--catppuccin-macchiato .content kbd.button.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-focused{background-color:#363a4f;border-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363a4f #363a4f !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-outlined{background-color:transparent;border-color:#363a4f;box-shadow:none;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363a4f #363a4f !important}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-primary,html.theme--catppuccin-macchiato details.docstring>section>a.button.docs-sourcelink{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:hover,html.theme--catppuccin-macchiato details.docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-hovered,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:focus,html.theme--catppuccin-macchiato details.docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-focused,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:focus:not(:active),html.theme--catppuccin-macchiato details.docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-macchiato .button.is-primary.is-focused:not(:active),html.theme--catppuccin-macchiato details.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button.is-primary:active,html.theme--catppuccin-macchiato details.docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-macchiato .button.is-primary.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-active.docs-sourcelink{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary[disabled],html.theme--catppuccin-macchiato details.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary,fieldset[disabled] html.theme--catppuccin-macchiato details.docstring>section>a.button.docs-sourcelink{background-color:#8aadf4;border-color:#8aadf4;box-shadow:none}html.theme--catppuccin-macchiato .button.is-primary.is-inverted,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted:hover,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-primary.is-inverted[disabled],html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-loading::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-outlined:hover,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-macchiato .button.is-primary.is-outlined:focus,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined[disabled],html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8aadf4;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-light,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-light.docs-sourcelink{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-primary.is-light:hover,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-light.is-hovered,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e1eafc;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-primary.is-light:active,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-macchiato .button.is-primary.is-light.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d5e2fb;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:hover,html.theme--catppuccin-macchiato .button.is-link.is-hovered{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:focus,html.theme--catppuccin-macchiato .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:focus:not(:active),html.theme--catppuccin-macchiato .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button.is-link:active,html.theme--catppuccin-macchiato .button.is-link.is-active{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link{background-color:#8aadf4;border-color:#8aadf4;box-shadow:none}html.theme--catppuccin-macchiato .button.is-link.is-inverted{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined{background-color:transparent;border-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-link.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-focused{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-outlined{background-color:transparent;border-color:#8aadf4;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-light{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link.is-light:hover,html.theme--catppuccin-macchiato .button.is-link.is-light.is-hovered{background-color:#e1eafc;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link.is-light:active,html.theme--catppuccin-macchiato .button.is-link.is-light.is-active{background-color:#d5e2fb;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-info{background-color:#8bd5ca;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:hover,html.theme--catppuccin-macchiato .button.is-info.is-hovered{background-color:#82d2c6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:focus,html.theme--catppuccin-macchiato .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:focus:not(:active),html.theme--catppuccin-macchiato .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .button.is-info:active,html.theme--catppuccin-macchiato .button.is-info.is-active{background-color:#78cec1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info{background-color:#8bd5ca;border-color:#8bd5ca;box-shadow:none}html.theme--catppuccin-macchiato .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined{background-color:transparent;border-color:#8bd5ca;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-info.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-focused{background-color:#8bd5ca;border-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #8bd5ca #8bd5ca !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-outlined{background-color:transparent;border-color:#8bd5ca;box-shadow:none;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8bd5ca #8bd5ca !important}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-light{background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .button.is-info.is-light:hover,html.theme--catppuccin-macchiato .button.is-info.is-light.is-hovered{background-color:#e7f6f4;border-color:transparent;color:#276d62}html.theme--catppuccin-macchiato .button.is-info.is-light:active,html.theme--catppuccin-macchiato .button.is-info.is-light.is-active{background-color:#ddf3f0;border-color:transparent;color:#276d62}html.theme--catppuccin-macchiato .button.is-success{background-color:#a6da95;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:hover,html.theme--catppuccin-macchiato .button.is-success.is-hovered{background-color:#9ed78c;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:focus,html.theme--catppuccin-macchiato .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:focus:not(:active),html.theme--catppuccin-macchiato .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .button.is-success:active,html.theme--catppuccin-macchiato .button.is-success.is-active{background-color:#96d382;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success{background-color:#a6da95;border-color:#a6da95;box-shadow:none}html.theme--catppuccin-macchiato .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined{background-color:transparent;border-color:#a6da95;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-success.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-focused{background-color:#a6da95;border-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6da95 #a6da95 !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-outlined{background-color:transparent;border-color:#a6da95;box-shadow:none;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6da95 #a6da95 !important}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-light{background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .button.is-success.is-light:hover,html.theme--catppuccin-macchiato .button.is-success.is-light.is-hovered{background-color:#eaf6e6;border-color:transparent;color:#386e26}html.theme--catppuccin-macchiato .button.is-success.is-light:active,html.theme--catppuccin-macchiato .button.is-success.is-light.is-active{background-color:#e2f3dd;border-color:transparent;color:#386e26}html.theme--catppuccin-macchiato .button.is-warning{background-color:#eed49f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:hover,html.theme--catppuccin-macchiato .button.is-warning.is-hovered{background-color:#eccf94;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:focus,html.theme--catppuccin-macchiato .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:focus:not(:active),html.theme--catppuccin-macchiato .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .button.is-warning:active,html.theme--catppuccin-macchiato .button.is-warning.is-active{background-color:#eaca89;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning{background-color:#eed49f;border-color:#eed49f;box-shadow:none}html.theme--catppuccin-macchiato .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined{background-color:transparent;border-color:#eed49f;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-warning.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-focused{background-color:#eed49f;border-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #eed49f #eed49f !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-outlined{background-color:transparent;border-color:#eed49f;box-shadow:none;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #eed49f #eed49f !important}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-light{background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-warning.is-light:hover,html.theme--catppuccin-macchiato .button.is-warning.is-light.is-hovered{background-color:#faf2e3;border-color:transparent;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-warning.is-light:active,html.theme--catppuccin-macchiato .button.is-warning.is-light.is-active{background-color:#f8eed8;border-color:transparent;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-danger{background-color:#ed8796;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:hover,html.theme--catppuccin-macchiato .button.is-danger.is-hovered{background-color:#eb7c8c;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:focus,html.theme--catppuccin-macchiato .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:focus:not(:active),html.theme--catppuccin-macchiato .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .button.is-danger:active,html.theme--catppuccin-macchiato .button.is-danger.is-active{background-color:#ea7183;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger{background-color:#ed8796;border-color:#ed8796;box-shadow:none}html.theme--catppuccin-macchiato .button.is-danger.is-inverted{background-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined{background-color:transparent;border-color:#ed8796;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-danger.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-focused{background-color:#ed8796;border-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #ed8796 #ed8796 !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-outlined{background-color:transparent;border-color:#ed8796;box-shadow:none;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ed8796 #ed8796 !important}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-light{background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .button.is-danger.is-light:hover,html.theme--catppuccin-macchiato .button.is-danger.is-light.is-hovered{background-color:#fbe2e6;border-color:transparent;color:#971729}html.theme--catppuccin-macchiato .button.is-danger.is-light:active,html.theme--catppuccin-macchiato .button.is-danger.is-light.is-active{background-color:#f9d7dc;border-color:transparent;color:#971729}html.theme--catppuccin-macchiato .button.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-small:not(.is-rounded),html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-macchiato .button.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .button.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .button.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button{background-color:#6e738d;border-color:#5b6078;box-shadow:none;opacity:.5}html.theme--catppuccin-macchiato .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-macchiato .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-macchiato .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-macchiato .button.is-static{background-color:#1e2030;border-color:#5b6078;color:#8087a2;box-shadow:none;pointer-events:none}html.theme--catppuccin-macchiato .button.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-macchiato .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-macchiato .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-macchiato .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-macchiato .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-macchiato .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-macchiato .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-macchiato .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-macchiato .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-macchiato .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-macchiato .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-macchiato .buttons.has-addons .button:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-macchiato .buttons.has-addons .button:focus,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-focused,html.theme--catppuccin-macchiato .buttons.has-addons .button:active,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-active,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-macchiato .buttons.has-addons .button:focus:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button:active:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-macchiato .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .buttons.is-centered{justify-content:center}html.theme--catppuccin-macchiato .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-macchiato .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .button.is-responsive.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-macchiato .button.is-responsive,html.theme--catppuccin-macchiato .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-macchiato .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .button.is-responsive.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-macchiato .button.is-responsive,html.theme--catppuccin-macchiato .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-macchiato .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-macchiato .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-macchiato .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-macchiato .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-macchiato .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-macchiato .content li+li{margin-top:0.25em}html.theme--catppuccin-macchiato .content p:not(:last-child),html.theme--catppuccin-macchiato .content dl:not(:last-child),html.theme--catppuccin-macchiato .content ol:not(:last-child),html.theme--catppuccin-macchiato .content ul:not(:last-child),html.theme--catppuccin-macchiato .content blockquote:not(:last-child),html.theme--catppuccin-macchiato .content pre:not(:last-child),html.theme--catppuccin-macchiato .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-macchiato .content h1,html.theme--catppuccin-macchiato .content h2,html.theme--catppuccin-macchiato .content h3,html.theme--catppuccin-macchiato .content h4,html.theme--catppuccin-macchiato .content h5,html.theme--catppuccin-macchiato .content h6{color:#cad3f5;font-weight:600;line-height:1.125}html.theme--catppuccin-macchiato .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-macchiato .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-macchiato .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-macchiato .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-macchiato .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-macchiato .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-macchiato .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-macchiato .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-macchiato .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-macchiato .content blockquote{background-color:#1e2030;border-left:5px solid #5b6078;padding:1.25em 1.5em}html.theme--catppuccin-macchiato .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-macchiato .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-macchiato .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-macchiato .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-macchiato .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-macchiato .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-macchiato .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-macchiato .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-macchiato .content ul ul ul{list-style-type:square}html.theme--catppuccin-macchiato .content dd{margin-left:2em}html.theme--catppuccin-macchiato .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-macchiato .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-macchiato .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-macchiato .content figure img{display:inline-block}html.theme--catppuccin-macchiato .content figure figcaption{font-style:italic}html.theme--catppuccin-macchiato .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-macchiato .content sup,html.theme--catppuccin-macchiato .content sub{font-size:75%}html.theme--catppuccin-macchiato .content table{width:100%}html.theme--catppuccin-macchiato .content table td,html.theme--catppuccin-macchiato .content table th{border:1px solid #5b6078;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-macchiato .content table th{color:#b5c1f1}html.theme--catppuccin-macchiato .content table th:not([align]){text-align:inherit}html.theme--catppuccin-macchiato .content table thead td,html.theme--catppuccin-macchiato .content table thead th{border-width:0 0 2px;color:#b5c1f1}html.theme--catppuccin-macchiato .content table tfoot td,html.theme--catppuccin-macchiato .content table tfoot th{border-width:2px 0 0;color:#b5c1f1}html.theme--catppuccin-macchiato .content table tbody tr:last-child td,html.theme--catppuccin-macchiato .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-macchiato .content .tabs li+li{margin-top:0}html.theme--catppuccin-macchiato .content.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-macchiato .content.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .content.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .content.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-macchiato .icon.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-macchiato .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-macchiato .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-macchiato .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-macchiato .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-macchiato .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-macchiato div.icon-text{display:flex}html.theme--catppuccin-macchiato .image,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-macchiato .image img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-macchiato .image img.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-macchiato .image.is-fullwidth,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .image.is-square img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-macchiato .image.is-square .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-macchiato .image.is-1by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-macchiato .image.is-1by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-macchiato .image.is-5by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-macchiato .image.is-4by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-macchiato .image.is-3by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-macchiato .image.is-5by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-16by9 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-macchiato .image.is-16by9 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-macchiato .image.is-2by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-macchiato .image.is-3by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-macchiato .image.is-4by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-macchiato .image.is-3by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-macchiato .image.is-2by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-macchiato .image.is-3by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-9by16 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-macchiato .image.is-9by16 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-macchiato .image.is-1by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-macchiato .image.is-1by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-macchiato .image.is-square,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-macchiato .image.is-1by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-macchiato .image.is-5by4,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-macchiato .image.is-4by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-macchiato .image.is-3by2,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-macchiato .image.is-5by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-macchiato .image.is-16by9,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-macchiato .image.is-2by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-macchiato .image.is-3by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-macchiato .image.is-4by5,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-macchiato .image.is-3by4,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-macchiato .image.is-2by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-macchiato .image.is-3by5,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-macchiato .image.is-9by16,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-macchiato .image.is-1by2,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-macchiato .image.is-1by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-macchiato .image.is-16x16,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-macchiato .image.is-24x24,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-macchiato .image.is-32x32,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-macchiato .image.is-48x48,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-macchiato .image.is-64x64,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-macchiato .image.is-96x96,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-macchiato .image.is-128x128,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-macchiato .notification{background-color:#1e2030;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-macchiato .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-macchiato .notification strong{color:currentColor}html.theme--catppuccin-macchiato .notification code,html.theme--catppuccin-macchiato .notification pre{background:#fff}html.theme--catppuccin-macchiato .notification pre code{background:transparent}html.theme--catppuccin-macchiato .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-macchiato .notification .title,html.theme--catppuccin-macchiato .notification .subtitle,html.theme--catppuccin-macchiato .notification .content{color:currentColor}html.theme--catppuccin-macchiato .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-dark,html.theme--catppuccin-macchiato .content kbd.notification{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .notification.is-primary,html.theme--catppuccin-macchiato details.docstring>section>a.notification.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .notification.is-primary.is-light,html.theme--catppuccin-macchiato details.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .notification.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .notification.is-link.is-light{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .notification.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-info.is-light{background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .notification.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-success.is-light{background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .notification.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-warning.is-light{background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .notification.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .notification.is-danger.is-light{background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-macchiato .progress::-webkit-progress-bar{background-color:#494d64}html.theme--catppuccin-macchiato .progress::-webkit-progress-value{background-color:#8087a2}html.theme--catppuccin-macchiato .progress::-moz-progress-bar{background-color:#8087a2}html.theme--catppuccin-macchiato .progress::-ms-fill{background-color:#8087a2;border:none}html.theme--catppuccin-macchiato .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-macchiato .content kbd.progress::-webkit-progress-value{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-macchiato .content kbd.progress::-moz-progress-bar{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark::-ms-fill,html.theme--catppuccin-macchiato .content kbd.progress::-ms-fill{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark:indeterminate,html.theme--catppuccin-macchiato .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363a4f 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-macchiato details.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-macchiato details.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary::-ms-fill,html.theme--catppuccin-macchiato details.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary:indeterminate,html.theme--catppuccin-macchiato details.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #8aadf4 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-link::-webkit-progress-value{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link::-moz-progress-bar{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link::-ms-fill{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link:indeterminate{background-image:linear-gradient(to right, #8aadf4 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-info::-webkit-progress-value{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info::-moz-progress-bar{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info::-ms-fill{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info:indeterminate{background-image:linear-gradient(to right, #8bd5ca 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-success::-webkit-progress-value{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success::-moz-progress-bar{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success::-ms-fill{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6da95 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-warning::-webkit-progress-value{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning::-moz-progress-bar{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning::-ms-fill{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #eed49f 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-danger::-webkit-progress-value{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger::-moz-progress-bar{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger::-ms-fill{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #ed8796 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#494d64;background-image:linear-gradient(to right, #cad3f5 30%, #494d64 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-macchiato .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-macchiato .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-macchiato .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-macchiato .progress.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-macchiato .progress.is-medium{height:1.25rem}html.theme--catppuccin-macchiato .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-macchiato .table{background-color:#494d64;color:#cad3f5}html.theme--catppuccin-macchiato .table td,html.theme--catppuccin-macchiato .table th{border:1px solid #5b6078;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-macchiato .table td.is-white,html.theme--catppuccin-macchiato .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .table td.is-black,html.theme--catppuccin-macchiato .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .table td.is-light,html.theme--catppuccin-macchiato .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-dark,html.theme--catppuccin-macchiato .table th.is-dark{background-color:#363a4f;border-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .table td.is-primary,html.theme--catppuccin-macchiato .table th.is-primary{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-link,html.theme--catppuccin-macchiato .table th.is-link{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-info,html.theme--catppuccin-macchiato .table th.is-info{background-color:#8bd5ca;border-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-success,html.theme--catppuccin-macchiato .table th.is-success{background-color:#a6da95;border-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-warning,html.theme--catppuccin-macchiato .table th.is-warning{background-color:#eed49f;border-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-danger,html.theme--catppuccin-macchiato .table th.is-danger{background-color:#ed8796;border-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .table td.is-narrow,html.theme--catppuccin-macchiato .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-macchiato .table td.is-selected,html.theme--catppuccin-macchiato .table th.is-selected{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-selected a,html.theme--catppuccin-macchiato .table td.is-selected strong,html.theme--catppuccin-macchiato .table th.is-selected a,html.theme--catppuccin-macchiato .table th.is-selected strong{color:currentColor}html.theme--catppuccin-macchiato .table td.is-vcentered,html.theme--catppuccin-macchiato .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-macchiato .table th{color:#b5c1f1}html.theme--catppuccin-macchiato .table th:not([align]){text-align:left}html.theme--catppuccin-macchiato .table tr.is-selected{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table tr.is-selected a,html.theme--catppuccin-macchiato .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-macchiato .table tr.is-selected td,html.theme--catppuccin-macchiato .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-macchiato .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table thead td,html.theme--catppuccin-macchiato .table thead th{border-width:0 0 2px;color:#b5c1f1}html.theme--catppuccin-macchiato .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table tfoot td,html.theme--catppuccin-macchiato .table tfoot th{border-width:2px 0 0;color:#b5c1f1}html.theme--catppuccin-macchiato .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table tbody tr:last-child td,html.theme--catppuccin-macchiato .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-macchiato .table.is-bordered td,html.theme--catppuccin-macchiato .table.is-bordered th{border-width:1px}html.theme--catppuccin-macchiato .table.is-bordered tr:last-child td,html.theme--catppuccin-macchiato .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-macchiato .table.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#363a4f}html.theme--catppuccin-macchiato .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#363a4f}html.theme--catppuccin-macchiato .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#3a3e55}html.theme--catppuccin-macchiato .table.is-narrow td,html.theme--catppuccin-macchiato .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-macchiato .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#363a4f}html.theme--catppuccin-macchiato .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-macchiato .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .tags .tag,html.theme--catppuccin-macchiato .tags .content kbd,html.theme--catppuccin-macchiato .content .tags kbd,html.theme--catppuccin-macchiato .tags details.docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-macchiato .tags .tag:not(:last-child),html.theme--catppuccin-macchiato .tags .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags kbd:not(:last-child),html.theme--catppuccin-macchiato .tags details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-macchiato .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-macchiato .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-macchiato .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .tags.are-medium details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-macchiato .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .tags.are-large details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-macchiato .tags.is-centered{justify-content:center}html.theme--catppuccin-macchiato .tags.is-centered .tag,html.theme--catppuccin-macchiato .tags.is-centered .content kbd,html.theme--catppuccin-macchiato .content .tags.is-centered kbd,html.theme--catppuccin-macchiato .tags.is-centered details.docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-macchiato .tags.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .tags.is-right .tag:not(:first-child),html.theme--catppuccin-macchiato .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-macchiato .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-macchiato .tags.is-right details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-macchiato .tags.is-right .tag:not(:last-child),html.theme--catppuccin-macchiato .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-macchiato .tags.is-right details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-macchiato .tags.has-addons .tag,html.theme--catppuccin-macchiato .tags.has-addons .content kbd,html.theme--catppuccin-macchiato .content .tags.has-addons kbd,html.theme--catppuccin-macchiato .tags.has-addons details.docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-macchiato .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-macchiato .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-macchiato .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-macchiato .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-macchiato .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-macchiato .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-macchiato .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-macchiato .tag:not(body),html.theme--catppuccin-macchiato .content kbd:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#1e2030;border-radius:.4em;color:#cad3f5;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-macchiato .tag:not(body) .delete,html.theme--catppuccin-macchiato .content kbd:not(body) .delete,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-macchiato .tag.is-white:not(body),html.theme--catppuccin-macchiato .content kbd.is-white:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .tag.is-black:not(body),html.theme--catppuccin-macchiato .content kbd.is-black:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .tag.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-light:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-dark:not(body),html.theme--catppuccin-macchiato .content kbd:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-macchiato .content details.docstring>section>kbd:not(body){background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .tag.is-primary:not(body),html.theme--catppuccin-macchiato .content kbd.is-primary:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink:not(body){background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .tag.is-primary.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .tag.is-link:not(body),html.theme--catppuccin-macchiato .content kbd.is-link:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .tag.is-link.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-link.is-light:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .tag.is-info:not(body),html.theme--catppuccin-macchiato .content kbd.is-info:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-info.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-info.is-light:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .tag.is-success:not(body),html.theme--catppuccin-macchiato .content kbd.is-success:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-success.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-success.is-light:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .tag.is-warning:not(body),html.theme--catppuccin-macchiato .content kbd.is-warning:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-warning.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .tag.is-danger:not(body),html.theme--catppuccin-macchiato .content kbd.is-danger:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .tag.is-danger.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .tag.is-normal:not(body),html.theme--catppuccin-macchiato .content kbd.is-normal:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-macchiato .tag.is-medium:not(body),html.theme--catppuccin-macchiato .content kbd.is-medium:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-macchiato .tag.is-large:not(body),html.theme--catppuccin-macchiato .content kbd.is-large:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-macchiato .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-macchiato .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-macchiato .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-macchiato .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-macchiato .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-macchiato .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-macchiato .tag.is-delete:not(body),html.theme--catppuccin-macchiato .content kbd.is-delete:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::before,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::before,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-macchiato .tag.is-delete:not(body)::after,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::after,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::before,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::before,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::after,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::after,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-macchiato .tag.is-delete:not(body):hover,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):hover,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-macchiato .tag.is-delete:not(body):focus,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):focus,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#141620}html.theme--catppuccin-macchiato .tag.is-delete:not(body):active,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):active,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#0a0b11}html.theme--catppuccin-macchiato .tag.is-rounded:not(body),html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-macchiato .content kbd.is-rounded:not(body),html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-macchiato a.tag:hover,html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-macchiato .title,html.theme--catppuccin-macchiato .subtitle{word-break:break-word}html.theme--catppuccin-macchiato .title em,html.theme--catppuccin-macchiato .title span,html.theme--catppuccin-macchiato .subtitle em,html.theme--catppuccin-macchiato .subtitle span{font-weight:inherit}html.theme--catppuccin-macchiato .title sub,html.theme--catppuccin-macchiato .subtitle sub{font-size:.75em}html.theme--catppuccin-macchiato .title sup,html.theme--catppuccin-macchiato .subtitle sup{font-size:.75em}html.theme--catppuccin-macchiato .title .tag,html.theme--catppuccin-macchiato .title .content kbd,html.theme--catppuccin-macchiato .content .title kbd,html.theme--catppuccin-macchiato .title details.docstring>section>a.docs-sourcelink,html.theme--catppuccin-macchiato .subtitle .tag,html.theme--catppuccin-macchiato .subtitle .content kbd,html.theme--catppuccin-macchiato .content .subtitle kbd,html.theme--catppuccin-macchiato .subtitle details.docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-macchiato .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-macchiato .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-macchiato .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-macchiato .title.is-1{font-size:3rem}html.theme--catppuccin-macchiato .title.is-2{font-size:2.5rem}html.theme--catppuccin-macchiato .title.is-3{font-size:2rem}html.theme--catppuccin-macchiato .title.is-4{font-size:1.5rem}html.theme--catppuccin-macchiato .title.is-5{font-size:1.25rem}html.theme--catppuccin-macchiato .title.is-6{font-size:1rem}html.theme--catppuccin-macchiato .title.is-7{font-size:.75rem}html.theme--catppuccin-macchiato .subtitle{color:#6e738d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-macchiato .subtitle strong{color:#6e738d;font-weight:600}html.theme--catppuccin-macchiato .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-macchiato .subtitle.is-1{font-size:3rem}html.theme--catppuccin-macchiato .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-macchiato .subtitle.is-3{font-size:2rem}html.theme--catppuccin-macchiato .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-macchiato .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-macchiato .subtitle.is-6{font-size:1rem}html.theme--catppuccin-macchiato .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-macchiato .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-macchiato .number{align-items:center;background-color:#1e2030;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{background-color:#24273a;border-color:#5b6078;border-radius:.4em;color:#8087a2}html.theme--catppuccin-macchiato .select select::-moz-placeholder,html.theme--catppuccin-macchiato .textarea::-moz-placeholder,html.theme--catppuccin-macchiato .input::-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select::-webkit-input-placeholder,html.theme--catppuccin-macchiato .textarea::-webkit-input-placeholder,html.theme--catppuccin-macchiato .input::-webkit-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:-moz-placeholder,html.theme--catppuccin-macchiato .textarea:-moz-placeholder,html.theme--catppuccin-macchiato .input:-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:-ms-input-placeholder,html.theme--catppuccin-macchiato .textarea:-ms-input-placeholder,html.theme--catppuccin-macchiato .input:-ms-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:hover,html.theme--catppuccin-macchiato .textarea:hover,html.theme--catppuccin-macchiato .input:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-macchiato .select select.is-hovered,html.theme--catppuccin-macchiato .is-hovered.textarea,html.theme--catppuccin-macchiato .is-hovered.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#6e738d}html.theme--catppuccin-macchiato .select select:focus,html.theme--catppuccin-macchiato .textarea:focus,html.theme--catppuccin-macchiato .input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-macchiato .select select.is-focused,html.theme--catppuccin-macchiato .is-focused.textarea,html.theme--catppuccin-macchiato .is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .select select:active,html.theme--catppuccin-macchiato .textarea:active,html.theme--catppuccin-macchiato .input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-macchiato .select select.is-active,html.theme--catppuccin-macchiato .is-active.textarea,html.theme--catppuccin-macchiato .is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#8aadf4;box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select select[disabled],html.theme--catppuccin-macchiato .textarea[disabled],html.theme--catppuccin-macchiato .input[disabled],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .select select,fieldset[disabled] html.theme--catppuccin-macchiato .textarea,fieldset[disabled] html.theme--catppuccin-macchiato .input,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{background-color:#6e738d;border-color:#1e2030;box-shadow:none;color:#f5f7fd}html.theme--catppuccin-macchiato .select select[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato .input[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato .input[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-macchiato .textarea[readonly],html.theme--catppuccin-macchiato .input[readonly],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-macchiato .is-white.textarea,html.theme--catppuccin-macchiato .is-white.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-macchiato .is-white.textarea:focus,html.theme--catppuccin-macchiato .is-white.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-macchiato .is-white.is-focused.textarea,html.theme--catppuccin-macchiato .is-white.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-white.textarea:active,html.theme--catppuccin-macchiato .is-white.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-macchiato .is-white.is-active.textarea,html.theme--catppuccin-macchiato .is-white.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .is-black.textarea,html.theme--catppuccin-macchiato .is-black.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-macchiato .is-black.textarea:focus,html.theme--catppuccin-macchiato .is-black.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-macchiato .is-black.is-focused.textarea,html.theme--catppuccin-macchiato .is-black.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-black.textarea:active,html.theme--catppuccin-macchiato .is-black.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-macchiato .is-black.is-active.textarea,html.theme--catppuccin-macchiato .is-black.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .is-light.textarea,html.theme--catppuccin-macchiato .is-light.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-macchiato .is-light.textarea:focus,html.theme--catppuccin-macchiato .is-light.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-macchiato .is-light.is-focused.textarea,html.theme--catppuccin-macchiato .is-light.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-light.textarea:active,html.theme--catppuccin-macchiato .is-light.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-macchiato .is-light.is-active.textarea,html.theme--catppuccin-macchiato .is-light.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .is-dark.textarea,html.theme--catppuccin-macchiato .content kbd.textarea,html.theme--catppuccin-macchiato .is-dark.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-macchiato .content kbd.input{border-color:#363a4f}html.theme--catppuccin-macchiato .is-dark.textarea:focus,html.theme--catppuccin-macchiato .content kbd.textarea:focus,html.theme--catppuccin-macchiato .is-dark.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-macchiato .content kbd.input:focus,html.theme--catppuccin-macchiato .is-dark.is-focused.textarea,html.theme--catppuccin-macchiato .content kbd.is-focused.textarea,html.theme--catppuccin-macchiato .is-dark.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .content kbd.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-dark.textarea:active,html.theme--catppuccin-macchiato .content kbd.textarea:active,html.theme--catppuccin-macchiato .is-dark.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-macchiato .content kbd.input:active,html.theme--catppuccin-macchiato .is-dark.is-active.textarea,html.theme--catppuccin-macchiato .content kbd.is-active.textarea,html.theme--catppuccin-macchiato .is-dark.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .content kbd.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .is-primary.textarea,html.theme--catppuccin-macchiato details.docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-macchiato details.docstring>section>a.input.docs-sourcelink{border-color:#8aadf4}html.theme--catppuccin-macchiato .is-primary.textarea:focus,html.theme--catppuccin-macchiato details.docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-macchiato .is-primary.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-macchiato details.docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-macchiato .is-primary.is-focused.textarea,html.theme--catppuccin-macchiato details.docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato details.docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.textarea:active,html.theme--catppuccin-macchiato details.docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-macchiato .is-primary.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-macchiato details.docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-macchiato .is-primary.is-active.textarea,html.theme--catppuccin-macchiato details.docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .is-link.textarea,html.theme--catppuccin-macchiato .is-link.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#8aadf4}html.theme--catppuccin-macchiato .is-link.textarea:focus,html.theme--catppuccin-macchiato .is-link.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-macchiato .is-link.is-focused.textarea,html.theme--catppuccin-macchiato .is-link.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-link.textarea:active,html.theme--catppuccin-macchiato .is-link.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-macchiato .is-link.is-active.textarea,html.theme--catppuccin-macchiato .is-link.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .is-info.textarea,html.theme--catppuccin-macchiato .is-info.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#8bd5ca}html.theme--catppuccin-macchiato .is-info.textarea:focus,html.theme--catppuccin-macchiato .is-info.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-macchiato .is-info.is-focused.textarea,html.theme--catppuccin-macchiato .is-info.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-info.textarea:active,html.theme--catppuccin-macchiato .is-info.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-macchiato .is-info.is-active.textarea,html.theme--catppuccin-macchiato .is-info.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .is-success.textarea,html.theme--catppuccin-macchiato .is-success.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6da95}html.theme--catppuccin-macchiato .is-success.textarea:focus,html.theme--catppuccin-macchiato .is-success.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-macchiato .is-success.is-focused.textarea,html.theme--catppuccin-macchiato .is-success.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-success.textarea:active,html.theme--catppuccin-macchiato .is-success.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-macchiato .is-success.is-active.textarea,html.theme--catppuccin-macchiato .is-success.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .is-warning.textarea,html.theme--catppuccin-macchiato .is-warning.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#eed49f}html.theme--catppuccin-macchiato .is-warning.textarea:focus,html.theme--catppuccin-macchiato .is-warning.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-macchiato .is-warning.is-focused.textarea,html.theme--catppuccin-macchiato .is-warning.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-warning.textarea:active,html.theme--catppuccin-macchiato .is-warning.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-macchiato .is-warning.is-active.textarea,html.theme--catppuccin-macchiato .is-warning.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .is-danger.textarea,html.theme--catppuccin-macchiato .is-danger.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#ed8796}html.theme--catppuccin-macchiato .is-danger.textarea:focus,html.theme--catppuccin-macchiato .is-danger.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-macchiato .is-danger.is-focused.textarea,html.theme--catppuccin-macchiato .is-danger.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-danger.textarea:active,html.theme--catppuccin-macchiato .is-danger.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-macchiato .is-danger.is-active.textarea,html.theme--catppuccin-macchiato .is-danger.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .is-small.textarea,html.theme--catppuccin-macchiato .is-small.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-macchiato .is-medium.textarea,html.theme--catppuccin-macchiato .is-medium.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .is-large.textarea,html.theme--catppuccin-macchiato .is-large.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .is-fullwidth.textarea,html.theme--catppuccin-macchiato .is-fullwidth.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-macchiato .is-inline.textarea,html.theme--catppuccin-macchiato .is-inline.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-macchiato .input.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-macchiato .input.is-static,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-macchiato .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-macchiato .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-macchiato .textarea[rows]{height:initial}html.theme--catppuccin-macchiato .textarea.has-fixed-size{resize:none}html.theme--catppuccin-macchiato .radio,html.theme--catppuccin-macchiato .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-macchiato .radio input,html.theme--catppuccin-macchiato .checkbox input{cursor:pointer}html.theme--catppuccin-macchiato .radio:hover,html.theme--catppuccin-macchiato .checkbox:hover{color:#91d7e3}html.theme--catppuccin-macchiato .radio[disabled],html.theme--catppuccin-macchiato .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .radio,fieldset[disabled] html.theme--catppuccin-macchiato .checkbox,html.theme--catppuccin-macchiato .radio input[disabled],html.theme--catppuccin-macchiato .checkbox input[disabled]{color:#f5f7fd;cursor:not-allowed}html.theme--catppuccin-macchiato .radio+.radio{margin-left:.5em}html.theme--catppuccin-macchiato .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-macchiato .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading)::after{border-color:#8aadf4;right:1.125em;z-index:4}html.theme--catppuccin-macchiato .select.is-rounded select,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-macchiato .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-macchiato .select select::-ms-expand{display:none}html.theme--catppuccin-macchiato .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-macchiato .select select:hover{border-color:#1e2030}html.theme--catppuccin-macchiato .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-macchiato .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-macchiato .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#91d7e3}html.theme--catppuccin-macchiato .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-macchiato .select.is-white select{border-color:#fff}html.theme--catppuccin-macchiato .select.is-white select:hover,html.theme--catppuccin-macchiato .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-macchiato .select.is-white select:focus,html.theme--catppuccin-macchiato .select.is-white select.is-focused,html.theme--catppuccin-macchiato .select.is-white select:active,html.theme--catppuccin-macchiato .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-macchiato .select.is-black select:hover,html.theme--catppuccin-macchiato .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-macchiato .select.is-black select:focus,html.theme--catppuccin-macchiato .select.is-black select.is-focused,html.theme--catppuccin-macchiato .select.is-black select:active,html.theme--catppuccin-macchiato .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-macchiato .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-macchiato .select.is-light select:hover,html.theme--catppuccin-macchiato .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-macchiato .select.is-light select:focus,html.theme--catppuccin-macchiato .select.is-light select.is-focused,html.theme--catppuccin-macchiato .select.is-light select:active,html.theme--catppuccin-macchiato .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .select.is-dark:not(:hover)::after,html.theme--catppuccin-macchiato .content kbd.select:not(:hover)::after{border-color:#363a4f}html.theme--catppuccin-macchiato .select.is-dark select,html.theme--catppuccin-macchiato .content kbd.select select{border-color:#363a4f}html.theme--catppuccin-macchiato .select.is-dark select:hover,html.theme--catppuccin-macchiato .content kbd.select select:hover,html.theme--catppuccin-macchiato .select.is-dark select.is-hovered,html.theme--catppuccin-macchiato .content kbd.select select.is-hovered{border-color:#2c2f40}html.theme--catppuccin-macchiato .select.is-dark select:focus,html.theme--catppuccin-macchiato .content kbd.select select:focus,html.theme--catppuccin-macchiato .select.is-dark select.is-focused,html.theme--catppuccin-macchiato .content kbd.select select.is-focused,html.theme--catppuccin-macchiato .select.is-dark select:active,html.theme--catppuccin-macchiato .content kbd.select select:active,html.theme--catppuccin-macchiato .select.is-dark select.is-active,html.theme--catppuccin-macchiato .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .select.is-primary:not(:hover)::after,html.theme--catppuccin-macchiato details.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-primary select,html.theme--catppuccin-macchiato details.docstring>section>a.select.docs-sourcelink select{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-primary select:hover,html.theme--catppuccin-macchiato details.docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-macchiato .select.is-primary select.is-hovered,html.theme--catppuccin-macchiato details.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#739df2}html.theme--catppuccin-macchiato .select.is-primary select:focus,html.theme--catppuccin-macchiato details.docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-macchiato .select.is-primary select.is-focused,html.theme--catppuccin-macchiato details.docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-macchiato .select.is-primary select:active,html.theme--catppuccin-macchiato details.docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-macchiato .select.is-primary select.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select.is-link:not(:hover)::after{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-link select{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-link select:hover,html.theme--catppuccin-macchiato .select.is-link select.is-hovered{border-color:#739df2}html.theme--catppuccin-macchiato .select.is-link select:focus,html.theme--catppuccin-macchiato .select.is-link select.is-focused,html.theme--catppuccin-macchiato .select.is-link select:active,html.theme--catppuccin-macchiato .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select.is-info:not(:hover)::after{border-color:#8bd5ca}html.theme--catppuccin-macchiato .select.is-info select{border-color:#8bd5ca}html.theme--catppuccin-macchiato .select.is-info select:hover,html.theme--catppuccin-macchiato .select.is-info select.is-hovered{border-color:#78cec1}html.theme--catppuccin-macchiato .select.is-info select:focus,html.theme--catppuccin-macchiato .select.is-info select.is-focused,html.theme--catppuccin-macchiato .select.is-info select:active,html.theme--catppuccin-macchiato .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .select.is-success:not(:hover)::after{border-color:#a6da95}html.theme--catppuccin-macchiato .select.is-success select{border-color:#a6da95}html.theme--catppuccin-macchiato .select.is-success select:hover,html.theme--catppuccin-macchiato .select.is-success select.is-hovered{border-color:#96d382}html.theme--catppuccin-macchiato .select.is-success select:focus,html.theme--catppuccin-macchiato .select.is-success select.is-focused,html.theme--catppuccin-macchiato .select.is-success select:active,html.theme--catppuccin-macchiato .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .select.is-warning:not(:hover)::after{border-color:#eed49f}html.theme--catppuccin-macchiato .select.is-warning select{border-color:#eed49f}html.theme--catppuccin-macchiato .select.is-warning select:hover,html.theme--catppuccin-macchiato .select.is-warning select.is-hovered{border-color:#eaca89}html.theme--catppuccin-macchiato .select.is-warning select:focus,html.theme--catppuccin-macchiato .select.is-warning select.is-focused,html.theme--catppuccin-macchiato .select.is-warning select:active,html.theme--catppuccin-macchiato .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .select.is-danger:not(:hover)::after{border-color:#ed8796}html.theme--catppuccin-macchiato .select.is-danger select{border-color:#ed8796}html.theme--catppuccin-macchiato .select.is-danger select:hover,html.theme--catppuccin-macchiato .select.is-danger select.is-hovered{border-color:#ea7183}html.theme--catppuccin-macchiato .select.is-danger select:focus,html.theme--catppuccin-macchiato .select.is-danger select.is-focused,html.theme--catppuccin-macchiato .select.is-danger select:active,html.theme--catppuccin-macchiato .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .select.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-macchiato .select.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .select.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .select.is-disabled::after{border-color:#f5f7fd !important;opacity:0.5}html.theme--catppuccin-macchiato .select.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .select.is-fullwidth select{width:100%}html.theme--catppuccin-macchiato .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-macchiato .select.is-loading.is-small:after,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-macchiato .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-macchiato .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-macchiato .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-macchiato .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:hover .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:focus .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:active .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-black:hover .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-black:focus .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-black:active .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:hover .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:focus .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:active .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-dark .file-cta,html.theme--catppuccin-macchiato .content kbd.file .file-cta{background-color:#363a4f;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-dark:hover .file-cta,html.theme--catppuccin-macchiato .content kbd.file:hover .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-hovered .file-cta{background-color:#313447;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-dark:focus .file-cta,html.theme--catppuccin-macchiato .content kbd.file:focus .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-focused .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,58,79,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-dark:active .file-cta,html.theme--catppuccin-macchiato .content kbd.file:active .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-active .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-active .file-cta{background-color:#2c2f40;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary .file-cta,html.theme--catppuccin-macchiato details.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary:hover .file-cta,html.theme--catppuccin-macchiato details.docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-macchiato details.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary:focus .file-cta,html.theme--catppuccin-macchiato details.docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-focused .file-cta,html.theme--catppuccin-macchiato details.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(138,173,244,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-primary:active .file-cta,html.theme--catppuccin-macchiato details.docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-active .file-cta,html.theme--catppuccin-macchiato details.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link .file-cta{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link:hover .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-hovered .file-cta{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link:focus .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(138,173,244,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-link:active .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-active .file-cta{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-info .file-cta{background-color:#8bd5ca;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:hover .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-hovered .file-cta{background-color:#82d2c6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:focus .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(139,213,202,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:active .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-active .file-cta{background-color:#78cec1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success .file-cta{background-color:#a6da95;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:hover .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-hovered .file-cta{background-color:#9ed78c;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:focus .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,218,149,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:active .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-active .file-cta{background-color:#96d382;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning .file-cta{background-color:#eed49f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:hover .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-hovered .file-cta{background-color:#eccf94;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:focus .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(238,212,159,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:active .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-active .file-cta{background-color:#eaca89;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-danger .file-cta{background-color:#ed8796;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-danger:hover .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-hovered .file-cta{background-color:#eb7c8c;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-danger:focus .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(237,135,150,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-danger:active .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-active .file-cta{background-color:#ea7183;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-macchiato .file.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .file.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-macchiato .file.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-macchiato .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-macchiato .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-macchiato .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-macchiato .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-macchiato .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-macchiato .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-macchiato .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-macchiato .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-macchiato .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-macchiato .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-macchiato .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-macchiato .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-macchiato .file.is-centered{justify-content:center}html.theme--catppuccin-macchiato .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-macchiato .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-macchiato .file.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-macchiato .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-macchiato .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-macchiato .file-label:hover .file-cta{background-color:#313447;color:#b5c1f1}html.theme--catppuccin-macchiato .file-label:hover .file-name{border-color:#565a71}html.theme--catppuccin-macchiato .file-label:active .file-cta{background-color:#2c2f40;color:#b5c1f1}html.theme--catppuccin-macchiato .file-label:active .file-name{border-color:#505469}html.theme--catppuccin-macchiato .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato .file-name{border-color:#5b6078;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-macchiato .file-cta{background-color:#363a4f;color:#cad3f5}html.theme--catppuccin-macchiato .file-name{border-color:#5b6078;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-macchiato .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-macchiato .file-icon .fa{font-size:14px}html.theme--catppuccin-macchiato .label{color:#b5c1f1;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-macchiato .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-macchiato .label.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-macchiato .label.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .label.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-macchiato .help.is-white{color:#fff}html.theme--catppuccin-macchiato .help.is-black{color:#0a0a0a}html.theme--catppuccin-macchiato .help.is-light{color:#f5f5f5}html.theme--catppuccin-macchiato .help.is-dark,html.theme--catppuccin-macchiato .content kbd.help{color:#363a4f}html.theme--catppuccin-macchiato .help.is-primary,html.theme--catppuccin-macchiato details.docstring>section>a.help.docs-sourcelink{color:#8aadf4}html.theme--catppuccin-macchiato .help.is-link{color:#8aadf4}html.theme--catppuccin-macchiato .help.is-info{color:#8bd5ca}html.theme--catppuccin-macchiato .help.is-success{color:#a6da95}html.theme--catppuccin-macchiato .help.is-warning{color:#eed49f}html.theme--catppuccin-macchiato .help.is-danger{color:#ed8796}html.theme--catppuccin-macchiato .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-macchiato .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-macchiato .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-macchiato .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-macchiato .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-macchiato .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-macchiato .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-macchiato .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-macchiato .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field.is-horizontal{display:flex}}html.theme--catppuccin-macchiato .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-macchiato .field-label.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-macchiato .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-macchiato .field-body .field{margin-bottom:0}html.theme--catppuccin-macchiato .field-body>.field{flex-shrink:1}html.theme--catppuccin-macchiato .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-macchiato .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-macchiato .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-macchiato .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select:focus~.icon{color:#363a4f}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-macchiato .control.has-icons-left .icon,html.theme--catppuccin-macchiato .control.has-icons-right .icon{color:#5b6078;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-macchiato .control.has-icons-left .input,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-macchiato .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-macchiato .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-macchiato .control.has-icons-right .input,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-macchiato .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-macchiato .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-macchiato .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-macchiato .control.is-loading.is-small:after,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-macchiato .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-macchiato .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-macchiato .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-macchiato .breadcrumb a{align-items:center;color:#8aadf4;display:initial;justify-content:center;padding:0 .75em}html.theme--catppuccin-macchiato .breadcrumb a:hover{color:#91d7e3}html.theme--catppuccin-macchiato .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-macchiato .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-macchiato .breadcrumb li.is-active a{color:#b5c1f1;cursor:default;pointer-events:none}html.theme--catppuccin-macchiato .breadcrumb li+li::before{color:#6e738d;content:"\0002f"}html.theme--catppuccin-macchiato .breadcrumb ul,html.theme--catppuccin-macchiato .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-macchiato .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-macchiato .breadcrumb.is-centered ol,html.theme--catppuccin-macchiato .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-macchiato .breadcrumb.is-right ol,html.theme--catppuccin-macchiato .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-macchiato .breadcrumb.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-macchiato .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-macchiato .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-macchiato .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-macchiato .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-macchiato .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#cad3f5;max-width:100%;position:relative}html.theme--catppuccin-macchiato .card-footer:first-child,html.theme--catppuccin-macchiato .card-content:first-child,html.theme--catppuccin-macchiato .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-macchiato .card-footer:last-child,html.theme--catppuccin-macchiato .card-content:last-child,html.theme--catppuccin-macchiato .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-macchiato .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-macchiato .card-header-title{align-items:center;color:#b5c1f1;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-macchiato .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-macchiato .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-macchiato .card-image{display:block;position:relative}html.theme--catppuccin-macchiato .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-macchiato .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-macchiato .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-macchiato .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-macchiato .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-macchiato .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-macchiato .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-macchiato .dropdown.is-active .dropdown-menu,html.theme--catppuccin-macchiato .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-macchiato .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-macchiato .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-macchiato .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-macchiato .dropdown-content{background-color:#1e2030;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-macchiato .dropdown-item{color:#cad3f5;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-macchiato a.dropdown-item,html.theme--catppuccin-macchiato button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-macchiato a.dropdown-item:hover,html.theme--catppuccin-macchiato button.dropdown-item:hover{background-color:#1e2030;color:#0a0a0a}html.theme--catppuccin-macchiato a.dropdown-item.is-active,html.theme--catppuccin-macchiato button.dropdown-item.is-active{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-macchiato .level{align-items:center;justify-content:space-between}html.theme--catppuccin-macchiato .level code{border-radius:.4em}html.theme--catppuccin-macchiato .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-macchiato .level.is-mobile{display:flex}html.theme--catppuccin-macchiato .level.is-mobile .level-left,html.theme--catppuccin-macchiato .level.is-mobile .level-right{display:flex}html.theme--catppuccin-macchiato .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-macchiato .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-macchiato .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level{display:flex}html.theme--catppuccin-macchiato .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-macchiato .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-macchiato .level-item .title,html.theme--catppuccin-macchiato .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-macchiato .level-left,html.theme--catppuccin-macchiato .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .level-left .level-item.is-flexible,html.theme--catppuccin-macchiato .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-left .level-item:not(:last-child),html.theme--catppuccin-macchiato .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-macchiato .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-left{display:flex}}html.theme--catppuccin-macchiato .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-right{display:flex}}html.theme--catppuccin-macchiato .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-macchiato .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-macchiato .media .media{border-top:1px solid rgba(91,96,120,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-macchiato .media .media .content:not(:last-child),html.theme--catppuccin-macchiato .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-macchiato .media .media .media{padding-top:.5rem}html.theme--catppuccin-macchiato .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-macchiato .media+.media{border-top:1px solid rgba(91,96,120,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-macchiato .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-macchiato .media-left,html.theme--catppuccin-macchiato .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .media-left{margin-right:1rem}html.theme--catppuccin-macchiato .media-right{margin-left:1rem}html.theme--catppuccin-macchiato .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .media-content{overflow-x:auto}}html.theme--catppuccin-macchiato .menu{font-size:1rem}html.theme--catppuccin-macchiato .menu.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-macchiato .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .menu.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .menu-list{line-height:1.25}html.theme--catppuccin-macchiato .menu-list a{border-radius:3px;color:#cad3f5;display:block;padding:0.5em 0.75em}html.theme--catppuccin-macchiato .menu-list a:hover{background-color:#1e2030;color:#b5c1f1}html.theme--catppuccin-macchiato .menu-list a.is-active{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .menu-list li ul{border-left:1px solid #5b6078;margin:.75em;padding-left:.75em}html.theme--catppuccin-macchiato .menu-label{color:#f5f7fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-macchiato .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-macchiato .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-macchiato .message{background-color:#1e2030;border-radius:.4em;font-size:1rem}html.theme--catppuccin-macchiato .message strong{color:currentColor}html.theme--catppuccin-macchiato .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-macchiato .message.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-macchiato .message.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .message.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .message.is-white{background-color:#fff}html.theme--catppuccin-macchiato .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-macchiato .message.is-black{background-color:#fafafa}html.theme--catppuccin-macchiato .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-macchiato .message.is-light{background-color:#fafafa}html.theme--catppuccin-macchiato .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-macchiato .message.is-dark,html.theme--catppuccin-macchiato .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-macchiato .message.is-dark .message-header,html.theme--catppuccin-macchiato .content kbd.message .message-header{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .message.is-dark .message-body,html.theme--catppuccin-macchiato .content kbd.message .message-body{border-color:#363a4f}html.theme--catppuccin-macchiato .message.is-primary,html.theme--catppuccin-macchiato details.docstring>section>a.message.docs-sourcelink{background-color:#ecf2fd}html.theme--catppuccin-macchiato .message.is-primary .message-header,html.theme--catppuccin-macchiato details.docstring>section>a.message.docs-sourcelink .message-header{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .message.is-primary .message-body,html.theme--catppuccin-macchiato details.docstring>section>a.message.docs-sourcelink .message-body{border-color:#8aadf4;color:#0e3b95}html.theme--catppuccin-macchiato .message.is-link{background-color:#ecf2fd}html.theme--catppuccin-macchiato .message.is-link .message-header{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .message.is-link .message-body{border-color:#8aadf4;color:#0e3b95}html.theme--catppuccin-macchiato .message.is-info{background-color:#f0faf8}html.theme--catppuccin-macchiato .message.is-info .message-header{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-info .message-body{border-color:#8bd5ca;color:#276d62}html.theme--catppuccin-macchiato .message.is-success{background-color:#f2faf0}html.theme--catppuccin-macchiato .message.is-success .message-header{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-success .message-body{border-color:#a6da95;color:#386e26}html.theme--catppuccin-macchiato .message.is-warning{background-color:#fcf7ee}html.theme--catppuccin-macchiato .message.is-warning .message-header{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-warning .message-body{border-color:#eed49f;color:#7e5c16}html.theme--catppuccin-macchiato .message.is-danger{background-color:#fcedef}html.theme--catppuccin-macchiato .message.is-danger .message-header{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .message.is-danger .message-body{border-color:#ed8796;color:#971729}html.theme--catppuccin-macchiato .message-header{align-items:center;background-color:#cad3f5;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-macchiato .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-macchiato .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .message-body{border-color:#5b6078;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#cad3f5;padding:1.25em 1.5em}html.theme--catppuccin-macchiato .message-body code,html.theme--catppuccin-macchiato .message-body pre{background-color:#fff}html.theme--catppuccin-macchiato .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-macchiato .modal.is-active{display:flex}html.theme--catppuccin-macchiato .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-macchiato .modal-content,html.theme--catppuccin-macchiato .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-macchiato .modal-content,html.theme--catppuccin-macchiato .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-macchiato .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-macchiato .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-macchiato .modal-card-head,html.theme--catppuccin-macchiato .modal-card-foot{align-items:center;background-color:#1e2030;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-macchiato .modal-card-head{border-bottom:1px solid #5b6078;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-macchiato .modal-card-title{color:#cad3f5;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-macchiato .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5b6078}html.theme--catppuccin-macchiato .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-macchiato .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#24273a;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-macchiato .navbar{background-color:#8aadf4;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-macchiato .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-macchiato .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-dark,html.theme--catppuccin-macchiato .content kbd.navbar{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-burger,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363a4f;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-primary,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-burger,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6da95;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#eed49f;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#ed8796;color:#fff}}html.theme--catppuccin-macchiato .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-macchiato .navbar.has-shadow{box-shadow:0 2px 0 0 #1e2030}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom,html.theme--catppuccin-macchiato .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #1e2030}html.theme--catppuccin-macchiato .navbar.is-fixed-top{top:0}html.theme--catppuccin-macchiato html.has-navbar-fixed-top,html.theme--catppuccin-macchiato body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-macchiato .navbar-brand,html.theme--catppuccin-macchiato .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-macchiato .navbar-brand a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-macchiato .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-macchiato .navbar-burger{color:#cad3f5;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-macchiato .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}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-macchiato .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-macchiato .navbar-menu{display:none}html.theme--catppuccin-macchiato .navbar-item,html.theme--catppuccin-macchiato .navbar-link{color:#cad3f5;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-macchiato .navbar-item .icon:only-child,html.theme--catppuccin-macchiato .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-macchiato a.navbar-item,html.theme--catppuccin-macchiato .navbar-link{cursor:pointer}html.theme--catppuccin-macchiato a.navbar-item:focus,html.theme--catppuccin-macchiato a.navbar-item:focus-within,html.theme--catppuccin-macchiato a.navbar-item:hover,html.theme--catppuccin-macchiato a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar-link:focus,html.theme--catppuccin-macchiato .navbar-link:focus-within,html.theme--catppuccin-macchiato .navbar-link:hover,html.theme--catppuccin-macchiato .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}html.theme--catppuccin-macchiato .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .navbar-item img{max-height:1.75rem}html.theme--catppuccin-macchiato .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-macchiato .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-macchiato .navbar-item.is-tab:focus,html.theme--catppuccin-macchiato .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#8aadf4;border-bottom-style:solid;border-bottom-width:3px;color:#8aadf4;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-macchiato .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-macchiato .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-macchiato .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-macchiato .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .navbar>.container{display:block}html.theme--catppuccin-macchiato .navbar-brand .navbar-item,html.theme--catppuccin-macchiato .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-macchiato .navbar-link::after{display:none}html.theme--catppuccin-macchiato .navbar-menu{background-color:#8aadf4;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-macchiato .navbar-menu.is-active{display:block}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch,html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-macchiato .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-macchiato html.has-navbar-fixed-top-touch,html.theme--catppuccin-macchiato body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar,html.theme--catppuccin-macchiato .navbar-menu,html.theme--catppuccin-macchiato .navbar-start,html.theme--catppuccin-macchiato .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-macchiato .navbar{min-height:4rem}html.theme--catppuccin-macchiato .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-start,html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-macchiato .navbar.is-spaced a.navbar-item,html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8087a2}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}html.theme--catppuccin-macchiato .navbar-burger{display:none}html.theme--catppuccin-macchiato .navbar-item,html.theme--catppuccin-macchiato .navbar-link{align-items:center;display:flex}html.theme--catppuccin-macchiato .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-macchiato .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-macchiato .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-macchiato .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-macchiato .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-macchiato .navbar-dropdown{background-color:#8aadf4;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-macchiato .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8087a2}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-macchiato .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-macchiato .navbar-divider{display:block}html.theme--catppuccin-macchiato .navbar>.container .navbar-brand,html.theme--catppuccin-macchiato .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-macchiato .navbar>.container .navbar-menu,html.theme--catppuccin-macchiato .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-macchiato .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-macchiato html.has-navbar-fixed-top-desktop,html.theme--catppuccin-macchiato body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-macchiato html.has-spaced-navbar-fixed-top,html.theme--catppuccin-macchiato body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-macchiato html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-macchiato body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-macchiato a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar-link.is-active{color:#8aadf4}html.theme--catppuccin-macchiato a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-macchiato .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-macchiato .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-macchiato .pagination.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-macchiato .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-previous,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-next,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-link,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-macchiato .pagination,html.theme--catppuccin-macchiato .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link{border-color:#5b6078;color:#8aadf4;min-width:2.5em}html.theme--catppuccin-macchiato .pagination-previous:hover,html.theme--catppuccin-macchiato .pagination-next:hover,html.theme--catppuccin-macchiato .pagination-link:hover{border-color:#6e738d;color:#91d7e3}html.theme--catppuccin-macchiato .pagination-previous:focus,html.theme--catppuccin-macchiato .pagination-next:focus,html.theme--catppuccin-macchiato .pagination-link:focus{border-color:#6e738d}html.theme--catppuccin-macchiato .pagination-previous:active,html.theme--catppuccin-macchiato .pagination-next:active,html.theme--catppuccin-macchiato .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-macchiato .pagination-previous[disabled],html.theme--catppuccin-macchiato .pagination-previous.is-disabled,html.theme--catppuccin-macchiato .pagination-next[disabled],html.theme--catppuccin-macchiato .pagination-next.is-disabled,html.theme--catppuccin-macchiato .pagination-link[disabled],html.theme--catppuccin-macchiato .pagination-link.is-disabled{background-color:#5b6078;border-color:#5b6078;box-shadow:none;color:#f5f7fd;opacity:0.5}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-macchiato .pagination-link.is-current{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .pagination-ellipsis{color:#6e738d;pointer-events:none}html.theme--catppuccin-macchiato .pagination-list{flex-wrap:wrap}html.theme--catppuccin-macchiato .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .pagination{flex-wrap:wrap}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-macchiato .pagination-previous{order:2}html.theme--catppuccin-macchiato .pagination-next{order:3}html.theme--catppuccin-macchiato .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-macchiato .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-macchiato .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-macchiato .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-macchiato .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-macchiato .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-macchiato .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-macchiato .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-macchiato .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-macchiato .panel.is-dark .panel-heading,html.theme--catppuccin-macchiato .content kbd.panel .panel-heading{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-macchiato .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363a4f}html.theme--catppuccin-macchiato .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-macchiato .content kbd.panel .panel-block.is-active .panel-icon{color:#363a4f}html.theme--catppuccin-macchiato .panel.is-primary .panel-heading,html.theme--catppuccin-macchiato details.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-macchiato details.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-link .panel-heading{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .panel.is-link .panel-tabs a.is-active{border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-link .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-info .panel-heading{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-info .panel-tabs a.is-active{border-bottom-color:#8bd5ca}html.theme--catppuccin-macchiato .panel.is-info .panel-block.is-active .panel-icon{color:#8bd5ca}html.theme--catppuccin-macchiato .panel.is-success .panel-heading{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6da95}html.theme--catppuccin-macchiato .panel.is-success .panel-block.is-active .panel-icon{color:#a6da95}html.theme--catppuccin-macchiato .panel.is-warning .panel-heading{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#eed49f}html.theme--catppuccin-macchiato .panel.is-warning .panel-block.is-active .panel-icon{color:#eed49f}html.theme--catppuccin-macchiato .panel.is-danger .panel-heading{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#ed8796}html.theme--catppuccin-macchiato .panel.is-danger .panel-block.is-active .panel-icon{color:#ed8796}html.theme--catppuccin-macchiato .panel-tabs:not(:last-child),html.theme--catppuccin-macchiato .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-macchiato .panel-heading{background-color:#494d64;border-radius:8px 8px 0 0;color:#b5c1f1;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-macchiato .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-macchiato .panel-tabs a{border-bottom:1px solid #5b6078;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-macchiato .panel-tabs a.is-active{border-bottom-color:#494d64;color:#739df2}html.theme--catppuccin-macchiato .panel-list a{color:#cad3f5}html.theme--catppuccin-macchiato .panel-list a:hover{color:#8aadf4}html.theme--catppuccin-macchiato .panel-block{align-items:center;color:#b5c1f1;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-macchiato .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-macchiato .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-macchiato .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-macchiato .panel-block.is-active{border-left-color:#8aadf4;color:#739df2}html.theme--catppuccin-macchiato .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-macchiato a.panel-block,html.theme--catppuccin-macchiato label.panel-block{cursor:pointer}html.theme--catppuccin-macchiato a.panel-block:hover,html.theme--catppuccin-macchiato label.panel-block:hover{background-color:#1e2030}html.theme--catppuccin-macchiato .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f5f7fd;margin-right:.75em}html.theme--catppuccin-macchiato .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-macchiato .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}html.theme--catppuccin-macchiato .tabs a{align-items:center;border-bottom-color:#5b6078;border-bottom-style:solid;border-bottom-width:1px;color:#cad3f5;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-macchiato .tabs a:hover{border-bottom-color:#b5c1f1;color:#b5c1f1}html.theme--catppuccin-macchiato .tabs li{display:block}html.theme--catppuccin-macchiato .tabs li.is-active a{border-bottom-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .tabs ul{align-items:center;border-bottom-color:#5b6078;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-macchiato .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-macchiato .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-macchiato .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-macchiato .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-macchiato .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-macchiato .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-macchiato .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-macchiato .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-macchiato .tabs.is-boxed a:hover{background-color:#1e2030;border-bottom-color:#5b6078}html.theme--catppuccin-macchiato .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5b6078;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-macchiato .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .tabs.is-toggle a{border-color:#5b6078;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-macchiato .tabs.is-toggle a:hover{background-color:#1e2030;border-color:#6e738d;z-index:2}html.theme--catppuccin-macchiato .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-macchiato .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-macchiato .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-macchiato .tabs.is-toggle li.is-active a{background-color:#8aadf4;border-color:#8aadf4;color:#fff;z-index:1}html.theme--catppuccin-macchiato .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-macchiato .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-macchiato .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-macchiato .tabs.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-macchiato .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .column.is-narrow,html.theme--catppuccin-macchiato .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full,html.theme--catppuccin-macchiato .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters,html.theme--catppuccin-macchiato .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds,html.theme--catppuccin-macchiato .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half,html.theme--catppuccin-macchiato .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third,html.theme--catppuccin-macchiato .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter,html.theme--catppuccin-macchiato .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth,html.theme--catppuccin-macchiato .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths,html.theme--catppuccin-macchiato .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths,html.theme--catppuccin-macchiato .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths,html.theme--catppuccin-macchiato .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters,html.theme--catppuccin-macchiato .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds,html.theme--catppuccin-macchiato .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half,html.theme--catppuccin-macchiato .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third,html.theme--catppuccin-macchiato .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter,html.theme--catppuccin-macchiato .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth,html.theme--catppuccin-macchiato .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths,html.theme--catppuccin-macchiato .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths,html.theme--catppuccin-macchiato .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths,html.theme--catppuccin-macchiato .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0,html.theme--catppuccin-macchiato .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0,html.theme--catppuccin-macchiato .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1,html.theme--catppuccin-macchiato .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1,html.theme--catppuccin-macchiato .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2,html.theme--catppuccin-macchiato .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2,html.theme--catppuccin-macchiato .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3,html.theme--catppuccin-macchiato .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3,html.theme--catppuccin-macchiato .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4,html.theme--catppuccin-macchiato .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4,html.theme--catppuccin-macchiato .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5,html.theme--catppuccin-macchiato .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5,html.theme--catppuccin-macchiato .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6,html.theme--catppuccin-macchiato .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6,html.theme--catppuccin-macchiato .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7,html.theme--catppuccin-macchiato .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7,html.theme--catppuccin-macchiato .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8,html.theme--catppuccin-macchiato .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8,html.theme--catppuccin-macchiato .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9,html.theme--catppuccin-macchiato .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9,html.theme--catppuccin-macchiato .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10,html.theme--catppuccin-macchiato .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10,html.theme--catppuccin-macchiato .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11,html.theme--catppuccin-macchiato .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11,html.theme--catppuccin-macchiato .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12,html.theme--catppuccin-macchiato .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12,html.theme--catppuccin-macchiato .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-macchiato .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-macchiato .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-macchiato .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-macchiato .columns.is-centered{justify-content:center}html.theme--catppuccin-macchiato .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-macchiato .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-macchiato .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-macchiato .columns.is-mobile{display:flex}html.theme--catppuccin-macchiato .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-macchiato .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-desktop{display:flex}}html.theme--catppuccin-macchiato .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-macchiato .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-macchiato .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-macchiato .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-macchiato .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-macchiato .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-macchiato .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-macchiato .tile.is-child{margin:0 !important}html.theme--catppuccin-macchiato .tile.is-parent{padding:.75rem}html.theme--catppuccin-macchiato .tile.is-vertical{flex-direction:column}html.theme--catppuccin-macchiato .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .tile:not(.is-child){display:flex}html.theme--catppuccin-macchiato .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .tile.is-3{flex:none;width:25%}html.theme--catppuccin-macchiato .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .tile.is-6{flex:none;width:50%}html.theme--catppuccin-macchiato .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .tile.is-9{flex:none;width:75%}html.theme--catppuccin-macchiato .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-macchiato .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-macchiato .hero .navbar{background:none}html.theme--catppuccin-macchiato .hero .tabs ul{border-bottom:none}html.theme--catppuccin-macchiato .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-white strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-macchiato .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-macchiato .hero.is-white .navbar-item,html.theme--catppuccin-macchiato .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-macchiato .hero.is-white a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-white .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-macchiato .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-black strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-black .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-macchiato .hero.is-black .navbar-item,html.theme--catppuccin-macchiato .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-black a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-black .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-macchiato .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-light strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-macchiato .hero.is-light .navbar-item,html.theme--catppuccin-macchiato .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-light .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-macchiato .hero.is-dark,html.theme--catppuccin-macchiato .content kbd.hero{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-dark strong,html.theme--catppuccin-macchiato .content kbd.hero strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-dark .title,html.theme--catppuccin-macchiato .content kbd.hero .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .subtitle,html.theme--catppuccin-macchiato .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-macchiato .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-dark .subtitle strong,html.theme--catppuccin-macchiato .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-dark .navbar-menu,html.theme--catppuccin-macchiato .content kbd.hero .navbar-menu{background-color:#363a4f}}html.theme--catppuccin-macchiato .hero.is-dark .navbar-item,html.theme--catppuccin-macchiato .content kbd.hero .navbar-item,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .tabs a,html.theme--catppuccin-macchiato .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-dark .tabs a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs li.is-active a{color:#363a4f !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .hero.is-dark.is-bold,html.theme--catppuccin-macchiato .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1d2535 0%, #363a4f 71%, #3d3c62 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-macchiato .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1d2535 0%, #363a4f 71%, #3d3c62 100%)}}html.theme--catppuccin-macchiato .hero.is-primary,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-primary strong,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-primary .title,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .subtitle,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-primary .subtitle strong,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-primary .navbar-menu,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#8aadf4}}html.theme--catppuccin-macchiato .hero.is-primary .navbar-item,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link:hover,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .tabs a,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-primary .tabs a:hover,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#8aadf4 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .hero.is-primary.is-bold,html.theme--catppuccin-macchiato details.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-macchiato details.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}}html.theme--catppuccin-macchiato .hero.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-link strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-link .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-link .navbar-menu{background-color:#8aadf4}}html.theme--catppuccin-macchiato .hero.is-link .navbar-item,html.theme--catppuccin-macchiato .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-link a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-link .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-link .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-link .tabs li.is-active a{color:#8aadf4 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .hero.is-link.is-bold{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}}html.theme--catppuccin-macchiato .hero.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-info strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-info .navbar-menu{background-color:#8bd5ca}}html.theme--catppuccin-macchiato .hero.is-info .navbar-item,html.theme--catppuccin-macchiato .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-info .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-info .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-info .tabs li.is-active a{color:#8bd5ca !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .hero.is-info.is-bold{background-image:linear-gradient(141deg, #5bd2ac 0%, #8bd5ca 71%, #9adedf 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #5bd2ac 0%, #8bd5ca 71%, #9adedf 100%)}}html.theme--catppuccin-macchiato .hero.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-success strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-success .navbar-menu{background-color:#a6da95}}html.theme--catppuccin-macchiato .hero.is-success .navbar-item,html.theme--catppuccin-macchiato .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-success .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-success .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-success .tabs li.is-active a{color:#a6da95 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .hero.is-success.is-bold{background-image:linear-gradient(141deg, #94d765 0%, #a6da95 71%, #aae4a5 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #94d765 0%, #a6da95 71%, #aae4a5 100%)}}html.theme--catppuccin-macchiato .hero.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-warning strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-warning .navbar-menu{background-color:#eed49f}}html.theme--catppuccin-macchiato .hero.is-warning .navbar-item,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-warning .tabs li.is-active a{color:#eed49f !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #efae6b 0%, #eed49f 71%, #f4e9b2 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #efae6b 0%, #eed49f 71%, #f4e9b2 100%)}}html.theme--catppuccin-macchiato .hero.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-danger strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-danger .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-danger .navbar-menu{background-color:#ed8796}}html.theme--catppuccin-macchiato .hero.is-danger .navbar-item,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-danger .tabs li.is-active a{color:#ed8796 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #f05183 0%, #ed8796 71%, #f39c9a 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f05183 0%, #ed8796 71%, #f39c9a 100%)}}html.theme--catppuccin-macchiato .hero.is-small .hero-body,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-macchiato .hero.is-halfheight .hero-body,html.theme--catppuccin-macchiato .hero.is-fullheight .hero-body,html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-macchiato .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-macchiato .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-macchiato .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-macchiato .hero-video{overflow:hidden}html.theme--catppuccin-macchiato .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-macchiato .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero-video{display:none}}html.theme--catppuccin-macchiato .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero-buttons .button{display:flex}html.theme--catppuccin-macchiato .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-macchiato .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-macchiato .hero-head,html.theme--catppuccin-macchiato .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero-body{padding:3rem 3rem}}html.theme--catppuccin-macchiato .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .section{padding:3rem 3rem}html.theme--catppuccin-macchiato .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-macchiato .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-macchiato .footer{background-color:#1e2030;padding:3rem 1.5rem 6rem}html.theme--catppuccin-macchiato h1 .docs-heading-anchor,html.theme--catppuccin-macchiato h1 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h1 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h2 .docs-heading-anchor,html.theme--catppuccin-macchiato h2 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h2 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h3 .docs-heading-anchor,html.theme--catppuccin-macchiato h3 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h3 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h4 .docs-heading-anchor,html.theme--catppuccin-macchiato h4 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h4 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h5 .docs-heading-anchor,html.theme--catppuccin-macchiato h5 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h5 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h6 .docs-heading-anchor,html.theme--catppuccin-macchiato h6 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h6 .docs-heading-anchor:visited{color:#cad3f5}html.theme--catppuccin-macchiato h1 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h2 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h3 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h4 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h5 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-macchiato h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-macchiato h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-macchiato .docs-light-only{display:none !important}html.theme--catppuccin-macchiato pre{position:relative;overflow:hidden}html.theme--catppuccin-macchiato pre code,html.theme--catppuccin-macchiato pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-macchiato pre code:first-of-type,html.theme--catppuccin-macchiato pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-macchiato pre code:last-of-type,html.theme--catppuccin-macchiato pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-macchiato pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#cad3f5;cursor:pointer;text-align:center}html.theme--catppuccin-macchiato pre .copy-button:focus,html.theme--catppuccin-macchiato pre .copy-button:hover{opacity:1;background:rgba(202,211,245,0.1);color:#8aadf4}html.theme--catppuccin-macchiato pre .copy-button.success{color:#a6da95;opacity:1}html.theme--catppuccin-macchiato pre .copy-button.error{color:#ed8796;opacity:1}html.theme--catppuccin-macchiato pre:hover .copy-button{opacity:1}html.theme--catppuccin-macchiato .link-icon:hover{color:#8aadf4}html.theme--catppuccin-macchiato .admonition{background-color:#1e2030;border-style:solid;border-width:2px;border-color:#b8c0e0;border-radius:4px;font-size:1rem}html.theme--catppuccin-macchiato .admonition strong{color:currentColor}html.theme--catppuccin-macchiato .admonition.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-macchiato .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .admonition.is-default{background-color:#1e2030;border-color:#b8c0e0}html.theme--catppuccin-macchiato .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#b8c0e0}html.theme--catppuccin-macchiato .admonition.is-default>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-info{background-color:#1e2030;border-color:#8bd5ca}html.theme--catppuccin-macchiato .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#8bd5ca}html.theme--catppuccin-macchiato .admonition.is-info>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-success{background-color:#1e2030;border-color:#a6da95}html.theme--catppuccin-macchiato .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6da95}html.theme--catppuccin-macchiato .admonition.is-success>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-warning{background-color:#1e2030;border-color:#eed49f}html.theme--catppuccin-macchiato .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#eed49f}html.theme--catppuccin-macchiato .admonition.is-warning>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-danger{background-color:#1e2030;border-color:#ed8796}html.theme--catppuccin-macchiato .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#ed8796}html.theme--catppuccin-macchiato .admonition.is-danger>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-compat{background-color:#1e2030;border-color:#91d7e3}html.theme--catppuccin-macchiato .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#91d7e3}html.theme--catppuccin-macchiato .admonition.is-compat>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-todo{background-color:#1e2030;border-color:#c6a0f6}html.theme--catppuccin-macchiato .admonition.is-todo>.admonition-header{background-color:rgba(0,0,0,0);color:#c6a0f6}html.theme--catppuccin-macchiato .admonition.is-todo>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition-header{color:#b8c0e0;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-macchiato .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-macchiato .admonition-header .admonition-anchor{opacity:0;margin-left:0.5em;font-size:0.75em;color:inherit;text-decoration:none;transition:opacity 0.2s ease-in-out}html.theme--catppuccin-macchiato .admonition-header .admonition-anchor:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-macchiato .admonition-header .admonition-anchor:hover{opacity:1 !important;text-decoration:none}html.theme--catppuccin-macchiato .admonition-header:hover .admonition-anchor{opacity:0.8}html.theme--catppuccin-macchiato details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-macchiato details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-macchiato details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-macchiato .admonition-body{color:#cad3f5;padding:0.5rem .75rem}html.theme--catppuccin-macchiato .admonition-body pre{background-color:#1e2030}html.theme--catppuccin-macchiato .admonition-body code{background-color:#1e2030}html.theme--catppuccin-macchiato details.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #5b6078;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-macchiato details.docstring>summary{list-style-type:none;align-items:stretch;padding:0.5rem .75rem;background-color:#1e2030;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5b6078;overflow:auto}html.theme--catppuccin-macchiato details.docstring>summary code{background-color:transparent}html.theme--catppuccin-macchiato details.docstring>summary .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-macchiato details.docstring>summary .docstring-binding{margin-right:0.3em}html.theme--catppuccin-macchiato details.docstring>summary .docstring-category{margin-left:0.3em}html.theme--catppuccin-macchiato details.docstring>summary::before{content:'\f054';font-family:"Font Awesome 6 Free";font-weight:900;min-width:1.1rem;color:#2E63BD;display:inline-block}html.theme--catppuccin-macchiato details.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5b6078}html.theme--catppuccin-macchiato details.docstring>section:last-child{border-bottom:none}html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-macchiato details.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-macchiato details.docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-macchiato details.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-macchiato details.docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-macchiato details.docstring[open]>summary::before{content:"\f078"}html.theme--catppuccin-macchiato .documenter-example-output{background-color:#24273a}html.theme--catppuccin-macchiato .warning-overlay-base,html.theme--catppuccin-macchiato .dev-warning-overlay,html.theme--catppuccin-macchiato .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-macchiato .warning-overlay-base .outdated-warning-closer,html.theme--catppuccin-macchiato .dev-warning-overlay .outdated-warning-closer,html.theme--catppuccin-macchiato .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-macchiato .warning-overlay-base a,html.theme--catppuccin-macchiato .dev-warning-overlay a,html.theme--catppuccin-macchiato .outdated-warning-overlay a{color:#8aadf4}html.theme--catppuccin-macchiato .warning-overlay-base a:hover,html.theme--catppuccin-macchiato .dev-warning-overlay a:hover,html.theme--catppuccin-macchiato .outdated-warning-overlay a:hover{color:#91d7e3}html.theme--catppuccin-macchiato .outdated-warning-overlay{background-color:#1e2030;color:#cad3f5;border-bottom:3px solid rgba(0,0,0,0)}html.theme--catppuccin-macchiato .dev-warning-overlay{background-color:#1e2030;color:#cad3f5;border-bottom:3px solid rgba(0,0,0,0)}html.theme--catppuccin-macchiato .footnote-reference{position:relative;display:inline-block}html.theme--catppuccin-macchiato .footnote-preview{display:none;position:absolute;z-index:1000;max-width:300px;width:max-content;background-color:#24273a;border:1px solid #91d7e3;padding:10px;border-radius:5px;top:calc(100% + 10px);left:50%;transform:translateX(-50%);box-sizing:border-box;--arrow-left: 50%}html.theme--catppuccin-macchiato .footnote-preview::before{content:"";position:absolute;top:-10px;left:var(--arrow-left);transform:translateX(-50%);border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #91d7e3}html.theme--catppuccin-macchiato .content pre{border:2px solid #5b6078;border-radius:4px}html.theme--catppuccin-macchiato .content code{font-weight:inherit}html.theme--catppuccin-macchiato .content a code{color:#8aadf4}html.theme--catppuccin-macchiato .content a:hover code{color:#91d7e3}html.theme--catppuccin-macchiato .content h1 code,html.theme--catppuccin-macchiato .content h2 code,html.theme--catppuccin-macchiato .content h3 code,html.theme--catppuccin-macchiato .content h4 code,html.theme--catppuccin-macchiato .content h5 code,html.theme--catppuccin-macchiato .content h6 code{color:#cad3f5}html.theme--catppuccin-macchiato .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-macchiato .content blockquote>ul:first-child,html.theme--catppuccin-macchiato .content blockquote>ol:first-child,html.theme--catppuccin-macchiato .content .admonition-body>ul:first-child,html.theme--catppuccin-macchiato .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-macchiato pre,html.theme--catppuccin-macchiato code{font-variant-ligatures:no-contextual}html.theme--catppuccin-macchiato .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-macchiato .breadcrumb a.is-disabled,html.theme--catppuccin-macchiato .breadcrumb a.is-disabled:hover{color:#b5c1f1}html.theme--catppuccin-macchiato .hljs{background:initial !important}html.theme--catppuccin-macchiato .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-macchiato .katex-display,html.theme--catppuccin-macchiato mjx-container,html.theme--catppuccin-macchiato .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-macchiato html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-macchiato li.no-marker{list-style:none}html.theme--catppuccin-macchiato #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-macchiato #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main{width:100%}html.theme--catppuccin-macchiato #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-macchiato #documenter .docs-main>header,html.theme--catppuccin-macchiato #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar{background-color:#24273a;border-bottom:1px solid #5b6078;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow:hidden}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes{border-top:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li details.docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-macchiato .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5b6078;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-macchiato #documenter .docs-sidebar{display:flex;flex-direction:column;color:#cad3f5;background-color:#1e2030;border-right:1px solid #5b6078;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-macchiato #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name a:hover{color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5b6078;display:none;padding:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5b6078;padding-bottom:1.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#cad3f5;background:#1e2030}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#cad3f5;background-color:#26283d}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5b6078;border-bottom:1px solid #5b6078;background-color:#181926}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#181926;color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#26283d;color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#2e3149}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#3d4162}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#2e3149}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#3d4162}}html.theme--catppuccin-macchiato kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-macchiato .search-min-width-50{min-width:50%}html.theme--catppuccin-macchiato .search-min-height-100{min-height:100%}html.theme--catppuccin-macchiato .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-macchiato .search-result-link{border-radius:0.7em;transition:all 300ms;border:1px solid transparent}html.theme--catppuccin-macchiato .search-result-link:hover,html.theme--catppuccin-macchiato .search-result-link:focus{background-color:rgba(0,128,128,0.1);outline:none;border-color:#8bd5ca}html.theme--catppuccin-macchiato .search-result-link .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-macchiato .property-search-result-badge,html.theme--catppuccin-macchiato .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-macchiato .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:hover .search-filter,html.theme--catppuccin-macchiato .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-macchiato .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-macchiato .search-filter:hover,html.theme--catppuccin-macchiato .search-filter:focus{color:#333}html.theme--catppuccin-macchiato .search-filter-selected{color:#363a4f;background-color:#b7bdf8}html.theme--catppuccin-macchiato .search-filter-selected:hover,html.theme--catppuccin-macchiato .search-filter-selected:focus{color:#363a4f}html.theme--catppuccin-macchiato .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-macchiato .search-divider{border-bottom:1px solid #5b6078}html.theme--catppuccin-macchiato .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-macchiato .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-macchiato .w-100{width:100%}html.theme--catppuccin-macchiato .gap-2{gap:0.5rem}html.theme--catppuccin-macchiato .gap-4{gap:1rem}html.theme--catppuccin-macchiato .gap-8{gap:2rem}html.theme--catppuccin-macchiato{background-color:#24273a;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-macchiato a{transition:all 200ms ease}html.theme--catppuccin-macchiato .label{color:#cad3f5}html.theme--catppuccin-macchiato .button,html.theme--catppuccin-macchiato .control.has-icons-left .icon,html.theme--catppuccin-macchiato .control.has-icons-right .icon,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .select,html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea{height:2.5em;color:#cad3f5}html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#cad3f5}html.theme--catppuccin-macchiato .select:after,html.theme--catppuccin-macchiato .select select{border-width:1px}html.theme--catppuccin-macchiato .menu-list a{transition:all 300ms ease}html.theme--catppuccin-macchiato .modal-card-foot,html.theme--catppuccin-macchiato .modal-card-head{border-color:#5b6078}html.theme--catppuccin-macchiato .navbar{border-radius:.4em}html.theme--catppuccin-macchiato .navbar.is-transparent{background:none}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .navbar .navbar-menu{background-color:#8aadf4;border-radius:0 0 .4em .4em}}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){color:#363a4f}html.theme--catppuccin-macchiato .tag.is-link:not(body),html.theme--catppuccin-macchiato details.docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-macchiato .content kbd.is-link:not(body){color:#363a4f}html.theme--catppuccin-macchiato .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-macchiato .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-macchiato .ansi span.sgr3{font-style:italic}html.theme--catppuccin-macchiato .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-macchiato .ansi span.sgr7{color:#24273a;background-color:#cad3f5}html.theme--catppuccin-macchiato .ansi span.sgr8{color:transparent}html.theme--catppuccin-macchiato .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-macchiato .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-macchiato .ansi span.sgr30{color:#494d64}html.theme--catppuccin-macchiato .ansi span.sgr31{color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr32{color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr33{color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr34{color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr35{color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr36{color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr37{color:#b8c0e0}html.theme--catppuccin-macchiato .ansi span.sgr40{background-color:#494d64}html.theme--catppuccin-macchiato .ansi span.sgr41{background-color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr42{background-color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr43{background-color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr44{background-color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr45{background-color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr46{background-color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr47{background-color:#b8c0e0}html.theme--catppuccin-macchiato .ansi span.sgr90{color:#5b6078}html.theme--catppuccin-macchiato .ansi span.sgr91{color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr92{color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr93{color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr94{color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr95{color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr96{color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr97{color:#a5adcb}html.theme--catppuccin-macchiato .ansi span.sgr100{background-color:#5b6078}html.theme--catppuccin-macchiato .ansi span.sgr101{background-color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr102{background-color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr103{background-color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr104{background-color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr105{background-color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr106{background-color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr107{background-color:#a5adcb}html.theme--catppuccin-macchiato code.language-julia-repl>span.hljs-meta{color:#a6da95;font-weight:bolder}html.theme--catppuccin-macchiato code .hljs{color:#cad3f5;background:#24273a}html.theme--catppuccin-macchiato code .hljs-keyword{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-built_in{color:#ed8796}html.theme--catppuccin-macchiato code .hljs-type{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-literal{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-number{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-operator{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-punctuation{color:#b8c0e0}html.theme--catppuccin-macchiato code .hljs-property{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-regexp{color:#f5bde6}html.theme--catppuccin-macchiato code .hljs-string{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-char.escape_{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-subst{color:#a5adcb}html.theme--catppuccin-macchiato code .hljs-symbol{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-variable{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-variable.language_{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-variable.constant_{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-title{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-title.class_{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-title.function_{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-params{color:#cad3f5}html.theme--catppuccin-macchiato code .hljs-comment{color:#5b6078}html.theme--catppuccin-macchiato code .hljs-doctag{color:#ed8796}html.theme--catppuccin-macchiato code .hljs-meta{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-section{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-tag{color:#a5adcb}html.theme--catppuccin-macchiato code .hljs-name{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-attr{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-attribute{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-bullet{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-code{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-emphasis{color:#ed8796;font-style:italic}html.theme--catppuccin-macchiato code .hljs-strong{color:#ed8796;font-weight:bold}html.theme--catppuccin-macchiato code .hljs-formula{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-link{color:#7dc4e4;font-style:italic}html.theme--catppuccin-macchiato code .hljs-quote{color:#a6da95;font-style:italic}html.theme--catppuccin-macchiato code .hljs-selector-tag{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-selector-id{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-selector-class{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-selector-attr{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-selector-pseudo{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-template-tag{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-template-variable{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-addition{color:#a6da95;background:rgba(166,227,161,0.15)}html.theme--catppuccin-macchiato code .hljs-deletion{color:#ed8796;background:rgba(243,139,168,0.15)}html.theme--catppuccin-macchiato .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover,html.theme--catppuccin-macchiato .search-result-link:focus{background-color:#363a4f}html.theme--catppuccin-macchiato .search-result-link .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:hover .search-filter,html.theme--catppuccin-macchiato .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:focus .search-filter{color:#363a4f !important;background-color:#b7bdf8 !important}html.theme--catppuccin-macchiato .search-result-title{color:#cad3f5}html.theme--catppuccin-macchiato .search-result-highlight{background-color:#ed8796;color:#1e2030}html.theme--catppuccin-macchiato .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-macchiato .w-100{width:100%}html.theme--catppuccin-macchiato .gap-2{gap:0.5rem}html.theme--catppuccin-macchiato .gap-4{gap:1rem} diff --git a/.save/docs/build/assets/themes/catppuccin-mocha.css b/.save/docs/build/assets/themes/catppuccin-mocha.css new file mode 100644 index 00000000..8ade7cd1 --- /dev/null +++ b/.save/docs/build/assets/themes/catppuccin-mocha.css @@ -0,0 +1 @@ +html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha .file-name,html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-mocha .pagination-previous:focus,html.theme--catppuccin-mocha .pagination-next:focus,html.theme--catppuccin-mocha .pagination-link:focus,html.theme--catppuccin-mocha .pagination-ellipsis:focus,html.theme--catppuccin-mocha .file-cta:focus,html.theme--catppuccin-mocha .file-name:focus,html.theme--catppuccin-mocha .select select:focus,html.theme--catppuccin-mocha .textarea:focus,html.theme--catppuccin-mocha .input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-mocha .button:focus,html.theme--catppuccin-mocha .is-focused.pagination-previous,html.theme--catppuccin-mocha .is-focused.pagination-next,html.theme--catppuccin-mocha .is-focused.pagination-link,html.theme--catppuccin-mocha .is-focused.pagination-ellipsis,html.theme--catppuccin-mocha .is-focused.file-cta,html.theme--catppuccin-mocha .is-focused.file-name,html.theme--catppuccin-mocha .select select.is-focused,html.theme--catppuccin-mocha .is-focused.textarea,html.theme--catppuccin-mocha .is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-focused.button,html.theme--catppuccin-mocha .pagination-previous:active,html.theme--catppuccin-mocha .pagination-next:active,html.theme--catppuccin-mocha .pagination-link:active,html.theme--catppuccin-mocha .pagination-ellipsis:active,html.theme--catppuccin-mocha .file-cta:active,html.theme--catppuccin-mocha .file-name:active,html.theme--catppuccin-mocha .select select:active,html.theme--catppuccin-mocha .textarea:active,html.theme--catppuccin-mocha .input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-mocha .button:active,html.theme--catppuccin-mocha .is-active.pagination-previous,html.theme--catppuccin-mocha .is-active.pagination-next,html.theme--catppuccin-mocha .is-active.pagination-link,html.theme--catppuccin-mocha .is-active.pagination-ellipsis,html.theme--catppuccin-mocha .is-active.file-cta,html.theme--catppuccin-mocha .is-active.file-name,html.theme--catppuccin-mocha .select select.is-active,html.theme--catppuccin-mocha .is-active.textarea,html.theme--catppuccin-mocha .is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .is-active.button{outline:none}html.theme--catppuccin-mocha .pagination-previous[disabled],html.theme--catppuccin-mocha .pagination-next[disabled],html.theme--catppuccin-mocha .pagination-link[disabled],html.theme--catppuccin-mocha .pagination-ellipsis[disabled],html.theme--catppuccin-mocha .file-cta[disabled],html.theme--catppuccin-mocha .file-name[disabled],html.theme--catppuccin-mocha .select select[disabled],html.theme--catppuccin-mocha .textarea[disabled],html.theme--catppuccin-mocha .input[disabled],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-mocha .button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-mocha .file-name,html.theme--catppuccin-mocha fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-mocha .select select,fieldset[disabled] html.theme--catppuccin-mocha .textarea,fieldset[disabled] html.theme--catppuccin-mocha .input,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha fieldset[disabled] .select select,html.theme--catppuccin-mocha .select fieldset[disabled] select,html.theme--catppuccin-mocha fieldset[disabled] .textarea,html.theme--catppuccin-mocha fieldset[disabled] .input,html.theme--catppuccin-mocha fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-mocha .button,html.theme--catppuccin-mocha fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-mocha .tabs,html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .breadcrumb,html.theme--catppuccin-mocha .file,html.theme--catppuccin-mocha .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--catppuccin-mocha .admonition:not(:last-child),html.theme--catppuccin-mocha .tabs:not(:last-child),html.theme--catppuccin-mocha .pagination:not(:last-child),html.theme--catppuccin-mocha .message:not(:last-child),html.theme--catppuccin-mocha .level:not(:last-child),html.theme--catppuccin-mocha .breadcrumb:not(:last-child),html.theme--catppuccin-mocha .block:not(:last-child),html.theme--catppuccin-mocha .title:not(:last-child),html.theme--catppuccin-mocha .subtitle:not(:last-child),html.theme--catppuccin-mocha .table-container:not(:last-child),html.theme--catppuccin-mocha .table:not(:last-child),html.theme--catppuccin-mocha .progress:not(:last-child),html.theme--catppuccin-mocha .notification:not(:last-child),html.theme--catppuccin-mocha .content:not(:last-child),html.theme--catppuccin-mocha .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .modal-close,html.theme--catppuccin-mocha .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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:none;position:relative;vertical-align:top;width:20px}html.theme--catppuccin-mocha .modal-close::before,html.theme--catppuccin-mocha .delete::before,html.theme--catppuccin-mocha .modal-close::after,html.theme--catppuccin-mocha .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-mocha .modal-close::before,html.theme--catppuccin-mocha .delete::before{height:2px;width:50%}html.theme--catppuccin-mocha .modal-close::after,html.theme--catppuccin-mocha .delete::after{height:50%;width:2px}html.theme--catppuccin-mocha .modal-close:hover,html.theme--catppuccin-mocha .delete:hover,html.theme--catppuccin-mocha .modal-close:focus,html.theme--catppuccin-mocha .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-mocha .modal-close:active,html.theme--catppuccin-mocha .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-mocha .is-small.modal-close,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-mocha .is-small.delete,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--catppuccin-mocha .is-medium.modal-close,html.theme--catppuccin-mocha .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-mocha .is-large.modal-close,html.theme--catppuccin-mocha .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-mocha .control.is-loading::after,html.theme--catppuccin-mocha .select.is-loading::after,html.theme--catppuccin-mocha .loader,html.theme--catppuccin-mocha .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #7f849c;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-mocha .hero-video,html.theme--catppuccin-mocha .modal-background,html.theme--catppuccin-mocha .modal,html.theme--catppuccin-mocha .image.is-square img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-mocha .image.is-square .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-mocha .image.is-1by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-mocha .image.is-1by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-mocha .image.is-5by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-mocha .image.is-5by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-mocha .image.is-4by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-mocha .image.is-4by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-mocha .image.is-3by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-mocha .image.is-5by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-mocha .image.is-5by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-mocha .image.is-16by9 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-mocha .image.is-16by9 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-mocha .image.is-2by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-mocha .image.is-2by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-mocha .image.is-3by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-mocha .image.is-3by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-mocha .image.is-4by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-mocha .image.is-4by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-mocha .image.is-3by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-mocha .image.is-3by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-mocha .image.is-2by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-mocha .image.is-2by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-mocha .image.is-3by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-mocha .image.is-9by16 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-mocha .image.is-9by16 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-mocha .image.is-1by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-mocha .image.is-1by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-mocha .image.is-1by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-mocha .image.is-1by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-mocha .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{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}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#313244 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c26 !important}.has-background-dark{background-color:#313244 !important}.has-text-primary{color:#89b4fa !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#5895f8 !important}.has-background-primary{background-color:#89b4fa !important}.has-text-primary-light{color:#ebf3fe !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bbd3fc !important}.has-background-primary-light{background-color:#ebf3fe !important}.has-text-primary-dark{color:#063c93 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#0850c4 !important}.has-background-primary-dark{background-color:#063c93 !important}.has-text-link{color:#89b4fa !important}a.has-text-link:hover,a.has-text-link:focus{color:#5895f8 !important}.has-background-link{background-color:#89b4fa !important}.has-text-link-light{color:#ebf3fe !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bbd3fc !important}.has-background-link-light{background-color:#ebf3fe !important}.has-text-link-dark{color:#063c93 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#0850c4 !important}.has-background-link-dark{background-color:#063c93 !important}.has-text-info{color:#94e2d5 !important}a.has-text-info:hover,a.has-text-info:focus{color:#6cd7c5 !important}.has-background-info{background-color:#94e2d5 !important}.has-text-info-light{color:#effbf9 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c7f0e9 !important}.has-background-info-light{background-color:#effbf9 !important}.has-text-info-dark{color:#207466 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#2a9c89 !important}.has-background-info-dark{background-color:#207466 !important}.has-text-success{color:#a6e3a1 !important}a.has-text-success:hover,a.has-text-success:focus{color:#81d77a !important}.has-background-success{background-color:#a6e3a1 !important}.has-text-success-light{color:#f0faef !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#cbefc8 !important}.has-background-success-light{background-color:#f0faef !important}.has-text-success-dark{color:#287222 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#36992e !important}.has-background-success-dark{background-color:#287222 !important}.has-text-warning{color:#f9e2af !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#f5d180 !important}.has-background-warning{background-color:#f9e2af !important}.has-text-warning-light{color:#fef8ec !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fae7bd !important}.has-background-warning-light{background-color:#fef8ec !important}.has-text-warning-dark{color:#8a620a !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#b9840e !important}.has-background-warning-dark{background-color:#8a620a !important}.has-text-danger{color:#f38ba8 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#ee5d85 !important}.has-background-danger{background-color:#f38ba8 !important}.has-text-danger-light{color:#fdedf1 !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f8bece !important}.has-background-danger-light{background-color:#fdedf1 !important}.has-text-danger-dark{color:#991036 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c71546 !important}.has-background-danger-dark{background-color:#991036 !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:#313244 !important}.has-background-grey-darker{background-color:#313244 !important}.has-text-grey-dark{color:#45475a !important}.has-background-grey-dark{background-color:#45475a !important}.has-text-grey{color:#585b70 !important}.has-background-grey{background-color:#585b70 !important}.has-text-grey-light{color:#6c7086 !important}.has-background-grey-light{background-color:#6c7086 !important}.has-text-grey-lighter{color:#7f849c !important}.has-background-grey-lighter{background-color:#7f849c !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-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !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-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin: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}.m-1{margin:.25rem !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}.m-2{margin:.5rem !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}.m-3{margin:.75rem !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}.m-4{margin:1rem !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}.m-5{margin:1.5rem !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}.m-6{margin:3rem !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}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !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}.p-1{padding:.25rem !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}.p-2{padding:.5rem !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}.p-3{padding:.75rem !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}.p-4{padding:1rem !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}.p-5{padding:1.5rem !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}.p-6{padding:3rem !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}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink{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: 1055px){.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: 1056px){.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: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) 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}.is-underlined{text-decoration:underline !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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",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: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) 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:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.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: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) 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}}html.theme--catppuccin-mocha html{background-color:#1e1e2e;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-mocha article,html.theme--catppuccin-mocha aside,html.theme--catppuccin-mocha figure,html.theme--catppuccin-mocha footer,html.theme--catppuccin-mocha header,html.theme--catppuccin-mocha hgroup,html.theme--catppuccin-mocha section{display:block}html.theme--catppuccin-mocha body,html.theme--catppuccin-mocha button,html.theme--catppuccin-mocha input,html.theme--catppuccin-mocha optgroup,html.theme--catppuccin-mocha select,html.theme--catppuccin-mocha textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-mocha code,html.theme--catppuccin-mocha pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-mocha body{color:#cdd6f4;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-mocha a{color:#89b4fa;cursor:pointer;text-decoration:none}html.theme--catppuccin-mocha a strong{color:currentColor}html.theme--catppuccin-mocha a:hover{color:#89dceb}html.theme--catppuccin-mocha code{background-color:#181825;color:#cdd6f4;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-mocha hr{background-color:#181825;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-mocha img{height:auto;max-width:100%}html.theme--catppuccin-mocha input[type="checkbox"],html.theme--catppuccin-mocha input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-mocha small{font-size:.875em}html.theme--catppuccin-mocha span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-mocha strong{color:#b8c5ef;font-weight:700}html.theme--catppuccin-mocha fieldset{border:none}html.theme--catppuccin-mocha pre{-webkit-overflow-scrolling:touch;background-color:#181825;color:#cdd6f4;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-mocha pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-mocha table td,html.theme--catppuccin-mocha table th{vertical-align:top}html.theme--catppuccin-mocha table td:not([align]),html.theme--catppuccin-mocha table th:not([align]){text-align:inherit}html.theme--catppuccin-mocha table th{color:#b8c5ef}html.theme--catppuccin-mocha .box{background-color:#45475a;border-radius:8px;box-shadow:none;color:#cdd6f4;display:block;padding:1.25rem}html.theme--catppuccin-mocha a.box:hover,html.theme--catppuccin-mocha a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #89b4fa}html.theme--catppuccin-mocha a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #89b4fa}html.theme--catppuccin-mocha .button{background-color:#181825;border-color:#363653;border-width:1px;color:#89b4fa;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-mocha .button strong{color:inherit}html.theme--catppuccin-mocha .button .icon,html.theme--catppuccin-mocha .button .icon.is-small,html.theme--catppuccin-mocha .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-mocha .button .icon.is-medium,html.theme--catppuccin-mocha .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-mocha .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-mocha .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-mocha .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-mocha .button:hover,html.theme--catppuccin-mocha .button.is-hovered{border-color:#6c7086;color:#b8c5ef}html.theme--catppuccin-mocha .button:focus,html.theme--catppuccin-mocha .button.is-focused{border-color:#6c7086;color:#71a4f9}html.theme--catppuccin-mocha .button:focus:not(:active),html.theme--catppuccin-mocha .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button:active,html.theme--catppuccin-mocha .button.is-active{border-color:#45475a;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text{background-color:transparent;border-color:transparent;color:#cdd6f4;text-decoration:underline}html.theme--catppuccin-mocha .button.is-text:hover,html.theme--catppuccin-mocha .button.is-text.is-hovered,html.theme--catppuccin-mocha .button.is-text:focus,html.theme--catppuccin-mocha .button.is-text.is-focused{background-color:#181825;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text:active,html.theme--catppuccin-mocha .button.is-text.is-active{background-color:#0e0e16;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-mocha .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#89b4fa;text-decoration:none}html.theme--catppuccin-mocha .button.is-ghost:hover,html.theme--catppuccin-mocha .button.is-ghost.is-hovered{color:#89b4fa;text-decoration:underline}html.theme--catppuccin-mocha .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:hover,html.theme--catppuccin-mocha .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:focus,html.theme--catppuccin-mocha .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:focus:not(:active),html.theme--catppuccin-mocha .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .button.is-white:active,html.theme--catppuccin-mocha .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-mocha .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted:hover,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-mocha .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-outlined:hover,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-white.is-outlined:focus,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:hover,html.theme--catppuccin-mocha .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:focus,html.theme--catppuccin-mocha .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:focus:not(:active),html.theme--catppuccin-mocha .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .button.is-black:active,html.theme--catppuccin-mocha .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-mocha .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted:hover,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-outlined:hover,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-black.is-outlined:focus,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:hover,html.theme--catppuccin-mocha .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:focus,html.theme--catppuccin-mocha .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:focus:not(:active),html.theme--catppuccin-mocha .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .button.is-light:active,html.theme--catppuccin-mocha .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-mocha .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted:hover,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-outlined:hover,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-light.is-outlined:focus,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-dark,html.theme--catppuccin-mocha .content kbd.button{background-color:#313244;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:hover,html.theme--catppuccin-mocha .content kbd.button:hover,html.theme--catppuccin-mocha .button.is-dark.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-hovered{background-color:#2c2d3d;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:focus,html.theme--catppuccin-mocha .content kbd.button:focus,html.theme--catppuccin-mocha .button.is-dark.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:focus:not(:active),html.theme--catppuccin-mocha .content kbd.button:focus:not(:active),html.theme--catppuccin-mocha .button.is-dark.is-focused:not(:active),html.theme--catppuccin-mocha .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .button.is-dark:active,html.theme--catppuccin-mocha .content kbd.button:active,html.theme--catppuccin-mocha .button.is-dark.is-active,html.theme--catppuccin-mocha .content kbd.button.is-active{background-color:#262735;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark[disabled],html.theme--catppuccin-mocha .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button{background-color:#313244;border-color:#313244;box-shadow:none}html.theme--catppuccin-mocha .button.is-dark.is-inverted,html.theme--catppuccin-mocha .content kbd.button.is-inverted{background-color:#fff;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted:hover,html.theme--catppuccin-mocha .content kbd.button.is-inverted:hover,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-dark.is-inverted[disabled],html.theme--catppuccin-mocha .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-loading::after,html.theme--catppuccin-mocha .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined,html.theme--catppuccin-mocha .content kbd.button.is-outlined{background-color:transparent;border-color:#313244;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-outlined:hover,html.theme--catppuccin-mocha .content kbd.button.is-outlined:hover,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-dark.is-outlined:focus,html.theme--catppuccin-mocha .content kbd.button.is-outlined:focus,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-focused{background-color:#313244;border-color:#313244;color:#fff}html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #313244 #313244 !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined[disabled],html.theme--catppuccin-mocha .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-outlined{background-color:transparent;border-color:#313244;box-shadow:none;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #313244 #313244 !important}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-primary,html.theme--catppuccin-mocha details.docstring>section>a.button.docs-sourcelink{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:hover,html.theme--catppuccin-mocha details.docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-hovered,html.theme--catppuccin-mocha details.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:focus,html.theme--catppuccin-mocha details.docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-focused,html.theme--catppuccin-mocha details.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:focus:not(:active),html.theme--catppuccin-mocha details.docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-mocha .button.is-primary.is-focused:not(:active),html.theme--catppuccin-mocha details.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button.is-primary:active,html.theme--catppuccin-mocha details.docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-mocha .button.is-primary.is-active,html.theme--catppuccin-mocha details.docstring>section>a.button.is-active.docs-sourcelink{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary[disabled],html.theme--catppuccin-mocha details.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary,fieldset[disabled] html.theme--catppuccin-mocha details.docstring>section>a.button.docs-sourcelink{background-color:#89b4fa;border-color:#89b4fa;box-shadow:none}html.theme--catppuccin-mocha .button.is-primary.is-inverted,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted:hover,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-primary.is-inverted[disabled],html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-loading::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-outlined:hover,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-mocha .button.is-primary.is-outlined:focus,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined[disabled],html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#89b4fa;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-light,html.theme--catppuccin-mocha details.docstring>section>a.button.is-light.docs-sourcelink{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .button.is-primary.is-light:hover,html.theme--catppuccin-mocha details.docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-light.is-hovered,html.theme--catppuccin-mocha details.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#dfebfe;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-primary.is-light:active,html.theme--catppuccin-mocha details.docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-mocha .button.is-primary.is-light.is-active,html.theme--catppuccin-mocha details.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d3e3fd;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-link{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:hover,html.theme--catppuccin-mocha .button.is-link.is-hovered{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:focus,html.theme--catppuccin-mocha .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:focus:not(:active),html.theme--catppuccin-mocha .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button.is-link:active,html.theme--catppuccin-mocha .button.is-link.is-active{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link{background-color:#89b4fa;border-color:#89b4fa;box-shadow:none}html.theme--catppuccin-mocha .button.is-link.is-inverted{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted:hover,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-link.is-outlined{background-color:transparent;border-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-outlined:hover,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-link.is-outlined:focus,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-focused{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-outlined{background-color:transparent;border-color:#89b4fa;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-light{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .button.is-link.is-light:hover,html.theme--catppuccin-mocha .button.is-link.is-light.is-hovered{background-color:#dfebfe;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-link.is-light:active,html.theme--catppuccin-mocha .button.is-link.is-light.is-active{background-color:#d3e3fd;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-info{background-color:#94e2d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:hover,html.theme--catppuccin-mocha .button.is-info.is-hovered{background-color:#8adfd1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:focus,html.theme--catppuccin-mocha .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:focus:not(:active),html.theme--catppuccin-mocha .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .button.is-info:active,html.theme--catppuccin-mocha .button.is-info.is-active{background-color:#80ddcd;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info{background-color:#94e2d5;border-color:#94e2d5;box-shadow:none}html.theme--catppuccin-mocha .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted:hover,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-info.is-outlined{background-color:transparent;border-color:#94e2d5;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-outlined:hover,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-info.is-outlined:focus,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-focused{background-color:#94e2d5;border-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #94e2d5 #94e2d5 !important}html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-outlined{background-color:transparent;border-color:#94e2d5;box-shadow:none;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #94e2d5 #94e2d5 !important}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-light{background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .button.is-info.is-light:hover,html.theme--catppuccin-mocha .button.is-info.is-light.is-hovered{background-color:#e5f8f5;border-color:transparent;color:#207466}html.theme--catppuccin-mocha .button.is-info.is-light:active,html.theme--catppuccin-mocha .button.is-info.is-light.is-active{background-color:#dbf5f1;border-color:transparent;color:#207466}html.theme--catppuccin-mocha .button.is-success{background-color:#a6e3a1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:hover,html.theme--catppuccin-mocha .button.is-success.is-hovered{background-color:#9de097;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:focus,html.theme--catppuccin-mocha .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:focus:not(:active),html.theme--catppuccin-mocha .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .button.is-success:active,html.theme--catppuccin-mocha .button.is-success.is-active{background-color:#93dd8d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success{background-color:#a6e3a1;border-color:#a6e3a1;box-shadow:none}html.theme--catppuccin-mocha .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted:hover,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-success.is-outlined{background-color:transparent;border-color:#a6e3a1;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-outlined:hover,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-success.is-outlined:focus,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-focused{background-color:#a6e3a1;border-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6e3a1 #a6e3a1 !important}html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-outlined{background-color:transparent;border-color:#a6e3a1;box-shadow:none;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6e3a1 #a6e3a1 !important}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-light{background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .button.is-success.is-light:hover,html.theme--catppuccin-mocha .button.is-success.is-light.is-hovered{background-color:#e7f7e5;border-color:transparent;color:#287222}html.theme--catppuccin-mocha .button.is-success.is-light:active,html.theme--catppuccin-mocha .button.is-success.is-light.is-active{background-color:#def4dc;border-color:transparent;color:#287222}html.theme--catppuccin-mocha .button.is-warning{background-color:#f9e2af;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:hover,html.theme--catppuccin-mocha .button.is-warning.is-hovered{background-color:#f8dea3;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:focus,html.theme--catppuccin-mocha .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:focus:not(:active),html.theme--catppuccin-mocha .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .button.is-warning:active,html.theme--catppuccin-mocha .button.is-warning.is-active{background-color:#f7d997;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning{background-color:#f9e2af;border-color:#f9e2af;box-shadow:none}html.theme--catppuccin-mocha .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted:hover,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined{background-color:transparent;border-color:#f9e2af;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-outlined:hover,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-warning.is-outlined:focus,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-focused{background-color:#f9e2af;border-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #f9e2af #f9e2af !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-outlined{background-color:transparent;border-color:#f9e2af;box-shadow:none;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f9e2af #f9e2af !important}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-light{background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .button.is-warning.is-light:hover,html.theme--catppuccin-mocha .button.is-warning.is-light.is-hovered{background-color:#fdf4e0;border-color:transparent;color:#8a620a}html.theme--catppuccin-mocha .button.is-warning.is-light:active,html.theme--catppuccin-mocha .button.is-warning.is-light.is-active{background-color:#fcf0d4;border-color:transparent;color:#8a620a}html.theme--catppuccin-mocha .button.is-danger{background-color:#f38ba8;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:hover,html.theme--catppuccin-mocha .button.is-danger.is-hovered{background-color:#f27f9f;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:focus,html.theme--catppuccin-mocha .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:focus:not(:active),html.theme--catppuccin-mocha .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .button.is-danger:active,html.theme--catppuccin-mocha .button.is-danger.is-active{background-color:#f17497;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger{background-color:#f38ba8;border-color:#f38ba8;box-shadow:none}html.theme--catppuccin-mocha .button.is-danger.is-inverted{background-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted:hover,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined{background-color:transparent;border-color:#f38ba8;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-outlined:hover,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-danger.is-outlined:focus,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-focused{background-color:#f38ba8;border-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f38ba8 #f38ba8 !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-outlined{background-color:transparent;border-color:#f38ba8;box-shadow:none;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f38ba8 #f38ba8 !important}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-light{background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .button.is-danger.is-light:hover,html.theme--catppuccin-mocha .button.is-danger.is-light.is-hovered{background-color:#fce1e8;border-color:transparent;color:#991036}html.theme--catppuccin-mocha .button.is-danger.is-light:active,html.theme--catppuccin-mocha .button.is-danger.is-light.is-active{background-color:#fbd5e0;border-color:transparent;color:#991036}html.theme--catppuccin-mocha .button.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-mocha .button.is-small:not(.is-rounded),html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-mocha .button.is-normal{font-size:1rem}html.theme--catppuccin-mocha .button.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .button.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button{background-color:#6c7086;border-color:#585b70;box-shadow:none;opacity:.5}html.theme--catppuccin-mocha .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-mocha .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-mocha .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-mocha .button.is-static{background-color:#181825;border-color:#585b70;color:#7f849c;box-shadow:none;pointer-events:none}html.theme--catppuccin-mocha .button.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-mocha .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-mocha .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-mocha .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-mocha .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-mocha .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-mocha .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-mocha .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-mocha .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-mocha .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-mocha .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-mocha .buttons.has-addons .button:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-mocha .buttons.has-addons .button:focus,html.theme--catppuccin-mocha .buttons.has-addons .button.is-focused,html.theme--catppuccin-mocha .buttons.has-addons .button:active,html.theme--catppuccin-mocha .buttons.has-addons .button.is-active,html.theme--catppuccin-mocha .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-mocha .buttons.has-addons .button:focus:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-mocha .buttons.has-addons .button:active:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-mocha .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .buttons.is-centered{justify-content:center}html.theme--catppuccin-mocha .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-mocha .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .button.is-responsive.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-mocha .button.is-responsive,html.theme--catppuccin-mocha .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-mocha .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-mocha .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .button.is-responsive.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-mocha .button.is-responsive,html.theme--catppuccin-mocha .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-mocha .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-mocha .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-mocha .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-mocha .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-mocha .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-mocha .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-mocha .content li+li{margin-top:0.25em}html.theme--catppuccin-mocha .content p:not(:last-child),html.theme--catppuccin-mocha .content dl:not(:last-child),html.theme--catppuccin-mocha .content ol:not(:last-child),html.theme--catppuccin-mocha .content ul:not(:last-child),html.theme--catppuccin-mocha .content blockquote:not(:last-child),html.theme--catppuccin-mocha .content pre:not(:last-child),html.theme--catppuccin-mocha .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-mocha .content h1,html.theme--catppuccin-mocha .content h2,html.theme--catppuccin-mocha .content h3,html.theme--catppuccin-mocha .content h4,html.theme--catppuccin-mocha .content h5,html.theme--catppuccin-mocha .content h6{color:#cdd6f4;font-weight:600;line-height:1.125}html.theme--catppuccin-mocha .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-mocha .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-mocha .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-mocha .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-mocha .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-mocha .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-mocha .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-mocha .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-mocha .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-mocha .content blockquote{background-color:#181825;border-left:5px solid #585b70;padding:1.25em 1.5em}html.theme--catppuccin-mocha .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-mocha .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-mocha .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-mocha .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-mocha .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-mocha .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-mocha .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-mocha .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-mocha .content ul ul ul{list-style-type:square}html.theme--catppuccin-mocha .content dd{margin-left:2em}html.theme--catppuccin-mocha .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-mocha .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-mocha .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-mocha .content figure img{display:inline-block}html.theme--catppuccin-mocha .content figure figcaption{font-style:italic}html.theme--catppuccin-mocha .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-mocha .content sup,html.theme--catppuccin-mocha .content sub{font-size:75%}html.theme--catppuccin-mocha .content table{width:100%}html.theme--catppuccin-mocha .content table td,html.theme--catppuccin-mocha .content table th{border:1px solid #585b70;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-mocha .content table th{color:#b8c5ef}html.theme--catppuccin-mocha .content table th:not([align]){text-align:inherit}html.theme--catppuccin-mocha .content table thead td,html.theme--catppuccin-mocha .content table thead th{border-width:0 0 2px;color:#b8c5ef}html.theme--catppuccin-mocha .content table tfoot td,html.theme--catppuccin-mocha .content table tfoot th{border-width:2px 0 0;color:#b8c5ef}html.theme--catppuccin-mocha .content table tbody tr:last-child td,html.theme--catppuccin-mocha .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-mocha .content .tabs li+li{margin-top:0}html.theme--catppuccin-mocha .content.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-mocha .content.is-normal{font-size:1rem}html.theme--catppuccin-mocha .content.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .content.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-mocha .icon.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-mocha .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-mocha .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-mocha .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-mocha .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-mocha .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-mocha div.icon-text{display:flex}html.theme--catppuccin-mocha .image,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-mocha .image img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-mocha .image img.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-mocha .image.is-fullwidth,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-mocha .image.is-square img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-mocha .image.is-square .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-mocha .image.is-1by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-mocha .image.is-1by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-mocha .image.is-5by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-mocha .image.is-5by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-mocha .image.is-4by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-mocha .image.is-4by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-mocha .image.is-3by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-mocha .image.is-5by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-mocha .image.is-5by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-mocha .image.is-16by9 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-mocha .image.is-16by9 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-mocha .image.is-2by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-mocha .image.is-2by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-mocha .image.is-3by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-mocha .image.is-3by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-mocha .image.is-4by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-mocha .image.is-4by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-mocha .image.is-3by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-mocha .image.is-3by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-mocha .image.is-2by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-mocha .image.is-2by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-mocha .image.is-3by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-mocha .image.is-9by16 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-mocha .image.is-9by16 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-mocha .image.is-1by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-mocha .image.is-1by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-mocha .image.is-1by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-mocha .image.is-1by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-mocha .image.is-square,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-mocha .image.is-1by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-mocha .image.is-5by4,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-mocha .image.is-4by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-mocha .image.is-3by2,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-mocha .image.is-5by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-mocha .image.is-16by9,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-mocha .image.is-2by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-mocha .image.is-3by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-mocha .image.is-4by5,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-mocha .image.is-3by4,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-mocha .image.is-2by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-mocha .image.is-3by5,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-mocha .image.is-9by16,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-mocha .image.is-1by2,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-mocha .image.is-1by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-mocha .image.is-16x16,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-mocha .image.is-24x24,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-mocha .image.is-32x32,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-mocha .image.is-48x48,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-mocha .image.is-64x64,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-mocha .image.is-96x96,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-mocha .image.is-128x128,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-mocha .notification{background-color:#181825;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-mocha .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-mocha .notification strong{color:currentColor}html.theme--catppuccin-mocha .notification code,html.theme--catppuccin-mocha .notification pre{background:#fff}html.theme--catppuccin-mocha .notification pre code{background:transparent}html.theme--catppuccin-mocha .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-mocha .notification .title,html.theme--catppuccin-mocha .notification .subtitle,html.theme--catppuccin-mocha .notification .content{color:currentColor}html.theme--catppuccin-mocha .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-dark,html.theme--catppuccin-mocha .content kbd.notification{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .notification.is-primary,html.theme--catppuccin-mocha details.docstring>section>a.notification.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .notification.is-primary.is-light,html.theme--catppuccin-mocha details.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .notification.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .notification.is-link.is-light{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .notification.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-info.is-light{background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .notification.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-success.is-light{background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .notification.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-warning.is-light{background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .notification.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .notification.is-danger.is-light{background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-mocha .progress::-webkit-progress-bar{background-color:#45475a}html.theme--catppuccin-mocha .progress::-webkit-progress-value{background-color:#7f849c}html.theme--catppuccin-mocha .progress::-moz-progress-bar{background-color:#7f849c}html.theme--catppuccin-mocha .progress::-ms-fill{background-color:#7f849c;border:none}html.theme--catppuccin-mocha .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-mocha .content kbd.progress::-webkit-progress-value{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-mocha .content kbd.progress::-moz-progress-bar{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark::-ms-fill,html.theme--catppuccin-mocha .content kbd.progress::-ms-fill{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark:indeterminate,html.theme--catppuccin-mocha .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #313244 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-mocha details.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-mocha details.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary::-ms-fill,html.theme--catppuccin-mocha details.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary:indeterminate,html.theme--catppuccin-mocha details.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #89b4fa 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-link::-webkit-progress-value{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link::-moz-progress-bar{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link::-ms-fill{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link:indeterminate{background-image:linear-gradient(to right, #89b4fa 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-info::-webkit-progress-value{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info::-moz-progress-bar{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info::-ms-fill{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info:indeterminate{background-image:linear-gradient(to right, #94e2d5 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-success::-webkit-progress-value{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success::-moz-progress-bar{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success::-ms-fill{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6e3a1 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-warning::-webkit-progress-value{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning::-moz-progress-bar{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning::-ms-fill{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #f9e2af 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-danger::-webkit-progress-value{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger::-moz-progress-bar{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger::-ms-fill{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #f38ba8 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#45475a;background-image:linear-gradient(to right, #cdd6f4 30%, #45475a 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-mocha .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-mocha .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-mocha .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-mocha .progress.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-mocha .progress.is-medium{height:1.25rem}html.theme--catppuccin-mocha .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-mocha .table{background-color:#45475a;color:#cdd6f4}html.theme--catppuccin-mocha .table td,html.theme--catppuccin-mocha .table th{border:1px solid #585b70;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-mocha .table td.is-white,html.theme--catppuccin-mocha .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .table td.is-black,html.theme--catppuccin-mocha .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .table td.is-light,html.theme--catppuccin-mocha .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-dark,html.theme--catppuccin-mocha .table th.is-dark{background-color:#313244;border-color:#313244;color:#fff}html.theme--catppuccin-mocha .table td.is-primary,html.theme--catppuccin-mocha .table th.is-primary{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-link,html.theme--catppuccin-mocha .table th.is-link{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-info,html.theme--catppuccin-mocha .table th.is-info{background-color:#94e2d5;border-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-success,html.theme--catppuccin-mocha .table th.is-success{background-color:#a6e3a1;border-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-warning,html.theme--catppuccin-mocha .table th.is-warning{background-color:#f9e2af;border-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-danger,html.theme--catppuccin-mocha .table th.is-danger{background-color:#f38ba8;border-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .table td.is-narrow,html.theme--catppuccin-mocha .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-mocha .table td.is-selected,html.theme--catppuccin-mocha .table th.is-selected{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-selected a,html.theme--catppuccin-mocha .table td.is-selected strong,html.theme--catppuccin-mocha .table th.is-selected a,html.theme--catppuccin-mocha .table th.is-selected strong{color:currentColor}html.theme--catppuccin-mocha .table td.is-vcentered,html.theme--catppuccin-mocha .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-mocha .table th{color:#b8c5ef}html.theme--catppuccin-mocha .table th:not([align]){text-align:left}html.theme--catppuccin-mocha .table tr.is-selected{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table tr.is-selected a,html.theme--catppuccin-mocha .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-mocha .table tr.is-selected td,html.theme--catppuccin-mocha .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-mocha .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table thead td,html.theme--catppuccin-mocha .table thead th{border-width:0 0 2px;color:#b8c5ef}html.theme--catppuccin-mocha .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table tfoot td,html.theme--catppuccin-mocha .table tfoot th{border-width:2px 0 0;color:#b8c5ef}html.theme--catppuccin-mocha .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table tbody tr:last-child td,html.theme--catppuccin-mocha .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-mocha .table.is-bordered td,html.theme--catppuccin-mocha .table.is-bordered th{border-width:1px}html.theme--catppuccin-mocha .table.is-bordered tr:last-child td,html.theme--catppuccin-mocha .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-mocha .table.is-fullwidth{width:100%}html.theme--catppuccin-mocha .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#313244}html.theme--catppuccin-mocha .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#313244}html.theme--catppuccin-mocha .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#35364a}html.theme--catppuccin-mocha .table.is-narrow td,html.theme--catppuccin-mocha .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-mocha .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#313244}html.theme--catppuccin-mocha .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-mocha .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .tags .tag,html.theme--catppuccin-mocha .tags .content kbd,html.theme--catppuccin-mocha .content .tags kbd,html.theme--catppuccin-mocha .tags details.docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-mocha .tags .tag:not(:last-child),html.theme--catppuccin-mocha .tags .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags kbd:not(:last-child),html.theme--catppuccin-mocha .tags details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-mocha .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-mocha .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-mocha .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .tags.are-medium details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-mocha .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .tags.are-large details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-mocha .tags.is-centered{justify-content:center}html.theme--catppuccin-mocha .tags.is-centered .tag,html.theme--catppuccin-mocha .tags.is-centered .content kbd,html.theme--catppuccin-mocha .content .tags.is-centered kbd,html.theme--catppuccin-mocha .tags.is-centered details.docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-mocha .tags.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .tags.is-right .tag:not(:first-child),html.theme--catppuccin-mocha .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-mocha .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-mocha .tags.is-right details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-mocha .tags.is-right .tag:not(:last-child),html.theme--catppuccin-mocha .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-mocha .tags.is-right details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-mocha .tags.has-addons .tag,html.theme--catppuccin-mocha .tags.has-addons .content kbd,html.theme--catppuccin-mocha .content .tags.has-addons kbd,html.theme--catppuccin-mocha .tags.has-addons details.docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-mocha .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-mocha .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-mocha .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-mocha .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-mocha .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-mocha .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-mocha .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-mocha .tag:not(body),html.theme--catppuccin-mocha .content kbd:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#181825;border-radius:.4em;color:#cdd6f4;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--catppuccin-mocha .tag:not(body) .delete,html.theme--catppuccin-mocha .content kbd:not(body) .delete,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-mocha .tag.is-white:not(body),html.theme--catppuccin-mocha .content kbd.is-white:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .tag.is-black:not(body),html.theme--catppuccin-mocha .content kbd.is-black:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .tag.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-light:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-dark:not(body),html.theme--catppuccin-mocha .content kbd:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-mocha .content details.docstring>section>kbd:not(body){background-color:#313244;color:#fff}html.theme--catppuccin-mocha .tag.is-primary:not(body),html.theme--catppuccin-mocha .content kbd.is-primary:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink:not(body){background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .tag.is-primary.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .tag.is-link:not(body),html.theme--catppuccin-mocha .content kbd.is-link:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .tag.is-link.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-link.is-light:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .tag.is-info:not(body),html.theme--catppuccin-mocha .content kbd.is-info:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-info.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-info.is-light:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .tag.is-success:not(body),html.theme--catppuccin-mocha .content kbd.is-success:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-success.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-success.is-light:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .tag.is-warning:not(body),html.theme--catppuccin-mocha .content kbd.is-warning:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-warning.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .tag.is-danger:not(body),html.theme--catppuccin-mocha .content kbd.is-danger:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .tag.is-danger.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .tag.is-normal:not(body),html.theme--catppuccin-mocha .content kbd.is-normal:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-mocha .tag.is-medium:not(body),html.theme--catppuccin-mocha .content kbd.is-medium:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-mocha .tag.is-large:not(body),html.theme--catppuccin-mocha .content kbd.is-large:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-mocha .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-mocha .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-mocha .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-mocha .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-mocha .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-mocha .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-mocha .tag.is-delete:not(body),html.theme--catppuccin-mocha .content kbd.is-delete:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-mocha .tag.is-delete:not(body)::before,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::before,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-mocha .tag.is-delete:not(body)::after,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::after,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--catppuccin-mocha .tag.is-delete:not(body)::before,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::before,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-mocha .tag.is-delete:not(body)::after,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::after,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-mocha .tag.is-delete:not(body):hover,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):hover,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-mocha .tag.is-delete:not(body):focus,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):focus,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#0e0e16}html.theme--catppuccin-mocha .tag.is-delete:not(body):active,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):active,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#040406}html.theme--catppuccin-mocha .tag.is-rounded:not(body),html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-mocha .content kbd.is-rounded:not(body),html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-mocha a.tag:hover,html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-mocha .title,html.theme--catppuccin-mocha .subtitle{word-break:break-word}html.theme--catppuccin-mocha .title em,html.theme--catppuccin-mocha .title span,html.theme--catppuccin-mocha .subtitle em,html.theme--catppuccin-mocha .subtitle span{font-weight:inherit}html.theme--catppuccin-mocha .title sub,html.theme--catppuccin-mocha .subtitle sub{font-size:.75em}html.theme--catppuccin-mocha .title sup,html.theme--catppuccin-mocha .subtitle sup{font-size:.75em}html.theme--catppuccin-mocha .title .tag,html.theme--catppuccin-mocha .title .content kbd,html.theme--catppuccin-mocha .content .title kbd,html.theme--catppuccin-mocha .title details.docstring>section>a.docs-sourcelink,html.theme--catppuccin-mocha .subtitle .tag,html.theme--catppuccin-mocha .subtitle .content kbd,html.theme--catppuccin-mocha .content .subtitle kbd,html.theme--catppuccin-mocha .subtitle details.docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-mocha .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-mocha .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-mocha .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-mocha .title.is-1{font-size:3rem}html.theme--catppuccin-mocha .title.is-2{font-size:2.5rem}html.theme--catppuccin-mocha .title.is-3{font-size:2rem}html.theme--catppuccin-mocha .title.is-4{font-size:1.5rem}html.theme--catppuccin-mocha .title.is-5{font-size:1.25rem}html.theme--catppuccin-mocha .title.is-6{font-size:1rem}html.theme--catppuccin-mocha .title.is-7{font-size:.75rem}html.theme--catppuccin-mocha .subtitle{color:#6c7086;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-mocha .subtitle strong{color:#6c7086;font-weight:600}html.theme--catppuccin-mocha .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-mocha .subtitle.is-1{font-size:3rem}html.theme--catppuccin-mocha .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-mocha .subtitle.is-3{font-size:2rem}html.theme--catppuccin-mocha .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-mocha .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-mocha .subtitle.is-6{font-size:1rem}html.theme--catppuccin-mocha .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-mocha .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-mocha .number{align-items:center;background-color:#181825;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{background-color:#1e1e2e;border-color:#585b70;border-radius:.4em;color:#7f849c}html.theme--catppuccin-mocha .select select::-moz-placeholder,html.theme--catppuccin-mocha .textarea::-moz-placeholder,html.theme--catppuccin-mocha .input::-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select::-webkit-input-placeholder,html.theme--catppuccin-mocha .textarea::-webkit-input-placeholder,html.theme--catppuccin-mocha .input::-webkit-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:-moz-placeholder,html.theme--catppuccin-mocha .textarea:-moz-placeholder,html.theme--catppuccin-mocha .input:-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:-ms-input-placeholder,html.theme--catppuccin-mocha .textarea:-ms-input-placeholder,html.theme--catppuccin-mocha .input:-ms-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:hover,html.theme--catppuccin-mocha .textarea:hover,html.theme--catppuccin-mocha .input:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-mocha .select select.is-hovered,html.theme--catppuccin-mocha .is-hovered.textarea,html.theme--catppuccin-mocha .is-hovered.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#6c7086}html.theme--catppuccin-mocha .select select:focus,html.theme--catppuccin-mocha .textarea:focus,html.theme--catppuccin-mocha .input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-mocha .select select.is-focused,html.theme--catppuccin-mocha .is-focused.textarea,html.theme--catppuccin-mocha .is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .select select:active,html.theme--catppuccin-mocha .textarea:active,html.theme--catppuccin-mocha .input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-mocha .select select.is-active,html.theme--catppuccin-mocha .is-active.textarea,html.theme--catppuccin-mocha .is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#89b4fa;box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select select[disabled],html.theme--catppuccin-mocha .textarea[disabled],html.theme--catppuccin-mocha .input[disabled],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-mocha .select select,fieldset[disabled] html.theme--catppuccin-mocha .textarea,fieldset[disabled] html.theme--catppuccin-mocha .input,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{background-color:#6c7086;border-color:#181825;box-shadow:none;color:#f7f8fd}html.theme--catppuccin-mocha .select select[disabled]::-moz-placeholder,html.theme--catppuccin-mocha .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-mocha .input[disabled]::-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]:-moz-placeholder,html.theme--catppuccin-mocha .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-mocha .input[disabled]:-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-mocha .textarea[readonly],html.theme--catppuccin-mocha .input[readonly],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-mocha .is-white.textarea,html.theme--catppuccin-mocha .is-white.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-mocha .is-white.textarea:focus,html.theme--catppuccin-mocha .is-white.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-mocha .is-white.is-focused.textarea,html.theme--catppuccin-mocha .is-white.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-white.textarea:active,html.theme--catppuccin-mocha .is-white.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-mocha .is-white.is-active.textarea,html.theme--catppuccin-mocha .is-white.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .is-black.textarea,html.theme--catppuccin-mocha .is-black.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-mocha .is-black.textarea:focus,html.theme--catppuccin-mocha .is-black.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-mocha .is-black.is-focused.textarea,html.theme--catppuccin-mocha .is-black.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-black.textarea:active,html.theme--catppuccin-mocha .is-black.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-mocha .is-black.is-active.textarea,html.theme--catppuccin-mocha .is-black.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .is-light.textarea,html.theme--catppuccin-mocha .is-light.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-mocha .is-light.textarea:focus,html.theme--catppuccin-mocha .is-light.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-mocha .is-light.is-focused.textarea,html.theme--catppuccin-mocha .is-light.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-light.textarea:active,html.theme--catppuccin-mocha .is-light.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-mocha .is-light.is-active.textarea,html.theme--catppuccin-mocha .is-light.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .is-dark.textarea,html.theme--catppuccin-mocha .content kbd.textarea,html.theme--catppuccin-mocha .is-dark.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-mocha .content kbd.input{border-color:#313244}html.theme--catppuccin-mocha .is-dark.textarea:focus,html.theme--catppuccin-mocha .content kbd.textarea:focus,html.theme--catppuccin-mocha .is-dark.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-mocha .content kbd.input:focus,html.theme--catppuccin-mocha .is-dark.is-focused.textarea,html.theme--catppuccin-mocha .content kbd.is-focused.textarea,html.theme--catppuccin-mocha .is-dark.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .content kbd.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-dark.textarea:active,html.theme--catppuccin-mocha .content kbd.textarea:active,html.theme--catppuccin-mocha .is-dark.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-mocha .content kbd.input:active,html.theme--catppuccin-mocha .is-dark.is-active.textarea,html.theme--catppuccin-mocha .content kbd.is-active.textarea,html.theme--catppuccin-mocha .is-dark.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .content kbd.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .is-primary.textarea,html.theme--catppuccin-mocha details.docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-mocha details.docstring>section>a.input.docs-sourcelink{border-color:#89b4fa}html.theme--catppuccin-mocha .is-primary.textarea:focus,html.theme--catppuccin-mocha details.docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-mocha .is-primary.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-mocha details.docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-mocha .is-primary.is-focused.textarea,html.theme--catppuccin-mocha details.docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha details.docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.textarea:active,html.theme--catppuccin-mocha details.docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-mocha .is-primary.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-mocha details.docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-mocha .is-primary.is-active.textarea,html.theme--catppuccin-mocha details.docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha details.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .is-link.textarea,html.theme--catppuccin-mocha .is-link.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#89b4fa}html.theme--catppuccin-mocha .is-link.textarea:focus,html.theme--catppuccin-mocha .is-link.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-mocha .is-link.is-focused.textarea,html.theme--catppuccin-mocha .is-link.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-link.textarea:active,html.theme--catppuccin-mocha .is-link.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-mocha .is-link.is-active.textarea,html.theme--catppuccin-mocha .is-link.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .is-info.textarea,html.theme--catppuccin-mocha .is-info.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#94e2d5}html.theme--catppuccin-mocha .is-info.textarea:focus,html.theme--catppuccin-mocha .is-info.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-mocha .is-info.is-focused.textarea,html.theme--catppuccin-mocha .is-info.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-info.textarea:active,html.theme--catppuccin-mocha .is-info.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-mocha .is-info.is-active.textarea,html.theme--catppuccin-mocha .is-info.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .is-success.textarea,html.theme--catppuccin-mocha .is-success.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6e3a1}html.theme--catppuccin-mocha .is-success.textarea:focus,html.theme--catppuccin-mocha .is-success.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-mocha .is-success.is-focused.textarea,html.theme--catppuccin-mocha .is-success.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-success.textarea:active,html.theme--catppuccin-mocha .is-success.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-mocha .is-success.is-active.textarea,html.theme--catppuccin-mocha .is-success.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .is-warning.textarea,html.theme--catppuccin-mocha .is-warning.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#f9e2af}html.theme--catppuccin-mocha .is-warning.textarea:focus,html.theme--catppuccin-mocha .is-warning.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-mocha .is-warning.is-focused.textarea,html.theme--catppuccin-mocha .is-warning.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-warning.textarea:active,html.theme--catppuccin-mocha .is-warning.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-mocha .is-warning.is-active.textarea,html.theme--catppuccin-mocha .is-warning.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .is-danger.textarea,html.theme--catppuccin-mocha .is-danger.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#f38ba8}html.theme--catppuccin-mocha .is-danger.textarea:focus,html.theme--catppuccin-mocha .is-danger.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-mocha .is-danger.is-focused.textarea,html.theme--catppuccin-mocha .is-danger.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-danger.textarea:active,html.theme--catppuccin-mocha .is-danger.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-mocha .is-danger.is-active.textarea,html.theme--catppuccin-mocha .is-danger.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .is-small.textarea,html.theme--catppuccin-mocha .is-small.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-mocha .is-medium.textarea,html.theme--catppuccin-mocha .is-medium.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .is-large.textarea,html.theme--catppuccin-mocha .is-large.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .is-fullwidth.textarea,html.theme--catppuccin-mocha .is-fullwidth.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-mocha .is-inline.textarea,html.theme--catppuccin-mocha .is-inline.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-mocha .input.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-mocha .input.is-static,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--catppuccin-mocha .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-mocha .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-mocha .textarea[rows]{height:initial}html.theme--catppuccin-mocha .textarea.has-fixed-size{resize:none}html.theme--catppuccin-mocha .radio,html.theme--catppuccin-mocha .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-mocha .radio input,html.theme--catppuccin-mocha .checkbox input{cursor:pointer}html.theme--catppuccin-mocha .radio:hover,html.theme--catppuccin-mocha .checkbox:hover{color:#89dceb}html.theme--catppuccin-mocha .radio[disabled],html.theme--catppuccin-mocha .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-mocha .radio,fieldset[disabled] html.theme--catppuccin-mocha .checkbox,html.theme--catppuccin-mocha .radio input[disabled],html.theme--catppuccin-mocha .checkbox input[disabled]{color:#f7f8fd;cursor:not-allowed}html.theme--catppuccin-mocha .radio+.radio{margin-left:.5em}html.theme--catppuccin-mocha .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-mocha .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading)::after{border-color:#89b4fa;right:1.125em;z-index:4}html.theme--catppuccin-mocha .select.is-rounded select,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-mocha .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-mocha .select select::-ms-expand{display:none}html.theme--catppuccin-mocha .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-mocha .select select:hover{border-color:#181825}html.theme--catppuccin-mocha .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-mocha .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-mocha .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#89dceb}html.theme--catppuccin-mocha .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-mocha .select.is-white select{border-color:#fff}html.theme--catppuccin-mocha .select.is-white select:hover,html.theme--catppuccin-mocha .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-mocha .select.is-white select:focus,html.theme--catppuccin-mocha .select.is-white select.is-focused,html.theme--catppuccin-mocha .select.is-white select:active,html.theme--catppuccin-mocha .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-mocha .select.is-black select:hover,html.theme--catppuccin-mocha .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-mocha .select.is-black select:focus,html.theme--catppuccin-mocha .select.is-black select.is-focused,html.theme--catppuccin-mocha .select.is-black select:active,html.theme--catppuccin-mocha .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-mocha .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-mocha .select.is-light select:hover,html.theme--catppuccin-mocha .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-mocha .select.is-light select:focus,html.theme--catppuccin-mocha .select.is-light select.is-focused,html.theme--catppuccin-mocha .select.is-light select:active,html.theme--catppuccin-mocha .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .select.is-dark:not(:hover)::after,html.theme--catppuccin-mocha .content kbd.select:not(:hover)::after{border-color:#313244}html.theme--catppuccin-mocha .select.is-dark select,html.theme--catppuccin-mocha .content kbd.select select{border-color:#313244}html.theme--catppuccin-mocha .select.is-dark select:hover,html.theme--catppuccin-mocha .content kbd.select select:hover,html.theme--catppuccin-mocha .select.is-dark select.is-hovered,html.theme--catppuccin-mocha .content kbd.select select.is-hovered{border-color:#262735}html.theme--catppuccin-mocha .select.is-dark select:focus,html.theme--catppuccin-mocha .content kbd.select select:focus,html.theme--catppuccin-mocha .select.is-dark select.is-focused,html.theme--catppuccin-mocha .content kbd.select select.is-focused,html.theme--catppuccin-mocha .select.is-dark select:active,html.theme--catppuccin-mocha .content kbd.select select:active,html.theme--catppuccin-mocha .select.is-dark select.is-active,html.theme--catppuccin-mocha .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .select.is-primary:not(:hover)::after,html.theme--catppuccin-mocha details.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-primary select,html.theme--catppuccin-mocha details.docstring>section>a.select.docs-sourcelink select{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-primary select:hover,html.theme--catppuccin-mocha details.docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-mocha .select.is-primary select.is-hovered,html.theme--catppuccin-mocha details.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#71a4f9}html.theme--catppuccin-mocha .select.is-primary select:focus,html.theme--catppuccin-mocha details.docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-mocha .select.is-primary select.is-focused,html.theme--catppuccin-mocha details.docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-mocha .select.is-primary select:active,html.theme--catppuccin-mocha details.docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-mocha .select.is-primary select.is-active,html.theme--catppuccin-mocha details.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select.is-link:not(:hover)::after{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-link select{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-link select:hover,html.theme--catppuccin-mocha .select.is-link select.is-hovered{border-color:#71a4f9}html.theme--catppuccin-mocha .select.is-link select:focus,html.theme--catppuccin-mocha .select.is-link select.is-focused,html.theme--catppuccin-mocha .select.is-link select:active,html.theme--catppuccin-mocha .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select.is-info:not(:hover)::after{border-color:#94e2d5}html.theme--catppuccin-mocha .select.is-info select{border-color:#94e2d5}html.theme--catppuccin-mocha .select.is-info select:hover,html.theme--catppuccin-mocha .select.is-info select.is-hovered{border-color:#80ddcd}html.theme--catppuccin-mocha .select.is-info select:focus,html.theme--catppuccin-mocha .select.is-info select.is-focused,html.theme--catppuccin-mocha .select.is-info select:active,html.theme--catppuccin-mocha .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .select.is-success:not(:hover)::after{border-color:#a6e3a1}html.theme--catppuccin-mocha .select.is-success select{border-color:#a6e3a1}html.theme--catppuccin-mocha .select.is-success select:hover,html.theme--catppuccin-mocha .select.is-success select.is-hovered{border-color:#93dd8d}html.theme--catppuccin-mocha .select.is-success select:focus,html.theme--catppuccin-mocha .select.is-success select.is-focused,html.theme--catppuccin-mocha .select.is-success select:active,html.theme--catppuccin-mocha .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .select.is-warning:not(:hover)::after{border-color:#f9e2af}html.theme--catppuccin-mocha .select.is-warning select{border-color:#f9e2af}html.theme--catppuccin-mocha .select.is-warning select:hover,html.theme--catppuccin-mocha .select.is-warning select.is-hovered{border-color:#f7d997}html.theme--catppuccin-mocha .select.is-warning select:focus,html.theme--catppuccin-mocha .select.is-warning select.is-focused,html.theme--catppuccin-mocha .select.is-warning select:active,html.theme--catppuccin-mocha .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .select.is-danger:not(:hover)::after{border-color:#f38ba8}html.theme--catppuccin-mocha .select.is-danger select{border-color:#f38ba8}html.theme--catppuccin-mocha .select.is-danger select:hover,html.theme--catppuccin-mocha .select.is-danger select.is-hovered{border-color:#f17497}html.theme--catppuccin-mocha .select.is-danger select:focus,html.theme--catppuccin-mocha .select.is-danger select.is-focused,html.theme--catppuccin-mocha .select.is-danger select:active,html.theme--catppuccin-mocha .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .select.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-mocha .select.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .select.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .select.is-disabled::after{border-color:#f7f8fd !important;opacity:0.5}html.theme--catppuccin-mocha .select.is-fullwidth{width:100%}html.theme--catppuccin-mocha .select.is-fullwidth select{width:100%}html.theme--catppuccin-mocha .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-mocha .select.is-loading.is-small:after,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-mocha .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-mocha .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-mocha .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-mocha .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:hover .file-cta,html.theme--catppuccin-mocha .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:focus .file-cta,html.theme--catppuccin-mocha .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:active .file-cta,html.theme--catppuccin-mocha .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-black:hover .file-cta,html.theme--catppuccin-mocha .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-black:focus .file-cta,html.theme--catppuccin-mocha .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-black:active .file-cta,html.theme--catppuccin-mocha .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:hover .file-cta,html.theme--catppuccin-mocha .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:focus .file-cta,html.theme--catppuccin-mocha .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:active .file-cta,html.theme--catppuccin-mocha .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-dark .file-cta,html.theme--catppuccin-mocha .content kbd.file .file-cta{background-color:#313244;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-dark:hover .file-cta,html.theme--catppuccin-mocha .content kbd.file:hover .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-hovered .file-cta{background-color:#2c2d3d;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-dark:focus .file-cta,html.theme--catppuccin-mocha .content kbd.file:focus .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-focused .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(49,50,68,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-dark:active .file-cta,html.theme--catppuccin-mocha .content kbd.file:active .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-active .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-active .file-cta{background-color:#262735;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary .file-cta,html.theme--catppuccin-mocha details.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary:hover .file-cta,html.theme--catppuccin-mocha details.docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-mocha details.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary:focus .file-cta,html.theme--catppuccin-mocha details.docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-focused .file-cta,html.theme--catppuccin-mocha details.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(137,180,250,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-primary:active .file-cta,html.theme--catppuccin-mocha details.docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-active .file-cta,html.theme--catppuccin-mocha details.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link .file-cta{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link:hover .file-cta,html.theme--catppuccin-mocha .file.is-link.is-hovered .file-cta{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link:focus .file-cta,html.theme--catppuccin-mocha .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(137,180,250,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-link:active .file-cta,html.theme--catppuccin-mocha .file.is-link.is-active .file-cta{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-info .file-cta{background-color:#94e2d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:hover .file-cta,html.theme--catppuccin-mocha .file.is-info.is-hovered .file-cta{background-color:#8adfd1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:focus .file-cta,html.theme--catppuccin-mocha .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(148,226,213,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:active .file-cta,html.theme--catppuccin-mocha .file.is-info.is-active .file-cta{background-color:#80ddcd;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success .file-cta{background-color:#a6e3a1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:hover .file-cta,html.theme--catppuccin-mocha .file.is-success.is-hovered .file-cta{background-color:#9de097;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:focus .file-cta,html.theme--catppuccin-mocha .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,227,161,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:active .file-cta,html.theme--catppuccin-mocha .file.is-success.is-active .file-cta{background-color:#93dd8d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning .file-cta{background-color:#f9e2af;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:hover .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-hovered .file-cta{background-color:#f8dea3;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:focus .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(249,226,175,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:active .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-active .file-cta{background-color:#f7d997;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-danger .file-cta{background-color:#f38ba8;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-danger:hover .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-hovered .file-cta{background-color:#f27f9f;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-danger:focus .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(243,139,168,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-danger:active .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-active .file-cta{background-color:#f17497;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-mocha .file.is-normal{font-size:1rem}html.theme--catppuccin-mocha .file.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-mocha .file.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-mocha .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-mocha .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-mocha .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-mocha .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-mocha .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-mocha .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-mocha .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-mocha .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-mocha .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-mocha .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-mocha .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-mocha .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-mocha .file.is-centered{justify-content:center}html.theme--catppuccin-mocha .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-mocha .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-mocha .file.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-mocha .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-mocha .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-mocha .file-label:hover .file-cta{background-color:#2c2d3d;color:#b8c5ef}html.theme--catppuccin-mocha .file-label:hover .file-name{border-color:#525569}html.theme--catppuccin-mocha .file-label:active .file-cta{background-color:#262735;color:#b8c5ef}html.theme--catppuccin-mocha .file-label:active .file-name{border-color:#4d4f62}html.theme--catppuccin-mocha .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha .file-name{border-color:#585b70;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-mocha .file-cta{background-color:#313244;color:#cdd6f4}html.theme--catppuccin-mocha .file-name{border-color:#585b70;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-mocha .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-mocha .file-icon .fa{font-size:14px}html.theme--catppuccin-mocha .label{color:#b8c5ef;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-mocha .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-mocha .label.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-mocha .label.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .label.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-mocha .help.is-white{color:#fff}html.theme--catppuccin-mocha .help.is-black{color:#0a0a0a}html.theme--catppuccin-mocha .help.is-light{color:#f5f5f5}html.theme--catppuccin-mocha .help.is-dark,html.theme--catppuccin-mocha .content kbd.help{color:#313244}html.theme--catppuccin-mocha .help.is-primary,html.theme--catppuccin-mocha details.docstring>section>a.help.docs-sourcelink{color:#89b4fa}html.theme--catppuccin-mocha .help.is-link{color:#89b4fa}html.theme--catppuccin-mocha .help.is-info{color:#94e2d5}html.theme--catppuccin-mocha .help.is-success{color:#a6e3a1}html.theme--catppuccin-mocha .help.is-warning{color:#f9e2af}html.theme--catppuccin-mocha .help.is-danger{color:#f38ba8}html.theme--catppuccin-mocha .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-mocha .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-mocha .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-mocha .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-mocha .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-mocha .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-mocha .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-mocha .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-mocha .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field.is-horizontal{display:flex}}html.theme--catppuccin-mocha .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-mocha .field-label.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-mocha .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-mocha .field-body .field{margin-bottom:0}html.theme--catppuccin-mocha .field-body>.field{flex-shrink:1}html.theme--catppuccin-mocha .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-mocha .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-mocha .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-mocha .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select:focus~.icon{color:#313244}html.theme--catppuccin-mocha .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-mocha .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-mocha .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-mocha .control.has-icons-left .icon,html.theme--catppuccin-mocha .control.has-icons-right .icon{color:#585b70;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-mocha .control.has-icons-left .input,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-mocha .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-mocha .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-mocha .control.has-icons-right .input,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-mocha .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-mocha .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-mocha .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-mocha .control.is-loading.is-small:after,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-mocha .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-mocha .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-mocha .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-mocha .breadcrumb a{align-items:center;color:#89b4fa;display:initial;justify-content:center;padding:0 .75em}html.theme--catppuccin-mocha .breadcrumb a:hover{color:#89dceb}html.theme--catppuccin-mocha .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-mocha .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-mocha .breadcrumb li.is-active a{color:#b8c5ef;cursor:default;pointer-events:none}html.theme--catppuccin-mocha .breadcrumb li+li::before{color:#6c7086;content:"\0002f"}html.theme--catppuccin-mocha .breadcrumb ul,html.theme--catppuccin-mocha .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-mocha .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-mocha .breadcrumb.is-centered ol,html.theme--catppuccin-mocha .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-mocha .breadcrumb.is-right ol,html.theme--catppuccin-mocha .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-mocha .breadcrumb.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-mocha .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-mocha .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-mocha .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-mocha .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-mocha .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#cdd6f4;max-width:100%;position:relative}html.theme--catppuccin-mocha .card-footer:first-child,html.theme--catppuccin-mocha .card-content:first-child,html.theme--catppuccin-mocha .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-mocha .card-footer:last-child,html.theme--catppuccin-mocha .card-content:last-child,html.theme--catppuccin-mocha .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-mocha .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-mocha .card-header-title{align-items:center;color:#b8c5ef;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-mocha .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-mocha .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-mocha .card-image{display:block;position:relative}html.theme--catppuccin-mocha .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-mocha .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-mocha .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-mocha .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-mocha .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-mocha .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-mocha .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-mocha .dropdown.is-active .dropdown-menu,html.theme--catppuccin-mocha .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-mocha .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-mocha .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-mocha .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-mocha .dropdown-content{background-color:#181825;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-mocha .dropdown-item{color:#cdd6f4;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-mocha a.dropdown-item,html.theme--catppuccin-mocha button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-mocha a.dropdown-item:hover,html.theme--catppuccin-mocha button.dropdown-item:hover{background-color:#181825;color:#0a0a0a}html.theme--catppuccin-mocha a.dropdown-item.is-active,html.theme--catppuccin-mocha button.dropdown-item.is-active{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-mocha .level{align-items:center;justify-content:space-between}html.theme--catppuccin-mocha .level code{border-radius:.4em}html.theme--catppuccin-mocha .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-mocha .level.is-mobile{display:flex}html.theme--catppuccin-mocha .level.is-mobile .level-left,html.theme--catppuccin-mocha .level.is-mobile .level-right{display:flex}html.theme--catppuccin-mocha .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-mocha .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-mocha .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level{display:flex}html.theme--catppuccin-mocha .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-mocha .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-mocha .level-item .title,html.theme--catppuccin-mocha .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-mocha .level-left,html.theme--catppuccin-mocha .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .level-left .level-item.is-flexible,html.theme--catppuccin-mocha .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-left .level-item:not(:last-child),html.theme--catppuccin-mocha .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-mocha .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-left{display:flex}}html.theme--catppuccin-mocha .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-right{display:flex}}html.theme--catppuccin-mocha .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-mocha .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-mocha .media .media{border-top:1px solid rgba(88,91,112,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-mocha .media .media .content:not(:last-child),html.theme--catppuccin-mocha .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-mocha .media .media .media{padding-top:.5rem}html.theme--catppuccin-mocha .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-mocha .media+.media{border-top:1px solid rgba(88,91,112,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-mocha .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-mocha .media-left,html.theme--catppuccin-mocha .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .media-left{margin-right:1rem}html.theme--catppuccin-mocha .media-right{margin-left:1rem}html.theme--catppuccin-mocha .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .media-content{overflow-x:auto}}html.theme--catppuccin-mocha .menu{font-size:1rem}html.theme--catppuccin-mocha .menu.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-mocha .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .menu.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .menu-list{line-height:1.25}html.theme--catppuccin-mocha .menu-list a{border-radius:3px;color:#cdd6f4;display:block;padding:0.5em 0.75em}html.theme--catppuccin-mocha .menu-list a:hover{background-color:#181825;color:#b8c5ef}html.theme--catppuccin-mocha .menu-list a.is-active{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .menu-list li ul{border-left:1px solid #585b70;margin:.75em;padding-left:.75em}html.theme--catppuccin-mocha .menu-label{color:#f7f8fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-mocha .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-mocha .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-mocha .message{background-color:#181825;border-radius:.4em;font-size:1rem}html.theme--catppuccin-mocha .message strong{color:currentColor}html.theme--catppuccin-mocha .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-mocha .message.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-mocha .message.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .message.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .message.is-white{background-color:#fff}html.theme--catppuccin-mocha .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-mocha .message.is-black{background-color:#fafafa}html.theme--catppuccin-mocha .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-mocha .message.is-light{background-color:#fafafa}html.theme--catppuccin-mocha .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-mocha .message.is-dark,html.theme--catppuccin-mocha .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-mocha .message.is-dark .message-header,html.theme--catppuccin-mocha .content kbd.message .message-header{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .message.is-dark .message-body,html.theme--catppuccin-mocha .content kbd.message .message-body{border-color:#313244}html.theme--catppuccin-mocha .message.is-primary,html.theme--catppuccin-mocha details.docstring>section>a.message.docs-sourcelink{background-color:#ebf3fe}html.theme--catppuccin-mocha .message.is-primary .message-header,html.theme--catppuccin-mocha details.docstring>section>a.message.docs-sourcelink .message-header{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .message.is-primary .message-body,html.theme--catppuccin-mocha details.docstring>section>a.message.docs-sourcelink .message-body{border-color:#89b4fa;color:#063c93}html.theme--catppuccin-mocha .message.is-link{background-color:#ebf3fe}html.theme--catppuccin-mocha .message.is-link .message-header{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .message.is-link .message-body{border-color:#89b4fa;color:#063c93}html.theme--catppuccin-mocha .message.is-info{background-color:#effbf9}html.theme--catppuccin-mocha .message.is-info .message-header{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-info .message-body{border-color:#94e2d5;color:#207466}html.theme--catppuccin-mocha .message.is-success{background-color:#f0faef}html.theme--catppuccin-mocha .message.is-success .message-header{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-success .message-body{border-color:#a6e3a1;color:#287222}html.theme--catppuccin-mocha .message.is-warning{background-color:#fef8ec}html.theme--catppuccin-mocha .message.is-warning .message-header{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-warning .message-body{border-color:#f9e2af;color:#8a620a}html.theme--catppuccin-mocha .message.is-danger{background-color:#fdedf1}html.theme--catppuccin-mocha .message.is-danger .message-header{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .message.is-danger .message-body{border-color:#f38ba8;color:#991036}html.theme--catppuccin-mocha .message-header{align-items:center;background-color:#cdd6f4;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-mocha .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-mocha .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .message-body{border-color:#585b70;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#cdd6f4;padding:1.25em 1.5em}html.theme--catppuccin-mocha .message-body code,html.theme--catppuccin-mocha .message-body pre{background-color:#fff}html.theme--catppuccin-mocha .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-mocha .modal.is-active{display:flex}html.theme--catppuccin-mocha .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-mocha .modal-content,html.theme--catppuccin-mocha .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-mocha .modal-content,html.theme--catppuccin-mocha .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-mocha .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-mocha .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-mocha .modal-card-head,html.theme--catppuccin-mocha .modal-card-foot{align-items:center;background-color:#181825;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-mocha .modal-card-head{border-bottom:1px solid #585b70;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-mocha .modal-card-title{color:#cdd6f4;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-mocha .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #585b70}html.theme--catppuccin-mocha .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-mocha .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#1e1e2e;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-mocha .navbar{background-color:#89b4fa;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-mocha .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-mocha .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-mocha .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-dark,html.theme--catppuccin-mocha .content kbd.navbar{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-burger,html.theme--catppuccin-mocha .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#313244;color:#fff}}html.theme--catppuccin-mocha .navbar.is-primary,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-burger,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa;color:#fff}}html.theme--catppuccin-mocha .navbar.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa;color:#fff}}html.theme--catppuccin-mocha .navbar.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#94e2d5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#f9e2af;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f38ba8;color:#fff}}html.theme--catppuccin-mocha .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-mocha .navbar.has-shadow{box-shadow:0 2px 0 0 #181825}html.theme--catppuccin-mocha .navbar.is-fixed-bottom,html.theme--catppuccin-mocha .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #181825}html.theme--catppuccin-mocha .navbar.is-fixed-top{top:0}html.theme--catppuccin-mocha html.has-navbar-fixed-top,html.theme--catppuccin-mocha body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-mocha .navbar-brand,html.theme--catppuccin-mocha .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-mocha .navbar-brand a.navbar-item:focus,html.theme--catppuccin-mocha .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-mocha .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-mocha .navbar-burger{color:#cdd6f4;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-mocha .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}html.theme--catppuccin-mocha .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-mocha .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-mocha .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-mocha .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-mocha .navbar-menu{display:none}html.theme--catppuccin-mocha .navbar-item,html.theme--catppuccin-mocha .navbar-link{color:#cdd6f4;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-mocha .navbar-item .icon:only-child,html.theme--catppuccin-mocha .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-mocha a.navbar-item,html.theme--catppuccin-mocha .navbar-link{cursor:pointer}html.theme--catppuccin-mocha a.navbar-item:focus,html.theme--catppuccin-mocha a.navbar-item:focus-within,html.theme--catppuccin-mocha a.navbar-item:hover,html.theme--catppuccin-mocha a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar-link:focus,html.theme--catppuccin-mocha .navbar-link:focus-within,html.theme--catppuccin-mocha .navbar-link:hover,html.theme--catppuccin-mocha .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}html.theme--catppuccin-mocha .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .navbar-item img{max-height:1.75rem}html.theme--catppuccin-mocha .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-mocha .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-mocha .navbar-item.is-tab:focus,html.theme--catppuccin-mocha .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#89b4fa;border-bottom-style:solid;border-bottom-width:3px;color:#89b4fa;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-mocha .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-mocha .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-mocha .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-mocha .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .navbar>.container{display:block}html.theme--catppuccin-mocha .navbar-brand .navbar-item,html.theme--catppuccin-mocha .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-mocha .navbar-link::after{display:none}html.theme--catppuccin-mocha .navbar-menu{background-color:#89b4fa;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-mocha .navbar-menu.is-active{display:block}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch,html.theme--catppuccin-mocha .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-mocha .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-mocha .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-mocha html.has-navbar-fixed-top-touch,html.theme--catppuccin-mocha body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar,html.theme--catppuccin-mocha .navbar-menu,html.theme--catppuccin-mocha .navbar-start,html.theme--catppuccin-mocha .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-mocha .navbar{min-height:4rem}html.theme--catppuccin-mocha .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-mocha .navbar.is-spaced .navbar-start,html.theme--catppuccin-mocha .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-mocha .navbar.is-spaced a.navbar-item,html.theme--catppuccin-mocha .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#7f849c}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}html.theme--catppuccin-mocha .navbar-burger{display:none}html.theme--catppuccin-mocha .navbar-item,html.theme--catppuccin-mocha .navbar-link{align-items:center;display:flex}html.theme--catppuccin-mocha .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-mocha .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-mocha .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-mocha .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-mocha .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-mocha .navbar-dropdown{background-color:#89b4fa;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--catppuccin-mocha .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#7f849c}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}.navbar.is-spaced html.theme--catppuccin-mocha .navbar-dropdown,html.theme--catppuccin-mocha .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--catppuccin-mocha .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-mocha .navbar-divider{display:block}html.theme--catppuccin-mocha .navbar>.container .navbar-brand,html.theme--catppuccin-mocha .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-mocha .navbar>.container .navbar-menu,html.theme--catppuccin-mocha .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-mocha .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-mocha html.has-navbar-fixed-top-desktop,html.theme--catppuccin-mocha body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-mocha html.has-spaced-navbar-fixed-top,html.theme--catppuccin-mocha body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-mocha html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-mocha body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-mocha a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar-link.is-active{color:#89b4fa}html.theme--catppuccin-mocha a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-mocha .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-mocha .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-mocha .pagination.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-mocha .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .pagination.is-rounded .pagination-previous,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-mocha .pagination.is-rounded .pagination-next,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-mocha .pagination.is-rounded .pagination-link,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-mocha .pagination,html.theme--catppuccin-mocha .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link{border-color:#585b70;color:#89b4fa;min-width:2.5em}html.theme--catppuccin-mocha .pagination-previous:hover,html.theme--catppuccin-mocha .pagination-next:hover,html.theme--catppuccin-mocha .pagination-link:hover{border-color:#6c7086;color:#89dceb}html.theme--catppuccin-mocha .pagination-previous:focus,html.theme--catppuccin-mocha .pagination-next:focus,html.theme--catppuccin-mocha .pagination-link:focus{border-color:#6c7086}html.theme--catppuccin-mocha .pagination-previous:active,html.theme--catppuccin-mocha .pagination-next:active,html.theme--catppuccin-mocha .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-mocha .pagination-previous[disabled],html.theme--catppuccin-mocha .pagination-previous.is-disabled,html.theme--catppuccin-mocha .pagination-next[disabled],html.theme--catppuccin-mocha .pagination-next.is-disabled,html.theme--catppuccin-mocha .pagination-link[disabled],html.theme--catppuccin-mocha .pagination-link.is-disabled{background-color:#585b70;border-color:#585b70;box-shadow:none;color:#f7f8fd;opacity:0.5}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-mocha .pagination-link.is-current{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .pagination-ellipsis{color:#6c7086;pointer-events:none}html.theme--catppuccin-mocha .pagination-list{flex-wrap:wrap}html.theme--catppuccin-mocha .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .pagination{flex-wrap:wrap}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-mocha .pagination-previous{order:2}html.theme--catppuccin-mocha .pagination-next{order:3}html.theme--catppuccin-mocha .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-mocha .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-mocha .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-mocha .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-mocha .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-mocha .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-mocha .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-mocha .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-mocha .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-mocha .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-mocha .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-mocha .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-mocha .panel.is-dark .panel-heading,html.theme--catppuccin-mocha .content kbd.panel .panel-heading{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-mocha .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#313244}html.theme--catppuccin-mocha .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-mocha .content kbd.panel .panel-block.is-active .panel-icon{color:#313244}html.theme--catppuccin-mocha .panel.is-primary .panel-heading,html.theme--catppuccin-mocha details.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-mocha details.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-mocha details.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel.is-link .panel-heading{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .panel.is-link .panel-tabs a.is-active{border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .panel.is-link .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel.is-info .panel-heading{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-info .panel-tabs a.is-active{border-bottom-color:#94e2d5}html.theme--catppuccin-mocha .panel.is-info .panel-block.is-active .panel-icon{color:#94e2d5}html.theme--catppuccin-mocha .panel.is-success .panel-heading{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6e3a1}html.theme--catppuccin-mocha .panel.is-success .panel-block.is-active .panel-icon{color:#a6e3a1}html.theme--catppuccin-mocha .panel.is-warning .panel-heading{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#f9e2af}html.theme--catppuccin-mocha .panel.is-warning .panel-block.is-active .panel-icon{color:#f9e2af}html.theme--catppuccin-mocha .panel.is-danger .panel-heading{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f38ba8}html.theme--catppuccin-mocha .panel.is-danger .panel-block.is-active .panel-icon{color:#f38ba8}html.theme--catppuccin-mocha .panel-tabs:not(:last-child),html.theme--catppuccin-mocha .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-mocha .panel-heading{background-color:#45475a;border-radius:8px 8px 0 0;color:#b8c5ef;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-mocha .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-mocha .panel-tabs a{border-bottom:1px solid #585b70;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-mocha .panel-tabs a.is-active{border-bottom-color:#45475a;color:#71a4f9}html.theme--catppuccin-mocha .panel-list a{color:#cdd6f4}html.theme--catppuccin-mocha .panel-list a:hover{color:#89b4fa}html.theme--catppuccin-mocha .panel-block{align-items:center;color:#b8c5ef;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-mocha .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-mocha .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-mocha .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-mocha .panel-block.is-active{border-left-color:#89b4fa;color:#71a4f9}html.theme--catppuccin-mocha .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-mocha a.panel-block,html.theme--catppuccin-mocha label.panel-block{cursor:pointer}html.theme--catppuccin-mocha a.panel-block:hover,html.theme--catppuccin-mocha label.panel-block:hover{background-color:#181825}html.theme--catppuccin-mocha .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f7f8fd;margin-right:.75em}html.theme--catppuccin-mocha .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-mocha .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}html.theme--catppuccin-mocha .tabs a{align-items:center;border-bottom-color:#585b70;border-bottom-style:solid;border-bottom-width:1px;color:#cdd6f4;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-mocha .tabs a:hover{border-bottom-color:#b8c5ef;color:#b8c5ef}html.theme--catppuccin-mocha .tabs li{display:block}html.theme--catppuccin-mocha .tabs li.is-active a{border-bottom-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .tabs ul{align-items:center;border-bottom-color:#585b70;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-mocha .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-mocha .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-mocha .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-mocha .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-mocha .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-mocha .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-mocha .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-mocha .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-mocha .tabs.is-boxed a:hover{background-color:#181825;border-bottom-color:#585b70}html.theme--catppuccin-mocha .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#585b70;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-mocha .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .tabs.is-toggle a{border-color:#585b70;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-mocha .tabs.is-toggle a:hover{background-color:#181825;border-color:#6c7086;z-index:2}html.theme--catppuccin-mocha .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-mocha .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-mocha .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-mocha .tabs.is-toggle li.is-active a{background-color:#89b4fa;border-color:#89b4fa;color:#fff;z-index:1}html.theme--catppuccin-mocha .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-mocha .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-mocha .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-mocha .tabs.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-mocha .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .column.is-narrow,html.theme--catppuccin-mocha .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full,html.theme--catppuccin-mocha .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters,html.theme--catppuccin-mocha .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds,html.theme--catppuccin-mocha .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half,html.theme--catppuccin-mocha .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third,html.theme--catppuccin-mocha .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter,html.theme--catppuccin-mocha .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth,html.theme--catppuccin-mocha .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths,html.theme--catppuccin-mocha .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths,html.theme--catppuccin-mocha .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths,html.theme--catppuccin-mocha .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters,html.theme--catppuccin-mocha .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds,html.theme--catppuccin-mocha .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half,html.theme--catppuccin-mocha .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third,html.theme--catppuccin-mocha .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter,html.theme--catppuccin-mocha .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth,html.theme--catppuccin-mocha .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths,html.theme--catppuccin-mocha .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths,html.theme--catppuccin-mocha .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths,html.theme--catppuccin-mocha .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-mocha .column.is-0,html.theme--catppuccin-mocha .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0,html.theme--catppuccin-mocha .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-mocha .column.is-1,html.theme--catppuccin-mocha .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1,html.theme--catppuccin-mocha .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2,html.theme--catppuccin-mocha .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2,html.theme--catppuccin-mocha .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3,html.theme--catppuccin-mocha .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3,html.theme--catppuccin-mocha .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-mocha .column.is-4,html.theme--catppuccin-mocha .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4,html.theme--catppuccin-mocha .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5,html.theme--catppuccin-mocha .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5,html.theme--catppuccin-mocha .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6,html.theme--catppuccin-mocha .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6,html.theme--catppuccin-mocha .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-mocha .column.is-7,html.theme--catppuccin-mocha .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7,html.theme--catppuccin-mocha .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8,html.theme--catppuccin-mocha .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8,html.theme--catppuccin-mocha .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9,html.theme--catppuccin-mocha .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9,html.theme--catppuccin-mocha .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-mocha .column.is-10,html.theme--catppuccin-mocha .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10,html.theme--catppuccin-mocha .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11,html.theme--catppuccin-mocha .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11,html.theme--catppuccin-mocha .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12,html.theme--catppuccin-mocha .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12,html.theme--catppuccin-mocha .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-mocha .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-mocha .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-mocha .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-mocha .columns.is-centered{justify-content:center}html.theme--catppuccin-mocha .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-mocha .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-mocha .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-mocha .columns.is-mobile{display:flex}html.theme--catppuccin-mocha .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-mocha .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-desktop{display:flex}}html.theme--catppuccin-mocha .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-mocha .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-mocha .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-mocha .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-mocha .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-mocha .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-mocha .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-mocha .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-mocha .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-mocha .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-mocha .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-mocha .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-mocha .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-mocha .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-mocha .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-mocha .tile.is-child{margin:0 !important}html.theme--catppuccin-mocha .tile.is-parent{padding:.75rem}html.theme--catppuccin-mocha .tile.is-vertical{flex-direction:column}html.theme--catppuccin-mocha .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .tile:not(.is-child){display:flex}html.theme--catppuccin-mocha .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .tile.is-3{flex:none;width:25%}html.theme--catppuccin-mocha .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .tile.is-6{flex:none;width:50%}html.theme--catppuccin-mocha .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .tile.is-9{flex:none;width:75%}html.theme--catppuccin-mocha .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-mocha .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-mocha .hero .navbar{background:none}html.theme--catppuccin-mocha .hero .tabs ul{border-bottom:none}html.theme--catppuccin-mocha .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-white strong{color:inherit}html.theme--catppuccin-mocha .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-mocha .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-mocha .hero.is-white .navbar-item,html.theme--catppuccin-mocha .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-mocha .hero.is-white a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-white .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-mocha .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-mocha .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-black strong{color:inherit}html.theme--catppuccin-mocha .hero.is-black .title{color:#fff}html.theme--catppuccin-mocha .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-mocha .hero.is-black .navbar-item,html.theme--catppuccin-mocha .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-black a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-black .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-mocha .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-light strong{color:inherit}html.theme--catppuccin-mocha .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-mocha .hero.is-light .navbar-item,html.theme--catppuccin-mocha .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-light .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-mocha .hero.is-dark,html.theme--catppuccin-mocha .content kbd.hero{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-dark strong,html.theme--catppuccin-mocha .content kbd.hero strong{color:inherit}html.theme--catppuccin-mocha .hero.is-dark .title,html.theme--catppuccin-mocha .content kbd.hero .title{color:#fff}html.theme--catppuccin-mocha .hero.is-dark .subtitle,html.theme--catppuccin-mocha .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-mocha .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-dark .subtitle strong,html.theme--catppuccin-mocha .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-dark .navbar-menu,html.theme--catppuccin-mocha .content kbd.hero .navbar-menu{background-color:#313244}}html.theme--catppuccin-mocha .hero.is-dark .navbar-item,html.theme--catppuccin-mocha .content kbd.hero .navbar-item,html.theme--catppuccin-mocha .hero.is-dark .navbar-link,html.theme--catppuccin-mocha .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-dark .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.hero .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.hero .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .hero.is-dark .tabs a,html.theme--catppuccin-mocha .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-dark .tabs a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs li.is-active a{color:#313244 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#313244}html.theme--catppuccin-mocha .hero.is-dark.is-bold,html.theme--catppuccin-mocha .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #181c2a 0%, #313244 71%, #3c3856 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-mocha .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #181c2a 0%, #313244 71%, #3c3856 100%)}}html.theme--catppuccin-mocha .hero.is-primary,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-primary strong,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-mocha .hero.is-primary .title,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-mocha .hero.is-primary .subtitle,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-primary .subtitle strong,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-primary .navbar-menu,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#89b4fa}}html.theme--catppuccin-mocha .hero.is-primary .navbar-item,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-mocha .hero.is-primary .navbar-link,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-primary .navbar-link:hover,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .hero.is-primary .tabs a,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-primary .tabs a:hover,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#89b4fa !important;opacity:1}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .hero.is-primary.is-bold,html.theme--catppuccin-mocha details.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-mocha details.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}}html.theme--catppuccin-mocha .hero.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-link strong{color:inherit}html.theme--catppuccin-mocha .hero.is-link .title{color:#fff}html.theme--catppuccin-mocha .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-link .navbar-menu{background-color:#89b4fa}}html.theme--catppuccin-mocha .hero.is-link .navbar-item,html.theme--catppuccin-mocha .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-link a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-link .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-link .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-link .tabs li.is-active a{color:#89b4fa !important;opacity:1}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .hero.is-link.is-bold{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}}html.theme--catppuccin-mocha .hero.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-info strong{color:inherit}html.theme--catppuccin-mocha .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-info .navbar-menu{background-color:#94e2d5}}html.theme--catppuccin-mocha .hero.is-info .navbar-item,html.theme--catppuccin-mocha .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-info .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-info .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-info .tabs li.is-active a{color:#94e2d5 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .hero.is-info.is-bold{background-image:linear-gradient(141deg, #63e0b6 0%, #94e2d5 71%, #a5eaea 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #63e0b6 0%, #94e2d5 71%, #a5eaea 100%)}}html.theme--catppuccin-mocha .hero.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-success strong{color:inherit}html.theme--catppuccin-mocha .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-success .navbar-menu{background-color:#a6e3a1}}html.theme--catppuccin-mocha .hero.is-success .navbar-item,html.theme--catppuccin-mocha .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-success .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-success .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-success .tabs li.is-active a{color:#a6e3a1 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .hero.is-success.is-bold{background-image:linear-gradient(141deg, #8ce071 0%, #a6e3a1 71%, #b2ebb7 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #8ce071 0%, #a6e3a1 71%, #b2ebb7 100%)}}html.theme--catppuccin-mocha .hero.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-warning strong{color:inherit}html.theme--catppuccin-mocha .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-warning .navbar-menu{background-color:#f9e2af}}html.theme--catppuccin-mocha .hero.is-warning .navbar-item,html.theme--catppuccin-mocha .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-warning .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-warning .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-warning .tabs li.is-active a{color:#f9e2af !important;opacity:1}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #fcbd79 0%, #f9e2af 71%, #fcf4c5 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #fcbd79 0%, #f9e2af 71%, #fcf4c5 100%)}}html.theme--catppuccin-mocha .hero.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-danger strong{color:inherit}html.theme--catppuccin-mocha .hero.is-danger .title{color:#fff}html.theme--catppuccin-mocha .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-danger .navbar-menu{background-color:#f38ba8}}html.theme--catppuccin-mocha .hero.is-danger .navbar-item,html.theme--catppuccin-mocha .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-danger .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-danger .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-danger .tabs li.is-active a{color:#f38ba8 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #f7549d 0%, #f38ba8 71%, #f8a0a9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f7549d 0%, #f38ba8 71%, #f8a0a9 100%)}}html.theme--catppuccin-mocha .hero.is-small .hero-body,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-mocha .hero.is-halfheight .hero-body,html.theme--catppuccin-mocha .hero.is-fullheight .hero-body,html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-mocha .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-mocha .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-mocha .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-mocha .hero-video{overflow:hidden}html.theme--catppuccin-mocha .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-mocha .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero-video{display:none}}html.theme--catppuccin-mocha .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero-buttons .button{display:flex}html.theme--catppuccin-mocha .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-mocha .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-mocha .hero-head,html.theme--catppuccin-mocha .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero-body{padding:3rem 3rem}}html.theme--catppuccin-mocha .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .section{padding:3rem 3rem}html.theme--catppuccin-mocha .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-mocha .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-mocha .footer{background-color:#181825;padding:3rem 1.5rem 6rem}html.theme--catppuccin-mocha h1 .docs-heading-anchor,html.theme--catppuccin-mocha h1 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h1 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h2 .docs-heading-anchor,html.theme--catppuccin-mocha h2 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h2 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h3 .docs-heading-anchor,html.theme--catppuccin-mocha h3 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h3 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h4 .docs-heading-anchor,html.theme--catppuccin-mocha h4 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h4 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h5 .docs-heading-anchor,html.theme--catppuccin-mocha h5 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h5 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h6 .docs-heading-anchor,html.theme--catppuccin-mocha h6 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h6 .docs-heading-anchor:visited{color:#cdd6f4}html.theme--catppuccin-mocha h1 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h2 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h3 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h4 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h5 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-mocha h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-mocha h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-mocha .docs-light-only{display:none !important}html.theme--catppuccin-mocha pre{position:relative;overflow:hidden}html.theme--catppuccin-mocha pre code,html.theme--catppuccin-mocha pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-mocha pre code:first-of-type,html.theme--catppuccin-mocha pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-mocha pre code:last-of-type,html.theme--catppuccin-mocha pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-mocha pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#cdd6f4;cursor:pointer;text-align:center}html.theme--catppuccin-mocha pre .copy-button:focus,html.theme--catppuccin-mocha pre .copy-button:hover{opacity:1;background:rgba(205,214,244,0.1);color:#89b4fa}html.theme--catppuccin-mocha pre .copy-button.success{color:#a6e3a1;opacity:1}html.theme--catppuccin-mocha pre .copy-button.error{color:#f38ba8;opacity:1}html.theme--catppuccin-mocha pre:hover .copy-button{opacity:1}html.theme--catppuccin-mocha .link-icon:hover{color:#89b4fa}html.theme--catppuccin-mocha .admonition{background-color:#181825;border-style:solid;border-width:2px;border-color:#bac2de;border-radius:4px;font-size:1rem}html.theme--catppuccin-mocha .admonition strong{color:currentColor}html.theme--catppuccin-mocha .admonition.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-mocha .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .admonition.is-default{background-color:#181825;border-color:#bac2de}html.theme--catppuccin-mocha .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#bac2de}html.theme--catppuccin-mocha .admonition.is-default>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-info{background-color:#181825;border-color:#94e2d5}html.theme--catppuccin-mocha .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#94e2d5}html.theme--catppuccin-mocha .admonition.is-info>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-success{background-color:#181825;border-color:#a6e3a1}html.theme--catppuccin-mocha .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6e3a1}html.theme--catppuccin-mocha .admonition.is-success>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-warning{background-color:#181825;border-color:#f9e2af}html.theme--catppuccin-mocha .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#f9e2af}html.theme--catppuccin-mocha .admonition.is-warning>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-danger{background-color:#181825;border-color:#f38ba8}html.theme--catppuccin-mocha .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#f38ba8}html.theme--catppuccin-mocha .admonition.is-danger>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-compat{background-color:#181825;border-color:#89dceb}html.theme--catppuccin-mocha .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#89dceb}html.theme--catppuccin-mocha .admonition.is-compat>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-todo{background-color:#181825;border-color:#cba6f7}html.theme--catppuccin-mocha .admonition.is-todo>.admonition-header{background-color:rgba(0,0,0,0);color:#cba6f7}html.theme--catppuccin-mocha .admonition.is-todo>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition-header{color:#bac2de;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-mocha .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-mocha .admonition-header .admonition-anchor{opacity:0;margin-left:0.5em;font-size:0.75em;color:inherit;text-decoration:none;transition:opacity 0.2s ease-in-out}html.theme--catppuccin-mocha .admonition-header .admonition-anchor:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-mocha .admonition-header .admonition-anchor:hover{opacity:1 !important;text-decoration:none}html.theme--catppuccin-mocha .admonition-header:hover .admonition-anchor{opacity:0.8}html.theme--catppuccin-mocha details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-mocha details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-mocha details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-mocha .admonition-body{color:#cdd6f4;padding:0.5rem .75rem}html.theme--catppuccin-mocha .admonition-body pre{background-color:#181825}html.theme--catppuccin-mocha .admonition-body code{background-color:#181825}html.theme--catppuccin-mocha details.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #585b70;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-mocha details.docstring>summary{list-style-type:none;align-items:stretch;padding:0.5rem .75rem;background-color:#181825;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #585b70;overflow:auto}html.theme--catppuccin-mocha details.docstring>summary code{background-color:transparent}html.theme--catppuccin-mocha details.docstring>summary .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-mocha details.docstring>summary .docstring-binding{margin-right:0.3em}html.theme--catppuccin-mocha details.docstring>summary .docstring-category{margin-left:0.3em}html.theme--catppuccin-mocha details.docstring>summary::before{content:'\f054';font-family:"Font Awesome 6 Free";font-weight:900;min-width:1.1rem;color:#2E63BD;display:inline-block}html.theme--catppuccin-mocha details.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #585b70}html.theme--catppuccin-mocha details.docstring>section:last-child{border-bottom:none}html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-mocha details.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-mocha details.docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-mocha details.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-mocha details.docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-mocha details.docstring[open]>summary::before{content:"\f078"}html.theme--catppuccin-mocha .documenter-example-output{background-color:#1e1e2e}html.theme--catppuccin-mocha .warning-overlay-base,html.theme--catppuccin-mocha .dev-warning-overlay,html.theme--catppuccin-mocha .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-mocha .warning-overlay-base .outdated-warning-closer,html.theme--catppuccin-mocha .dev-warning-overlay .outdated-warning-closer,html.theme--catppuccin-mocha .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-mocha .warning-overlay-base a,html.theme--catppuccin-mocha .dev-warning-overlay a,html.theme--catppuccin-mocha .outdated-warning-overlay a{color:#89b4fa}html.theme--catppuccin-mocha .warning-overlay-base a:hover,html.theme--catppuccin-mocha .dev-warning-overlay a:hover,html.theme--catppuccin-mocha .outdated-warning-overlay a:hover{color:#89dceb}html.theme--catppuccin-mocha .outdated-warning-overlay{background-color:#181825;color:#cdd6f4;border-bottom:3px solid rgba(0,0,0,0)}html.theme--catppuccin-mocha .dev-warning-overlay{background-color:#181825;color:#cdd6f4;border-bottom:3px solid rgba(0,0,0,0)}html.theme--catppuccin-mocha .footnote-reference{position:relative;display:inline-block}html.theme--catppuccin-mocha .footnote-preview{display:none;position:absolute;z-index:1000;max-width:300px;width:max-content;background-color:#1e1e2e;border:1px solid #89dceb;padding:10px;border-radius:5px;top:calc(100% + 10px);left:50%;transform:translateX(-50%);box-sizing:border-box;--arrow-left: 50%}html.theme--catppuccin-mocha .footnote-preview::before{content:"";position:absolute;top:-10px;left:var(--arrow-left);transform:translateX(-50%);border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #89dceb}html.theme--catppuccin-mocha .content pre{border:2px solid #585b70;border-radius:4px}html.theme--catppuccin-mocha .content code{font-weight:inherit}html.theme--catppuccin-mocha .content a code{color:#89b4fa}html.theme--catppuccin-mocha .content a:hover code{color:#89dceb}html.theme--catppuccin-mocha .content h1 code,html.theme--catppuccin-mocha .content h2 code,html.theme--catppuccin-mocha .content h3 code,html.theme--catppuccin-mocha .content h4 code,html.theme--catppuccin-mocha .content h5 code,html.theme--catppuccin-mocha .content h6 code{color:#cdd6f4}html.theme--catppuccin-mocha .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-mocha .content blockquote>ul:first-child,html.theme--catppuccin-mocha .content blockquote>ol:first-child,html.theme--catppuccin-mocha .content .admonition-body>ul:first-child,html.theme--catppuccin-mocha .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-mocha pre,html.theme--catppuccin-mocha code{font-variant-ligatures:no-contextual}html.theme--catppuccin-mocha .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-mocha .breadcrumb a.is-disabled,html.theme--catppuccin-mocha .breadcrumb a.is-disabled:hover{color:#b8c5ef}html.theme--catppuccin-mocha .hljs{background:initial !important}html.theme--catppuccin-mocha .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-mocha .katex-display,html.theme--catppuccin-mocha mjx-container,html.theme--catppuccin-mocha .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-mocha html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-mocha li.no-marker{list-style:none}html.theme--catppuccin-mocha #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-mocha #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main{width:100%}html.theme--catppuccin-mocha #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-mocha #documenter .docs-main>header,html.theme--catppuccin-mocha #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar{background-color:#1e1e2e;border-bottom:1px solid #585b70;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow:hidden}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--catppuccin-mocha #documenter .docs-main section.footnotes{border-top:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li details.docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-mocha .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #585b70;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-mocha #documenter .docs-sidebar{display:flex;flex-direction:column;color:#cdd6f4;background-color:#181825;border-right:1px solid #585b70;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-mocha #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name a:hover{color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #585b70;display:none;padding:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #585b70;padding-bottom:1.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#cdd6f4;background:#181825}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#cdd6f4;background-color:#202031}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #585b70;border-bottom:1px solid #585b70;background-color:#11111b}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#11111b;color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#202031;color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-mocha #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#28283e}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#383856}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#28283e}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#383856}}html.theme--catppuccin-mocha kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-mocha .search-min-width-50{min-width:50%}html.theme--catppuccin-mocha .search-min-height-100{min-height:100%}html.theme--catppuccin-mocha .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-mocha .search-result-link{border-radius:0.7em;transition:all 300ms;border:1px solid transparent}html.theme--catppuccin-mocha .search-result-link:hover,html.theme--catppuccin-mocha .search-result-link:focus{background-color:rgba(0,128,128,0.1);outline:none;border-color:#94e2d5}html.theme--catppuccin-mocha .search-result-link .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-mocha .property-search-result-badge,html.theme--catppuccin-mocha .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-mocha .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:hover .search-filter,html.theme--catppuccin-mocha .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-mocha .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-mocha .search-filter:hover,html.theme--catppuccin-mocha .search-filter:focus{color:#333}html.theme--catppuccin-mocha .search-filter-selected{color:#313244;background-color:#b4befe}html.theme--catppuccin-mocha .search-filter-selected:hover,html.theme--catppuccin-mocha .search-filter-selected:focus{color:#313244}html.theme--catppuccin-mocha .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-mocha .search-divider{border-bottom:1px solid #585b70}html.theme--catppuccin-mocha .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-mocha .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-mocha .w-100{width:100%}html.theme--catppuccin-mocha .gap-2{gap:0.5rem}html.theme--catppuccin-mocha .gap-4{gap:1rem}html.theme--catppuccin-mocha .gap-8{gap:2rem}html.theme--catppuccin-mocha{background-color:#1e1e2e;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-mocha a{transition:all 200ms ease}html.theme--catppuccin-mocha .label{color:#cdd6f4}html.theme--catppuccin-mocha .button,html.theme--catppuccin-mocha .control.has-icons-left .icon,html.theme--catppuccin-mocha .control.has-icons-right .icon,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .select,html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea{height:2.5em;color:#cdd6f4}html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#cdd6f4}html.theme--catppuccin-mocha .select:after,html.theme--catppuccin-mocha .select select{border-width:1px}html.theme--catppuccin-mocha .menu-list a{transition:all 300ms ease}html.theme--catppuccin-mocha .modal-card-foot,html.theme--catppuccin-mocha .modal-card-head{border-color:#585b70}html.theme--catppuccin-mocha .navbar{border-radius:.4em}html.theme--catppuccin-mocha .navbar.is-transparent{background:none}html.theme--catppuccin-mocha .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .navbar .navbar-menu{background-color:#89b4fa;border-radius:0 0 .4em .4em}}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){color:#313244}html.theme--catppuccin-mocha .tag.is-link:not(body),html.theme--catppuccin-mocha details.docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-mocha .content kbd.is-link:not(body){color:#313244}html.theme--catppuccin-mocha .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-mocha .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-mocha .ansi span.sgr3{font-style:italic}html.theme--catppuccin-mocha .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-mocha .ansi span.sgr7{color:#1e1e2e;background-color:#cdd6f4}html.theme--catppuccin-mocha .ansi span.sgr8{color:transparent}html.theme--catppuccin-mocha .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-mocha .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-mocha .ansi span.sgr30{color:#45475a}html.theme--catppuccin-mocha .ansi span.sgr31{color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr32{color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr33{color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr34{color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr35{color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr36{color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr37{color:#bac2de}html.theme--catppuccin-mocha .ansi span.sgr40{background-color:#45475a}html.theme--catppuccin-mocha .ansi span.sgr41{background-color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr42{background-color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr43{background-color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr44{background-color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr45{background-color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr46{background-color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr47{background-color:#bac2de}html.theme--catppuccin-mocha .ansi span.sgr90{color:#585b70}html.theme--catppuccin-mocha .ansi span.sgr91{color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr92{color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr93{color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr94{color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr95{color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr96{color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr97{color:#a6adc8}html.theme--catppuccin-mocha .ansi span.sgr100{background-color:#585b70}html.theme--catppuccin-mocha .ansi span.sgr101{background-color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr102{background-color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr103{background-color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr104{background-color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr105{background-color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr106{background-color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr107{background-color:#a6adc8}html.theme--catppuccin-mocha code.language-julia-repl>span.hljs-meta{color:#a6e3a1;font-weight:bolder}html.theme--catppuccin-mocha code .hljs{color:#cdd6f4;background:#1e1e2e}html.theme--catppuccin-mocha code .hljs-keyword{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-built_in{color:#f38ba8}html.theme--catppuccin-mocha code .hljs-type{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-literal{color:#fab387}html.theme--catppuccin-mocha code .hljs-number{color:#fab387}html.theme--catppuccin-mocha code .hljs-operator{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-punctuation{color:#bac2de}html.theme--catppuccin-mocha code .hljs-property{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-regexp{color:#f5c2e7}html.theme--catppuccin-mocha code .hljs-string{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-char.escape_{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-subst{color:#a6adc8}html.theme--catppuccin-mocha code .hljs-symbol{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-variable{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-variable.language_{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-variable.constant_{color:#fab387}html.theme--catppuccin-mocha code .hljs-title{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-title.class_{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-title.function_{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-params{color:#cdd6f4}html.theme--catppuccin-mocha code .hljs-comment{color:#585b70}html.theme--catppuccin-mocha code .hljs-doctag{color:#f38ba8}html.theme--catppuccin-mocha code .hljs-meta{color:#fab387}html.theme--catppuccin-mocha code .hljs-section{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-tag{color:#a6adc8}html.theme--catppuccin-mocha code .hljs-name{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-attr{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-attribute{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-bullet{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-code{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-emphasis{color:#f38ba8;font-style:italic}html.theme--catppuccin-mocha code .hljs-strong{color:#f38ba8;font-weight:bold}html.theme--catppuccin-mocha code .hljs-formula{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-link{color:#74c7ec;font-style:italic}html.theme--catppuccin-mocha code .hljs-quote{color:#a6e3a1;font-style:italic}html.theme--catppuccin-mocha code .hljs-selector-tag{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-selector-id{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-selector-class{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-selector-attr{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-selector-pseudo{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-template-tag{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-template-variable{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-addition{color:#a6e3a1;background:rgba(166,227,161,0.15)}html.theme--catppuccin-mocha code .hljs-deletion{color:#f38ba8;background:rgba(243,139,168,0.15)}html.theme--catppuccin-mocha .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover,html.theme--catppuccin-mocha .search-result-link:focus{background-color:#313244}html.theme--catppuccin-mocha .search-result-link .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:hover .search-filter,html.theme--catppuccin-mocha .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:focus .search-filter{color:#313244 !important;background-color:#b4befe !important}html.theme--catppuccin-mocha .search-result-title{color:#cdd6f4}html.theme--catppuccin-mocha .search-result-highlight{background-color:#f38ba8;color:#181825}html.theme--catppuccin-mocha .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-mocha .w-100{width:100%}html.theme--catppuccin-mocha .gap-2{gap:0.5rem}html.theme--catppuccin-mocha .gap-4{gap:1rem} diff --git a/.save/docs/build/assets/themes/documenter-dark.css b/.save/docs/build/assets/themes/documenter-dark.css new file mode 100644 index 00000000..287c0be1 --- /dev/null +++ b/.save/docs/build/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{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}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#3c5dcd !important}a.has-text-info:hover,a.has-text-info:focus{color:#2c48aa !important}.has-background-info{background-color:#3c5dcd !important}.has-text-info-light{color:#eff2fb !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c6d0f0 !important}.has-background-info-light{background-color:#eff2fb !important}.has-text-info-dark{color:#3253c3 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#5571d3 !important}.has-background-info-dark{background-color:#3253c3 !important}.has-text-success{color:#259a12 !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a6c0d !important}.has-background-success{background-color:#259a12 !important}.has-text-success-light{color:#effded !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c7f8bf !important}.has-background-success-light{background-color:#effded !important}.has-text-success-dark{color:#2ec016 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#3fe524 !important}.has-background-success-dark{background-color:#2ec016 !important}.has-text-warning{color:#f4c72f !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#e4b30c !important}.has-background-warning{background-color:#f4c72f !important}.has-text-warning-light{color:#fefaec !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fbedbb !important}.has-background-warning-light{background-color:#fefaec !important}.has-text-warning-dark{color:#8c6e07 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#bd940a !important}.has-background-warning-dark{background-color:#8c6e07 !important}.has-text-danger{color:#cb3c33 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a23029 !important}.has-background-danger{background-color:#cb3c33 !important}.has-text-danger-light{color:#fbefef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f1c8c6 !important}.has-background-danger-light{background-color:#fbefef !important}.has-text-danger-dark{color:#c03930 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#d35850 !important}.has-background-danger-dark{background-color:#c03930 !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:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !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-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin: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}.m-1{margin:.25rem !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}.m-2{margin:.5rem !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}.m-3{margin:.75rem !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}.m-4{margin:1rem !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}.m-5{margin:1.5rem !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}.m-6{margin:3rem !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}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !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}.p-1{padding:.25rem !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}.p-2{padding:.5rem !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}.p-3{padding:.75rem !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}.p-4{padding:1rem !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}.p-5{padding:1.5rem !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}.p-6{padding:3rem !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}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink{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: 1055px){.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: 1056px){.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: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) 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}.is-underlined{text-decoration:underline !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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",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: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) 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:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.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: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) 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}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark details.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark details.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark details.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark details.docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark details.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark details.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark details.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark details.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark details.docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark details.docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark details.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark details.docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark details.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#3c5dcd;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#3355c9;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#3151bf;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#3c5dcd;border-color:#3c5dcd;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;box-shadow:none;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#3c5dcd}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#e5e9f8;border-color:transparent;color:#3253c3}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#dae1f6;border-color:transparent;color:#3253c3}html.theme--documenter-dark .button.is-success{background-color:#259a12;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#228f11;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#20830f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#259a12;border-color:#259a12;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#259a12}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#259a12}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#259a12;color:#259a12}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#259a12;border-color:#259a12;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #259a12 #259a12 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#259a12;box-shadow:none;color:#259a12}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#259a12}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #259a12 #259a12 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#effded;color:#2ec016}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#e5fce1;border-color:transparent;color:#2ec016}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#dbfad6;border-color:transparent;color:#2ec016}html.theme--documenter-dark .button.is-warning{background-color:#f4c72f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#f3c423;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(244,199,47,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#f3c017;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#f4c72f;border-color:#f4c72f;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#f4c72f;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#f4c72f;border-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #f4c72f #f4c72f !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#f4c72f;box-shadow:none;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f4c72f #f4c72f !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fdf7e0;border-color:transparent;color:#8c6e07}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fdf3d3;border-color:transparent;color:#8c6e07}html.theme--documenter-dark .button.is-danger{background-color:#cb3c33;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#c13930;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#b7362e;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#cb3c33;border-color:#cb3c33;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#cb3c33;border-color:#cb3c33;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;box-shadow:none;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#cb3c33}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fbefef;color:#c03930}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#f8e6e5;border-color:transparent;color:#c03930}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#f6dcda;border-color:transparent;color:#c03930}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark details.docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark details.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .notification.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#effded;color:#2ec016}html.theme--documenter-dark .notification.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .notification.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fbefef;color:#c03930}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark details.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark details.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark details.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark details.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #3c5dcd 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#259a12}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#259a12}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#259a12}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #259a12 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #f4c72f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #cb3c33 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#259a12;border-color:#259a12;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#f4c72f;border-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#cb3c33;border-color:#cb3c33;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags details.docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered details.docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons details.docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons details.docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content details.docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#259a12;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#effded;color:#2ec016}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#cb3c33;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fbefef;color:#c03930}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark details.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title details.docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle details.docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark details.docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark details.docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark details.docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark details.docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark details.docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark details.docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark details.docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark details.docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark details.docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark details.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#3c5dcd}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#259a12}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#f4c72f}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(244,199,47,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#cb3c33}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark details.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark details.docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark details.docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark details.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark details.docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark details.docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark details.docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark details.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#3c5dcd}html.theme--documenter-dark .select.is-info select{border-color:#3c5dcd}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#3151bf}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#259a12}html.theme--documenter-dark .select.is-success select{border-color:#259a12}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#20830f}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#f4c72f}html.theme--documenter-dark .select.is-warning select{border-color:#f4c72f}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#f3c017}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(244,199,47,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#cb3c33}html.theme--documenter-dark .select.is-danger select{border-color:#cb3c33}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#b7362e}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark details.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark details.docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark details.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark details.docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark details.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark details.docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark details.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#3c5dcd;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#3355c9;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(60,93,205,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#3151bf;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#259a12;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#228f11;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(37,154,18,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#20830f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#f4c72f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#f3c423;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(244,199,47,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#f3c017;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#cb3c33;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#c13930;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(203,60,51,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#b7362e;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark details.docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#3c5dcd}html.theme--documenter-dark .help.is-success{color:#259a12}html.theme--documenter-dark .help.is-warning{color:#f4c72f}html.theme--documenter-dark .help.is-danger{color:#cb3c33}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:initial;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark details.docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark details.docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark details.docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#eff2fb}html.theme--documenter-dark .message.is-info .message-header{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#3c5dcd;color:#3253c3}html.theme--documenter-dark .message.is-success{background-color:#effded}html.theme--documenter-dark .message.is-success .message-header{background-color:#259a12;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#259a12;color:#2ec016}html.theme--documenter-dark .message.is-warning{background-color:#fefaec}html.theme--documenter-dark .message.is-warning .message-header{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-warning .message-body{border-color:#f4c72f;color:#8c6e07}html.theme--documenter-dark .message.is-danger{background-color:#fbefef}html.theme--documenter-dark .message.is-danger .message-header{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#cb3c33;color:#c03930}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3c5dcd;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#259a12;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#f4c72f;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#cb3c33;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .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}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark details.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark details.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark details.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#3c5dcd}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#3c5dcd}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#259a12;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#259a12}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#259a12}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#f4c72f}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#f4c72f}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#cb3c33}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#cb3c33}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .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}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark details.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark details.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#3c5dcd}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#3151bf;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#3c5dcd !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3c5dcd}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#259a12}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#20830f;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#259a12 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#259a12}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#f4c72f}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#f4c72f !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #f09100 0%, #f4c72f 71%, #faef42 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f09100 0%, #f4c72f 71%, #faef42 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#cb3c33}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#b7362e;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#cb3c33 !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#cb3c33}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark details.docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark details.docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark details.docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark details.docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#5a76d5}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#3c5dcd;box-shadow:0 0 0 2px rgba(60,93,205,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#2dbc16}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#259a12;box-shadow:0 0 0 2px rgba(37,154,18,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#f6d153}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#f4c72f;box-shadow:0 0 0 2px rgba(244,199,47,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#d35951}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#cb3c33;box-shadow:0 0 0 2px rgba(203,60,51,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark details.docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark details.docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark details.docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .link-icon:hover{color:#1abc9c}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:2px;border-color:#dbdee0;border-radius:4px;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#dbdee0}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#3c5dcd}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#3c5dcd}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#259a12}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#259a12}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#f4c72f}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#f4c72f}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#cb3c33}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#cb3c33}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#3489da}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#3489da}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-todo{background-color:#282f2f;border-color:#9558b2}html.theme--documenter-dark .admonition.is-todo>.admonition-header{background-color:rgba(0,0,0,0);color:#9558b2}html.theme--documenter-dark .admonition.is-todo>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#dbdee0;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark .admonition-header .admonition-anchor{opacity:0;margin-left:0.5em;font-size:0.75em;color:inherit;text-decoration:none;transition:opacity 0.2s ease-in-out}html.theme--documenter-dark .admonition-header .admonition-anchor:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark .admonition-header .admonition-anchor:hover{opacity:1 !important;text-decoration:none}html.theme--documenter-dark .admonition-header:hover .admonition-anchor{opacity:0.8}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark details.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #5e6d6f;border-radius:4px;box-shadow:none;max-width:100%}html.theme--documenter-dark details.docstring>summary{list-style-type:none;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark details.docstring>summary code{background-color:transparent}html.theme--documenter-dark details.docstring>summary .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark details.docstring>summary .docstring-binding{margin-right:0.3em}html.theme--documenter-dark details.docstring>summary .docstring-category{margin-left:0.3em}html.theme--documenter-dark details.docstring>summary::before{content:'\f054';font-family:"Font Awesome 6 Free";font-weight:900;min-width:1.1rem;color:#2E63BD;display:inline-block}html.theme--documenter-dark details.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark details.docstring>section:last-child{border-bottom:none}html.theme--documenter-dark details.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark details.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark details.docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark details.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark details.docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark details.docstring[open]>summary::before{content:"\f078"}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .warning-overlay-base,html.theme--documenter-dark .dev-warning-overlay,html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .warning-overlay-base .outdated-warning-closer,html.theme--documenter-dark .dev-warning-overlay .outdated-warning-closer,html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .warning-overlay-base a,html.theme--documenter-dark .dev-warning-overlay a,html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .warning-overlay-base a:hover,html.theme--documenter-dark .dev-warning-overlay a:hover,html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .outdated-warning-overlay{background-color:#282f2f;color:#fff;border-bottom:3px solid rgba(0,0,0,0)}html.theme--documenter-dark .dev-warning-overlay{background-color:#282f2f;color:#fff;border-bottom:3px solid rgba(0,0,0,0)}html.theme--documenter-dark .footnote-reference{position:relative;display:inline-block}html.theme--documenter-dark .footnote-preview{display:none;position:absolute;z-index:1000;max-width:300px;width:max-content;background-color:#1f2424;border:1px solid #1dd2af;padding:10px;border-radius:5px;top:calc(100% + 10px);left:50%;transform:translateX(-50%);box-sizing:border-box;--arrow-left: 50%}html.theme--documenter-dark .footnote-preview::before{content:"";position:absolute;top:-10px;left:var(--arrow-left);transform:translateX(-50%);border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #1dd2af}html.theme--documenter-dark .content pre{border:2px solid #5e6d6f;border-radius:4px}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content a:hover code{color:#1dd2af}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li details.docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms;border:1px solid transparent}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1);outline:none;border-color:#00d4aa}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/.save/docs/build/assets/themes/documenter-light.css b/.save/docs/build/assets/themes/documenter-light.css new file mode 100644 index 00000000..babd27d6 --- /dev/null +++ b/.save/docs/build/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-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(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-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 rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#3c5dcd !important}a.has-text-info:hover,a.has-text-info:focus{color:#2c48aa !important}.has-background-info{background-color:#3c5dcd !important}.has-text-info-light{color:#eff2fb !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c6d0f0 !important}.has-background-info-light{background-color:#eff2fb !important}.has-text-info-dark{color:#3253c3 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#5571d3 !important}.has-background-info-dark{background-color:#3253c3 !important}.has-text-success{color:#259a12 !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a6c0d !important}.has-background-success{background-color:#259a12 !important}.has-text-success-light{color:#effded !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c7f8bf !important}.has-background-success-light{background-color:#effded !important}.has-text-success-dark{color:#2ec016 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#3fe524 !important}.has-background-success-dark{background-color:#2ec016 !important}.has-text-warning{color:#a98800 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#765f00 !important}.has-background-warning{background-color:#a98800 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#cca400 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffcd00 !important}.has-background-warning-dark{background-color:#cca400 !important}.has-text-danger{color:#cb3c33 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a23029 !important}.has-background-danger{background-color:#cb3c33 !important}.has-text-danger-light{color:#fbefef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f1c8c6 !important}.has-background-danger-light{background-color:#fbefef !important}.has-text-danger-dark{color:#c03930 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#d35850 !important}.has-background-danger-dark{background-color:#c03930 !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:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !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-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !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-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin: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}.m-1{margin:.25rem !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}.m-2{margin:.5rem !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}.m-3{margin:.75rem !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}.m-4{margin:1rem !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}.m-5{margin:1.5rem !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}.m-6{margin:3rem !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}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !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}.p-1{padding:.25rem !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}.p-2{padding:.5rem !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}.p-3{padding:.75rem !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}.p-4{padding:1rem !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}.p-5{padding:1.5rem !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}.p-6{padding:3rem !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}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,details.docstring>section>a.docs-sourcelink{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: 1055px){.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: 1056px){.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: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) 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: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) 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}.is-underlined{text-decoration:underline !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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",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: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) 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:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.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: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) 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: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) 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}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{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:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}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:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;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:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{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:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{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:hover::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.is-focused::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:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::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.is-focused::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:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{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:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{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:hover::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.is-focused::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:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::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.is-focused::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,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,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,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,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:hover::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.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,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,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::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.is-focused::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,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,details.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,details.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,details.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,details.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,details.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),details.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),details.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,details.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,details.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],details.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] details.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,details.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,details.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],details.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] details.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,details.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,details.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,details.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,details.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,details.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,details.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,details.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,details.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],details.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] details.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,details.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,details.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,details.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,details.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] details.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,details.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,details.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,details.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,details.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,details.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{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:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::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.is-focused::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:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !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:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#3c5dcd;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#3355c9;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#3151bf;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3c5dcd;border-color:#3c5dcd;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3c5dcd}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{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:#3c5dcd}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;color:#3c5dcd}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3c5dcd #3c5dcd !important}.button.is-info.is-outlined.is-loading:hover::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.is-focused::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:#3c5dcd;box-shadow:none;color:#3c5dcd}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#3c5dcd}.button.is-info.is-inverted.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #3c5dcd #3c5dcd !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:#eff2fb;color:#3253c3}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e5e9f8;border-color:transparent;color:#3253c3}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#dae1f6;border-color:transparent;color:#3253c3}.button.is-success{background-color:#259a12;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#228f11;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#20830f;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#259a12;border-color:#259a12;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#259a12}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{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:#259a12}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#259a12;color:#259a12}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#259a12;border-color:#259a12;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #259a12 #259a12 !important}.button.is-success.is-outlined.is-loading:hover::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.is-focused::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:#259a12;box-shadow:none;color:#259a12}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#259a12}.button.is-success.is-inverted.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #259a12 #259a12 !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:#effded;color:#2ec016}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e5fce1;border-color:transparent;color:#2ec016}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#dbfad6;border-color:transparent;color:#2ec016}.button.is-warning{background-color:#a98800;border-color:transparent;color:#fff}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#9c7d00;border-color:transparent;color:#fff}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:#fff}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#8f7300;border-color:transparent;color:#fff}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#a98800;border-color:#a98800;box-shadow:none}.button.is-warning.is-inverted{background-color:#fff;color:#a98800}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#a98800}.button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#a98800;color:#a98800}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#a98800;border-color:#a98800;color:#fff}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #a98800 #a98800 !important}.button.is-warning.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#a98800;box-shadow:none;color:#a98800}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#a98800}.button.is-warning.is-inverted.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #a98800 #a98800 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning.is-light{background-color:#fffbeb;color:#cca400}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff9de;border-color:transparent;color:#cca400}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#cca400}.button.is-danger{background-color:#cb3c33;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#c13930;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#b7362e;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#cb3c33;border-color:#cb3c33;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#cb3c33}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{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:#cb3c33}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;color:#cb3c33}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#cb3c33;border-color:#cb3c33;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #cb3c33 #cb3c33 !important}.button.is-danger.is-outlined.is-loading:hover::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.is-focused::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:#cb3c33;box-shadow:none;color:#cb3c33}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#cb3c33}.button.is-danger.is-inverted.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #cb3c33 #cb3c33 !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:#fbefef;color:#c03930}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#f8e6e5;border-color:transparent;color:#c03930}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#f6dcda;border-color:transparent;color:#c03930}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.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 * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.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-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected: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:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left: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:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.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,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.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,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.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:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{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,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,details.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,details.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#3c5dcd;color:#fff}.notification.is-info.is-light{background-color:#eff2fb;color:#3253c3}.notification.is-success{background-color:#259a12;color:#fff}.notification.is-success.is-light{background-color:#effded;color:#2ec016}.notification.is-warning{background-color:#a98800;color:#fff}.notification.is-warning.is-light{background-color:#fffbeb;color:#cca400}.notification.is-danger{background-color:#cb3c33;color:#fff}.notification.is-danger.is-light{background-color:#fbefef;color:#c03930}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;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,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,details.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,details.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,details.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,details.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3c5dcd}.progress.is-info::-moz-progress-bar{background-color:#3c5dcd}.progress.is-info::-ms-fill{background-color:#3c5dcd}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #3c5dcd 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#259a12}.progress.is-success::-moz-progress-bar{background-color:#259a12}.progress.is-success::-ms-fill{background-color:#259a12}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #259a12 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#a98800}.progress.is-warning::-moz-progress-bar{background-color:#a98800}.progress.is-warning::-ms-fill{background-color:#a98800}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #a98800 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#cb3c33}.progress.is-danger::-moz-progress-bar{background-color:#cb3c33}.progress.is-danger::-ms-fill{background-color:#cb3c33}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #cb3c33 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 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:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.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,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:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#3c5dcd;border-color:#3c5dcd;color:#fff}.table td.is-success,.table th.is-success{background-color:#259a12;border-color:#259a12;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#a98800;border-color:#a98800;color:#fff}.table td.is-danger,.table th.is-danger{background-color:#cb3c33;border-color:#cb3c33;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:#4eb5de;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:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;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:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.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:0.25em 0.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,.tags .content kbd,.content .tags kbd,.tags details.docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large details.docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered details.docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right details.docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons details.docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons details.docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons details.docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),details.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,details.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),details.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),details.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),details.docstring>section>a.docs-sourcelink.is-dark:not(body),.content details.docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),details.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),details.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),details.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),details.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),details.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#3c5dcd;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),details.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#eff2fb;color:#3253c3}.tag.is-success:not(body),.content kbd.is-success:not(body),details.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#259a12;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),details.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#effded;color:#2ec016}.tag.is-warning:not(body),.content kbd.is-warning:not(body),details.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#a98800;color:#fff}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),details.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#cca400}.tag.is-danger:not(body),.content kbd.is-danger:not(body),details.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#cb3c33;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),details.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fbefef;color:#c03930}.tag.is-normal:not(body),.content kbd.is-normal:not(body),details.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),details.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),details.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),details.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,details.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),details.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,details.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,details.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,details.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,details.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,details.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),details.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,details.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title details.docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle details.docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.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:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;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}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,details.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,details.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,details.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,details.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,details.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,details.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,details.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,details.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,details.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,details.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#3c5dcd}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#259a12}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#a98800}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#cb3c33}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>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(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.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:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,details.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,details.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,details.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,details.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,details.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,details.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,details.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,details.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#3c5dcd}.select.is-info select{border-color:#3c5dcd}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#3151bf}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(60,93,205,0.25)}.select.is-success:not(:hover)::after{border-color:#259a12}.select.is-success select{border-color:#259a12}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#20830f}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(37,154,18,0.25)}.select.is-warning:not(:hover)::after{border-color:#a98800}.select.is-warning select{border-color:#a98800}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#8f7300}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.select.is-danger:not(:hover)::after{border-color:#cb3c33}.select.is-danger select{border-color:#cb3c33}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#b7362e}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(203,60,51,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{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:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading: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:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-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:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-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,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,details.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,details.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,details.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,details.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,details.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,details.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,details.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3c5dcd;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#3355c9;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(60,93,205,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#3151bf;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#259a12;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#228f11;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(37,154,18,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#20830f;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#a98800;border-color:transparent;color:#fff}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#9c7d00;border-color:transparent;color:#fff}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(169,136,0,0.25);color:#fff}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#8f7300;border-color:transparent;color:#fff}.file.is-danger .file-cta{background-color:#cb3c33;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#c13930;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(203,60,51,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#b7362e;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.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,#documenter .docs-sidebar form.docs-search>input.is-boxed .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:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;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:#222}.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-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{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:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,details.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#3c5dcd}.help.is-success{color:#259a12}.help.is-warning{color:#a98800}.help.is-danger{color:#cb3c33}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-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) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>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) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-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) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):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-right:.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:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.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:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.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-right:.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 #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>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 #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>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 #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>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 #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>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;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading: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:#2e63b8;display:initial;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.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,#documenter .docs-sidebar form.docs-search>input.breadcrumb{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;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);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-right: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;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right: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:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.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-right:.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 .title,.level-item .subtitle{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-right:.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,0.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,0.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-right:1rem}.media-right{margin-left: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,#documenter .docs-sidebar form.docs-search>input.menu{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:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;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,#documenter .docs-sidebar form.docs-search>input.message{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,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,details.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,details.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,details.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#eff2fb}.message.is-info .message-header{background-color:#3c5dcd;color:#fff}.message.is-info .message-body{border-color:#3c5dcd;color:#3253c3}.message.is-success{background-color:#effded}.message.is-success .message-header{background-color:#259a12;color:#fff}.message.is-success .message-body{border-color:#259a12;color:#2ec016}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#a98800;color:#fff}.message.is-warning .message-body{border-color:#a98800;color:#cca400}.message.is-danger{background-color:#fbefef}.message.is-danger .message-header{background-color:#cb3c33;color:#fff}.message.is-danger .message-body{border-color:#cb3c33;color:#c03930}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.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:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.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,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right: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-head,.modal-card-foot{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:#222;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-right:.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-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{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: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .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-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{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: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .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,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,details.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,details.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,details.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,details.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,details.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,details.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,details.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,details.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,details.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,details.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,details.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,details.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;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: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#3c5dcd;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#3151bf;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: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#3151bf;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#3151bf;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3c5dcd;color:#fff}}.navbar.is-success{background-color:#259a12;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#20830f;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: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#20830f;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#20830f;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#259a12;color:#fff}}.navbar.is-warning{background-color:#a98800;color:#fff}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:#fff}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#8f7300;color:#fff}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:#fff}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#8f7300;color:#fff}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#8f7300;color:#fff}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#a98800;color:#fff}}.navbar.is-danger{background-color:#cb3c33;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#b7362e;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: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#b7362e;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#b7362e;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#cb3c33;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}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.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:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left: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,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:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.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(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.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:0.5rem 0}@media screen and (max-width: 1055px){.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,0.1);padding:0.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,0.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}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{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:#2e63b8}.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(0.25em, -0.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,0.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.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left: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,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right: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:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.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}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.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,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .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,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{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,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.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:#bbb;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,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,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,details.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,details.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,details.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#3c5dcd;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3c5dcd}.panel.is-info .panel-block.is-active .panel-icon{color:#3c5dcd}.panel.is-success .panel-heading{background-color:#259a12;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#259a12}.panel.is-success .panel-block.is-active .panel-icon{color:#259a12}.panel.is-warning .panel-heading{background-color:#a98800;color:#fff}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#a98800}.panel.is-warning .panel-block.is-active .panel-icon{color:#a98800}.panel.is-danger .panel-heading{background-color:#cb3c33;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#cb3c33}.panel.is-danger .panel-block.is-active .panel-icon{color:#cb3c33}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.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:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.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:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.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:#6b6b6b;margin-right:.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:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.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:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.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:4px 4px 0 0}.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:rgba(0,0,0,0) !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-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{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;width:unset}.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.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.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.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.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.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.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.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.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.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.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.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.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.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.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: 1055px){.column.is-narrow-touch{flex:none;width:unset}.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.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.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.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.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: 1056px){.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: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) 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: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .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: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) 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: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) 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: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) 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: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) 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: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) 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: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.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.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,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;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,0.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, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 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,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;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,0.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,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,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,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,0.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,0.7);border-color:rgba(0,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,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .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,.content kbd.hero .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,.content kbd.hero.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,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,details.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),details.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,details.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,details.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,details.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),details.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,details.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,details.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,details.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,details.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,details.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,details.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,details.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,details.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,details.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,details.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,details.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,details.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,details.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,details.docstring>section>a.hero.docs-sourcelink .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,details.docstring>section>a.hero.docs-sourcelink .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:#4eb5de}.hero.is-primary.is-bold,details.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,details.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;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,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;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,0.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:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#3c5dcd;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,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#3c5dcd}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#3151bf;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#3c5dcd !important;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,0.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:#3c5dcd}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}}.hero.is-success{background-color:#259a12;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,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#259a12}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#20830f;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#259a12 !important;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,0.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:#259a12}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}}.hero.is-warning{background-color:#a98800;color:#fff}.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:#fff}.hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#a98800}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#8f7300;color:#fff}.hero.is-warning .tabs a{color:#fff;opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#a98800 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:#fff}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.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:#fff;border-color:#fff;color:#a98800}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #764b00 0%, #a98800 71%, #c2bd00 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #764b00 0%, #a98800 71%, #c2bd00 100%)}}.hero.is-danger{background-color:#cb3c33;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,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#cb3c33}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#b7362e;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#cb3c33 !important;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,0.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:#cb3c33}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .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:0.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:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.link-icon:hover{color:#2e63b8}.admonition{background-color:#f5f5f5;border-style:solid;border-width:2px;border-color:#4a4a4a;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#f5f5f5;border-color:#4a4a4a}.admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#4a4a4a}.admonition.is-default>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-info{background-color:#f5f5f5;border-color:#3c5dcd}.admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#3c5dcd}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#f5f5f5;border-color:#259a12}.admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#259a12}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#f5f5f5;border-color:#a98800}.admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#a98800}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#f5f5f5;border-color:#cb3c33}.admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#cb3c33}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#f5f5f5;border-color:#3489da}.admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#3489da}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-todo{background-color:#f5f5f5;border-color:#9558b2}.admonition.is-todo>.admonition-header{background-color:rgba(0,0,0,0);color:#9558b2}.admonition.is-todo>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#4a4a4a;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}.admonition-header .admonition-anchor{opacity:0;margin-left:0.5em;font-size:0.75em;color:inherit;text-decoration:none;transition:opacity 0.2s ease-in-out}.admonition-header .admonition-anchor:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}.admonition-header .admonition-anchor:hover{opacity:1 !important;text-decoration:none}.admonition-header:hover .admonition-anchor{opacity:0.8}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}details.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #dbdbdb;border-radius:4px;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}details.docstring>summary{list-style-type:none;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}details.docstring>summary code{background-color:transparent}details.docstring>summary .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}details.docstring>summary .docstring-binding{margin-right:0.3em}details.docstring>summary .docstring-category{margin-left:0.3em}details.docstring>summary::before{content:'\f054';font-family:"Font Awesome 6 Free";font-weight:900;min-width:1.1rem;color:#2E63BD;display:inline-block}details.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}details.docstring>section:last-child{border-bottom:none}details.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}details.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}details.docstring:hover>section>a.docs-sourcelink{opacity:0.2}details.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}details.docstring>section:hover a.docs-sourcelink{opacity:1}details.docstring[open]>summary::before{content:"\f078"}.documenter-example-output{background-color:#fff}.warning-overlay-base,.dev-warning-overlay,.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;padding:10px 35px;text-align:center;font-size:15px}.warning-overlay-base .outdated-warning-closer,.dev-warning-overlay .outdated-warning-closer,.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.warning-overlay-base a,.dev-warning-overlay a,.outdated-warning-overlay a{color:#2e63b8}.warning-overlay-base a:hover,.dev-warning-overlay a:hover,.outdated-warning-overlay a:hover{color:#363636}.outdated-warning-overlay{background-color:#f5f5f5;color:rgba(0,0,0,0.7);border-bottom:3px solid rgba(0,0,0,0)}.dev-warning-overlay{background-color:#f5f5f5;color:rgba(0,0,0,0.7);border-bottom:3px solid rgba(0,0,0,0)}.footnote-reference{position:relative;display:inline-block}.footnote-preview{display:none;position:absolute;z-index:1000;max-width:300px;width:max-content;background-color:#fff;border:1px solid #363636;padding:10px;border-radius:5px;top:calc(100% + 10px);left:50%;transform:translateX(-50%);box-sizing:border-box;--arrow-left: 50%}.footnote-preview::before{content:"";position:absolute;top:-10px;left:var(--arrow-left);transform:translateX(-50%);border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #363636}.content pre{border:2px solid #dbdbdb;border-radius:4px}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content a:hover code{color:#363636}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li details.docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms;border:1px solid transparent}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1);outline:none;border-color:#1DD2AF}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/.save/docs/build/assets/themeswap.js b/.save/docs/build/assets/themeswap.js new file mode 100644 index 00000000..9f5eebe6 --- /dev/null +++ b/.save/docs/build/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/.save/docs/build/assets/warner.js b/.save/docs/build/assets/warner.js new file mode 100644 index 00000000..891cd539 --- /dev/null +++ b/.save/docs/build/assets/warner.js @@ -0,0 +1,68 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. DOCUMENTER_IS_DEV_VERSION is optional and defined in siteinfo.js. + // If the required variables are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + // Base class is added by default + div.classList.add("warning-overlay-base"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + + // Determine if this is a development version or an older release + let warningMessage = ""; + if (window.DOCUMENTER_IS_DEV_VERSION === true) { + div.classList.add("dev-warning-overlay"); + warningMessage = + "This documentation is for the development version and may contain unstable or unreleased features.
"; + } else { + div.classList.add("outdated-warning-overlay"); + warningMessage = + "This documentation is for an older version that may be missing recent changes.
"; + } + + warningMessage += + 'Click here to go to the documentation for the latest stable release.'; + + div.innerHTML = warningMessage; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/docs/src/assets/zhejiang-2025.jpg b/.save/docs/build/assets/zhejiang-2025.jpg similarity index 100% rename from docs/src/assets/zhejiang-2025.jpg rename to .save/docs/build/assets/zhejiang-2025.jpg diff --git a/.save/docs/build/example-double-integrator-energy-06fb24be.svg b/.save/docs/build/example-double-integrator-energy-06fb24be.svg new file mode 100644 index 00000000..06010972 --- /dev/null +++ b/.save/docs/build/example-double-integrator-energy-06fb24be.svg @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/example-double-integrator-energy-1aba7d99.svg b/.save/docs/build/example-double-integrator-energy-1aba7d99.svg new file mode 100644 index 00000000..d2813646 --- /dev/null +++ b/.save/docs/build/example-double-integrator-energy-1aba7d99.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/example-double-integrator-energy-58bc47a9.svg b/.save/docs/build/example-double-integrator-energy-58bc47a9.svg new file mode 100644 index 00000000..1ca0965b --- /dev/null +++ b/.save/docs/build/example-double-integrator-energy-58bc47a9.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/example-double-integrator-energy-e71f4e0b.svg b/.save/docs/build/example-double-integrator-energy-e71f4e0b.svg new file mode 100644 index 00000000..e3ea2591 --- /dev/null +++ b/.save/docs/build/example-double-integrator-energy-e71f4e0b.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/example-double-integrator-energy.html b/.save/docs/build/example-double-integrator-energy.html new file mode 100644 index 00000000..1e32fe50 --- /dev/null +++ b/.save/docs/build/example-double-integrator-energy.html @@ -0,0 +1,207 @@ + +Energy minimisation · OptimalControl.jl

Double integrator: energy minimisation

Let us consider a wagon moving along a rail, whose acceleration can be controlled by a force $u$. We denote by $x = (x_1, x_2)$ the state of the wagon, where $x_1$ is the position and $x_2$ the velocity.

We assume that the mass is constant and equal to one, and that there is no friction. The dynamics are given by

\[ \dot x_1(t) = x_2(t), \quad \dot x_2(t) = u(t),\quad u(t) \in \R,\]

which is simply the double integrator system. Let us consider a transfer starting at time $t_0 = 0$ and ending at time $t_f = 1$, for which we want to minimise the transfer energy

\[ \frac{1}{2}\int_{0}^{1} u^2(t) \, \mathrm{d}t\]

starting from $x(0) = (-1, 0)$ and aiming to reach the target $x(1) = (0, 0)$.

First, we need to import the OptimalControl.jl package to define the optimal control problem, NLPModelsIpopt.jl to solve it, and Plots.jl to visualise the solution.

using OptimalControl
+using NLPModelsIpopt
+using Plots

Optimal control problem

Let us define the problem with the @def macro:

+
t0 = 0
+tf = 1
+x0 = [-1, 0]
+xf = [0, 0]
+ocp = @def begin
+    t ∈ [t0, tf], time
+    x ∈ R², state
+    u ∈ R, control
+    x(t0) == x0
+    x(tf) == xf
+    ẋ(t) == [x₂(t), u(t)]
+    0.5∫( u(t)^2 ) → min
+end
+

Mathematical formulation

\[ \begin{aligned} + & \text{Minimise} && \frac{1}{2}\int_0^1 u^2(t) \,\mathrm{d}t \\ + & \text{subject to} \\ + & && \dot{x}_1(t) = x_2(t), \\[0.5em] + & && \dot{x}_2(t) = u(t), \\[1.0em] + & && x(0) = (-1,0), \\[0.5em] + & && x(1) = (0,0). + \end{aligned}\]

+
Nota bene

For a comprehensive introduction to the syntax used above to define the optimal control problem, see this abstract syntax tutorial. In particular, non-Unicode alternatives are available for derivatives, integrals, etc.

Solve and plot

Direct method

We can solve it simply with:

sol = solve(ocp)
▫ This is OptimalControl version v1.1.7 running with: direct, adnlp, ipopt.
+
+▫ The optimal control problem is solved with CTDirect version v0.17.4.
+
+   ┌─ The NLP is modelled with ADNLPModels and solved with NLPModelsIpopt.
+   │
+   ├─ Number of time steps⋅: 250
+   └─ Discretisation scheme: midpoint
+
+▫ This is Ipopt version 3.14.19, running with linear solver MUMPS 5.8.2.
+
+Number of nonzeros in equality constraint Jacobian...:     1754
+Number of nonzeros in inequality constraint Jacobian.:        0
+Number of nonzeros in Lagrangian Hessian.............:      250
+
+Total number of variables............................:      752
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:        0
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:      504
+Total number of inequality constraints...............:        0
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:        0
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  5.0000000e-03 1.10e+00 2.90e-14   0.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  6.0000960e+00 2.22e-16 1.78e-15 -11.0 6.08e+00    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 1
+
+                                   (scaled)                 (unscaled)
+Objective...............:   6.0000960015360345e+00    6.0000960015360345e+00
+Dual infeasibility......:   1.7763568394002505e-15    1.7763568394002505e-15
+Constraint violation....:   2.2204460492503131e-16    2.2204460492503131e-16
+Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
+Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
+Overall NLP error.......:   1.7763568394002505e-15    1.7763568394002505e-15
+
+
+Number of objective function evaluations             = 2
+Number of objective gradient evaluations             = 2
+Number of equality constraint evaluations            = 2
+Number of inequality constraint evaluations          = 0
+Number of equality constraint Jacobian evaluations   = 2
+Number of inequality constraint Jacobian evaluations = 0
+Number of Lagrangian Hessian evaluations             = 1
+Total seconds in IPOPT                               = 1.296
+
+EXIT: Optimal Solution Found.

And plot the solution with:

plot(sol)
Example block output
Nota bene

The solve function has options, see the solve tutorial. You can customise the plot, see the plot tutorial.

Indirect method

The first solution was obtained using the so-called direct method.[1] Another approach is to use an indirect simple shooting method. We begin by importing the necessary packages.

using OrdinaryDiffEq # Ordinary Differential Equations (ODE) solver
+using NonlinearSolve # Nonlinear Equations (NLE) solver

To define the shooting function, we must provide the maximising control in feedback form:

# maximising control, H(x, p, u) = p₁x₂ + p₂u - u²/2
+u(x, p) = p[2]
+
+# Hamiltonian flow
+f = Flow(ocp, u)
+
+# state projection, p being the costate
+π((x, p)) = x
+
+# shooting function
+S(p0) = π( f(t0, x0, p0, tf) ) - xf

We are now ready to solve the shooting equations.

# auxiliary in-place NLE function
+nle!(s, p0, λ) = s[:] = S(p0)
+
+# initial guess for the Newton solver
+p0_guess = [1, 1]
+
+# NLE problem with initial guess
+prob = NonlinearProblem(nle!, p0_guess)
+
+# resolution of S(p0) = 0
+sol = solve(prob; show_trace=Val(true))
+p0_sol = sol.u # costate solution
+
+# print the costate solution and the shooting function evaluation
+println("\ncostate: p0 = ", p0_sol)
+println("shoot: S(p0) = ", S(p0_sol), "\n")

+Algorithm: NewtonRaphson(
+    descent = NewtonDescent(),
+    autodiff = AutoForwardDiff(),
+    vjp_autodiff = AutoReverseDiff(
+        compile = false
+    ),
+    jvp_autodiff = AutoForwardDiff(),
+    concrete_jac = Val{false}()
+)
+
+----    	-------------       	-----------
+Iter    	f(u) inf-norm       	Step 2-norm
+----    	-------------       	-----------
+0       	6.66666667e-01      	0.00000000e+00
+1       	2.31244296e-14      	1.20830460e+01
+Final   	2.31244296e-14
+----------------------
+
+costate: p0 = [12.000000000000192, 6.000000000000071]
+shoot: S(p0) = [1.7868366116270543e-15, -2.3124429567206217e-14]

To plot the solution obtained by the indirect method, we need to build the solution of the optimal control problem. This is done using the costate solution and the flow function.

sol = f((t0, tf), x0, p0_sol; saveat=range(t0, tf, 100))
+plot(sol)
Example block output
Note

State constraint

Direct method: constrained case

We add the path constraint

\[ x_2(t) \le 1.2.\]

Let us model, solve and plot the optimal control problem with this constraint.

# the upper bound for x₂
+a = 1.2
+
+# the optimal control problem
+ocp = @def begin
+    t ∈ [t0, tf], time
+    x ∈ R², state
+    u ∈ R, control
+    x₂(t) ≤ a
+    x(t0) == x0
+    x(tf) == xf
+    ẋ(t) == [x₂(t), u(t)]
+    0.5∫( u(t)^2 ) → min
+end
+
+# solve with a direct method using default settings
+sol = solve(ocp)
+
+# plot the solution
+plt = plot(sol; label="Direct", size=(800, 600))
Example block output

Indirect method: constrained case

The pseudo-Hamiltonian is (considering the normal case):

\[H(x, p, u, \mu) = p_1 x_2 + p_2 u - \frac{u^2}{2} + \mu\, c(x),\]

with $c(x) = x_2 - a$. Along a boundary arc we have $c(x(t)) = 0$. Differentiating, we obtain:

\[ \frac{\mathrm{d}}{\mathrm{d}t}c(x(t)) = \dot{x}_2(t) = u(t) = 0.\]

The zero control is maximising; hence, $p_2(t) = 0$ along the boundary arc.

\[ \dot{p}_2(t) = -p_1(t) - \mu(t) \quad \Rightarrow \mu(t) = -p_1(t).\]

Since the adjoint vector is continuous at the entry time $t_1$ and the exit time $t_2$, we have four unknowns: the initial costate $p_0 \in \mathbb{R}^2$ and the times $t_1$ and $t_2$. We need four equations: the target condition provides two, reaching the constraint at time $t_1$ gives $c(x(t_1)) = 0$, and finally $p_2(t_1) = 0$.

# flow for unconstrained extremals
+f = Flow(ocp, (x, p) -> p[2])
+
+ub = 0          # boundary control
+c(x) = x[2]-a   # constraint: c(x) ≥ 0
+μ(p) = -p[1]    # dual variable
+
+# flow for boundary extremals
+g = Flow(ocp, (x, p) -> ub, (x, u) -> c(x), (x, p) -> μ(p))
+
+# shooting function
+function shoot!(s, p0, t1, t2)
+    x_t0, p_t0 = x0, p0
+    x_t1, p_t1 = f(t0, x_t0, p_t0, t1)
+    x_t2, p_t2 = g(t1, x_t1, p_t1, t2)
+    x_tf, p_tf = f(t2, x_t2, p_t2, tf)
+    s[1:2] = x_tf - xf
+    s[3] = c(x_t1)
+    s[4] = p_t1[2]
+end

We are now ready to solve the shooting equations.

# auxiliary in-place NLE function
+nle!(s, ξ, λ) = shoot!(s, ξ[1:2], ξ[3], ξ[4])
+
+# initial guess for the Newton solver
+ξ_guess = [40, 10, 0.25, 0.75]
+
+# NLE problem with initial guess
+prob = NonlinearProblem(nle!, ξ_guess)
+
+# resolution of the shooting equations
+sol = solve(prob; show_trace=Val(true))
+p0, t1, t2 = sol.u[1:2], sol.u[3], sol.u[4]
+
+# print the costate solution and the entry and exit times
+println("\np0 = ", p0, "\nt1 = ", t1, "\nt2 = ", t2)

+Algorithm: NewtonRaphson(
+    descent = NewtonDescent(),
+    autodiff = AutoForwardDiff(),
+    vjp_autodiff = AutoReverseDiff(
+        compile = false
+    ),
+    jvp_autodiff = AutoForwardDiff(),
+    concrete_jac = Val{false}()
+)
+
+----    	-------------       	-----------
+Iter    	f(u) inf-norm       	Step 2-norm
+----    	-------------       	-----------
+0       	5.00000000e-02      	0.00000000e+00
+1       	9.38412933e-15      	1.64924225e+00
+Final   	9.38412933e-15
+----------------------
+
+p0 = [38.40000000000056, 9.600000000000053]
+t1 = 0.2499999999999979
+t2 = 0.7500000000000011

To reconstruct the trajectory obtained with the state constraint, we concatenate the flows: one unconstrained arc up to the entry time $t_1$, a boundary arc between $t_1$ and $t_2$, and finally another unconstrained arc up to $t_f$. This concatenation allows us to compute the complete solution — state, costate, and control — which we can then plot together with the direct solution for comparison.

# concatenation of the flows
+φ = f * (t1, g) * (t2, f)
+
+# compute the solution: state, costate, control...
+flow_sol = φ((t0, tf), x0, p0; saveat=range(t0, tf, 100))
+
+# plot the solution on the previous plot
+plot!(plt, flow_sol; label="Indirect", color=2, linestyle=:dash)
Example block output
  • 1J. T. Betts. Practical methods for optimal control using nonlinear programming. Society for Industrial and Applied Mathematics (SIAM), Philadelphia, PA, 2001.
diff --git a/.save/docs/build/example-double-integrator-time-765cb6c7.svg b/.save/docs/build/example-double-integrator-time-765cb6c7.svg new file mode 100644 index 00000000..50262dde --- /dev/null +++ b/.save/docs/build/example-double-integrator-time-765cb6c7.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/example-double-integrator-time-b5687fa2.svg b/.save/docs/build/example-double-integrator-time-b5687fa2.svg new file mode 100644 index 00000000..f0e1dc7e --- /dev/null +++ b/.save/docs/build/example-double-integrator-time-b5687fa2.svg @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/example-double-integrator-time.html b/.save/docs/build/example-double-integrator-time.html new file mode 100644 index 00000000..3bc1e8fd --- /dev/null +++ b/.save/docs/build/example-double-integrator-time.html @@ -0,0 +1,167 @@ + +Time mininimisation · OptimalControl.jl

Double integrator: time minimisation

The problem consists in minimising the final time $t_f$ for the double integrator system

\[ \dot x_1(t) = x_2(t), \quad \dot x_2(t) = u(t), \quad u(t) \in [-1,1],\]

and the limit conditions

\[ x(0) = (-1,0), \quad x(t_f) = (0,0).\]

This problem can be interpreted as a simple model for a wagon with constant mass moving along a line without friction.

First, we need to import the OptimalControl.jl package to define the optimal control problem and NLPModelsIpopt.jl to solve it. We also need to import the Plots.jl package to plot the solution.

using OptimalControl
+using NLPModelsIpopt
+using Plots

Optimal control problem

Let us define the problem:

+
ocp = @def begin
+
+    tf ∈ R,          variable
+    t ∈ [0, tf],     time
+    x = (q, v) ∈ R², state
+    u ∈ R,           control
+
+    -1 ≤ u(t) ≤ 1
+
+    q(0)  == -1
+    v(0)  == 0
+    q(tf) == 0
+    v(tf) == 0
+
+    ẋ(t) == [v(t), u(t)]
+
+    tf → min
+
+end
+

Mathematical formulation

\[ \begin{aligned} + & \text{Minimise} && t_f \\[0.5em] + & \text{subject to} \\[0.5em] + & && \dot q(t) = v(t), \\ + & && \dot v(t) = u(t), \\[0.5em] + & && -1 \le u(t) \le 1, \\[0.5em] + & && q(0) = -1, \\[0.5em] + & && v(0) = 0, \\[0.5em] + & && q(t_f) = 0, \\[0.5em] + & && v(t_f) = 0. + \end{aligned}\]

+
Nota bene

For a comprehensive introduction to the syntax used above to define the optimal control problem, see this abstract syntax tutorial. In particular, non-Unicode alternatives are available for derivatives, integrals, etc.

Solve and plot

Direct method

Let us solve it with a direct method (we set the number of time steps to 200):

sol = solve(ocp; grid_size=200)
▫ This is OptimalControl version v1.1.7 running with: direct, adnlp, ipopt.
+
+▫ The optimal control problem is solved with CTDirect version v0.17.4.
+
+   ┌─ The NLP is modelled with ADNLPModels and solved with NLPModelsIpopt.
+   │
+   ├─ Number of time steps⋅: 200
+   └─ Discretisation scheme: midpoint
+
+▫ This is Ipopt version 3.14.19, running with linear solver MUMPS 5.8.2.
+
+Number of nonzeros in equality constraint Jacobian...:     1804
+Number of nonzeros in inequality constraint Jacobian.:        0
+Number of nonzeros in Lagrangian Hessian.............:      401
+
+Total number of variables............................:      603
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:      200
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:      404
+Total number of inequality constraints...............:        0
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:        0
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  1.0000000e-01 1.10e+00 2.52e-04   0.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  2.2808861e-01 1.09e+00 6.71e+01  -6.0 1.06e+01    -  7.74e-02 1.28e-02h  4
+   2  7.4978419e-01 1.03e+00 1.69e+02   0.4 9.79e+00    -  2.34e-01 5.33e-02h  3
+   3  1.4421044e+00 8.71e-01 9.74e+01   0.2 5.73e+00    -  1.00e+00 1.52e-01H  1
+   4  3.3890134e+00 4.35e-03 1.23e+02  -0.6 1.95e+00    -  9.99e-01 1.00e+00h  1
+   5  2.2433611e+00 1.19e-03 6.16e+00  -1.6 1.15e+00   0.0 1.00e+00 1.00e+00h  1
+   6  2.3414860e+00 1.86e-05 1.03e+00  -3.2 9.81e-02    -  1.00e+00 1.00e+00h  1
+   7  2.0143901e+00 1.24e-03 2.85e-01  -3.6 7.56e-01    -  1.00e+00 1.00e+00f  1
+   8  2.0338305e+00 3.08e-05 7.77e-03  -4.4 3.17e-01    -  1.00e+00 1.00e+00h  1
+   9  2.0030894e+00 9.23e-05 3.90e-04  -4.9 6.00e-01    -  1.00e+00 1.00e+00h  1
+iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+  10  2.0002715e+00 5.69e-06 6.16e-06  -5.9 4.04e-01    -  9.77e-01 1.00e+00h  1
+  11  2.0000002e+00 5.64e-08 1.07e-07 -11.0 4.16e-02    -  9.80e-01 1.00e+00h  1
+  12  2.0000000e+00 4.01e-13 3.13e-14 -11.0 3.92e-04    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 12
+
+                                   (scaled)                 (unscaled)
+Objective...............:   1.9999999920052862e+00    1.9999999920052862e+00
+Dual infeasibility......:   3.1308289294429414e-14    3.1308289294429414e-14
+Constraint violation....:   4.0090153419214403e-13    4.0090153419214403e-13
+Variable bound violation:   8.9949565573732571e-09    8.9949565573732571e-09
+Complementarity.........:   1.2075473816985994e-11    1.2075473816985994e-11
+Overall NLP error.......:   1.2075473816985994e-11    1.2075473816985994e-11
+
+
+Number of objective function evaluations             = 21
+Number of objective gradient evaluations             = 13
+Number of equality constraint evaluations            = 21
+Number of inequality constraint evaluations          = 0
+Number of equality constraint Jacobian evaluations   = 13
+Number of inequality constraint Jacobian evaluations = 0
+Number of Lagrangian Hessian evaluations             = 12
+Total seconds in IPOPT                               = 1.278
+
+EXIT: Optimal Solution Found.

and plot the solution:

plt = plot(sol; label="Direct", size=(800, 600))
Example block output
Nota bene

The solve function has options, see the solve tutorial. You can customise the plot, see the plot tutorial.

Indirect method

We now turn to the indirect method, which relies on Pontryagin’s Maximum Principle. The pseudo-Hamiltonian is given by

\[H(x, p, u) = p_1 v + p_2 u - 1,\]

where $p = (p_1, p_2)$ is the costate vector. The optimal control is of bang–bang type:

\[u(t) = \mathrm{sign}(p_2(t)),\]

with one switch from $u=+1$ to $u=-1$ at one single time denoted $t_1$. Let us implement this approach. First, we import the necessary packages:

using OrdinaryDiffEq
+using NonlinearSolve

Define the bang–bang control and Hamiltonian flow:

# pseudo-Hamiltonian
+H(x, p, u) = p[1]*x[2] + p[2]*u - 1
+
+# bang–bang control
+u_max = +1
+u_min = -1
+
+# Hamiltonian flow
+f_max = Flow(ocp, (x, p, tf) -> u_max)
+f_min = Flow(ocp, (x, p, tf) -> u_min)

The shooting function enforces the conditions:

t0 = 0
+x0 = [-1, 0]
+xf = [ 0, 0]
+function shoot!(s, p0, t1, tf)
+    x_t0, p_t0 = x0, p0
+    x_t1, p_t1 = f_max(t0, x_t0, p_t0, t1)
+    x_tf, p_tf = f_min(t1, x_t1, p_t1, tf)
+    s[1:2] = x_tf - xf                          # target conditions
+    s[3] = p_t1[2]                              # switching condition
+    s[4] = H(x_tf, p_tf, -1)                    # free final time
+end

We are now ready to solve the shooting equations:

# in-place shooting function
+nle!(s, ξ, λ) = shoot!(s, ξ[1:2], ξ[3], ξ[4])
+
+# initial guess: costate and final time
+ξ_guess = [0.1, 0.1, 0.5, 1]
+
+# NLE problem
+prob = NonlinearProblem(nle!, ξ_guess)
+
+# resolution of the shooting equations
+sol = solve(prob; show_trace=Val(true))
+p0, t1, tf = sol.u[1:2], sol.u[3], sol.u[4]
+
+# print the solution
+println("\np0 = ", p0, "\nt1 = ", t1, "\ntf = ", tf)

+Algorithm: NewtonRaphson(
+    descent = NewtonDescent(),
+    autodiff = AutoForwardDiff(),
+    vjp_autodiff = AutoReverseDiff(
+        compile = false
+    ),
+    jvp_autodiff = AutoForwardDiff(),
+    concrete_jac = Val{false}()
+)
+
+----    	-------------       	-----------
+Iter    	f(u) inf-norm       	Step 2-norm
+----    	-------------       	-----------
+0       	1.00000000e+00      	0.00000000e+00
+1       	2.62500000e+00      	2.58553669e+00
+2       	3.22650000e-01      	8.75907529e-01
+3       	6.42532991e-03      	1.41327491e-01
+4       	1.77171853e-06      	2.98492940e-03
+5       	7.83817455e-14      	8.45802733e-07
+Final   	7.83817455e-14
+----------------------
+
+p0 = [1.000000000000038, 1.0000000000000002]
+t1 = 1.0000000000000016
+tf = 2.000000000000003

Finally, we reconstruct and plot the solution obtained by the indirect method:

# concatenation of the flows
+φ = f_max * (t1, f_min)
+
+# compute the solution: state, costate, control...
+flow_sol = φ((t0, tf), x0, p0; saveat=range(t0, tf, 200))
+
+# plot the solution on the previous plot
+plot!(plt, flow_sol; label="Indirect", color=2, linestyle=:dash)
Example block output
Note
diff --git a/.save/docs/build/index.html b/.save/docs/build/index.html new file mode 100644 index 00000000..17528471 --- /dev/null +++ b/.save/docs/build/index.html @@ -0,0 +1,460 @@ + +Getting Started · OptimalControl.jl

OptimalControl.jl

The OptimalControl.jl package is the root package of the control-toolbox ecosystem. The control-toolbox ecosystem gathers Julia packages for mathematical control and applications. It aims to provide tools to model and solve optimal control problems with ordinary differential equations by direct and indirect methods, both on CPU and GPU.

Installation

To install OptimalControl.jl, please open Julia's interactive session (known as REPL) and use the Julia package manager:

using Pkg
+Pkg.add("OptimalControl")
Tip

If you are new to Julia, please follow this guidelines.

Basic usage

Let us model, solve and plot a simple optimal control problem.

using OptimalControl
+using NLPModelsIpopt
+using Plots
+
+ocp = @def begin
+    t ∈ [0, 1], time
+    x ∈ R², state
+    u ∈ R, control
+    x(0) == [-1, 0]
+    x(1) == [0, 0]
+    ẋ(t) == [x₂(t), u(t)]
+    ∫( 0.5u(t)^2 ) → min
+end
+
+sol = solve(ocp)
+plot(sol)

Citing us

If you use OptimalControl.jl in your work, please cite us:

Caillau, J.-B., Cots, O., Gergaud, J., Martinon, P., & Sed, S. OptimalControl.jl: a Julia package to model and solve optimal control problems with ODE's. doi.org/10.5281/zenodo.13336563

or in bibtex format:

@software{OptimalControl_jl,
+author = {Caillau, Jean-Baptiste and Cots, Olivier and Gergaud, Joseph and Martinon, Pierre and Sed, Sophia},
+doi = {10.5281/zenodo.13336563},
+license = {["MIT"]},
+title = {{OptimalControl.jl: a Julia package to model and solve optimal control problems with ODE's}},
+url = {https://control-toolbox.org/OptimalControl.jl}
+}

Contributing

If you think you found a bug or if you have a feature request / suggestion, feel free to open an issue. Before opening a pull request, please start an issue or a discussion on the topic.

Contributions are welcomed, check out how to contribute to a Github project. If it is your first contribution, you can also check this first contribution tutorial. You can find first good issues (if any 🙂) here. You may find other packages to contribute to at the control-toolbox organization.

If you want to ask a question, feel free to start a discussion here. This forum is for general discussion about this repository and the control-toolbox organization.

Note

If you want to add an application or a package to the control-toolbox ecosystem, please follow this set up tutorial.

Reproducibility

You can download the exact environment used to build this documentation:

+ +
ℹ️ Version info
Julia Version 1.12.1
+Commit ba1e628ee49 (2025-10-17 13:02 UTC)
+Build Info:
+  Official https://julialang.org release
+Platform Info:
+  OS: macOS (arm64-apple-darwin24.0.0)
+  CPU: 11 × Apple M3 Pro
+  WORD_SIZE: 64
+  LLVM: libLLVM-18.1.7 (ORCJIT, apple-m3)
+  GC: Built with stock GC
+Threads: 1 default, 1 interactive, 1 GC (on 5 virtual cores)
+Environment:
+  DYLD_FALLBACK_LIBRARY_PATH = /Users/ocots/.julia/artifacts/c1600fa286afe4bf3616780a19b65285c63968ca/lib:/Users/ocots/.julia/juliaup/julia-1.12.1+0.aarch64.apple.darwin14/lib/julia:/Users/ocots/.julia/artifacts/b820a0a437e8501d06a17439abd84feaa5b6cca3/lib:/Users/ocots/.julia/artifacts/ccab86a3f5c2e11b743d3c30a624a3a95c3dc170/lib:/Users/ocots/.julia/artifacts/a313d7c1b6344b380ad5425226ece4d3952012c3/lib:/Users/ocots/.julia/artifacts/0a2974ab6286ff434737b70b715a26ec7a236548/lib:/Users/ocots/.julia/artifacts/21209a2ac399ce693d73daf1aa8d670fbc84d70f/lib:/Users/ocots/.julia/artifacts/c59059ef20910985e15a497e3f3f9f5a01df2645/lib:/Users/ocots/.julia/artifacts/1d0eae2792856ec5c66a512d0bfac7e112aa3662/lib:/Users/ocots/.julia/artifacts/365365262519d2f165f6ca9bdc0f104718889a88/lib:/Users/ocots/.julia/artifacts/d017b9246247518792dcb16dae9af38dfb0c5eb6/lib:/Users/ocots/.julia/artifacts/886df745cefeb82992e03223358349fb95adde15/lib:/Users/ocots/.julia/artifacts/9afa0c7d7942a5f55d570fe7a49075105ace80b0/lib:/Users/ocots/.julia/artifacts/1994697285dfe8747ff7ec6927666edc88750202/lib:/Users/ocots/.julia/artifacts/c5d5b7c7e77b04af2eabde40ebbf379932d8bfd7/lib:/Users/ocots/.julia/artifacts/7fefc9739781f053e15aeb2e61c2ba767c275222/lib:/Users/ocots/.julia/artifacts/8df2529d47c744e5f9991ca2838d3d3031be5ce4/lib:/Users/ocots/.julia/artifacts/98553abcb30b9dd3d08a0eb5db9d80db3fa4d47d/lib:/Users/ocots/.julia/artifacts/ebbb9485b8a2f32f9ab907b08b38b039acaae6cf/lib:/Users/ocots/.julia/artifacts/b3ac9a674d35c322d3739673265d95e54938f516/lib:/Users/ocots/.julia/artifacts/a3e5b0f98e80defaec4ba488a9ceeace69feb32c/lib:/Users/ocots/.julia/artifacts/adceccf0eff256e82867d94d0cfbb9dcc786e7a9/lib:/Users/ocots/.julia/artifacts/946f83a35722fcae46f1f49c71466ba14dc17fd1/lib:/Users/ocots/.julia/artifacts/c70ffd15b6adfc269b041a77ed26af364f9969c4/lib:/Users/ocots/.julia/artifacts/256ef4a12ef53f7bf25686f66bf0f69032c285f8/lib:/Users/ocots/.julia/artifacts/cef2b8bff9be9da9fefa8087fae2111ecd96dba4/lib:/Users/ocots/.julia/artifacts/226fe34989557ac27bbd60ea8ab90bb7a4c58dcf/lib:/Users/ocots/.julia/artifacts/76b376b06962c945ec95068d8a90c77fb58a5787/lib:/Users/ocots/.julia/artifacts/63d48e4aab8721470f588bdeb1e2b462ee3b6a68/lib:/Users/ocots/.julia/artifacts/8497848586ec3c8e66c36a5b01fea1e48dd2f62f/lib:/Users/ocots/.julia/artifacts/8da603395acfbdbef8c5de3b7223aeb9276ecbdb/lib:/Users/ocots/.julia/artifacts/90aba84be27431afda9bb9fe1335b46353fe04a0/lib:/Users/ocots/.julia/artifacts/4b3b2d79556cc3aef6e3d8a234649cc85b91bb87/lib:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtConcurrent.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtCore.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtDBus.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtGui.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtNetwork.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtOpenGL.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtOpenGLWidgets.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtPrintSupport.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtSql.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtTest.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtWidgets.framework/Versions/A:/Users/ocots/.julia/artifacts/6bcb7e8e013c86b6470fceef87dd9152f7c00ac9/lib/QtXml.framework/Versions/A:/Users/ocots/.julia/artifacts/3c7f37da7c70696e7bc1a8e7e491176fb08eaabf/lib:/Users/ocots/.julia/juliaup/julia-1.12.1+0.aarch64.apple.darwin14/bin/../lib/julia:/Users/ocots/.julia/juliaup/julia-1.12.1+0.aarch64.apple.darwin14/bin/../lib:
📦 Package status
Status `~/Research/logiciels/dev/control-toolbox/OptimalControl/docs/Project.toml`
+  [54578032] ADNLPModels v0.8.13
+ [54762871] CTBase v0.16.4
+  [790bbbee] CTDirect v0.17.4
+  [1c39547c] CTFlows v0.8.9
+ [34c4fa32] CTModels v0.6.10-beta
+ [32681960] CTParser v0.7.3-beta
+  [38540f10] CommonSolve v0.2.6
+  [a93c6f00] DataFrames v1.8.1
+  [a0c0ee7d] DifferentiationInterface v0.7.14
+  [e30172f5] Documenter v1.16.1
+  [d12716ef] DocumenterInterLinks v1.1.0
+  [a078cd44] DocumenterMermaid v0.2.0
+  [1037b233] ExaModels v0.9.3
+  [f6369f11] ForwardDiff v1.3.1
+  [033835bb] JLD2 v0.6.3
+  [0f8b85d8] JSON3 v1.14.3
+  [4854310b] MINPACK v1.3.0
+  [2621e9c9] MadNLP v0.8.12
+  [3b83494e] MadNLPMumps v0.5.1
+  [f4238b75] NLPModelsIpopt v0.11.1
+ [bec4dd0d] NLPModelsKnitro v0.9.3
+  [8913a72c] NonlinearSolve v4.14.0
+  [5f98b655] OptimalControl v1.1.7 `~/Research/logiciels/dev/control-toolbox/OptimalControl`
+  [1dea7af3] OrdinaryDiffEq v6.106.0
+  [91a5bcdd] Plots v1.41.4
+  [fd094767] Suppressor v0.2.8
+  [37e2e46d] LinearAlgebra v1.12.0
+Info Packages marked with  have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated`
📚 Complete manifest
Status `~/Research/logiciels/dev/control-toolbox/OptimalControl/docs/Manifest.toml`
+  [54578032] ADNLPModels v0.8.13
+  [47edcb42] ADTypes v1.21.0
+  [14f7f29c] AMD v0.5.3
+  [a4c015fc] ANSIColoredPrinters v0.0.1
+  [1520ce14] AbstractTrees v0.4.5
+  [7d9f7c33] Accessors v0.1.43
+  [79e6a3ab] Adapt v4.4.0
+  [66dad0bd] AliasTables v1.1.3
+  [4fba245c] ArrayInterface v7.22.0
+  [13072b0f] AxisAlgorithms v1.1.0
+  [d1d4a3ce] BitFlags v0.1.9
+  [62783981] BitTwiddlingConvenienceFunctions v0.1.6
+  [70df07ce] BracketingNonlinearSolve v1.6.2
+  [2a0fbf3d] CPUSummary v0.2.7
+ [54762871] CTBase v0.16.4
+  [790bbbee] CTDirect v0.17.4
+  [1c39547c] CTFlows v0.8.9
+ [34c4fa32] CTModels v0.6.10-beta
+ [32681960] CTParser v0.7.3-beta
+  [d360d2e6] ChainRulesCore v1.26.0
+  [0b6fb165] ChunkCodecCore v1.0.1
+  [4c0bbee4] ChunkCodecLibZlib v1.0.0
+  [55437552] ChunkCodecLibZstd v1.0.0
+  [fb6a15b2] CloseOpenIntervals v0.1.13
+  [944b1d66] CodecZlib v0.7.8
+  [35d6a980] ColorSchemes v3.31.0
+  [3da002f7] ColorTypes v0.12.1
+  [c3611d14] ColorVectorSpace v0.11.0
+  [5ae59095] Colors v0.13.1
+  [38540f10] CommonSolve v0.2.6
+  [bbf7d656] CommonSubexpressions v0.3.1
+  [f70d9fcc] CommonWorldInvalidations v1.0.0
+  [34da2185] Compat v4.18.1
+  [a33af91c] CompositionsBase v0.1.2
+  [2569d6c7] ConcreteStructs v0.2.3
+  [f0e56b4a] ConcurrentUtilities v2.5.0
+  [187b0558] ConstructionBase v1.6.0
+  [d38c429a] Contour v0.6.3
+  [adafc99b] CpuId v0.3.1
+  [a8cc5b0e] Crayons v4.1.1
+  [9a962f9c] DataAPI v1.16.0
+  [a93c6f00] DataFrames v1.8.1
+  [864edb3b] DataStructures v0.19.3
+  [e2d170a0] DataValueInterfaces v1.0.0
+  [8bb1440f] DelimitedFiles v1.9.1
+  [2b5f629d] DiffEqBase v6.199.0
+  [163ba53b] DiffResults v1.1.0
+  [b552c78f] DiffRules v1.15.1
+  [a0c0ee7d] DifferentiationInterface v0.7.14
+  [43dc2714] DocInventories v1.0.0
+  [ffbed154] DocStringExtensions v0.9.5
+  [e30172f5] Documenter v1.16.1
+  [d12716ef] DocumenterInterLinks v1.1.0
+  [a078cd44] DocumenterMermaid v0.2.0
+  [4e289a0a] EnumX v1.0.5
+  [f151be2c] EnzymeCore v0.8.18
+  [1037b233] ExaModels v0.9.3
+  [460bff9d] ExceptionUnwrapping v0.1.11
+  [d4d017d3] ExponentialUtilities v1.30.0
+  [e2ba6199] ExprTools v0.1.10
+  [55351af7] ExproniconLite v0.10.14
+  [c87230d0] FFMPEG v0.4.5
+  [7034ab61] FastBroadcast v0.3.5
+  [9aa1b823] FastClosures v0.3.2
+  [442a2c76] FastGaussQuadrature v1.1.0
+  [a4df4552] FastPower v1.3.0
+  [5789e2e9] FileIO v1.17.1
+  [1a297f60] FillArrays v1.16.0
+  [6a86dc24] FiniteDiff v2.29.0
+  [53c48c17] FixedPointNumbers v0.8.5
+  [1fa38f19] Format v1.3.7
+  [f6369f11] ForwardDiff v1.3.1
+  [069b7b12] FunctionWrappers v1.1.3
+  [77dc65aa] FunctionWrappersWrappers v0.1.3
+  [46192b85] GPUArraysCore v0.2.0
+  [28b8d3ca] GR v0.73.19
+  [c145ed77] GenericSchur v0.5.6
+  [d7ba0133] Git v1.5.0
+  [42e2da0e] Grisu v1.0.2
+  [34c5aeac] HSL v0.5.2
+  [cd3eb016] HTTP v1.10.19
+  [076d061b] HashArrayMappedTries v0.2.0
+  [b5f81e59] IOCapture v1.0.0
+  [615f187c] IfElse v0.1.1
+  [842dd82b] InlineStrings v1.4.5
+  [a98d9a8b] Interpolations v0.16.2
+  [3587e190] InverseFunctions v0.1.17
+  [41ab1584] InvertedIndices v1.3.1
+  [b6b21f68] Ipopt v1.14.0
+  [92d709cd] IrrationalConstants v0.2.6
+  [82899510] IteratorInterfaceExtensions v1.0.0
+  [033835bb] JLD2 v0.6.3
+  [1019f520] JLFzf v0.1.11
+  [692b3bcd] JLLWrappers v1.7.1
+ [682c06a0] JSON v0.21.4
+  [0f8b85d8] JSON3 v1.14.3
+  [ae98c720] Jieko v0.2.1
+ [67920dd8] KNITRO v0.14.10
+  [ba0b0d4f] Krylov v0.10.3
+  [40e66cde] LDLFactorizations v0.10.1
+  [b964fa9f] LaTeXStrings v1.4.0
+  [23fbe1c1] Latexify v0.16.10
+  [10f19ff3] LayoutPointers v0.1.17
+  [0e77f7df] LazilyInitializedFields v1.3.0
+  [87fe0de2] LineSearch v0.1.6
+  [d3d80556] LineSearches v7.6.0
+  [5c8ed15e] LinearOperators v2.11.0
+  [7ed4a6bd] LinearSolve v3.57.0
+  [2ab3a3ac] LogExpFunctions v0.3.29
+  [e6f89c97] LoggingExtras v1.2.0
+  [4854310b] MINPACK v1.3.0
+  [33e6dc65] MKL v0.9.0
+  [d8e11817] MLStyle v0.4.17
+  [1914dd2f] MacroTools v0.5.16
+  [2621e9c9] MadNLP v0.8.12
+  [3b83494e] MadNLPMumps v0.5.1
+  [d125e4d3] ManualMemory v0.1.8
+  [d0879d2d] MarkdownAST v0.1.2
+  [bb5d69b7] MaybeInplace v0.1.4
+  [739be429] MbedTLS v1.1.9
+  [442fdcdd] Measures v0.3.3
+  [e1d29d7a] Missings v1.2.0
+  [2e0e35c7] Moshi v0.3.7
+  [46d2c3a1] MuladdMacro v0.2.4
+  [a4795742] NLPModels v0.21.7
+  [f4238b75] NLPModelsIpopt v0.11.1
+ [bec4dd0d] NLPModelsKnitro v0.9.3
+  [e01155f1] NLPModelsModifiers v0.7.2
+  [d41bc354] NLSolversBase v8.0.0
+  [77ba4419] NaNMath v1.1.3
+  [8913a72c] NonlinearSolve v4.14.0
+  [be0214bd] NonlinearSolveBase v2.9.1
+  [5959db7a] NonlinearSolveFirstOrder v1.11.0
+  [9a2c21bd] NonlinearSolveQuasiNewton v1.12.0
+  [26075421] NonlinearSolveSpectralMethods v1.6.0
+  [6fe1bfb0] OffsetArrays v1.17.0
+  [4d8831e6] OpenSSL v1.6.1
+  [5f98b655] OptimalControl v1.1.7 `~/Research/logiciels/dev/control-toolbox/OptimalControl`
+  [bac558e1] OrderedCollections v1.8.1
+  [1dea7af3] OrdinaryDiffEq v6.106.0
+  [89bda076] OrdinaryDiffEqAdamsBashforthMoulton v1.9.0
+  [6ad6398a] OrdinaryDiffEqBDF v1.14.0
+  [bbf590c4] OrdinaryDiffEqCore v3.1.0
+  [50262376] OrdinaryDiffEqDefault v1.12.0
+  [4302a76b] OrdinaryDiffEqDifferentiation v1.22.0
+  [9286f039] OrdinaryDiffEqExplicitRK v1.8.0
+  [e0540318] OrdinaryDiffEqExponentialRK v1.12.0
+  [becaefa8] OrdinaryDiffEqExtrapolation v1.13.0
+  [5960d6e9] OrdinaryDiffEqFIRK v1.20.0
+  [101fe9f7] OrdinaryDiffEqFeagin v1.8.0
+  [d3585ca7] OrdinaryDiffEqFunctionMap v1.9.0
+  [d28bc4f8] OrdinaryDiffEqHighOrderRK v1.9.0
+  [9f002381] OrdinaryDiffEqIMEXMultistep v1.11.0
+  [521117fe] OrdinaryDiffEqLinear v1.10.0
+  [1344f307] OrdinaryDiffEqLowOrderRK v1.10.0
+  [b0944070] OrdinaryDiffEqLowStorageRK v1.11.0
+  [127b3ac7] OrdinaryDiffEqNonlinearSolve v1.19.0
+  [c9986a66] OrdinaryDiffEqNordsieck v1.8.0
+  [5dd0a6cf] OrdinaryDiffEqPDIRK v1.10.0
+  [5b33eab2] OrdinaryDiffEqPRK v1.8.0
+  [04162be5] OrdinaryDiffEqQPRK v1.8.0
+  [af6ede74] OrdinaryDiffEqRKN v1.9.0
+  [43230ef6] OrdinaryDiffEqRosenbrock v1.22.0
+  [2d112036] OrdinaryDiffEqSDIRK v1.11.0
+  [669c94d9] OrdinaryDiffEqSSPRK v1.11.0
+  [e3e12d00] OrdinaryDiffEqStabilizedIRK v1.10.0
+  [358294b1] OrdinaryDiffEqStabilizedRK v1.8.0
+  [fa646aed] OrdinaryDiffEqSymplecticRK v1.11.0
+  [b1df2697] OrdinaryDiffEqTsit5 v1.9.0
+  [79d7bb75] OrdinaryDiffEqVerner v1.10.0
+  [d96e819e] Parameters v0.12.3
+  [69de0a69] Parsers v2.8.3
+  [ccf2f8ad] PlotThemes v3.3.0
+  [995b91a9] PlotUtils v1.4.4
+  [91a5bcdd] Plots v1.41.4
+  [f517fe37] Polyester v0.7.18
+  [1d0040c9] PolyesterWeave v0.2.2
+  [2dfb63ee] PooledArrays v1.4.3
+  [d236fae5] PreallocationTools v1.0.0
+  [aea7be01] PrecompileTools v1.3.3
+  [21216c6a] Preferences v1.5.1
+  [08abe8d2] PrettyTables v3.1.2
+  [43287f4e] PtrArrays v1.3.0
+  [be4d8f0f] Quadmath v0.5.13
+  [c84ed2f1] Ratios v0.4.5
+  [3cdcf5f2] RecipesBase v1.3.4
+  [01d81517] RecipesPipeline v0.6.12
+  [731186ca] RecursiveArrayTools v3.44.0
+  [189a3867] Reexport v1.2.2
+  [2792f1a3] RegistryInstances v0.1.0
+  [05181044] RelocatableFolders v1.0.1
+  [ae029012] Requires v1.3.1
+  [37e2e3b7] ReverseDiff v1.16.2
+  [7e49a35a] RuntimeGeneratedFunctions v0.5.16
+  [94e857df] SIMDTypes v0.1.0
+  [0bca4576] SciMLBase v2.134.0
+  [19f34311] SciMLJacobianOperators v0.1.12
+  [a6db7da4] SciMLLogging v1.8.0
+  [c0aeaf25] SciMLOperators v1.14.1
+  [431bcebd] SciMLPublic v1.0.1
+  [53ae85a6] SciMLStructures v1.10.0
+  [7e506255] ScopedValues v1.5.0
+  [6c6a2e73] Scratch v1.3.0
+  [91c51154] SentinelArrays v1.4.9
+  [efcf1570] Setfield v1.1.2
+  [992d4aef] Showoff v1.0.3
+  [777ac1f9] SimpleBufferStream v1.2.0
+  [727e6d20] SimpleNonlinearSolve v2.10.0
+  [ff4d7338] SolverCore v0.3.9
+  [a2af1166] SortingAlgorithms v1.2.2
+  [9f842d2f] SparseConnectivityTracer v1.1.3
+  [0a514795] SparseMatrixColorings v0.4.23
+  [276daf66] SpecialFunctions v2.6.1
+  [860ef19b] StableRNGs v1.0.4
+  [aedffcd0] Static v1.3.1
+  [0d7ed370] StaticArrayInterface v1.8.0
+  [90137ffa] StaticArrays v1.9.16
+  [1e83bf80] StaticArraysCore v1.4.4
+  [10745b16] Statistics v1.11.1
+  [82ae8749] StatsAPI v1.8.0
+  [2913bbd2] StatsBase v0.34.10
+  [7792a7ef] StrideArraysCore v0.5.8
+  [892a3eda] StringManipulation v0.4.2
+  [856f2bd8] StructTypes v1.11.0
+  [fd094767] Suppressor v0.2.8
+  [2efcf032] SymbolicIndexingInterface v0.3.46
+  [3783bdb8] TableTraits v1.0.1
+  [bd369af6] Tables v1.12.1
+  [62fd8b95] TensorCore v0.1.1
+  [8290d209] ThreadingUtilities v0.5.5
+  [a759f4b9] TimerOutputs v0.5.29
+  [3bb67fe8] TranscodingStreams v0.11.3
+  [781d530d] TruncatedStacktraces v1.4.0
+  [5c2747f8] URIs v1.6.1
+  [3a884ed6] UnPack v1.0.2
+  [1cfade01] UnicodeFun v0.4.1
+  [41fe7b60] Unzip v0.2.0
+  [efce3f68] WoodburyMatrices v1.1.0
+  [ae81ac8f] ASL_jll v0.1.3+0
+  [6e34b625] Bzip2_jll v1.0.9+0
+  [83423d85] Cairo_jll v1.18.5+0
+  [ee1fde0b] Dbus_jll v1.16.2+0
+  [2702e6a9] EpollShim_jll v0.0.20230411+1
+  [2e619515] Expat_jll v2.7.3+0
+  [b22a6f82] FFMPEG_jll v8.0.1+0
+  [a3f928ae] Fontconfig_jll v2.17.1+0
+  [d7e528f0] FreeType2_jll v2.13.4+0
+  [559328eb] FriBidi_jll v1.0.17+0
+  [0656b61e] GLFW_jll v3.4.1+0
+  [d2c73de3] GR_jll v0.73.19+1
+  [b0724c58] GettextRuntime_jll v0.22.4+0
+  [61579ee1] Ghostscript_jll v9.55.1+0
+  [020c3dae] Git_LFS_jll v3.7.0+0
+  [f8c6e375] Git_jll v2.52.0+0
+  [7746bdde] Glib_jll v2.86.2+0
+  [3b182d85] Graphite2_jll v1.3.15+0
+  [017b0a0e] HSL_jll v4.0.4+0
+  [2e76f6c2] HarfBuzz_jll v8.5.1+0
+  [e33a78d0] Hwloc_jll v2.12.2+0
+  [1d5cc7b8] IntelOpenMP_jll v2025.2.0+0
+  [9cc047cb] Ipopt_jll v300.1400.1901+0
+  [aacddb02] JpegTurbo_jll v3.1.4+0
+  [0e6b36f8] KNITRO_jll v15.1.0
+  [c1c5ebd0] LAME_jll v3.100.3+0
+  [88015f11] LERC_jll v4.0.1+0
+  [1d63c593] LLVMOpenMP_jll v18.1.8+0
+  [dd4b983a] LZO_jll v2.10.3+0
+ [e9f186c6] Libffi_jll v3.4.7+0
+  [7e76a0d4] Libglvnd_jll v1.7.1+1
+  [94ce4f54] Libiconv_jll v1.18.0+0
+  [4b2f31a3] Libmount_jll v2.41.2+0
+  [89763e89] Libtiff_jll v4.7.2+0
+  [38a345b3] Libuuid_jll v2.41.2+0
+  [d00139f3] METIS_jll v5.1.3+0
+  [856f044c] MKL_jll v2025.2.0+0
+  [d7ed1dd3] MUMPS_seq_jll v500.800.200+0
+  [c8ffd9c3] MbedTLS_jll v2.28.1010+0
+  [e7412a2a] Ogg_jll v1.3.6+0
+  [656ef2d0] OpenBLAS32_jll v0.3.29+0
+  [9bd350c2] OpenSSH_jll v10.2.1+0
+  [efe28fd5] OpenSpecFun_jll v0.5.6+0
+  [91d4177d] Opus_jll v1.6.0+0
+  [36c8627f] Pango_jll v1.57.0+0
+ [30392449] Pixman_jll v0.44.2+0
+  [c0090381] Qt6Base_jll v6.8.2+2
+  [629bc702] Qt6Declarative_jll v6.8.2+1
+  [ce943373] Qt6ShaderTools_jll v6.8.2+1
+  [e99dba38] Qt6Wayland_jll v6.8.2+2
+  [319450e9] SPRAL_jll v2025.9.18+0
+  [a44049a8] Vulkan_Loader_jll v1.3.243+0
+  [a2964d1f] Wayland_jll v1.24.0+0
+ [02c8fc9c] XML2_jll v2.13.9+0
+  [ffd25f8a] XZ_jll v5.8.2+0
+  [f67eecfb] Xorg_libICE_jll v1.1.2+0
+  [c834827a] Xorg_libSM_jll v1.2.6+0
+  [4f6342f7] Xorg_libX11_jll v1.8.12+0
+  [0c0b7dd1] Xorg_libXau_jll v1.0.13+0
+  [935fb764] Xorg_libXcursor_jll v1.2.4+0
+  [a3789734] Xorg_libXdmcp_jll v1.1.6+0
+  [1082639a] Xorg_libXext_jll v1.3.7+0
+  [d091e8ba] Xorg_libXfixes_jll v6.0.2+0
+  [a51aa0fd] Xorg_libXi_jll v1.8.3+0
+  [d1454406] Xorg_libXinerama_jll v1.1.6+0
+  [ec84b674] Xorg_libXrandr_jll v1.5.5+0
+  [ea2f1a96] Xorg_libXrender_jll v0.9.12+0
+  [a65dc6b1] Xorg_libpciaccess_jll v0.18.1+0
+  [c7cfdc94] Xorg_libxcb_jll v1.17.1+0
+  [cc61e674] Xorg_libxkbfile_jll v1.1.3+0
+  [e920d4aa] Xorg_xcb_util_cursor_jll v0.1.6+0
+  [12413925] Xorg_xcb_util_image_jll v0.4.1+0
+  [2def613f] Xorg_xcb_util_jll v0.4.1+0
+  [975044d2] Xorg_xcb_util_keysyms_jll v0.4.1+0
+  [0d47668e] Xorg_xcb_util_renderutil_jll v0.3.10+0
+  [c22f9ab0] Xorg_xcb_util_wm_jll v0.4.2+0
+  [35661453] Xorg_xkbcomp_jll v1.4.7+0
+  [33bec58e] Xorg_xkeyboard_config_jll v2.44.0+0
+  [c5fb5394] Xorg_xtrans_jll v1.6.0+0
+  [3161d3a3] Zstd_jll v1.5.7+1
+  [b792d7bf] cminpack_jll v1.3.12+0
+  [35ca27e7] eudev_jll v3.2.14+0
+  [214eeab7] fzf_jll v0.61.1+0
+  [a4ae2306] libaom_jll v3.13.1+0
+  [0ac62f75] libass_jll v0.17.4+0
+  [1183f4f0] libdecor_jll v0.2.2+0
+  [2db6ffa8] libevdev_jll v1.13.4+0
+  [f638f0a6] libfdk_aac_jll v2.0.4+0
+  [36db933b] libinput_jll v1.28.1+0
+  [b53b4c65] libpng_jll v1.6.54+0
+  [f27f6e37] libvorbis_jll v1.3.8+0
+  [009596ad] mtdev_jll v1.1.7+0
+  [1317d2d5] oneTBB_jll v2022.0.0+1
+ [1270edf5] x264_jll v10164.0.1+0
+  [dfaa095f] x265_jll v4.1.0+0
+  [d8fb68d0] xkbcommon_jll v1.13.0+0
+  [0dad84c5] ArgTools v1.1.2
+  [56f22d72] Artifacts v1.11.0
+  [2a0f44e3] Base64 v1.11.0
+  [ade2ca70] Dates v1.11.0
+  [8ba89e20] Distributed v1.11.0
+  [f43a241f] Downloads v1.6.0
+  [7b1f6079] FileWatching v1.11.0
+  [9fa8497b] Future v1.11.0
+  [b77e0a4c] InteractiveUtils v1.11.0
+  [ac6e5ff7] JuliaSyntaxHighlighting v1.12.0
+  [4af54fe1] LazyArtifacts v1.11.0
+  [b27032c2] LibCURL v0.6.4
+  [76f85450] LibGit2 v1.11.0
+  [8f399da3] Libdl v1.11.0
+  [37e2e46d] LinearAlgebra v1.12.0
+  [56ddb016] Logging v1.11.0
+  [d6f4376e] Markdown v1.11.0
+  [a63ad114] Mmap v1.11.0
+  [ca575930] NetworkOptions v1.3.0
+  [44cfe95a] Pkg v1.12.0
+  [de0858da] Printf v1.11.0
+  [3fa0cd96] REPL v1.11.0
+  [9a3f8284] Random v1.11.0
+  [ea8e919c] SHA v0.7.0
+  [9e88b42a] Serialization v1.11.0
+  [1a1011a3] SharedArrays v1.11.0
+  [6462fe0b] Sockets v1.11.0
+  [2f01184e] SparseArrays v1.12.0
+  [f489334b] StyledStrings v1.11.0
+  [4607b0f0] SuiteSparse
+  [fa267f1f] TOML v1.0.3
+  [a4e569a6] Tar v1.10.0
+  [8dfed614] Test v1.11.0
+  [cf7118a7] UUIDs v1.11.0
+  [4ec0a83e] Unicode v1.11.0
+  [e66e0078] CompilerSupportLibraries_jll v1.3.0+1
+  [deac9b47] LibCURL_jll v8.11.1+1
+  [e37daf67] LibGit2_jll v1.9.0+0
+  [29816b5a] LibSSH2_jll v1.11.3+1
+  [14a3606d] MozillaCACerts_jll v2025.5.20
+  [4536629a] OpenBLAS_jll v0.3.29+0
+  [05823500] OpenLibm_jll v0.8.7+0
+  [458c3c95] OpenSSL_jll v3.5.1+0
+  [efcefdf7] PCRE2_jll v10.44.0+1
+  [bea87d4a] SuiteSparse_jll v7.8.3+2
+  [83775a58] Zlib_jll v1.3.1+2
+  [8e850b90] libblastrampoline_jll v5.15.0+0
+  [8e850ede] nghttp2_jll v1.64.0+1
+  [3f19e933] p7zip_jll v17.5.0+2
+Info Packages marked with  and  have new versions available. Those with  may be upgradable, but those with  are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`
diff --git a/.save/docs/build/jlesc17.html b/.save/docs/build/jlesc17.html new file mode 100644 index 00000000..5420ec20 --- /dev/null +++ b/.save/docs/build/jlesc17.html @@ -0,0 +1,299 @@ + +Solving optimal control problems on GPU with Julia · OptimalControl.jl
jlesc17

Solving optimal control problems on GPU with Julia

Jean-Baptiste Caillau, Olivier Cots, Joseph Gergaud, Pierre Martinon, Sophia Sed

affiliations

What it's about

  • Nonlinear optimal control of ODEs:

\[g(x(t_0),x(t_f)) + \int_{t_0}^{t_f} f^0(x(t), u(t))\, \mathrm{d}t \to \min\]

subject to

\[\dot{x}(t) = f(x(t), u(t)),\quad t \in [t_0, t_f]\]

plus boundary, control and state constraints

  • Our core interests: numerical & geometrical methods in control, applications
  • Why Julia: fast (+ JIT), strongly typed, high-level (AD, macros), fast optimisation and ODE solvers available, rapidly growing community
juliacon2025

Discretise then solve strategy (aka direct methods)

  • Discretising an OCP into an NLP: $h_i := t_{i+1}-t_i$,

\[g(X_0,X_N) + \sum_{i=0}^{N} h_i f^0(X_i,U_i) \to \min\]

subject to

\[X_{i+1} - X_i - h_i f(X_i, U_i) = 0,\quad i = 0,\dots,N-1\]

plus other constraints on $X := (X_i)_{i=0,N}$ and $U := (U_i)_{i=0,N}$ such as boundary and path (state and / or control) constraints :

\[b(t_0, X_0, t_N, X_N) = 0\]

\[c(X_i, U_i) = 0,\quad i = 0,\dots,N\]

Simple example, generated code
begin
+    #= /data/caillau/CTParser.jl/src/onepass.jl:1003 =#
+    function (; scheme = :trapezoidal, grid_size = 200, backend = nothing, init = (0.1, 0.1, 0.1), base_type = Float64)
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1003 =#
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1004 =#
+        LineNumberNode(0, "box constraints: variable")
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1005 =#
+        begin
+            LineNumberNode(0, "box constraints: state")
+            begin
+                var"##235" = -Inf * ones(3)
+                #= /data/caillau/CTParser.jl/src/onepass.jl:461 =#
+                var"##236" = Inf * ones(3)
+            end
+        end
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1006 =#
+        begin
+            LineNumberNode(0, "box constraints: control")
+            begin
+                var"##237" = -Inf * ones(1)
+                #= /data/caillau/CTParser.jl/src/onepass.jl:512 =#
+                var"##238" = Inf * ones(1)
+            end
+        end
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1007 =#
+        var"##230" = ExaModels.ExaCore(base_type; backend = backend)
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1008 =#
+        begin
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:23 =#
+            var"##232" = begin
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                    local ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                    try
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                        (1 - 0) / grid_size
+                    catch ex
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                        println("Line ", 1, ": ", "(t ∈ [0, 1], time)")
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                        throw(ex)
+                    end
+                end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:24 =#
+            x = begin
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                    local ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                    try
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                        ExaModels.variable(var"##230", 3, 0:grid_size; lvar = [var"##235"[i] for (i, j) = Base.product(1:3, 0:grid_size)], uvar = [var"##236"[i] for (i, j) = Base.product(1:3, 0:grid_size)], start = init[2])
+                    catch ex
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                        println("Line ", 2, ": ", "(x ∈ R ^ 3, state)")
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                        throw(ex)
+                    end
+                end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:25 =#
+            var"u##239" = begin
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                    local ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                    try
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                        ExaModels.variable(var"##230", 1, 0:grid_size; lvar = [var"##237"[i] for (i, j) = Base.product(1:1, 0:grid_size)], uvar = [var"##238"[i] for (i, j) = Base.product(1:1, 0:grid_size)], start = init[3])
+                    catch ex
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                        println("Line ", 3, ": ", "(u ∈ R, control)")
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                        throw(ex)
+                    end
+                end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:26 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    ExaModels.constraint(var"##230", (x[i, 0] for i = 1:3); lcon = [-1, 0, 0], ucon = [-1, 0, 0])
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 4, ": ", "x(0) == [-1, 0, 0]")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:27 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    ExaModels.constraint(var"##230", (x[i, grid_size] for i = 1:2); lcon = [0, 0], ucon = [0, 0])
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 5, ": ", "(x[1:2])(1) == [0, 0]")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:28 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    begin
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#
+                        if scheme == :trapezoidal
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#
+                            ExaModels.constraint(var"##230", ((x[1, j + 1] - x[1, j]) - (var"##232" * (x[2, j] + x[2, j + 1])) / 2 for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#
+                            ExaModels.constraint(var"##230", ((x[1, j + 1] - x[1, j]) - var"##232" * x[2, j] for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#
+                            ExaModels.constraint(var"##230", ((x[1, j + 1] - x[1, j]) - var"##232" * x[2, j + 1] for j = 0:grid_size - 1))
+                        else
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#
+                            throw("unknown numerical scheme")
+                        end
+                    end
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 6, ": ", "(∂(x₁))(t) == x₂(t)")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:29 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    begin
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#
+                        if scheme == :trapezoidal
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#
+                            ExaModels.constraint(var"##230", ((x[2, j + 1] - x[2, j]) - (var"##232" * (var"u##239"[1, j] + var"u##239"[1, j + 1])) / 2 for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#
+                            ExaModels.constraint(var"##230", ((x[2, j + 1] - x[2, j]) - var"##232" * var"u##239"[1, j] for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#
+                            ExaModels.constraint(var"##230", ((x[2, j + 1] - x[2, j]) - var"##232" * var"u##239"[1, j + 1] for j = 0:grid_size - 1))
+                        else
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#
+                            throw("unknown numerical scheme")
+                        end
+                    end
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 7, ": ", "(∂(x₂))(t) == u(t)")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:30 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    begin
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#
+                        if scheme == :trapezoidal
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#
+                            ExaModels.constraint(var"##230", ((x[3, j + 1] - x[3, j]) - (var"##232" * (0.5 * var"u##239"[1, j] ^ 2 + 0.5 * var"u##239"[1, j + 1] ^ 2)) / 2 for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#
+                            ExaModels.constraint(var"##230", ((x[3, j + 1] - x[3, j]) - var"##232" * (0.5 * var"u##239"[1, j] ^ 2) for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#
+                            ExaModels.constraint(var"##230", ((x[3, j + 1] - x[3, j]) - var"##232" * (0.5 * var"u##239"[1, j + 1] ^ 2) for j = 0:grid_size - 1))
+                        else
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#
+                            throw("unknown numerical scheme")
+                        end
+                    end
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 8, ": ", "(∂(x₃))(t) == 0.5 * u(t) ^ 2")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:31 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    ExaModels.objective(var"##230", x[3, grid_size])
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 9, ": ", "x₃(1) → min")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+        end
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1009 =#
+        begin
+            #= /data/caillau/CTParser.jl/src/onepass.jl:994 =#
+            !(isempty([1, 2, 3])) || throw(CTBase.ParsingError("dynamics not defined"))
+            #= /data/caillau/CTParser.jl/src/onepass.jl:995 =#
+            sort([1, 2, 3]) == 1:3 || throw(CTBase.ParsingError("some coordinates of dynamics undefined"))
+        end
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1010 =#
+        return ExaModels.ExaModel(var"##230")
+    end
+end
  • Solving (MadNLP + CUDSS)
This is MadNLP version v0.8.7, running with cuDSS v0.4.0
+
+Number of nonzeros in constraint Jacobian............:    12005
+Number of nonzeros in Lagrangian Hessian.............:     9000
+
+Total number of variables............................:     4004
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:        0
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:     3005
+Total number of inequality constraints...............:        0
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:        0
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  1.0000000e-01 1.10e+00 1.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  1.0001760e-01 1.10e+00 3.84e-03  -1.0 6.88e+02  -4.0 1.00e+00 2.00e-07h  2
+   2 -5.2365072e-03 1.89e-02 1.79e-07  -1.0 6.16e+00  -4.5 1.00e+00 1.00e+00h  1
+   3  5.9939621e+00 2.28e-03 1.66e-04  -3.8 6.00e+00  -5.0 9.99e-01 1.00e+00h  1
+   4  5.9996210e+00 2.94e-06 8.38e-07  -3.8 7.70e-02    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 4
+
+                                   (scaled)                 (unscaled)
+Objective...............:   5.9996210189633494e+00    5.9996210189633494e+00
+Dual infeasibility......:   8.3756005011360529e-07    8.3756005011360529e-07
+Constraint violation....:   2.9426923277963834e-06    2.9426923277963834e-06
+Complementarity.........:   2.0007459547789288e-06    2.0007459547789288e-06
+Overall NLP error.......:   2.9426923277963834e-06    2.9426923277963834e-06
+
+Number of objective function evaluations             = 6
+Number of objective gradient evaluations             = 5
+Number of constraint evaluations                     = 6
+Number of constraint Jacobian evaluations            = 5
+Number of Lagrangian Hessian evaluations             = 4
+Total wall-clock secs in solver (w/o fun. eval./lin. alg.)  =  0.072
+Total wall-clock secs in linear solver                      =  0.008
+Total wall-clock secs in NLP function evaluations           =  0.003
+Total wall-clock secs                                       =  0.083
This is MadNLP version v0.8.4, running with cuDSS v0.3.0
+
+Number of nonzeros in constraint Jacobian............:   135017
+Number of nonzeros in Lagrangian Hessian.............:   130008
+
+Total number of variables............................:    35008
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:        0
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:    30007
+Total number of inequality constraints...............:    15004
+        inequality constraints with only lower bounds:     5002
+   inequality constraints with lower and upper bounds:    10002
+        inequality constraints with only upper bounds:        0
+
+[...]
+
+Number of Iterations....: 35
+
+                                   (scaled)                 (unscaled)
+Objective...............:  -1.0142336978192805e+00   -1.0142336978192805e+00
+Dual infeasibility......:   4.7384318691001681e-13    4.7384318691001681e-13
+Constraint violation....:   1.4068322357215250e-09    1.4068322357215250e-09
+Complementarity.........:   9.0909295306344959e-09    9.0909295306344959e-09
+Overall NLP error.......:   9.0909295306344959e-09    9.0909295306344959e-09
+
+Number of objective function evaluations             = 36
+Number of objective gradient evaluations             = 36
+Number of constraint evaluations                     = 36
+Number of constraint Jacobian evaluations            = 36
+Number of Lagrangian Hessian evaluations             = 35
+Total wall-clock secs in solver (w/o fun. eval./lin. alg.)  =  0.911
+Total wall-clock secs in linear solver                      =  0.227
+Total wall-clock secs in NLP function evaluations           =  0.059
+Total wall-clock secs                                       =  1.198

Wrap up

  • High level modelling of optimal control problems
  • Solving on CPU and GPU

Future

  • New applications (space mechanics, biology, quantum mechanics and more)
  • Additional solvers: benchmarking on CPU / GPU for optimisation, Hamiltonian shooting and pathfollowing
  • Improved AD: collab between Argonne and Inria, JLESC Shared Infra AD project...
  • ... and open to contributions! If you like the package, please give us a star ⭐️
OptimalControl.jl

control-toolbox.org

control-toolbox.org

Credits (not exhaustive!)

Acknowledgements

Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).

affiliations
diff --git a/.save/docs/build/juliacon-paris-2025.html b/.save/docs/build/juliacon-paris-2025.html new file mode 100644 index 00000000..9fefdecc --- /dev/null +++ b/.save/docs/build/juliacon-paris-2025.html @@ -0,0 +1,265 @@ + +Solving optimal control problems on GPU with Julia · OptimalControl.jl
jlesc17

Solving optimal control problems on GPU with Julia

Jean-Baptiste Caillau, Olivier Cots, Joseph Gergaud, Pierre Martinon, Sophia Sed

affiliations

What it's about

  • Nonlinear optimal control of ODEs:

\[g(x(t_0),x(t_f)) + \int_{t_0}^{t_f} f^0(x(t), u(t))\, \mathrm{d}t \to \min\]

subject to

\[\dot{x}(t) = f(x(t), u(t)),\quad t \in [t_0, t_f]\]

plus boundary, control and state constraints

  • Our core interests: numerical & geometrical methods in control, applications
  • Why Julia: fast (+ JIT), strongly typed, high-level (AD, macros), fast optimisation and ODE solvers available, rapidly growing community

Discretise then solve strategy (aka direct methods)

  • Discretising an OCP into an NLP: $h_i := t_{i+1}-t_i$,

\[g(X_0,X_N) + \sum_{i=0}^{N} h_i f^0(X_i,U_i) \to \min\]

subject to

\[X_{i+1} - X_i - h_i f(X_i, U_i) = 0,\quad i = 0,\dots,N-1\]

plus other constraints on $X := (X_i)_{i=0,N}$ and $U := (U_i)_{i=0,N}$ such as boundary and path (state and / or control) constraints :

\[b(t_0, X_0, t_N, X_N) = 0\]

\[c(X_i, U_i) \leq 0,\quad i = 0,\dots,N\]

Simple example, generated code
begin
+    #= /data/caillau/CTParser.jl/src/onepass.jl:1003 =#
+    function (; scheme = :trapezoidal, grid_size = 200, backend = nothing, init = (0.1, 0.1, 0.1), base_type = Float64)
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1003 =#
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1004 =#
+        LineNumberNode(0, "box constraints: variable")
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1005 =#
+        begin
+            LineNumberNode(0, "box constraints: state")
+            begin
+                var"##235" = -Inf * ones(3)
+                #= /data/caillau/CTParser.jl/src/onepass.jl:461 =#
+                var"##236" = Inf * ones(3)
+            end
+        end
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1006 =#
+        begin
+            LineNumberNode(0, "box constraints: control")
+            begin
+                var"##237" = -Inf * ones(1)
+                #= /data/caillau/CTParser.jl/src/onepass.jl:512 =#
+                var"##238" = Inf * ones(1)
+            end
+        end
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1007 =#
+        var"##230" = ExaModels.ExaCore(base_type; backend = backend)
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1008 =#
+        begin
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:23 =#
+            var"##232" = begin
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                    local ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                    try
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                        (1 - 0) / grid_size
+                    catch ex
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                        println("Line ", 1, ": ", "(t ∈ [0, 1], time)")
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                        throw(ex)
+                    end
+                end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:24 =#
+            x = begin
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                    local ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                    try
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                        ExaModels.variable(var"##230", 3, 0:grid_size; lvar = [var"##235"[i] for (i, j) = Base.product(1:3, 0:grid_size)], uvar = [var"##236"[i] for (i, j) = Base.product(1:3, 0:grid_size)], start = init[2])
+                    catch ex
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                        println("Line ", 2, ": ", "(x ∈ R ^ 3, state)")
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                        throw(ex)
+                    end
+                end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:25 =#
+            var"u##239" = begin
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                    local ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                    try
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                        ExaModels.variable(var"##230", 1, 0:grid_size; lvar = [var"##237"[i] for (i, j) = Base.product(1:1, 0:grid_size)], uvar = [var"##238"[i] for (i, j) = Base.product(1:1, 0:grid_size)], start = init[3])
+                    catch ex
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                        println("Line ", 3, ": ", "(u ∈ R, control)")
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                        throw(ex)
+                    end
+                end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:26 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    ExaModels.constraint(var"##230", (x[i, 0] for i = 1:3); lcon = [-1, 0, 0], ucon = [-1, 0, 0])
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 4, ": ", "x(0) == [-1, 0, 0]")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:27 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    ExaModels.constraint(var"##230", (x[i, grid_size] for i = 1:2); lcon = [0, 0], ucon = [0, 0])
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 5, ": ", "(x[1:2])(1) == [0, 0]")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:28 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    begin
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#
+                        if scheme == :trapezoidal
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#
+                            ExaModels.constraint(var"##230", ((x[1, j + 1] - x[1, j]) - (var"##232" * (x[2, j] + x[2, j + 1])) / 2 for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#
+                            ExaModels.constraint(var"##230", ((x[1, j + 1] - x[1, j]) - var"##232" * x[2, j] for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#
+                            ExaModels.constraint(var"##230", ((x[1, j + 1] - x[1, j]) - var"##232" * x[2, j + 1] for j = 0:grid_size - 1))
+                        else
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#
+                            throw("unknown numerical scheme")
+                        end
+                    end
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 6, ": ", "(∂(x₁))(t) == x₂(t)")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:29 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    begin
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#
+                        if scheme == :trapezoidal
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#
+                            ExaModels.constraint(var"##230", ((x[2, j + 1] - x[2, j]) - (var"##232" * (var"u##239"[1, j] + var"u##239"[1, j + 1])) / 2 for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#
+                            ExaModels.constraint(var"##230", ((x[2, j + 1] - x[2, j]) - var"##232" * var"u##239"[1, j] for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#
+                            ExaModels.constraint(var"##230", ((x[2, j + 1] - x[2, j]) - var"##232" * var"u##239"[1, j + 1] for j = 0:grid_size - 1))
+                        else
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#
+                            throw("unknown numerical scheme")
+                        end
+                    end
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 7, ": ", "(∂(x₂))(t) == u(t)")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:30 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    begin
+                        #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#
+                        if scheme == :trapezoidal
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#
+                            ExaModels.constraint(var"##230", ((x[3, j + 1] - x[3, j]) - (var"##232" * (0.5 * var"u##239"[1, j] ^ 2 + 0.5 * var"u##239"[1, j + 1] ^ 2)) / 2 for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#
+                            ExaModels.constraint(var"##230", ((x[3, j + 1] - x[3, j]) - var"##232" * (0.5 * var"u##239"[1, j] ^ 2) for j = 0:grid_size - 1))
+                        elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#
+                            ExaModels.constraint(var"##230", ((x[3, j + 1] - x[3, j]) - var"##232" * (0.5 * var"u##239"[1, j + 1] ^ 2) for j = 0:grid_size - 1))
+                        else
+                            #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#
+                            throw("unknown numerical scheme")
+                        end
+                    end
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 8, ": ", "(∂(x₃))(t) == 0.5 * u(t) ^ 2")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+            #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:31 =#
+            begin
+                #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#
+                local ex
+                #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#
+                try
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#
+                    ExaModels.objective(var"##230", x[3, grid_size])
+                catch ex
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#
+                    println("Line ", 9, ": ", "x₃(1) → min")
+                    #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#
+                    throw(ex)
+                end
+            end
+        end
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1009 =#
+        begin
+            #= /data/caillau/CTParser.jl/src/onepass.jl:994 =#
+            !(isempty([1, 2, 3])) || throw(CTBase.ParsingError("dynamics not defined"))
+            #= /data/caillau/CTParser.jl/src/onepass.jl:995 =#
+            sort([1, 2, 3]) == 1:3 || throw(CTBase.ParsingError("some coordinates of dynamics undefined"))
+        end
+        #= /data/caillau/CTParser.jl/src/onepass.jl:1010 =#
+        return ExaModels.ExaModel(var"##230")
+    end
+end
  • Solving (MadNLP + CUDSS)
This is MadNLP version v0.8.7, running with cuDSS v0.4.0
+
+Number of nonzeros in constraint Jacobian............:    12005
+Number of nonzeros in Lagrangian Hessian.............:     9000
+
+Total number of variables............................:     4004
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:        0
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:     3005
+Total number of inequality constraints...............:        0
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:        0
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  1.0000000e-01 1.10e+00 1.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  1.0001760e-01 1.10e+00 3.84e-03  -1.0 6.88e+02  -4.0 1.00e+00 2.00e-07h  2
+   2 -5.2365072e-03 1.89e-02 1.79e-07  -1.0 6.16e+00  -4.5 1.00e+00 1.00e+00h  1
+   3  5.9939621e+00 2.28e-03 1.66e-04  -3.8 6.00e+00  -5.0 9.99e-01 1.00e+00h  1
+   4  5.9996210e+00 2.94e-06 8.38e-07  -3.8 7.70e-02    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 4
+
+                                   (scaled)                 (unscaled)
+Objective...............:   5.9996210189633494e+00    5.9996210189633494e+00
+Dual infeasibility......:   8.3756005011360529e-07    8.3756005011360529e-07
+Constraint violation....:   2.9426923277963834e-06    2.9426923277963834e-06
+Complementarity.........:   2.0007459547789288e-06    2.0007459547789288e-06
+Overall NLP error.......:   2.9426923277963834e-06    2.9426923277963834e-06
+
+Number of objective function evaluations             = 6
+Number of objective gradient evaluations             = 5
+Number of constraint evaluations                     = 6
+Number of constraint Jacobian evaluations            = 5
+Number of Lagrangian Hessian evaluations             = 4
+Total wall-clock secs in solver (w/o fun. eval./lin. alg.)  =  0.072
+Total wall-clock secs in linear solver                      =  0.008
+Total wall-clock secs in NLP function evaluations           =  0.003
+Total wall-clock secs                                       =  0.083

Mini-benchmark: Goddard and Quadrotor problems

  • Goddard, A100 run
goddard-a100
  • Goddard, H100 run
goddard-h100
  • Quadrotor, A100 run
quadrotor-a100
  • Quadrotor, H100 run
quadrotor-h100

Wrap up

  • High level modelling of optimal control problems
  • Solving on CPU and GPU

What's next

  • New applications (space mechanics, biology, quantum mechanics and more) -> check David's talk
  • Collection of problems: OptimalControlProblems.jl
  • ... and open to contributions! Give it a try, give it a star ⭐️
OptimalControl.jl

control-toolbox.org

control-toolbox.org

Credits (not exhaustive!)

Acknowledgements

Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).

affiliations
diff --git a/.save/docs/build/juliacon2024.html b/.save/docs/build/juliacon2024.html new file mode 100644 index 00000000..fb35e076 --- /dev/null +++ b/.save/docs/build/juliacon2024.html @@ -0,0 +1,7 @@ + +Trajectory optimisation in space mechanics with Julia · OptimalControl.jl
juliaopt2024

Trajectory optimisation in space mechanics with Julia

Jean-Baptiste Caillau, Olivier Cots, Alesia Herasimenka

affiliations

What it's about

  • Nonlinear optimal control of ODEs:

\[g(x(t_0),x(t_f)) + \int_{t_0}^{t_f} f^0(x(t), u(t))\, \mathrm{d}t \to \min\]

subject to

\[\dot{x}(t) = f(x(t), u(t)),\quad t \in [t_0, t_f]\]

plus boundary conditions, control and state constraints

  • Our core interests: numerical & geometrical methods in control, applications

OptimalControl.jl for trajectory optimisation

Wrap up

  • High level modelling of optimal control problems
  • Efficient numerical resolution coupling direct and indirect methods
  • Collection of examples

Future

  • New applications (biology, space mechanics, quantum mechanics and more)
  • Additional solvers: direct shooting, collocation for BVP, Hamiltonian pathfollowing...
  • ... and open to contributions!

control-toolbox.org

control-toolbox.org

Credits (not exhaustive!)

Acknowledgements

Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).

affiliations
diff --git a/.save/docs/build/manual-abstract.html b/.save/docs/build/manual-abstract.html new file mode 100644 index 00000000..b05ecad7 --- /dev/null +++ b/.save/docs/build/manual-abstract.html @@ -0,0 +1,299 @@ + +Define a problem · OptimalControl.jl

The syntax to define an optimal control problem

The full grammar of OptimalControl.jl small Domain Specific Language is given below. The idea is to use a syntax that is

  • pure Julia (and, as such, effortlessly analysed by the standard Julia parser),
  • as close as possible to the mathematical description of an optimal control problem.

While the syntax will be transparent to those users familiar with Julia expressions (Expr's), we provide examples for every case that should be widely understandable. We rely heavily on MLStyle.jl and its pattern matching abilities 👍🏽 both for the syntactic and semantic pass. Abstract definitions use the macro @def.

Variable

:( $v ∈ R^$q, variable ) 
+:( $v ∈ R   , variable ) 

A variable (only one is allowed) is a finite dimensional vector or reals that will be optimised along with state and control values. To define an (almost empty!) optimal control problem, named ocp, having a dimension two variable named v, do the following:

@def begin
+    v ∈ R², variable
+    ...
+end
Warning

Note that the full code of the definition above is not provided (hence the ...) The same is true for most examples below (only those without ... are indeed complete). Also note that problem definitions must at least include definitions for time, state, control, dynamics and cost.

Aliases v₁, v₂ (and v1, v2) are automatically defined and can be used in subsequent expressions instead of v[1] and v[2]. The user can also define her own aliases for the components (one alias per dimension):

@def begin
+    v = (a, b) ∈ R², variable
+    ...
+end

A one dimensional variable can be declared according to

@def begin
+    v ∈ R, variable
+    ...
+end
Warning

Aliases during definition of variable, state or control are only allowed for multidimensional (dimension two or more) cases. Something like u = T ∈ R, control is not allowed... and useless (directly write T ∈ R, control).

Time

:( $t ∈ [$t0, $tf], time ) 

The independent variable or time is a scalar bound to a given interval. Its name is arbitrary.

t0 = 1
+tf = 5
+@def begin
+    t ∈ [t0, tf], time
+    ...
+end

One (or even the two bounds) can be variable, typically for minimum time problems (see Mayer cost section):

@def begin
+    v = (T, λ) ∈ R², variable
+    t ∈ [0, T], time
+    ...
+end

State

:( $x ∈ R^$n, state ) 
+:( $x ∈ R   , state ) 

The state declaration defines the name and the dimension of the state:

@def begin
+    x ∈ R⁴, state
+    ...
+end

As for the variable, there are automatic aliases (x₁ and x1 for x[1], etc.) and the user can define her own aliases (one per scalar component of the state):

@def begin
+    x = (q₁, q₂, v₁, v₂) ∈ R⁴, state
+    ...
+end

Control

:( $u ∈ R^$m, control ) 
+:( $u ∈ R   , control ) 

The control declaration defines the name and the dimension of the control:

@def begin
+    u ∈ R², control
+    ...
+end

As before, there are automatic aliases (u₁ and u1 for u[1], etc.) and the user can define her own aliases (one per scalar component of the state):

@def begin
+    u = (α, β) ∈ R², control
+    ...
+end
Note

One dimensional variable, state or control are treated as scalars (Real), not vectors (Vector). In Julia, for x::Real, it is possible to write x[1] (and x[1][1]...) so it is OK (though useless) to write x₁, x1 or x[1] instead of simply x to access the corresponding value. Conversely it is not OK to use such an x as a vector, for instance as in ...f(x)... where f(x::Vector{T}) where {T <: Real}.

Dynamics

:( ∂($x)($t) == $e1 ) 

The dynamics is given in the standard vectorial ODE form:

\[ \dot{x}(t) = f([t, ]x(t), u(t)[, v])\]

depending on whether it is autonomous / with a variable or not (the parser will detect time and variable dependences, which entails that time, state and variable must be declared prior to dynamics - an error will be issued otherwise). The symbol , or the dotted state name (), or the keyword derivative can be used:

@def begin
+    t ∈ [0, 1], time
+    x ∈ R², state
+    u ∈ R, control
+    ∂(x)(t) == [x₂(t), u(t)]
+    ...
+end

or

@def begin
+    t ∈ [0, 1], time
+    x ∈ R², state
+    u ∈ R, control
+    ẋ(t) == [x₂(t), u(t)]
+    ...
+end

or

@def begin
+    t ∈ [0, 1], time
+    x ∈ R², state
+    u ∈ R, control
+    derivative(x)(t) == [x₂(t), u(t)]
+    ...
+end

Any Julia code can be used, so the following is also OK:

ocp = @def begin
+    t ∈ [0, 1], time
+    x ∈ R², state
+    u ∈ R, control
+    ẋ(t) == F₀(x(t)) + u(t) * F₁(x(t))
+    ...
+end
+
+F₀(x) = [x[2], 0]
+F₁(x) = [0, 1]
Note

The vector fields F₀ and F₁ can be defined afterwards, as they only need to be available when the dynamics will be evaluated.

While it is also possible to declare the dynamics component after component (see below), one may equivalently use aliases (check the relevant aliases section below):

@def damped_integrator begin
+    tf ∈ R, variable
+    t ∈ [0, tf], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    q̇ = v(t)
+    v̇ = u(t) - c(t)
+    ẋ(t) == [q̇, v̇]
+    ...
+end

Dynamics (coordinatewise)

:( ∂($x[$i])($t) == $e1 ) 

The dynamics can also be declared coordinate by coordinate. The previous example can be written as

@def damped_integrator begin
+    tf ∈ R, variable
+    t ∈ [0, tf], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    ∂(q)(t) == v(t)
+    ∂(v)(t) == u(t) - c(t)
+    ...
+end
Warning

Declaring the dynamics coordinate by coordinate is compulsory when solving with the option :exa to rely on the ExaModels modeller (check the solve section), for instance to solve on GPU.

Constraints

:( $e1 == $e2        ) 
+:( $e1 ≤  $e2 ≤  $e3 ) 
+:(        $e2 ≤  $e3 ) 
+:( $e3 ≥  $e2 ≥  $e1 ) 
+:( $e2 ≥  $e1        ) 

Admissible constraints can be

  • of five types: boundary, variable, control, state, mixed (the last three ones are path constraints, that is constraints evaluated all times)
  • linear (ranges) or nonlinear (not ranges),
  • equalities or (one or two-sided) inequalities.

Boundary conditions are detected when the expression contains evaluations of the state at initial and / or final time bounds (e.g., x(0)), and may not involve the control. Conversely control, state or mixed constraints will involve control, state or both evaluated at the declared time (e.g., x(t) + u(t)). Other combinations should be detected as incorrect by the parser 🤞🏾. The variable may be involved in any of the four previous constraints. Constraints involving the variable only are variable constraints, either linear or nonlinear. In the example below, there are

  • two linear boundary constraints,
  • one linear variable constraint,
  • one linear state constraint,
  • one (two-sided) nonlinear control constraint.
@def begin
+    tf ∈ R, variable
+    t ∈ [0, tf], time
+    x ∈ R², state
+    u ∈ R, control
+    x(0) == [-1, 0]
+    x(tf) == [0, 0]
+    ẋ(t) == [x₂(t), u(t)]
+    tf ≥ 0 
+    x₂(t) ≤ 1
+    0.1 ≤ u(t)^2 ≤ 1
+    ...
+end
Note

Symbols like <= or >= are also authorised:

@def begin
+    tf ∈ R, variable
+    t ∈ [0, tf], time
+    x ∈ R², state
+    u ∈ R, control
+    x(0) == [-1, 0]
+    x(tf) == [0, 0]
+    ẋ(t) == [x₂(t), u(t)]
+    tf >= 0 
+    x₂(t) <= 1
+    0.1 ≤ u(t)^2 <= 1
+    ...
+end
Warning

Write either u(t)^2 or (u^2)(t), not u^2(t) since in Julia the latter means u^(2t). Moreover, in the case of equalities or of one-sided inequalities, the control and / or the state must belong to the left-hand side. The following will error:

julia> @def begin
+           t ∈ [0, 2], time
+           x ∈ R², state
+           u ∈ R, control
+           x(0) == [-1, 0]
+           x(2) == [0, 0]
+           ẋ(t) == [x₂(t), u(t)]
+           1 ≤ x₂(t)
+           -1 ≤ u(t) ≤ 1
+       endLine 7: 1 ≤ x₂(t)
+ERROR: UndefVarError: `x` not defined in `Main.var"Main"`
+Suggestion: check for spelling errors or missing imports.
Warning

Constraint bounds must be effective, that is must not depend on a variable. For instance, instead of

o = @def begin
+    v ∈ R, variable
+    t ∈ [0, 1], time
+    x ∈ R², state
+    u ∈ R, control
+    -1 ≤ v ≤ 1
+    x₁(0) == -1
+    x₂(0) == v # wrong: the bound is not effective (as it depends on the variable)
+    x(1) == [0, 0]
+    ẋ(t) == [x₂(t), u(t)]
+    ∫( 0.5u(t)^2 ) → min
+end

write

o = @def begin
+    v ∈ R, variable
+    t ∈ [0, 1], time
+    x ∈ R², state
+    u ∈ R, control
+    -1 ≤ v ≤ 1
+    x₁(0) == -1
+    x₂(0) - v == 0 # OK: the boundary constraint may involve the variable
+    x(1) == [0, 0]
+    ẋ(t) == [x₂(t), u(t)]
+    ∫( 0.5u(t)^2 ) → min
+end
Warning

When solving with the option :exa to rely on the ExaModels modeller (check the solve section), for instance to solve on GPU, it is compulsory that nonlinear constraints (not ranges) are scalar, whatever the type (boundary, variable, control, state, mixed).

Mayer cost

:( $e1 → min ) 
+:( $e1 → max ) 

Mayer costs are defined in a similar way to boundary conditions and follow the same rules. The symbol is used to denote minimisation or maximisation, the latter being treated by minimising the opposite cost. (The symbol => can also be used.)

julia> @def begin
+           tf ∈ R, variable
+           t ∈ [0, tf], time
+           x = (q, v) ∈ R², state
+           u ∈ R, control
+           tf ≥ 0
+           -1 ≤ u(t) ≤ 1
+           q(0) == 1
+           v(0) == 2
+           q(tf) == 0
+           v(tf) == 0
+           0 ≤ q(t) ≤ 5
+          -2 ≤ v(t) ≤ 3
+           ẋ(t) == [v(t), u(t)]
+           tf → min
+       endAbstract definition:
+
+    tf ∈ R, variable
+    t ∈ [0, tf], time
+    x = ((q, v) ∈ R², state)
+    u ∈ R, control
+    tf ≥ 0
+    -1 ≤ u(t) ≤ 1
+    q(0) == 1
+    v(0) == 2
+    q(tf) == 0
+    v(tf) == 0
+    0 ≤ q(t) ≤ 5
+    -2 ≤ v(t) ≤ 3
+    ẋ(t) == [v(t), u(t)]
+    tf → min
+
+The (autonomous) optimal control problem is of the form:
+
+    minimize  J(x, u, tf) = g(x(0), x(tf), tf)
+
+    subject to
+
+        ẋ(t) = f(x(t), u(t), tf), t in [0, tf] a.e.,
+
+        ϕ₋ ≤ ϕ(x(0), x(tf), tf) ≤ ϕ₊,
+        x₋ ≤ x(t) ≤ x₊,
+        u₋ ≤ u(t) ≤ u₊,
+        v₋ ≤ tf ≤ v₊,
+
+    where x(t) = (q(t), v(t)) ∈ R², u(t) ∈ R and tf ∈ R.

Lagrange cost

:(       ∫($e1) → min ) 
+:(     - ∫($e1) → min ) 
+:( $e1 * ∫($e2) → min ) 
+:(       ∫($e1) → max ) 
+:(     - ∫($e1) → max ) 
+:( $e1 * ∫($e2) → max ) 

Lagrange (integral) costs are defined used the symbol , with parentheses. The keyword integral can also be used:

@def begin
+    t ∈ [0, 1], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    0.5∫(q(t) + u(t)^2) → min
+    ...
+end

or

@def begin
+    t ∈ [0, 1], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    0.5integral(q(t) + u(t)^2) → min
+    ...
+end

The integration range is implicitly equal to the time range, so the cost above is to be understood as

\[\frac{1}{2} \int_0^1 \left( q(t) + u^2(t) \right) \mathrm{d}t \to \min.\]

As for the dynamics, the parser will detect whether the integrand depends or not on time (autonomous / non-autonomous case).

Bolza cost

:( $e1 +       ∫($e2)       → min ) 
+:( $e1 + $e2 * ∫($e3)       → min ) 
+:( $e1 -       ∫($e2)       → min ) 
+:( $e1 - $e2 * ∫($e3)       → min ) 
+:( $e1 +       ∫($e2)       → max ) 
+:( $e1 + $e2 * ∫($e3)       → max ) 
+:( $e1 -       ∫($e2)       → max ) 
+:( $e1 - $e2 * ∫($e3)       → max ) 
+:(             ∫($e2) + $e1 → min ) 
+:(       $e2 * ∫($e3) + $e1 → min ) 
+:(             ∫($e2) - $e1 → min ) 
+:(       $e2 * ∫($e3) - $e1 → min ) 
+:(             ∫($e2) + $e1 → max ) 
+:(       $e2 * ∫($e3) + $e1 → max ) 
+:(             ∫($e2) - $e1 → max ) 
+:(       $e2 * ∫($e3) - $e1 → max ) 

Quite readily, Mayer and Lagrange costs can be combined into general Bolza costs. For instance as follows:

@def begin
+    p = (t0, tf) ∈ R², variable
+    t ∈ [t0, tf], time
+    x = (q, v) ∈ R², state
+    u ∈ R², control
+    (tf - t0) + 0.5∫(c(t) * u(t)^2) → min
+    ...
+end
Warning

The expression must be the sum of two terms (plus, possibly, a scalar factor before the integral), not more, so mind the parentheses. For instance, the following errors:

@def begin
+    p = (t0, tf) ∈ R², variable
+    t ∈ [t0, tf], time
+    x = (q, v) ∈ R², state
+    u ∈ R², control
+    (tf - t0) + q(tf) + 0.5∫( c(t) * u(t)^2 ) → min
+    ...
+end

The correct syntax is

@def begin
+    p = (t0, tf) ∈ R², variable
+    t ∈ [t0, tf], time
+    x = (q, v) ∈ R², state
+    u ∈ R², control
+    ((tf - t0) + q(tf)) + 0.5∫( c(t) * u(t)^2 ) → min
+    ...
+end

Aliases

:( $a = $e1 )

The single = symbol is used to define not a constraint but an alias, that is a purely syntactic replacement. There are some automatic aliases, e.g. x₁ and x1 for x[1] if x is the state (same for variable and control, for indices comprised between 1 and 9), and we have also seen that the user can define her own aliases when declaring the variable, state and control. Arbitrary aliases can be further defined, as below (compare with previous examples in the dynamics section):

@def begin
+    t ∈ [0, 1], time
+    x ∈ R², state
+    u ∈ R, control
+    F₀ = [x₂(t), 0]
+    F₁ = [0, 1]
+    ẋ(t) == F₀ + u(t) * F₁
+    ...
+end
Warning

Such aliases do not define any additional function and are just replaced textually by the parser. In particular, they cannot be used outside the @def begin ... end block. Conversely, constants and functions used within the @def block must be defined outside and before this block.

Hint

You can rely on a trace mode for the macro @def to look at your code after expansions of the aliases using the @def ocp ... syntax and adding true after your begin ... end block:

julia> @def damped_integrator begin
+           tf ∈ R, variable
+           t ∈ [0, tf], time
+           x = (q, v) ∈ R², state
+           u ∈ R, control
+           q̇ = v(t)
+           v̇ = u(t) - c(t)
+           ẋ(t) == [q̇, v̇]
+       end true;variable: tf, dim: 1
+time: t, initial time: 0, final time: var"tf##2739"[1]
+state: x, dim: 2
+control: u, dim: 1
+alias: q̇ = (x[2])(t)
+alias: v̇ = (var"u##2740"[1])(t) - c(t)
+dynamics: ∂(x)(t) == [(x[2])(t), (var"u##2740"[1])(t) - c(t)]
+variable: tf, dim: 1
+time: t, initial time: 0, final time: var"tf##2755"[1]
+state: x, dim: 2
+control: u, dim: 1
+alias: q̇ = (x[2])(t)
+alias: v̇ = (var"u##2758"[1])(t) - c(t)
+dynamics: ∂(x)(t) == [(x[2])(t), (var"u##2758"[1])(t) - c(t)]
+ERROR: UnauthorizedCall: the objective must be set before building the model.
Warning

The dynamics of an OCP is indeed a particular constraint, be careful to use == and not a single = that would try to define an alias:

julia> double_integrator = @def begin
+           tf ∈ R, variable
+           t ∈ [0, tf], time
+           x = (q, v) ∈ R², state
+           u ∈ R, control
+           q̇ = v
+           v̇ = u
+           ẋ(t) = [q̇, v̇]
+       endERROR: ParsingError:
+Line 7: ẋ(t) = begin
+        #= REPL[1]:8 =#
+        [q̇, v̇]
+    end
+forbidden alias name: (∂(x))(t)

Misc

  • Declarations (of variable - if any -, time, state and control) must be done first. Then, dynamics, constraints and cost can be introduced in an arbitrary order.
  • It is possible to provide numbers / labels (as in math equations) for the constraints to improve readability (this is mostly for future use, typically to retrieve the Lagrange multiplier associated with the discretisation of a given constraint):
@def damped_integrator begin
+    tf ∈ R, variable
+    t ∈ [0, tf], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    tf ≥ 0, (1)
+    q(0) == 2, (♡)
+    q̇ = v(t)
+    v̇ = u(t) - c(t)
+    ẋ(t) == [q̇, v̇]
+    x(t).^2  ≤ [1, 2], (state_con) 
+    ...
+end
  • Parsing errors should be explicit enough (with line number in the @def begin ... end block indicated) 🤞🏾
  • Check tutorials and applications in the documentation for further use.

Known issues

diff --git a/.save/docs/build/manual-ai-llm.html b/.save/docs/build/manual-ai-llm.html new file mode 100644 index 00000000..0de41868 --- /dev/null +++ b/.save/docs/build/manual-ai-llm.html @@ -0,0 +1,162 @@ + +Use AI · OptimalControl.jl

Use AI

Using now common models from AI, it is an elementary task to have such an agent learn the syntax of OptimalControl.jl DSL, then use the agent to translate standard math into this DSL. Here is a typical prompt, pointing to the DSL syntax:

Learn the syntax of OptimalControl.jl DSL described at the link below 
+to translate math into this DSL (Julia language): 
+https://control-toolbox.org/OptimalControl.jl/stable/manual-abstract.html.

Now, here is an extract of, e.g., claude.ai answer (Sonnet 4 model) to the request below:

Translate the problem below into this DSL:
+
+    minimise the final time tf 
+    under the constraint q''(t) = u(t) 
+    with -1 <= u(t) <= 1, 
+    q(0) = 1, q'(0) = -2, q(tf) = 3, q'(tf) = 1, and q'(t) <= 1.
@def begin
+    tf ∈ R, variable
+    t ∈ [0, tf], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    
+    # Variable constraint
+    tf ≥ 0
+    
+    # Control constraint
+    -1 ≤ u(t) ≤ 1
+    
+    # Initial conditions
+    q(0) == 1
+    v(0) == -2
+    
+    # Final conditions  
+    q(tf) == 3
+    v(tf) == 1
+    
+    # Path constraint
+    v(t) ≤ 1
+    
+    # Dynamics (q'' = u becomes first-order system)
+    ẋ(t) == [v(t), u(t)]
+    
+    # Objective: minimize final time
+    tf → min
+end

The answer is syntactically correct and can be updated, for instance according to the new request below:

Use a form compatible with examodels.
@def begin
+    tf ∈ R, variable
+    t ∈ [0, tf], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    
+    # Variable constraint
+    tf ≥ 0
+    
+    # Control constraint
+    -1 ≤ u(t) ≤ 1
+    
+    # Initial conditions
+    q(0) == 1
+    v(0) == -2
+    
+    # Final conditions  
+    q(tf) == 3
+    v(tf) == 1
+    
+    # Path constraint
+    v(t) ≤ 1
+    
+    # Dynamics (coordinate-wise for ExaModels)
+    ∂(q)(t) == v(t)
+    ∂(v)(t) == u(t)
+    
+    # Objective: minimize final time
+    tf → min
+end

It is also possible to feed the model directly with math definitions (here from a snapshot), as in the example below:

translate the problem below into OptimalControl.jl DSL:
rocket-def +

This prompt generates the syntactically correct code:

# Parameters
+h₀ = 1
+v₀ = 0
+m₀ = 1
+g₀ = 1
+Tc = 3.5
+hc = 500
+vc = 620
+mc = 0.6
+
+# Derived constants
+Dc = 0.5 * vc * m₀ / g₀
+mf = mc * m₀
+c = 0.5 * sqrt(g₀ * h₀)
+Tmax = Tc * m₀ * g₀
+
+# Auxiliary functions
+D(h, v) = Dc * v^2 * exp(-hc * (h - h₀) / h₀)
+g(h) = g₀ * (h₀ / h)^2
+
+rocket = @def begin
+    # Variable (free final time)
+    tf ∈ R, variable
+    
+    # Time
+    t ∈ [0, tf], time
+    
+    # State: (altitude, velocity, mass)
+    x = (h, v, m) ∈ R³, state
+    
+    # Control: thrust
+    T ∈ R, control
+    
+    # Dynamics
+    ∂(h)(t) == v(t)
+    ∂(v)(t) == (T(t) - D(h(t), v(t)) - m(t) * g(h(t))) / m(t)
+    ∂(m)(t) == -T(t) / c
+    
+    # Initial conditions
+    h(0) == h₀
+    v(0) == v₀
+    m(0) == m₀
+    
+    # Final condition
+    m(tf) == mf
+    
+    # State constraints
+    h(t) ≥ h₀
+    v(t) ≥ v₀
+    mf ≤ m(t) ≤ m₀
+    
+    # Control constraint
+    0 ≤ T(t) ≤ Tmax
+    
+    # Variable constraint
+    tf ≥ 0
+    
+    # Objective: maximize final altitude h(tf)
+    -h(tf) → min
+end
diff --git a/.save/docs/build/manual-flow-api.html b/.save/docs/build/manual-flow-api.html new file mode 100644 index 00000000..37b8df8e --- /dev/null +++ b/.save/docs/build/manual-flow-api.html @@ -0,0 +1,103 @@ + +Flow API · OptimalControl.jl

API of the Flow function

CTFlows.FlowFunction
Flow(
+    vf::VectorField;
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> CTFlowsODE.VectorFieldFlow
+

Constructs a flow object for a classical (non-Hamiltonian) vector field.

This creates a VectorFieldFlow that integrates the ODE system dx/dt = vf(t, x, v) using DifferentialEquations.jl. It handles both fixed and parametric dynamics, as well as jump discontinuities and event stopping.

Keyword Arguments

  • alg, abstol, reltol, saveat, internalnorm: Solver options.
  • kwargs_Flow...: Additional arguments passed to the solver configuration.

Example

julia> vf(t, x, v) = -v * x
+julia> flow = CTFlows.Flow(CTFlows.VectorField(vf))
+julia> x1 = flow(0.0, 1.0, 1.0)
source
Flow(
+    h::CTFlows.AbstractHamiltonian;
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> CTFlowsODE.HamiltonianFlow
+

Constructs a Hamiltonian flow from a scalar Hamiltonian.

This method builds a numerical integrator that simulates the evolution of a Hamiltonian system given a Hamiltonian function h(t, x, p, l) or h(x, p).

Internally, it computes the right-hand side of Hamilton’s equations via automatic differentiation and returns a HamiltonianFlow object.

Keyword Arguments

  • alg, abstol, reltol, saveat, internalnorm: solver options.
  • kwargs_Flow...: forwarded to the solver.

Example

julia> H(x, p) = dot(p, p) + dot(x, x)
+julia> flow = CTFlows.Flow(CTFlows.Hamiltonian(H))
+julia> xf, pf = flow(0.0, x0, p0, 1.0)
source
Flow(
+    hv::HamiltonianVectorField;
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> CTFlowsODE.HamiltonianFlow
+

Constructs a Hamiltonian flow from a precomputed Hamiltonian vector field.

This method assumes you already provide the Hamiltonian vector field (dx/dt, dp/dt) instead of deriving it from a scalar Hamiltonian.

Returns a HamiltonianFlow object that integrates the given system.

Keyword Arguments

  • alg, abstol, reltol, saveat, internalnorm: solver options.
  • kwargs_Flow...: forwarded to the solver.

Example

julia> hv(t, x, p, l) = (∇ₚH, -∇ₓH)
+julia> flow = CTFlows.Flow(CTFlows.HamiltonianVectorField(hv))
+julia> xf, pf = flow(0.0, x0, p0, 1.0, l)
source
Flow(
+    ocp::Model,
+    u::CTFlows.ControlLaw;
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}
+

Construct a flow for an optimal control problem using a given control law.

This method builds the Hamiltonian system associated with the optimal control problem (ocp) and integrates the corresponding state–costate dynamics using the specified control law u.

Arguments

  • ocp::CTModels.Model: An optimal control problem defined using CTModels.
  • u::CTFlows.ControlLaw: A feedback control law generated by ControlLaw(...) or similar.
  • alg: Integration algorithm (default inferred).
  • abstol: Absolute tolerance for the ODE solver.
  • reltol: Relative tolerance for the ODE solver.
  • saveat: Time points at which to save the solution.
  • internalnorm: Optional norm function used by the integrator.
  • kwargs_Flow: Additional keyword arguments passed to the solver.

Returns

A flow object f such that:

  • f(t0, x0, p0, tf) integrates the state and costate from t0 to tf.
  • f((t0, tf), x0, p0) returns the full trajectory over the interval.

Example

julia> u = (x, p) -> p
+julia> f = Flow(ocp, ControlLaw(u))
source
Flow(
+    ocp::Model,
+    u::Function;
+    autonomous,
+    variable,
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}
+

Construct a flow for an optimal control problem using a control function in feedback form.

This method constructs the Hamiltonian and integrates the associated state–costate dynamics using a raw function u. It automatically wraps u as a control law.

Arguments

  • ocp::CTModels.Model: The optimal control problem.
  • u::Function: A feedback control function:
    • If ocp is autonomous: u(x, p)
    • If non-autonomous: u(t, x, p)
  • autonomous::Bool: Whether the control law depends on time.
  • variable::Bool: Whether the OCP involves variable time (e.g., free final time).
  • alg, abstol, reltol, saveat, internalnorm: ODE solver parameters.
  • kwargs_Flow: Additional options.

Returns

A Flow object compatible with function call interfaces for state propagation.

Example

julia> u = (t, x, p) -> t + p
+julia> f = Flow(ocp, u)
source
Flow(
+    ocp::Model,
+    u::Union{CTFlows.ControlLaw{<:Function, T, V}, CTFlows.FeedbackControl{<:Function, T, V}},
+    g::Union{CTFlows.MixedConstraint{<:Function, T, V}, CTFlows.StateConstraint{<:Function, T, V}},
+    μ::CTFlows.Multiplier{<:Function, T, V};
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}
+

Construct a flow for an optimal control problem with control and constraint multipliers in feedback form.

This variant constructs a Hamiltonian system incorporating both the control law and a multiplier law (e.g., for enforcing state or mixed constraints). All inputs must be consistent in time dependence.

Arguments

  • ocp::CTModels.Model: The optimal control problem.
  • u::ControlLaw or FeedbackControl: Feedback control.
  • g::StateConstraint or MixedConstraint: Constraint function.
  • μ::Multiplier: Multiplier function.
  • alg, abstol, reltol, saveat, internalnorm: Solver settings.
  • kwargs_Flow: Additional options.

Returns

A Flow object that integrates the constrained Hamiltonian dynamics.

Example

julia> f = Flow(ocp, (x, p) -> p[1], (x, u) -> x[1] - 1, (x, p) -> x[1]+p[1])

For non-autonomous cases:

julia> f = Flow(ocp, (t, x, p) -> t + p, (t, x, u) -> x - 1, (t, x, p) -> x+p)
Warning

All input functions must match the autonomous/non-autonomous nature of the problem.

source
Flow(
+    ocp::Model,
+    u::Function,
+    g::Function,
+    μ::Function;
+    autonomous,
+    variable,
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}
+

Construct a flow from a raw feedback control, constraint, and multiplier.

This version is for defining flows directly from user functions without wrapping them into ControlLaw, Constraint, or Multiplier types. Automatically wraps and adapts them based on time dependence.

Arguments

  • ocp::CTModels.Model: The optimal control problem.
  • u::Function: Control law.
  • g::Function: Constraint.
  • μ::Function: Multiplier.
  • autonomous::Bool: Whether the system is autonomous.
  • variable::Bool: Whether time is a free variable.
  • alg, abstol, reltol, saveat, internalnorm: Solver parameters.
  • kwargs_Flow: Additional options.

Returns

A Flow object ready for trajectory integration.

source
Flow(
+    dyn::Function;
+    autonomous,
+    variable,
+    alg,
+    abstol,
+    reltol,
+    saveat,
+    internalnorm,
+    kwargs_Flow...
+) -> CTFlowsODE.ODEFlow
+

Constructs a Flow from a user-defined dynamical system given as a Julia function.

This high-level interface handles:

  • autonomous and non-autonomous systems,
  • presence or absence of additional variables (v),
  • selection of ODE solvers and tolerances,
  • and integrates with the CTFlows event system (e.g., jumps, callbacks).

Arguments

  • dyn: A function defining the vector field. Its signature must match the values of autonomous and variable.
  • autonomous: Whether the dynamics are time-independent (false by default).
  • variable: Whether the dynamics depend on a control or parameter v.
  • alg, abstol, reltol, saveat, internalnorm: Solver settings passed to OrdinaryDiffEq.solve.
  • kwargs_Flow: Additional keyword arguments passed to the solver.

Returns

An ODEFlow object, wrapping both the full solver and its right-hand side (RHS).

Supported Function Signatures for dyn

Depending on the (autonomous, variable) flags:

  • (false, false): dyn(x)
  • (false, true): dyn(x, v)
  • (true, false): dyn(t, x)
  • (true, true): dyn(t, x, v)

Example

julia> dyn(t, x, v) = [-x[1] + v[1] * sin(t)]
+julia> flow = CTFlows.Flow(dyn; autonomous=true, variable=true)
+julia> xT = flow((0.0, 1.0), [1.0], [0.1])
source
diff --git a/.save/docs/build/manual-flow-ocp-14f5fd40.svg b/.save/docs/build/manual-flow-ocp-14f5fd40.svg new file mode 100644 index 00000000..45060617 --- /dev/null +++ b/.save/docs/build/manual-flow-ocp-14f5fd40.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-flow-ocp-7ba8f25d.svg b/.save/docs/build/manual-flow-ocp-7ba8f25d.svg new file mode 100644 index 00000000..7f878c26 --- /dev/null +++ b/.save/docs/build/manual-flow-ocp-7ba8f25d.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-flow-ocp-9f7684fe.svg b/.save/docs/build/manual-flow-ocp-9f7684fe.svg new file mode 100644 index 00000000..710a5269 --- /dev/null +++ b/.save/docs/build/manual-flow-ocp-9f7684fe.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-flow-ocp-b00ba7c1.svg b/.save/docs/build/manual-flow-ocp-b00ba7c1.svg new file mode 100644 index 00000000..918286d8 --- /dev/null +++ b/.save/docs/build/manual-flow-ocp-b00ba7c1.svg @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-flow-ocp-dd4b802c.svg b/.save/docs/build/manual-flow-ocp-dd4b802c.svg new file mode 100644 index 00000000..bb56bb04 --- /dev/null +++ b/.save/docs/build/manual-flow-ocp-dd4b802c.svg @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-flow-ocp.html b/.save/docs/build/manual-flow-ocp.html new file mode 100644 index 00000000..d1954da2 --- /dev/null +++ b/.save/docs/build/manual-flow-ocp.html @@ -0,0 +1,223 @@ + +From optimal control problems · OptimalControl.jl

How to compute flows from optimal control problems

In this tutorial, we explain the Flow function, in particular to compute flows from an optimal control problem.

Basic usage

Les us define a basic optimal control problem.

using OptimalControl
+
+t0 = 0
+tf = 1
+x0 = [-1, 0]
+
+ocp = @def begin
+
+    t ∈ [ t0, tf ], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+
+    x(t0) == x0
+    x(tf) == [0, 0]
+    ẋ(t)  == [v(t), u(t)]
+
+    ∫( 0.5u(t)^2 ) → min
+
+end

The pseudo-Hamiltonian of this problem is

\[ H(x, p, u) = p_q\, v + p_v\, u + p^0 u^2 /2,\]

where $p^0 = -1$ since we are in the normal case. From the Pontryagin maximum principle, the maximising control is given in feedback form by

\[u(x, p) = p_v\]

since $\partial^2_{uu} H = p^0 = - 1 < 0$.

u(x, p) = p[2]

Actually, if $(x, u)$ is a solution of the optimal control problem, then, the Pontryagin maximum principle tells us that there exists a costate $p$ such that $u(t) = u(x(t), p(t))$ and such that the pair $(x, p)$ satisfies:

\[\begin{array}{l} + \dot{x}(t) = \displaystyle\phantom{-}\nabla_p H(x(t), p(t), u(x(t), p(t))), \\[0.5em] + \dot{p}(t) = \displaystyle - \nabla_x H(x(t), p(t), u(x(t), p(t))). +\end{array}\]

The Flow function aims to compute $t \mapsto (x(t), p(t))$ from the optimal control problem ocp and the control in feedback form u(x, p).

Nota bene

Actually, writing $z = (x, p)$, then the pair $(x, p)$ is also solution of

\[ \dot{z}(t) = \vec{\mathbf{H}}(z(t)),\]

where $\mathbf{H}(z) = H(z, u(z))$ and $\vec{\mathbf{H}} = (\nabla_p \mathbf{H}, -\nabla_x \mathbf{H})$. This is what is actually computed by Flow.

Let us try to get the associated flow:

julia> f = Flow(ocp, u)
+ERROR: ExtensionError. Please make: julia> using OrdinaryDiffEq

As you can see, an error occurred since we need the package OrdinaryDiffEq.jl. This package provides numerical integrators to compute solutions of the ordinary differential equation $\dot{z}(t) = \vec{\mathbf{H}}(z(t))$.

OrdinaryDiffEq.jl

The package OrdinaryDiffEq.jl is part of DifferentialEquations.jl. You can either use one or the other.

using OrdinaryDiffEq
+f = Flow(ocp, u)

Now we have the flow of the associated Hamiltonian vector field, we can use it. Some simple calculations shows that the initial covector $p(0)$ solution of the Pontryagin maximum principle is $[12, 6]$. Let us check that integrating the flow from $(t_0, x_0, p_0) = (0, [-1, 0], [12, 6])$ to the final time $t_f$ we reach the target $x_f = [0, 0]$.

p0 = [12, 6]
+xf, pf = f(t0, x0, p0, tf)
+xf
2-element Vector{Float64}:
+ -1.6443649131320877e-15
+  6.0194942550307896e-15

If you prefer to get the state, costate and control trajectories at any time, you can call the flow like this:

sol = f((t0, tf), x0, p0)

In this case, you obtain a data that you can plot exactly like when solving the optimal control problem with the function solve. See for instance the basic example or the plot tutorial.

using Plots
+plot(sol)
Example block output

You can notice from the graph of v that the integrator has made very few steps:

time_grid(sol)
6-element Vector{Float64}:
+ 0.0
+ 0.002407303553528376
+ 0.01626703922322027
+ 0.08846744312965177
+ 0.38065350973196377
+ 1.0
Time grid

The function time_grid returns the discretised time grid returned by the solver. In this case, the solution has been computed by numerical integration with an adaptive step-length Runge-Kutta scheme.

To have a better visualisation (the accuracy won't change), you can provide a fine grid.

sol = f((t0, tf), x0, p0; saveat=range(t0, tf, 100))
+plot(sol)
Example block output

The argument saveat is an option from OrdinaryDiffEq.jl. Please check the list of common options. For instance, one can change the integrator with the keyword argument alg or the absolute tolerance with abstol. Note that you can set an option when declaring the flow or set an option in a particular call of the flow. In the following example, the integrator will be BS5() and the absolute tolerance will be abstol=1e-8.

f = Flow(ocp, u; alg=BS5(), abstol=1)   # alg=BS5(), abstol=1
+xf, pf = f(t0, x0, p0, tf; abstol=1e-8) # alg=BS5(), abstol=1e-8
([1.0061618355784182e-16, 5.521240834070064e-16], [12.0, -6.0])

Non-autonomous case

Let us consider the following optimal control problem:

t0 = 0
+tf = π/4
+x0 = 0
+xf = tan(π/4) - 2log(√(2)/2)
+
+ocp = @def begin
+
+    t ∈ [t0, tf], time
+    x ∈ R, state
+    u ∈ R, control
+
+    x(t0) == x0
+    x(tf) == xf
+    ẋ(t) == u(t) * (1 + tan(t)) # The dynamics depend explicitly on t
+
+    0.5∫( u(t)^2 ) → min
+
+end

The pseudo-Hamiltonian of this problem is

\[ H(t, x, p, u) = p\, u\, (1+\tan\, t) + p^0 u^2 /2,\]

where $p^0 = -1$ since we are in the normal case. We can notice that the pseudo-Hamiltonian is non-autonomous since it explicitly depends on the time $t$.

is_autonomous(ocp)
false

From the Pontryagin maximum principle, the maximising control is given in feedback form by

\[u(t, x, p) = p\, (1+\tan\, t)\]

since $\partial^2_{uu} H = p^0 = - 1 < 0$.

u(t, x, p) = p * (1 + tan(t))

As before, the Flow function aims to compute $(x, p)$ from the optimal control problem ocp and the control in feedback form u(t, x, p). Since the problem is non-autonomous, we must provide a control law that depends on time.

f = Flow(ocp, u)

Now we have the flow of the associated Hamiltonian vector field, we can use it. Some simple calculations shows that the initial covector $p(0)$ solution of the Pontryagin maximum principle is $1$. Let us check that integrating the flow from $(t_0, x_0) = (0, 0)$ to the final time $t_f = \pi/4$ we reach the target $x_f = \tan(\pi/4) - 2 \log(\sqrt{2}/2)$.

p0 = 1
+xf, pf = f(t0, x0, p0, tf)
+xf - (tan(π/4) - 2log(√(2)/2))
-8.617551117140465e-12

Variable

Let us consider an optimal control problem with a (decision / optimisation) variable.

t0 = 0
+x0 = 0
+
+ocp = @def begin
+
+    tf ∈ R, variable # the optimisation variable is tf
+    t ∈ [t0, tf], time
+    x ∈ R, state
+    u ∈ R, control
+
+    x(t0) == x0
+    x(tf) == 1
+    ẋ(t) == tf * u(t)
+
+    tf + 0.5∫(u(t)^2) → min
+
+end

As you can see, the variable is the final time tf. Note that the dynamics depends on tf. From the Pontryagin maximum principle, the solution is given by:

tf = (3/2)^(1/4)
+p0 = 2tf/3

The input arguments of the maximising control are now the state x, the costate p and the variable tf.

u(x, p, tf) = tf * p

Let us check that the final condition x(tf) = 1 is satisfied.

f = Flow(ocp, u)
+xf, pf = f(t0, x0, p0, tf, tf)
(1.0000000000000004, 0.7377879464668812)

The usage of the flow f is the following: f(t0, x0, p0, tf, v) where v is the variable. If one wants to compute the state at time t1 = 0.5, then, one must write:

t1 = 0.5
+x1, p1 = f(t0, x0, p0, t1, tf)
(0.45180100180492255, 0.7377879464668812)
Free times

In the particular cases: the initial time t0 is the only variable, the final time tf is the only variable, or the initial and final times t0 and tf are the only variables and are in order v=(t0, tf), the times do not need to be repeated in the call of the flow:

xf, pf = f(t0, x0, p0, tf)
(1.0000000000000004, 0.7377879464668812)

Since the variable is the final time, we can make the time-reparameterisation $t = s\, t_f$ to normalise the time $s$ in $[0, 1]$.

ocp = @def begin
+
+    tf ∈ R, variable
+    s ∈ [0, 1], time
+    x ∈ R, state
+    u ∈ R, control
+
+    x(0) == 0
+    x(1) == 1
+    ẋ(s) == tf^2 * u(s)
+
+    tf + (0.5*tf)*∫(u(s)^2) → min
+
+end
+
+f = Flow(ocp, u)
+xf, pf = f(0, x0, p0, 1, tf)
(1.0000000000000002, 0.7377879464668812)

Another possibility is to add a new state variable $t_f(s)$. The problem has no variable anymore.

ocp = @def begin
+
+    s ∈ [0, 1], time
+    y = (x, tf) ∈ R², state
+    u ∈ R, control
+
+    x(0) == 0
+    x(1) == 1
+    dx = tf(s)^2 * u(s)
+    dtf = 0 * u(s) # 0
+    ẏ(s) == [dx, dtf]
+
+    tf(1) + 0.5∫(tf(s) * u(s)^2) → min
+
+end
+
+u(y, q) = y[2] * q[1]
+
+f = Flow(ocp, u)
+yf, pf = f(0, [x0, tf], [p0, 0], 1)
([1.0000000000000002, 1.1066819197003217], [0.7377879464668812, -1.0000000000000004])
Bug

Note that in the previous optimal control problem, we have dtf = 0 * u(s) instead of dtf = 0. The latter does not work.

Goddard problem

In the Goddard problem, you may find other constructions of flows, especially for singular and boundary arcs.

Concatenation of arcs

In this part, we present how to concatenate several flows. Let us consider the following problem.

t0 =  0
+tf =  1
+x0 = -1
+xf =  0
+
+@def ocp begin
+
+    t ∈ [ t0, tf ], time
+    x ∈ R, state
+    u ∈ R, control
+
+    x(t0) == x0
+    x(tf) == xf
+    -1 ≤ u(t) ≤ 1
+    ẋ(t) == -x(t) + u(t)
+
+    ∫( abs(u(t)) ) → min
+
+end

From the Pontryagin maximum principle, the optimal control is a concatenation of an off arc ($u=0$) followed by a positive bang arc ($u=1$). The initial costate is

\[p_0 = \frac{1}{x_0 - (x_f-1) e^{t_f}}\]

and the switching time is $t_1 = -\ln(p_0)$.

p0 = 1/( x0 - (xf-1) * exp(tf) )
+t1 = -log(p0)

Let us define the two flows and the concatenation. Note that the concatenation of two flows is a flow.

f0 = Flow(ocp, (x, p) -> 0)     # off arc: u = 0
+f1 = Flow(ocp, (x, p) -> 1)     # positive bang arc: u = 1
+
+f = f0 * (t1, f1)               # f0 followed by f1 whenever t ≥ t1

Now, we can check that the state reach the target.

sol = f((t0, tf), x0, p0)
+plot(sol)
Example block output
Goddard problem

In the Goddard problem, you may find more complex concatenations.

For the moment, this concatenation is not equivalent to an exact concatenation.

f = Flow(x ->  x)
+g = Flow(x -> -x)
+
+x0 = 1
+φ(t) = (f * (t/2, g))(0, x0, t)
+ψ(t) = g(t/2, f(0, x0, t/2), t)
+
+println("φ(t) = ", abs(φ(1)-x0))
+println("ψ(t) = ", abs(ψ(1)-x0))
+
+t = range(1, 5e2, 201)
+
+plt = plot(yaxis=:log, legend=:bottomright, title="Comparison of concatenations", xlabel="t")
+plot!(plt, t, t->abs(φ(t)-x0), label="OptimalControl")
+plot!(plt, t, t->abs(ψ(t)-x0), label="Classical")
Example block output

State constraints

We consider an optimal control problem with a state constraints of order 1.[1]

t0 = 0
+tf = 2
+x0 = 1
+xf = 1/2
+lb = 0.1
+
+ocp = @def begin
+
+    t ∈ [t0, tf], time
+    x ∈ R, state
+    u ∈ R, control
+
+    -1 ≤ u(t) ≤ 1
+    x(t0) == x0
+    x(tf) == xf
+    x(t) - lb ≥ 0 # state constraint
+    ẋ(t) == u(t)
+
+    ∫( x(t)^2 ) → min
+
+end

The pseudo-Hamiltonian of this problem is

\[ H(x, p, u, \mu) = p\, u + p^0 x^2 + \mu\, c(x),\]

where $ p^0 = -1 $ since we are in the normal case, and where $c(x) = x - l_b$. Along a boundary arc, when $c(x(t)) = 0$, we have $x(t) = l_b$, so $ x(\cdot) $ is constant. Differentiating, we obtain $\dot{x}(t) = u(t) = 0$. Hence, along a boundary arc, the control in feedback form is:

\[u(x) = 0.\]

From the maximisation condition, along a boundary arc, we have $p(t) = 0$. Differentiating, we obtain $\dot{p}(t) = 2 x(t) - \mu(t) = 0$. Hence, along a boundary arc, the dual variable $\mu$ is given in feedback form by:

\[\mu(x) = 2x.\]

Note

Within OptimalControl.jl, the constraint must be given in the form:

c([t, ]x, u[, v])

the control law in feedback form must be given as:

u([t, ]x, p[, v])

and the dual variable:

μ([t, ]x, p[, v])

The time t must be provided when the problem is non-autonomous and the variable v must be given when the optimal control problem contains a variable to optimise.

The optimal control is a concatenation of 3 arcs: a negative bang arc followed by a boundary arc, followed by a positive bang arc. The initial covector is approximately $p(0)=-0.982237546583301$, the first switching time is $t_1 = 0.9$, and the exit time of the boundary is $t_2 = 1.6$. Let us check this by concatenating the three flows.

u(x) = 0     # boundary control
+c(x) = x-lb  # constraint
+μ(x) = 2x    # dual variable
+
+f1 = Flow(ocp, (x, p) -> -1)
+f2 = Flow(ocp, (x, p) -> u(x), (x, u) -> c(x), (x, p) -> μ(x))
+f3 = Flow(ocp, (x, p) -> +1)
+
+t1 = 0.9
+t2 = 1.6
+f = f1 * (t1, f2) * (t2, f3)
+
+p0 = -0.982237546583301
+xf, pf = f(t0, x0, p0, tf)
+xf
0.5000000005530089

Jump on the costate

Let consider the following problem:

t0=0
+tf=1
+x0=[0, 1]
+l = 1/9
+@def ocp begin
+    t ∈ [ t0, tf ], time
+    x ∈ R², state
+    u ∈ R, control
+    x(t0) == x0
+    x(tf) == [0, -1]
+    x₁(t) ≤ l,                      (x_con)
+    ẋ(t) == [x₂(t), u(t)]
+    0.5∫(u(t)^2) → min
+end

The pseudo-Hamiltonian of this problem is

\[ H(x, p, u, \mu) = p_1\, x_2 + p_2\, u + 0.5\, p^0 u^2 + \mu\, c(x),\]

where $ p^0 = -1 $ since we are in the normal case, and where the constraint is $c(x) = l - x_1 \ge 0$. Along a boundary arc, when $c(x(t)) = 0$, we have $x_1(t) = l$, so $\dot{x}_1(t) = x_2(t) = 0$. Differentiating again, we obtain $\dot{x}_2(t) = u(t) = 0$ (the constraint is of order 2). Hence, along a boundary arc, the control in feedback form is:

\[u(x, p) = 0.\]

From the maximisation condition, along a boundary arc, we have $p_2(t) = 0$. Differentiating, we obtain $\dot{p}_2(t) = -p_1(t) = 0$. Differentiating again, we obtain $\dot{p}_1(t) = \mu(t) = 0$. Hence, along a boundary arc, the Lagrange multiplier $\mu$ is given in feedback form by:

\[\mu(x, p) = 0.\]

Outside a boundary arc, the maximisation condition gives $u(x, p) = p_2$. A deeper analysis of the problem shows that the optimal solution has 3 arcs, the first and the third ones are interior to the constraint. The second arc is a boundary arc, that is $x_1(t) = l$ along the second arc. We denote by $t_1$ and $t_2$ the two switching times. We have $t_1 = 3l = 1/3$ and $t_2 = 1 - 3l = 2/3$, since $l=1/9$. The initial costate solution is $p(0) = [-18, -6]$.

Important

The costate is discontinuous at $t_1$ and $t_2$ with a jump of $18$.

Let us compute the solution concatenating the flows with the jumps.

t1 = 3l
+t2 = 1 - 3l
+p0 = [-18, -6]
+
+fs = Flow(ocp,
+    (x, p) -> p[2]      # control along regular arc
+    )
+fc = Flow(ocp,
+    (x, p) -> 0,        # control along boundary arc
+    (x, u) -> l-x[1],   # state constraint
+    (x, p) -> 0         # Lagrange multiplier
+    )
+
+ν = 18  # jump value of p1 at t1 and t2
+
+f = fs * (t1, [ν, 0], fc) * (t2, [ν, 0], fs)
+
+xf, pf = f(t0, x0, p0, tf) # xf should be [0, -1]
([9.932368061361347e-17, -0.9999999999999993], [18.0, -5.999999999999999])

Let us solve the problem with a direct method to compare with the solution from the flow.

using NLPModelsIpopt
+
+direct_sol = solve(ocp)
+plot(direct_sol; label="direct", size=(800, 700))
+
+flow_sol = f((t0, tf), x0, p0; saveat=range(t0, tf, 100))
+plot!(flow_sol; label="flow", state_style=(color=3,), linestyle=:dash)
Example block output
  • 1B. Bonnard, L. Faubourg, G. Launay & E. Trélat, Optimal Control With State Constraints And The Space Shuttle Re-entry Problem, J. Dyn. Control Syst., 9 (2003), no. 2, 155–199.
diff --git a/.save/docs/build/manual-flow-others-a2c83b5a.svg b/.save/docs/build/manual-flow-others-a2c83b5a.svg new file mode 100644 index 00000000..0a0bf7db --- /dev/null +++ b/.save/docs/build/manual-flow-others-a2c83b5a.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-flow-others.html b/.save/docs/build/manual-flow-others.html new file mode 100644 index 00000000..c9761a26 --- /dev/null +++ b/.save/docs/build/manual-flow-others.html @@ -0,0 +1,30 @@ + +From Hamiltonians and others · OptimalControl.jl

How to compute Hamiltonian flows and trajectories

In this tutorial, we explain the Flow function, in particular to compute flows from a Hamiltonian vector fields, but also from general vector fields.

Introduction

Consider the simple optimal control problem from the basic example page. The pseudo-Hamiltonian is

\[ H(x, p, u) = p_q\, v + p_v\, u + p^0 u^2 /2,\]

where $x=(q,v)$, $p=(p_q,p_v)$, $p^0 = -1$ since we are in the normal case. From the Pontryagin maximum principle, the maximising control is given in feedback form by

\[u(x, p) = p_v\]

since $\partial^2_{uu} H = p^0 = - 1 < 0$.

u(x, p) = p[2]

Actually, if $(x, u)$ is a solution of the optimal control problem, then, the Pontryagin maximum principle tells us that there exists a costate $p$ such that $u(t) = u(x(t), p(t))$ and such that the pair $(x, p)$ satisfies:

\[\begin{array}{l} + \dot{x}(t) = \displaystyle\phantom{-}\nabla_p H(x(t), p(t), u(x(t), p(t))), \\[0.5em] + \dot{p}(t) = \displaystyle - \nabla_x H(x(t), p(t), u(x(t), p(t))). +\end{array}\]

Nota bene

Actually, writing $z = (x, p)$, then the pair $(x, p)$ is also solution of

\[ \dot{z}(t) = \vec{\mathbf{H}}(z(t)),\]

where $\mathbf{H}(z) = H(z, u(z))$ and $\vec{\mathbf{H}} = (\nabla_p \mathbf{H}, -\nabla_x \mathbf{H})$.

Let us import the necessary packages.

using OptimalControl
+using OrdinaryDiffEq

The package OrdinaryDiffEq.jl provides numerical integrators to compute solutions of ordinary differential equations.

OrdinaryDiffEq.jl

The package OrdinaryDiffEq.jl is part of DifferentialEquations.jl. You can either use one or the other.

Extremals from the Hamiltonian

The pairs $(x, p)$ solution of the Hamitonian vector field are called extremals. We can compute some constructing the flow from the optimal control problem and the control in feedback form. Another way to compute extremals is to define explicitly the Hamiltonian.

H(x, p, u) = p[1] * x[2] + p[2] * u - 0.5 * u^2     # pseudo-Hamiltonian
+H(x, p) = H(x, p, u(x, p))                          # Hamiltonian
+
+z = Flow(Hamiltonian(H))
+
+t0 = 0
+tf = 1
+x0 = [-1, 0]
+p0 = [12, 6]
+xf, pf = z(t0, x0, p0, tf)
([-1.6443649131320877e-15, 6.0194942550307896e-15], [12.0, -5.999999999999998])

Extremals from the Hamiltonian vector field

You can also provide the Hamiltonian vector field.

Hv(x, p) = [x[2], p[2]], [0.0, -p[1]]     # Hamiltonian vector field
+
+z = Flow(HamiltonianVectorField(Hv))
+xf, pf = z(t0, x0, p0, tf)
([-1.6443649131320877e-15, 6.0194942550307896e-15], [12.0, -5.999999999999998])

Note that if you call the flow on tspan=(t0, tf), then you obtain the output solution from OrdinaryDiffEq.jl.

sol = z((t0, tf), x0, p0)
+xf, pf = sol(tf)[1:2], sol(tf)[3:4]
([-1.5068423663888169e-15, 2.362238023816946e-14], [12.0, -5.999999999999964])

Trajectories

You can also compute trajectories from the control dynamics $(x, u) \mapsto (v, u)$ and a control law $t \mapsto u(t)$.

u(t) = 6-12t
+x = Flow((t, x) -> [x[2], u(t)]; autonomous=false) # the vector field depends on t
+x(t0, x0, tf)
2-element Vector{Float64}:
+ -8.881784197001252e-16
+ -4.440892098500626e-16

Again, giving a tspan you get an output solution from OrdinaryDiffEq.jl.

using Plots
+sol = x((t0, tf), x0)
+plot(sol)
Example block output
diff --git a/.save/docs/build/manual-initial-guess-88347162.svg b/.save/docs/build/manual-initial-guess-88347162.svg new file mode 100644 index 00000000..11e25bcb --- /dev/null +++ b/.save/docs/build/manual-initial-guess-88347162.svg @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-initial-guess.html b/.save/docs/build/manual-initial-guess.html new file mode 100644 index 00000000..c73f4ee8 --- /dev/null +++ b/.save/docs/build/manual-initial-guess.html @@ -0,0 +1,74 @@ + +Set an initial guess · OptimalControl.jl

Initial guess (or iterate) for the resolution

We present the different possibilities to provide an initial guess to solve an optimal control problem with the OptimalControl.jl package.

First, we need to import OptimalControl.jl to define the optimal control problem and NLPModelsIpopt.jl to solve it. We also need to import Plots.jl to plot solutions.

using OptimalControl
+using NLPModelsIpopt
+using Plots

For the illustrations, we define the following optimal control problem.

t0 = 0
+tf = 10
+α  = 5
+
+ocp = @def begin
+    t ∈ [t0, tf], time
+    v ∈ R, variable
+    x ∈ R², state
+    u ∈ R, control
+    x(t0) == [ -1, 0 ]
+    x₁(tf) == 0
+    ẋ(t) == [ x₂(t), x₁(t) + α*x₁(t)^2 + u(t) ]
+    x₂(tf)^2 + ∫( 0.5u(t)^2 ) → min
+end

Default initial guess

We first solve the problem without giving an initial guess. This will default to initialize all variables to 0.1.

# solve the optimal control problem without initial guess
+sol = solve(ocp; display=false)
+println("Number of iterations: ", iterations(sol))
Number of iterations: 9

Let us plot the solution of the optimal control problem.

plot(sol; size=(600, 450))
Example block output

Note that the following formulations are equivalent to not giving an initial guess.

sol = solve(ocp; init=nothing, display=false)
+println("Number of iterations: ", iterations(sol))
+
+sol = solve(ocp; init=(), display=false)
+println("Number of iterations: ", iterations(sol))
Number of iterations: 9
+Number of iterations: 9
Interactions with an optimal control solution

To get the number of iterations of the solver, check the iterations function.

To reduce the number of iterations and improve the convergence, we can give an initial guess to the solver. This initial guess can be built from constant values, interpolated vectors, functions, or existing solutions. Except when initializing from a solution, the arguments are to be passed as a named tuple init=(state=..., control=..., variable=...) whose fields are optional. Missing fields will revert to default initialization (ie constant 0.1).

Constant initial guess

We first illustrate the constant initial guess, using vectors or scalars according to the dimension.

# solve the optimal control problem with initial guess with constant values
+sol = solve(ocp; init=(state=[-0.2, 0.1], control=-0.2, variable=0.05), display=false)
+println("Number of iterations: ", iterations(sol))
Number of iterations: 8

Partial initializations are also valid, as shown below. Note the ending comma when a single argument is passed, since it must be a tuple.

# initialisation only on the state
+sol = solve(ocp; init=(state=[-0.2, 0.1],), display=false)
+println("Number of iterations: ", iterations(sol))
+
+# initialisation only on the control
+sol = solve(ocp; init=(control=-0.2,), display=false)
+println("Number of iterations: ", iterations(sol))
+
+# initialisation only on the state and the variable
+sol = solve(ocp; init=(state=[-0.2, 0.1], variable=0.05), display=false)
+println("Number of iterations: ", iterations(sol))
Number of iterations: 8
+Number of iterations: 7
+Number of iterations: 8

Functional initial guess

For the state and control, we can also provide functions of time as initial guess.

# initial guess as functions of time
+x(t) = [ -0.2t, 0.1t ]
+u(t) = -0.2t
+
+sol = solve(ocp; init=(state=x, control=u, variable=0.05), display=false)
+println("Number of iterations: ", iterations(sol))
Number of iterations: 18

Vector initial guess (interpolated)

Initialization can also be provided with vectors / matrices to be interpolated along a given time grid. In this case the time steps must be given through an additional argument time, which can be a vector or line/column matrix. For the values to be interpolated both matrices and vectors of vectors are allowed, but the shape should be number of time steps x variable dimension. Simple vectors are also allowed for variables of dimension 1.

# initial guess as vector of points
+t_vec = LinRange(t0,tf,4)
+x_vec = [[0, 0], [-0.1, 0.3], [-0.15,0.4], [-0.3, 0.5]]
+u_vec = [0, -0.8,  -0.3, 0]
+
+sol = solve(ocp; init=(time=t_vec, state=x_vec, control=u_vec, variable=0.05), display=false)
+println("Number of iterations: ", iterations(sol))
Number of iterations: 14

Note: in the free final time case, the given time grid should be consistent with the initial guess provided for the final time (in the optimization variables).

Mixed initial guess

The constant, functional and vector initializations can be mixed, for instance as

# we can mix constant values with functions of time
+sol = solve(ocp; init=(state=[-0.2, 0.1], control=u, variable=0.05), display=false)
+println("Number of iterations: ", iterations(sol))
+
+# wa can mix every possibility
+sol = solve(ocp; init=(time=t_vec, state=x_vec, control=u, variable=0.05), display=false)
+println("Number of iterations: ", iterations(sol))
Number of iterations: 11
+Number of iterations: 11

Solution as initial guess (warm start)

Finally, we can use an existing solution to provide the initial guess. The dimensions of the state, control and optimization variable must coincide. This particular feature allows an easy implementation of discrete continuations.

# generate the initial solution
+sol_init = solve(ocp; display=false)
+
+# solve the problem using solution as initial guess
+sol = solve(ocp; init=sol_init, display=false)
+println("Number of iterations: ", iterations(sol))
Number of iterations: 0

Note that you can also manually pick and choose which data to reuse from a solution, by recovering the functions state(sol), control(sol) and the values variable(sol). For instance the following formulation is equivalent to the init=sol one.

# use a previous solution to initialise picking data
+sol = solve(ocp;
+    init = (
+        state    = state(sol),
+        control  = control(sol),
+        variable = variable(sol)
+    ),
+    display=false)
+println("Number of iterations: ", iterations(sol))
Number of iterations: 0
Interactions with an optimal control solution

Please check state, costate, control and variable to get data from the solution. The functions state, costate and control return functions of time and variable returns a vector.

Costate / multipliers

For the moment there is no option to provide an initial guess for the costate / multipliers.

diff --git a/.save/docs/build/manual-model.html b/.save/docs/build/manual-model.html new file mode 100644 index 00000000..e88a20f6 --- /dev/null +++ b/.save/docs/build/manual-model.html @@ -0,0 +1,232 @@ + +Problem characteristics · OptimalControl.jl

The optimal control problem object: structure and usage

In this manual, we'll first recall the main functionalities you can use when working with an optimal control problem (OCP). This includes essential operations like:

  • Solving an OCP: How to find the optimal solution for your defined problem.
  • Computing flows from an OCP: Understanding the dynamics and trajectories derived from the optimal solution.
  • Printing an OCP: How to display a summary of your problem's definition.

After covering these core functionalities, we'll delve into the structure of an OCP. Since an OCP is structured as a Model struct, we'll first explain how to access its underlying attributes, such as the problem's dynamics, costs, and constraints. Following this, we'll shift our focus to the simple properties inherent to an OCP, learning how to determine aspects like whether the problem:

  • Is autonomous: Does its dynamics depend explicitly on time?
  • Has a fixed or free initial/final time: Is the duration of the control problem predetermined or not?

Content


Main functionalities

Let's define a basic optimal control problem.

using OptimalControl
+
+t0 = 0
+tf = 1
+x0 = [-1, 0]
+
+ocp = @def begin
+    t ∈ [ t0, tf ], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    x(t0) == x0
+    x(tf) == [0, 0]
+    ẋ(t)  == [v(t), u(t)]
+    0.5∫( u(t)^2 ) → min
+end

To print it, simply:

ocp
Abstract definition:
+
+    t ∈ [t0, tf], time
+    x = ((q, v) ∈ R², state)
+    u ∈ R, control
+    x(t0) == x0
+    x(tf) == [0, 0]
+    ẋ(t) == [v(t), u(t)]
+    0.5 * ∫(u(t) ^ 2) → min
+
+The (autonomous) optimal control problem is of the form:
+
+    minimize  J(x, u) = ∫ f⁰(x(t), u(t)) dt, over [0, 1]
+
+    subject to
+
+        ẋ(t) = f(x(t), u(t)), t in [0, 1] a.e.,
+
+        ϕ₋ ≤ ϕ(x(0), x(1)) ≤ ϕ₊, 
+
+    where x(t) = (q(t), v(t)) ∈ R² and u(t) ∈ R.
+

We can now solve the problem (for more details, visit the solve manual):

using NLPModelsIpopt
+solve(ocp)
▫ This is OptimalControl version v1.1.7 running with: direct, adnlp, ipopt.
+
+▫ The optimal control problem is solved with CTDirect version v0.17.4.
+
+   ┌─ The NLP is modelled with ADNLPModels and solved with NLPModelsIpopt.
+   │
+   ├─ Number of time steps⋅: 250
+   └─ Discretisation scheme: midpoint
+
+▫ This is Ipopt version 3.14.19, running with linear solver MUMPS 5.8.2.
+
+Number of nonzeros in equality constraint Jacobian...:     1754
+Number of nonzeros in inequality constraint Jacobian.:        0
+Number of nonzeros in Lagrangian Hessian.............:      250
+
+Total number of variables............................:      752
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:        0
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:      504
+Total number of inequality constraints...............:        0
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:        0
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  5.0000000e-03 1.10e+00 2.90e-14   0.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  6.0000960e+00 2.22e-16 1.78e-15 -11.0 6.08e+00    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 1
+
+                                   (scaled)                 (unscaled)
+Objective...............:   6.0000960015360345e+00    6.0000960015360345e+00
+Dual infeasibility......:   1.7763568394002505e-15    1.7763568394002505e-15
+Constraint violation....:   2.2204460492503131e-16    2.2204460492503131e-16
+Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
+Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
+Overall NLP error.......:   1.7763568394002505e-15    1.7763568394002505e-15
+
+
+Number of objective function evaluations             = 2
+Number of objective gradient evaluations             = 2
+Number of equality constraint evaluations            = 2
+Number of inequality constraint evaluations          = 0
+Number of equality constraint Jacobian evaluations   = 2
+Number of inequality constraint Jacobian evaluations = 0
+Number of Lagrangian Hessian evaluations             = 1
+Total seconds in IPOPT                               = 1.323
+
+EXIT: Optimal Solution Found.

You can also compute flows (for more details, see the flow manual) from the optimal control problem, providing a control law in feedback form. The pseudo-Hamiltonian of this problem is

\[ H(x, p, u) = p_q\, v + p_v\, u + p^0 u^2 /2,\]

where $p^0 = -1$ since we are in the normal case. From the Pontryagin maximum principle, the maximising control is given in feedback form by

\[u(x, p) = p_v\]

since $\partial^2_{uu} H = p^0 = - 1 < 0$.

u = (x, p) -> p[2]          # control law in feedback form
+
+using OrdinaryDiffEq        # needed to import numerical integrators
+f = Flow(ocp, u)            # compute the Hamiltonian flow function
+
+p0 = [12, 6]                # initial covector solution
+xf, pf = f(t0, x0, p0, tf)  # flow from (x0, p0) at time t0 to tf
+xf                          # should be (0, 0)
2-element Vector{Float64}:
+ -1.6443649131320877e-15
+  6.0194942550307896e-15
Note

A more advanced feature allows for the discretization of the optimal control problem. From the discretized version, you can obtain a Nonlinear Programming problem (or optimization problem) and solve it using any appropriate NLP solver. For more details, visit the NLP manipulation tutorial.

Model struct

The optimal control problem ocp is a Model struct.

CTModels.ModelType
struct Model{TD<:CTModels.TimeDependence, TimesModelType<:CTModels.AbstractTimesModel, StateModelType<:CTModels.AbstractStateModel, ControlModelType<:CTModels.AbstractControlModel, VariableModelType<:CTModels.AbstractVariableModel, DynamicsModelType<:Function, ObjectiveModelType<:CTModels.AbstractObjectiveModel, ConstraintsModelType<:CTModels.AbstractConstraintsModel, BuildExaModelType<:Union{Nothing, Function}} <: CTModels.AbstractModel

Fields

  • times::CTModels.AbstractTimesModel

  • state::CTModels.AbstractStateModel

  • control::CTModels.AbstractControlModel

  • variable::CTModels.AbstractVariableModel

  • dynamics::Function

  • objective::CTModels.AbstractObjectiveModel

  • constraints::CTModels.AbstractConstraintsModel

  • definition::Expr

  • build_examodel::Union{Nothing, Function}

source

Each field can be accessed directly (ocp.times, etc) or by a getter:

For instance, we can retrieve the times and definition values.

times(ocp)
CTModels.TimesModel{CTModels.FixedTimeModel{Int64}, CTModels.FixedTimeModel{Int64}}(CTModels.FixedTimeModel{Int64}(0, "0"), CTModels.FixedTimeModel{Int64}(1, "1"), "t")
definition(ocp)
quote
+    #= manual-model.md:40 =#
+    (t ∈ [t0, tf], time)
+    #= manual-model.md:41 =#
+    x = ((q, v) ∈ R², state)
+    #= manual-model.md:42 =#
+    (u ∈ R, control)
+    #= manual-model.md:43 =#
+    x(t0) == x0
+    #= manual-model.md:44 =#
+    x(tf) == [0, 0]
+    #= manual-model.md:45 =#
+    ẋ(t) == [v(t), u(t)]
+    #= manual-model.md:46 =#
+    0.5 * ∫(u(t) ^ 2) → min
+end
Note

We refer to the CTModels documentation for more details about this struct and its fields.

Attributes and properties

Numerous attributes can be retrieved. To illustrate this, a more complex optimal control problem is defined.

ocp = @def begin
+    v = (w, tf) ∈ R²,   variable
+    s ∈ [0, tf],        time
+    q = (x, y) ∈ R²,    state
+    u ∈ R,              control
+    0 ≤ tf ≤ 2,         (1)
+    u(s) ≥ 0,           (cons_u)
+    x(s) + u(s) ≤ 10,   (cons_mixed)
+    w == 0
+    x(0) == -1
+    y(0) - tf == 0,     (cons_bound)
+    q(tf) == [0, 0]
+    q̇(s) == [y(s)+w, u(s)]
+    0.5∫( u(s)^2 ) → min
+end

Control, state and variable

You can access the name of the control, state, and variable, along with the names of their components and their dimensions.

using DataFrames
+data = DataFrame(
+    Data=Vector{Symbol}(),
+    Name=Vector{String}(),
+    Components=Vector{Vector{String}}(),
+    Dimension=Vector{Int}(),
+)
+
+# control
+push!(data,(
+    :control,
+    control_name(ocp),
+    control_components(ocp),
+    control_dimension(ocp),
+))
+
+# state
+push!(data,(
+    :state,
+    state_name(ocp),
+    state_components(ocp),
+    state_dimension(ocp),
+))
+
+# variable
+push!(data,(
+    :variable,
+    variable_name(ocp),
+    variable_components(ocp),
+    variable_dimension(ocp),
+))
3×4 DataFrame
RowDataNameComponentsDimension
SymbolStringArray…Int64
1controlu["u"]1
2stateq["x", "y"]2
3variablev["w", "tf"]2
Note

The names of the components are used for instance when plotting the solution. See the plot manual.

Constraints

You can retrieve labelled constraints with the constraint function. The constraint(ocp, label) method returns a tuple of the form (type, f, lb, ub). The signature of the function f depends on the symbol type. For :boundary and :variable constraints, the signature is f(x0, xf, v) where x0 is the initial state, xf the final state and v the variable. For other constraints, the signature is f(t, x, u, v). Here, t represents time, x the state, u the control, and v the variable.

(type, f, lb, ub) = constraint(ocp, :eq1)
+println("type: ", type)
+x0 = [0, 1]
+xf = [2, 3]
+v  = [1, 4]
+println("val: ", f(x0, xf, v))
+println("lb: ", lb)
+println("ub: ", ub)
type: variable
+val: 4
+lb: 0.0
+ub: 2.0
(type, f, lb, ub) = constraint(ocp, :cons_bound)
+println("type: ", type)
+println("val: ", f(x0, xf, v))
+println("lb: ", lb)
+println("ub: ", ub)
type: boundary
+val: -3.0
+lb: 0.0
+ub: 0.0
(type, f, lb, ub) = constraint(ocp, :cons_u)
+println("type: ", type)
+t = 0
+x = [1, 2]
+u = 3
+println("val: ", f(t, x, u, v))
+println("lb: ", lb)
+println("ub: ", ub)
type: control
+val: 3
+lb: 0.0
+ub: Inf
(type, f, lb, ub) = constraint(ocp, :cons_mixed)
+println("type: ", type)
+println("val: ", f(t, x, u, v))
+println("lb: ", lb)
+println("ub: ", ub)
type: path
+val: 4.0
+lb: -Inf
+ub: 10.0
Note

To get the dual variable (or Lagrange multiplier) associated to the constraint, use the dual method.

Dynamics

The dynamics stored in ocp are an in-place function (the first argument is mutated upon call) of the form f!(dx, t, x, u, v). Here, t represents time, x the state, u the control, and v the variable, with dx being the output value.

f! = dynamics(ocp)
+t = 0
+x = [0., 1]
+u = 2
+v = [1, 4]
+dx = similar(x)
+f!(dx, t, x, u, v)
+dx
2-element Vector{Float64}:
+ 2.0
+ 2.0

Criterion and objective

The criterion can be :min or :max.

criterion(ocp)
:min

The objective function is either in Mayer, Lagrange or Bolza form.

  • Mayer:

\[g(x(t_0), x(t_f), v) \to \min\]

  • Lagrange:

\[\int_{t_0}^{t_f} f^0(t, x(t), u(t), v)\, \mathrm{d}t \to \min\]

  • Bolza:

\[g(x(t_0), x(t_f), v) + \int_{t_0}^{t_f} f^0(t, x(t), u(t), v)\, \mathrm{d}t \to \min\]

The objective of problem ocp is 0.5∫( u(t)^2 ) → min, hence, in Lagrange form. The signature of the Mayer part of the objective is g(x0, xf, v) but in our case, the method mayer will return an error.

julia> g = mayer(ocp)ERROR: UnauthorizedCall: This ocp has no Mayer objective.

The signature of the Lagrange part of the objective is f⁰(t, x, u, v).

f⁰ = lagrange(ocp)
+f⁰(t, x, u, v)
2.0

To avoid having to capture exceptions, you can check the form of the objective:

println("Mayer: ", has_mayer_cost(ocp))
+println("Lagrange: ", has_lagrange_cost(ocp))
Mayer: false
+Lagrange: true

Times

The time variable is not named t but s in ocp.

time_name(ocp)
"s"

The initial time is 0.

initial_time(ocp)
0

Since the initial time has the value 0, its name is string(0).

initial_time_name(ocp)
"0"

In contrast, the final time is tf, since in ocp we have s ∈ [0, tf].

final_time_name(ocp)
"tf"

To get the value of the final time, since it is part of the variable v = (w, tf) of ocp, we need to provide a variable to the function final_time.

v = [1, 2]
+tf = final_time(ocp, v)
2
julia> final_time(ocp)ERROR: UnauthorizedCall: You cannot get the final time with this function.

To check whether the initial or final time is fixed or free (i.e., part of the variable), you can use the following functions:

println("Fixed initial time: ", has_fixed_initial_time(ocp))
+println("Fixed final time: ", has_fixed_final_time(ocp))
Fixed initial time: true
+Fixed final time: false

Or, similarly:

println("Free initial time: ", has_free_initial_time(ocp))
+println("Free final time: ", has_free_final_time(ocp))
Free initial time: false
+Free final time: true

Time dependence

Optimal control problems can be autonomous or non-autonomous. In an autonomous problem, neither the dynamics nor the Lagrange cost explicitly depends on the time variable.

The following problem is autonomous.

ocp = @def begin
+    t ∈ [ 0, 1 ], time
+    x ∈ R, state
+    u ∈ R, control
+    ẋ(t)  == u(t)                       # no explicit dependence on t
+    x(1) + 0.5∫( u(t)^2 ) → min         # no explicit dependence on t
+end
+is_autonomous(ocp)
true

The following problem is non-autonomous since the dynamics depends on t.

ocp = @def begin
+    t ∈ [ 0, 1 ], time
+    x ∈ R, state
+    u ∈ R, control
+    ẋ(t)  == u(t) + t                   # explicit dependence on t
+    x(1) + 0.5∫( u(t)^2 ) → min
+end
+is_autonomous(ocp)
false

Finally, this last problem is non-autonomous because the Lagrange part of the cost depends on t.

ocp = @def begin
+    t ∈ [ 0, 1 ], time
+    x ∈ R, state
+    u ∈ R, control
+    ẋ(t)  == u(t)
+    x(1) + 0.5∫( t + u(t)^2 ) → min     # explicit dependence on t
+end
+is_autonomous(ocp)
false
diff --git a/.save/docs/build/manual-plot-0604bdc7.svg b/.save/docs/build/manual-plot-0604bdc7.svg new file mode 100644 index 00000000..e76ce18f --- /dev/null +++ b/.save/docs/build/manual-plot-0604bdc7.svg @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-074d1bf5.svg b/.save/docs/build/manual-plot-074d1bf5.svg new file mode 100644 index 00000000..c91d187c --- /dev/null +++ b/.save/docs/build/manual-plot-074d1bf5.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-131267e2.svg b/.save/docs/build/manual-plot-131267e2.svg new file mode 100644 index 00000000..f9aec66e --- /dev/null +++ b/.save/docs/build/manual-plot-131267e2.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-1693a92e.svg b/.save/docs/build/manual-plot-1693a92e.svg new file mode 100644 index 00000000..bb9fba48 --- /dev/null +++ b/.save/docs/build/manual-plot-1693a92e.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-18cbe3d1.svg b/.save/docs/build/manual-plot-18cbe3d1.svg new file mode 100644 index 00000000..226fd7bc --- /dev/null +++ b/.save/docs/build/manual-plot-18cbe3d1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-40553d99.svg b/.save/docs/build/manual-plot-40553d99.svg new file mode 100644 index 00000000..11620ebc --- /dev/null +++ b/.save/docs/build/manual-plot-40553d99.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-4515ffa9.svg b/.save/docs/build/manual-plot-4515ffa9.svg new file mode 100644 index 00000000..02ebe7b7 --- /dev/null +++ b/.save/docs/build/manual-plot-4515ffa9.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-572fc9de.svg b/.save/docs/build/manual-plot-572fc9de.svg new file mode 100644 index 00000000..e350fc54 --- /dev/null +++ b/.save/docs/build/manual-plot-572fc9de.svg @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-832c48be.svg b/.save/docs/build/manual-plot-832c48be.svg new file mode 100644 index 00000000..5f32439c --- /dev/null +++ b/.save/docs/build/manual-plot-832c48be.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-87a9d8d8.svg b/.save/docs/build/manual-plot-87a9d8d8.svg new file mode 100644 index 00000000..e715a1f7 --- /dev/null +++ b/.save/docs/build/manual-plot-87a9d8d8.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-93dd69ff.svg b/.save/docs/build/manual-plot-93dd69ff.svg new file mode 100644 index 00000000..289d9072 --- /dev/null +++ b/.save/docs/build/manual-plot-93dd69ff.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-9dd8231f.svg b/.save/docs/build/manual-plot-9dd8231f.svg new file mode 100644 index 00000000..1b6c4d2c --- /dev/null +++ b/.save/docs/build/manual-plot-9dd8231f.svg @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-9f13f6b8.svg b/.save/docs/build/manual-plot-9f13f6b8.svg new file mode 100644 index 00000000..0c50f48f --- /dev/null +++ b/.save/docs/build/manual-plot-9f13f6b8.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-9f661317.svg b/.save/docs/build/manual-plot-9f661317.svg new file mode 100644 index 00000000..f25a6f66 --- /dev/null +++ b/.save/docs/build/manual-plot-9f661317.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-a3ec7a51.svg b/.save/docs/build/manual-plot-a3ec7a51.svg new file mode 100644 index 00000000..c1d86dfd --- /dev/null +++ b/.save/docs/build/manual-plot-a3ec7a51.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-a5612bd4.svg b/.save/docs/build/manual-plot-a5612bd4.svg new file mode 100644 index 00000000..6ddbc216 --- /dev/null +++ b/.save/docs/build/manual-plot-a5612bd4.svg @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-bd51f12c.svg b/.save/docs/build/manual-plot-bd51f12c.svg new file mode 100644 index 00000000..821c0d64 --- /dev/null +++ b/.save/docs/build/manual-plot-bd51f12c.svg @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-c7063e9e.svg b/.save/docs/build/manual-plot-c7063e9e.svg new file mode 100644 index 00000000..6f3105b8 --- /dev/null +++ b/.save/docs/build/manual-plot-c7063e9e.svg @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-d48d6eb5.svg b/.save/docs/build/manual-plot-d48d6eb5.svg new file mode 100644 index 00000000..cceee302 --- /dev/null +++ b/.save/docs/build/manual-plot-d48d6eb5.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-def718af.svg b/.save/docs/build/manual-plot-def718af.svg new file mode 100644 index 00000000..9b723990 --- /dev/null +++ b/.save/docs/build/manual-plot-def718af.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-dfe6ee03.svg b/.save/docs/build/manual-plot-dfe6ee03.svg new file mode 100644 index 00000000..f989cee1 --- /dev/null +++ b/.save/docs/build/manual-plot-dfe6ee03.svg @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-e867ef4c.svg b/.save/docs/build/manual-plot-e867ef4c.svg new file mode 100644 index 00000000..6a627390 --- /dev/null +++ b/.save/docs/build/manual-plot-e867ef4c.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-ea47f22c.svg b/.save/docs/build/manual-plot-ea47f22c.svg new file mode 100644 index 00000000..1fe44ef5 --- /dev/null +++ b/.save/docs/build/manual-plot-ea47f22c.svg @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-f4d48806.svg b/.save/docs/build/manual-plot-f4d48806.svg new file mode 100644 index 00000000..1f46dfa7 --- /dev/null +++ b/.save/docs/build/manual-plot-f4d48806.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot-f9106d4b.svg b/.save/docs/build/manual-plot-f9106d4b.svg new file mode 100644 index 00000000..4e97bd86 --- /dev/null +++ b/.save/docs/build/manual-plot-f9106d4b.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-plot.html b/.save/docs/build/manual-plot.html new file mode 100644 index 00000000..9ca884a7 --- /dev/null +++ b/.save/docs/build/manual-plot.html @@ -0,0 +1,412 @@ + +Plot a solution · OptimalControl.jl

How to plot a solution

In this tutorial, we explain the different options for plotting the solution of an optimal control problem using the plot and plot! functions, which are extensions of the Plots.jl package. Use plot to create a new plot object, and plot! to add to an existing one:

plot(args...; kw...)           # creates a new Plot, and set it to be the `current`
+plot!(args...; kw...)          # modifies Plot `current()`
+plot!(plt, args...; kw...)     # modifies Plot `plt`

More precisely, the signature of plot, to plot a solution, is as follows.

RecipesBase.plotMethod
plot(
+    sol::Solution,
+    description::Symbol...;
+    layout,
+    control,
+    time,
+    state_style,
+    state_bounds_style,
+    control_style,
+    control_bounds_style,
+    costate_style,
+    time_style,
+    path_style,
+    path_bounds_style,
+    dual_style,
+    size,
+    color,
+    kwargs...
+) -> Plots.Plot
+

Plot the components of an optimal control solution.

This is the main user-facing function to visualise the solution of an optimal control problem solved with the control-toolbox ecosystem.

It generates a set of subplots showing the evolution of the state, control, costate, path constraints, and dual variables over time, depending on the problem and the user’s choices.

Arguments

  • sol::CTModels.Solution: The optimal control solution to visualise.
  • description::Symbol...: A variable number of symbols indicating which components to include in the plot. Common values include:
    • :state – plot the state.
    • :costate – plot the costate (adjoint).
    • :control – plot the control.
    • :path – plot the path constraints.
    • :dual – plot the dual variables (or Lagrange multipliers) associated with path constraints.

If no symbols are provided, a default set is used based on the problem and styles.

Keyword Arguments (Optional)

  • layout::Symbol = :group: Specifies how to arrange plots.

    • :group: Fewer plots, grouping similar variables together (e.g., all states in one subplot).
    • :split: One plot per variable component, stacked in a layout.
  • control::Symbol = :components: Defines how to represent control inputs.

    • :components: One curve per control component.
    • :norm: Single curve showing the Euclidean norm ‖u(t)‖.
    • :all: Plot both components and norm.
  • time::Symbol = :default: Time normalisation for plots.

    • :default: Real time scale.
    • :normalize or :normalise: Normalised to the interval [0, 1].
  • color: set the color of the all the graphs.

Style Options (Optional)

All style-related keyword arguments can be either a NamedTuple of plotting attributes or the Symbol :none referring to not plot the associated element. These allow you to customise color, line style, markers, etc.

  • time_style: Style for vertical lines at initial and final times.
  • state_style: Style for state components.
  • costate_style: Style for costate components.
  • control_style: Style for control components.
  • path_style: Style for path constraint values.
  • dual_style: Style for dual variables.

Bounds Decorations (Optional)

Use these options to customise bounds on the plots if applicable and defined in the model. Set to :none to hide.

  • state_bounds_style: Style for state bounds.
  • control_bounds_style: Style for control bounds.
  • path_bounds_style: Style for path constraint bounds.

Returns

  • A Plots.Plot object, which can be displayed, saved, or further customised.

Example

# basic plot
+julia> plot(sol)
+
+# plot only the state and control
+julia> plot(sol, :state, :control)
+
+# customise layout and styles, no costate
+julia> plot(sol;
+       layout = :group,
+       control = :all,
+       state_style = (color=:blue, linestyle=:solid),
+       control_style = (color=:red, linestyle=:dash),
+       costate_style = :none)       
source
RecipesBase.plot!Method
plot!(
+    sol::Solution,
+    description::Symbol...;
+    layout,
+    control,
+    time,
+    state_style,
+    state_bounds_style,
+    control_style,
+    control_bounds_style,
+    costate_style,
+    time_style,
+    path_style,
+    path_bounds_style,
+    dual_style,
+    color,
+    kwargs...
+) -> Any
+

Modify Plot current() with the optimal control solution sol.

See plot for full behavior and keyword arguments.

source
RecipesBase.plot!Method
plot!(
+    p::Plots.Plot,
+    sol::Solution,
+    description::Symbol...;
+    layout,
+    control,
+    time,
+    state_style,
+    state_bounds_style,
+    control_style,
+    control_bounds_style,
+    costate_style,
+    time_style,
+    path_style,
+    path_bounds_style,
+    dual_style,
+    color,
+    kwargs...
+) -> Plots.Plot
+

Modify Plot p with the optimal control solution sol.

See plot for full behavior and keyword arguments.

source

Argument Overview

The table below summarizes the main plotting arguments and links to the corresponding documentation sections for detailed explanations:

SectionRelevant Arguments
Basic conceptssize, state_style, costate_style, control_style, time_style, kwargs...
Split vs. group layoutlayout
Plotting control normcontrol
Normalised timetime
Constraintsstate_bounds_style, control_bounds_style, path_style, path_bounds_style, dual_style
What to plotdescription...

You can plot solutions obtained from the solve function or from a flow computed using an optimal control problem and a control law. See the Basic Concepts and From Flow function sections for details.

To overlay a new plot on an existing one, use the plot! function (see Add a plot).

If you prefer full control over the visualisation, you can extract the state, costate, and control to create your own plots. Refer to the Custom plot section for guidance. You can also access the subplots.

The problem and the solution

Let us start by importing the packages needed to define and solve the problem.

using OptimalControl
+using NLPModelsIpopt

We consider the simple optimal control problem from the basic example page.

t0 = 0          # initial time
+tf = 1          # final time
+x0 = [-1, 0]    # initial condition
+xf = [ 0, 0]    # final condition
+
+ocp = @def begin
+    t ∈ [t0, tf], time
+    x ∈ R², state
+    u ∈ R, control
+    x(t0) == x0
+    x(tf) == xf
+    ẋ(t) == [x₂(t), u(t)]
+    ∫( 0.5u(t)^2 ) → min
+end
+
+sol = solve(ocp, display=false)

Basic concepts

The simplest way to plot the solution is to use the plot function with the solution as the only argument.

Caveat

The plot function for a solution of an optimal control problem extends the plot function from Plots.jl. Therefore, you need to import this package in order to plot a solution.

using Plots
+plot(sol)
Example block output

In the figure above, we have a grid of subplots: the left column displays the state component trajectories, the right column shows the costate component trajectories, and the bottom row contains the control component trajectory.

As in Plots.jl, input data is passed positionally (for example, sol in plot(sol)), and attributes are passed as keyword arguments (for example, plot(sol; color = :blue)). After executing using Plots in the REPL, you can use the plotattr() function to print a list of all available attributes for series, plots, subplots, or axes.

# Valid Operations
+plotattr(:Plot)
+plotattr(:Series)
+plotattr(:Subplot)
+plotattr(:Axis)

Once you have the list of attributes, you can either use the aliases of a specific attribute or inspect a specific attribute to display its aliases and description.

julia> plotattr("color") # Specific Attribute Example:seriescolor
+
+The base color for this series. `:auto` (the default) will select a color from the subplot's `color_palette`, based on the order it was added to the subplot. Also describes the colormap for surfaces.
+
+Aliases: (:c, :cmap, :color, :colormap, :colour, :seriescolors).
+
+Type: Union{Integer, Symbol, ColorSchemes.ColorScheme, Colorant}.
+
+`Series` attribute, defaults to `auto`.
Warning

Some attributes have different default values in OptimalControl.jl compared to Plots.jl. For instance, the default figure size is 600x400 in Plots.jl, while in OptimalControl.jl, it depends on the number of states and controls.

You can also visit the Plot documentation online to get the descriptions of the attributes:

  • To pass attributes to the plot, see the attributes plot documentation. For instance, you can specify the size of the figure.
List of plot attributes.
background_color
+background_color_outside
+display_type
+dpi
+extra_kwargs
+extra_plot_kwargs
+fontfamily
+foreground_color
+html_output_format
+inset_subplots
+layout
+link
+overwrite_figure
+plot_title
+plot_titlefontcolor
+plot_titlefontfamily
+plot_titlefonthalign
+plot_titlefontrotation
+plot_titlefontsize
+plot_titlefontvalign
+plot_titleindex
+plot_titlelocation
+plot_titlevspan
+pos
+show
+size
+tex_output_standalone
+thickness_scaling
+warn_on_unsupported
+window_title
  • You can pass attributes to all subplots at once by referring to the attributes subplot documentation. For example, you can specify the location of the legends.
List of subplot attributes.
annotationcolor
+annotationfontfamily
+annotationfontsize
+annotationhalign
+annotationrotation
+annotations
+annotationvalign
+aspect_ratio
+background_color_inside
+background_color_subplot
+bottom_margin
+camera
+clims
+color_palette
+colorbar
+colorbar_continuous_values
+colorbar_discrete_values
+colorbar_fontfamily
+colorbar_formatter
+colorbar_scale
+colorbar_tickfontcolor
+colorbar_tickfontfamily
+colorbar_tickfonthalign
+colorbar_tickfontrotation
+colorbar_tickfontsize
+colorbar_tickfontvalign
+colorbar_ticks
+colorbar_title
+colorbar_title_location
+colorbar_titlefontcolor
+colorbar_titlefontfamily
+colorbar_titlefonthalign
+colorbar_titlefontrotation
+colorbar_titlefontsize
+colorbar_titlefontvalign
+extra_kwargs
+fontfamily_subplot
+foreground_color_subplot
+foreground_color_title
+framestyle
+left_margin
+legend_background_color
+legend_column
+legend_font
+legend_font_color
+legend_font_family
+legend_font_halign
+legend_font_pointsize
+legend_font_rotation
+legend_font_valign
+legend_foreground_color
+legend_position
+legend_title
+legend_title_font
+legend_title_font_color
+legend_title_font_family
+legend_title_font_halign
+legend_title_font_pointsize
+legend_title_font_rotation
+legend_title_font_valign
+margin
+projection
+projection_type
+right_margin
+subplot_index
+title
+titlefontcolor
+titlefontfamily
+titlefonthalign
+titlefontrotation
+titlefontsize
+titlefontvalign
+titlelocation
+top_margin
  • Similarly, you can pass axis attributes to all subplots. See the attributes axis documentation. For example, you can remove the grid from every subplot.
List of axis attributes.
discrete_values
+draw_arrow
+flip
+foreground_color_axis
+foreground_color_border
+foreground_color_grid
+foreground_color_guide
+foreground_color_minor_grid
+foreground_color_text
+formatter
+grid
+gridalpha
+gridlinewidth
+gridstyle
+guide
+guide_position
+guidefontcolor
+guidefontfamily
+guidefonthalign
+guidefontrotation
+guidefontsize
+guidefontvalign
+lims
+link
+minorgrid
+minorgridalpha
+minorgridlinewidth
+minorgridstyle
+minorticks
+mirror
+rotation
+scale
+showaxis
+tick_direction
+tickfontcolor
+tickfontfamily
+tickfonthalign
+tickfontrotation
+tickfontsize
+tickfontvalign
+ticks
+unit
+unitformat
+widen
  • Finally, you can pass series attributes to all subplots. Refer to the attributes series documentation. For instance, you can set the width of the curves using linewidth.
List of series attributes.
arrow
+bar_edges
+bar_position
+bar_width
+bins
+colorbar_entry
+connections
+contour_labels
+contours
+extra_kwargs
+fill_z
+fillalpha
+fillcolor
+fillrange
+fillstyle
+group
+hover
+label
+levels
+line_z
+linealpha
+linecolor
+linestyle
+linewidth
+marker_z
+markeralpha
+markercolor
+markershape
+markersize
+markerstrokealpha
+markerstrokecolor
+markerstrokestyle
+markerstrokewidth
+normalize
+orientation
+permute
+primary
+quiver
+ribbon
+series_annotations
+seriesalpha
+seriescolor
+seriestype
+show_empty_bins
+smooth
+stride
+subplot
+weights
+x
+xerror
+y
+yerror
+z
+z_order
+zerror
+
plot(sol, size=(700, 450), label="sol", legend=:bottomright, grid=false, linewidth=2)
Example block output

To specify series attributes for a specific group of subplots (state, costate or control), you can use the optional keyword arguments state_style, costate_style, and control_style, which correspond to the state, costate, and control trajectories, respectively.

plot(sol;
+     state_style   = (color=:blue,),                  # style: state trajectory
+     costate_style = (color=:black, linestyle=:dash), # style: costate trajectory
+     control_style = (color=:red, linewidth=2))       # style: control trajectory
Example block output

Vertical axes at the initial and final times are automatically plotted. The style can me modified with the time_style keyword argument. Additionally, you can choose not to display for instance the state and the costate trajectories by setting their styles to :none. You can set to :none any style.

plot(sol;
+     state_style    = :none,             # do not plot the state
+     costate_style  = :none,             # do not plot the costate
+     control_style  = (color = :red,),   # plot the control in red
+     time_style     = (color = :green,)) # vertical axes at initial and final times in green
Example block output

To select what to display, you can also use the description argument by providing a list of symbols such as :state, :costate, and :control.

plot(sol, :state, :control)  # plot the state and the control
Example block output
Select what to plot

For more details on how to choose what to plot, see the What to plot section.

From Flow function

The previous solution of the optimal control problem was obtained using the solve function. If you prefer using an indirect shooting method and solving shooting equations, you may also want to plot the associated solution. To do this, you need to use the Flow function to reconstruct the solution. See the manual on how to compute flows for more details. In our case, you must provide the maximizing control $(x, p) \mapsto p_2$ along with the optimal control problem. For an introduction to simple indirect shooting, see the indirect simple shooting tutorial for an example.

Interactions with an optimal control solution

Please check state, costate, control, and variable to retrieve data from the solution. The functions state, costate, and control return functions of time, while variable returns a vector.

using OrdinaryDiffEq
+
+p  = costate(sol)                # costate as a function of time
+p0 = p(t0)                       # costate solution at the initial time
+f  = Flow(ocp, (x, p) -> p[2])   # flow from an ocp and a control law in feedback form
+
+sol_flow = f((t0, tf), x0, p0)   # compute the solution
+plot(sol_flow)                   # plot the solution from a flow
Example block output

We may notice that the time grid contains very few points. This is evident from the subplot of $x_2$, or by retrieving the time grid directly from the solution.

time_grid(sol_flow)
7-element Vector{Float64}:
+ 0.0
+ 0.0024074089372624107
+ 0.016934664883714826
+ 0.07928177602625876
+ 0.3116873730582585
+ 0.943236144276608
+ 1.0

To improve visualisation (without changing the accuracy), you can provide a finer grid.

fine_grid = range(t0, tf, 100)
+sol_flow = f((t0, tf), x0, p0; saveat=fine_grid)
+plot(sol_flow)
Example block output

Split vs. group layout

If you prefer to get a more compact figure, you can use the layout optional keyword argument with :group value. It will group the state, costate and control trajectories in one subplot for each.

plot(sol; layout=:group)
Example block output

The default layout value is :split which corresponds to the grid of subplots presented above.

plot(sol; layout=:split)
Example block output

Add a plot

You can plot the solution of a second optimal control problem on the same figure if it has the same number of states, costates and controls. For instance, consider the same optimal control problem but with a different initial condition.

ocp = @def begin
+    t ∈ [t0, tf], time
+    x ∈ R², state
+    u ∈ R, control
+    x(t0) == [-0.5, -0.5]
+    x(tf) == xf
+    ẋ(t) == [x₂(t), u(t)]
+    ∫( 0.5u(t)^2 ) → min
+end
+sol2 = solve(ocp; display=false)

We first plot the solution of the first optimal control problem, then, we plot the solution of the second optimal control problem on the same figure, but with dashed lines.

plt = plot(sol; label="sol1", size=(700, 500))
+plot!(plt, sol2; label="sol2", linestyle=:dash)
Example block output

You can also, implicitly, use the current plot.

plot(sol; label="sol1", size=(700, 500))
+plot!(sol2; label="sol2", linestyle=:dash)
Example block output

Plotting the control norm

For some problem, it is interesting to plot the (Euclidean) norm of the control. You can do it by using the control optional keyword argument with :norm value.

plot(sol; control=:norm, size=(800, 300), layout=:group)
Example block output

The default value is :components.

plot(sol; control=:components, size=(800, 300), layout=:group)
Example block output

You can also plot the control and its norm.

plot(sol; control=:all, layout=:group)
Example block output

Custom plot and subplots

You can, of course, create your own plots by extracting the state, costate, and control from the optimal control solution. For instance, let us plot the norm of the control.

using LinearAlgebra
+t = time_grid(sol)
+u = control(sol)
+plot(t, norm∘u; label="‖u‖", xlabel="t")
Example block output

You can also get access to the subplots. The order is as follows: state, costate, control, path constraints (if any) and their dual variables.

plt = plot(sol)
+plot(plt[1]) # x₁
Example block output
plt = plot(sol)
+plot(plt[2]) # x₂
Example block output
plt = plot(sol)
+plot(plt[3]) # p₁
Example block output
plot(plt[4]) # p₂
Example block output
plot(plt[5]) # u
Example block output

Normalised time

We consider a LQR example and solve the problem for different values of the final time tf. Then, we plot the solutions on the same figure using a normalised time $s = (t - t_0) / (t_f - t_0)$, enabled by the keyword argument time = :normalize (or :normalise) in the plot function.

# definition of the problem, parameterised by the final time
+function lqr(tf)
+
+    ocp = @def begin
+        t ∈ [0, tf], time
+        x ∈ R², state
+        u ∈ R, control
+        x(0) == [0, 1]
+        ẋ(t) == [x₂(t), - x₁(t) + u(t)]
+        ∫( 0.5(x₁(t)^2 + x₂(t)^2 + u(t)^2) ) → min
+    end
+
+    return ocp
+end
+
+# solve the problems and store them
+solutions = []
+tfs = [3, 5, 30]
+for tf ∈ tfs
+    solution = solve(lqr(tf); display=false)
+    push!(solutions, solution)
+end
+
+# create plots
+plt = plot()
+for (tf, sol) ∈ zip(tfs, solutions)
+    plot!(plt, sol; time=:normalize, label="tf = $tf", xlabel="s")
+end
+
+# make a custom plot: keep only state and control
+px1 = plot(plt[1]; legend=false) # x₁
+px2 = plot(plt[2]; legend=true)  # x₂
+pu  = plot(plt[5]; legend=false) # u
+
+using Plots.PlotMeasures # for leftmargin, bottommargin
+plot(px1, px2, pu; layout=(1, 3), size=(800, 300), leftmargin=5mm, bottommargin=5mm)
Example block output

Constraints

We define an optimal control problem with constraints, solve it and plot the solution.

ocp = @def begin
+    tf ∈ R,          variable
+    t ∈ [0, tf],     time
+    x = (q, v) ∈ R², state
+    u ∈ R,           control
+    tf ≥ 0
+    -1 ≤ u(t) ≤ 1
+    q(0)  == -1
+    v(0)  == 0
+    q(tf) == 0
+    v(tf) == 0
+    1 ≤ v(t)+1 ≤ 1.8, (1)
+    ẋ(t) == [v(t), u(t)]
+    tf → min
+end
+sol = solve(ocp)
+plot(sol)
Example block output

On the plot, you can see the lower and upper bounds of the path constraint. Additionally, the dual variable associated with the path constraint is displayed alongside it.

You can customise the plot styles. For style options related to the state, costate, and control, refer to the Basic Concepts section.

plot(sol;
+     state_bounds_style = (linestyle = :dash,),
+     control_bounds_style = (linestyle = :dash,),
+     path_style = (color = :green,),
+     path_bounds_style = (linestyle = :dash,),
+     dual_style = (color = :red,),
+     time_style = :none, # do not plot axes at t0 and tf
+)
Example block output

What to plot

You can choose what to plot using the description argument. To plot only one subgroup:

plot(sol, :state)   # plot only the state
+plot(sol, :costate) # plot only the costate
+plot(sol, :control) # plot only the control
+plot(sol, :path)    # plot only the path constraint
+plot(sol, :dual)    # plot only the path constraint dual variable

You can combine elements to plot exactly what you need:

plot(sol, :state, :control, :path)
Example block output

Similarly, you can choose what not to plot passing :none to the corresponding style.

plot(sol; state_style=:none)   # do not plot the state
+plot(sol; costate_style=:none) # do not plot the costate
+plot(sol; control_style=:none) # do not plot the control
+plot(sol; path_style=:none)    # do not plot the path constraint
+plot(sol; dual_style=:none)    # do not plot the path constraint dual variable

For instance, let's plot everything except the dual variable associated with the path constraint.

plot(sol; dual_style=:none)
Example block output
diff --git a/.save/docs/build/manual-solution-32912690.svg b/.save/docs/build/manual-solution-32912690.svg new file mode 100644 index 00000000..7375cd0a --- /dev/null +++ b/.save/docs/build/manual-solution-32912690.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-solution-698e93c0.svg b/.save/docs/build/manual-solution-698e93c0.svg new file mode 100644 index 00000000..ea76ea5f --- /dev/null +++ b/.save/docs/build/manual-solution-698e93c0.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-solution-b2fed91d.svg b/.save/docs/build/manual-solution-b2fed91d.svg new file mode 100644 index 00000000..9ccce51a --- /dev/null +++ b/.save/docs/build/manual-solution-b2fed91d.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/build/manual-solution.html b/.save/docs/build/manual-solution.html new file mode 100644 index 00000000..ac888647 --- /dev/null +++ b/.save/docs/build/manual-solution.html @@ -0,0 +1,135 @@ + +Solution characteristics · OptimalControl.jl

The optimal control solution object: structure and usage

In this manual, we'll first recall the main functionalities you can use when working with a solution of an optimal control problem (SOL). This includes essential operations like:

  • Plotting a SOL: How to plot the optimal solution for your defined problem.
  • Printing a SOL: How to display a summary of your solution.

After covering these core functionalities, we'll delve into the structure of a SOL. Since a SOL is structured as a Solution struct, we'll first explain how to access its underlying attributes. Following this, we'll shift our focus to the simple properties inherent to a SOL.


Content


Main functionalities

Let's define a basic optimal control problem.

using OptimalControl
+
+t0 = 0
+tf = 1
+x0 = [-1, 0]
+
+ocp = @def begin
+    t ∈ [ t0, tf ], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    x(t0) == x0
+    x(tf) == [0, 0]
+    ẋ(t)  == [v(t), u(t)]
+    0.5∫( u(t)^2 ) → min
+end

We can now solve the problem (for more details, visit the solve manual):

using NLPModelsIpopt
+sol = solve(ocp)
▫ This is OptimalControl version v1.1.7 running with: direct, adnlp, ipopt.
+
+▫ The optimal control problem is solved with CTDirect version v0.17.4.
+
+   ┌─ The NLP is modelled with ADNLPModels and solved with NLPModelsIpopt.
+   │
+   ├─ Number of time steps⋅: 250
+   └─ Discretisation scheme: midpoint
+
+▫ This is Ipopt version 3.14.19, running with linear solver MUMPS 5.8.2.
+
+Number of nonzeros in equality constraint Jacobian...:     1754
+Number of nonzeros in inequality constraint Jacobian.:        0
+Number of nonzeros in Lagrangian Hessian.............:      250
+
+Total number of variables............................:      752
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:        0
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:      504
+Total number of inequality constraints...............:        0
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:        0
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  5.0000000e-03 1.10e+00 2.90e-14   0.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  6.0000960e+00 2.22e-16 1.78e-15 -11.0 6.08e+00    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 1
+
+                                   (scaled)                 (unscaled)
+Objective...............:   6.0000960015360345e+00    6.0000960015360345e+00
+Dual infeasibility......:   1.7763568394002505e-15    1.7763568394002505e-15
+Constraint violation....:   2.2204460492503131e-16    2.2204460492503131e-16
+Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
+Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
+Overall NLP error.......:   1.7763568394002505e-15    1.7763568394002505e-15
+
+
+Number of objective function evaluations             = 2
+Number of objective gradient evaluations             = 2
+Number of equality constraint evaluations            = 2
+Number of inequality constraint evaluations          = 0
+Number of equality constraint Jacobian evaluations   = 2
+Number of inequality constraint Jacobian evaluations = 0
+Number of Lagrangian Hessian evaluations             = 1
+Total seconds in IPOPT                               = 1.325
+
+EXIT: Optimal Solution Found.
Note

You can export (or save) the solution in a Julia .jld2 data file and reload it later, and also export a discretised version of the solution in a more portable JSON format. Note that the optimal control problem is needed when loading a solution.

See the two functions:

To print sol, simply:

sol
• Solver:
+  ✓ Successful  : true
+  │  Status     : first_order
+  │  Message    : Ipopt/generic
+  │  Iterations : 1
+  │  Objective  : 6.0000960015360345
+  └─ Constraints violation : 2.220446049250313e-16
+
+• Boundary duals: [12.000192003072055, 6.000096001536035, -12.000192003072055, 6.0000960015360185]
+

For complementary information, you can plot the solution:

using Plots
+plot(sol)
Example block output
Note

For more details about plotting a solution, visit the plot manual.

Solution struct

The solution sol is a Solution struct.

CTModels.SolutionType
struct Solution{TimeGridModelType<:CTModels.AbstractTimeGridModel, TimesModelType<:CTModels.AbstractTimesModel, StateModelType<:CTModels.AbstractStateModel, ControlModelType<:CTModels.AbstractControlModel, VariableModelType<:CTModels.AbstractVariableModel, CostateModelType<:Function, ObjectiveValueType<:Real, DualModelType<:CTModels.AbstractDualModel, SolverInfosType<:CTModels.AbstractSolverInfos, ModelType<:CTModels.AbstractModel} <: CTModels.AbstractSolution

Fields

  • time_grid::CTModels.AbstractTimeGridModel

  • times::CTModels.AbstractTimesModel

  • state::CTModels.AbstractStateModel

  • control::CTModels.AbstractControlModel

  • variable::CTModels.AbstractVariableModel

  • costate::Function

  • objective::Real

  • dual::CTModels.AbstractDualModel

  • solver_infos::CTModels.AbstractSolverInfos

  • model::CTModels.AbstractModel

source

Each field can be accessed directly (ocp.times, etc) but we recommend to use the sophisticated getters we provide: the state(sol::Solution) method does not return sol.state but a function of time that can be called at any time, not only on the grid time_grid.

0.25 ∈ time_grid(sol)
false
x = state(sol)
+x(0.25)
2-element Vector{Float64}:
+ -0.8437454999279992
+  1.1249939999040002

Attributes and properties

State, costate, control, variable and objective value

You can access the values of the state, costate, control and variable by eponymous functions. The returned values are functions of time for the state, costate and control and a scalar or a vector for the variable.

t = 0.25
+x = state(sol)
+p = costate(sol)
+u = control(sol)

Since the state is of dimension 2, evaluating x(t) returns a vector:

x(t)
2-element Vector{Float64}:
+ -0.8437454999279992
+  1.1249939999040002

It is the same for the costate:

p(t)
2-element Vector{Float64}:
+ 12.000192003072055
+  2.9760476167618717

But the control is one-dimensional:

u(t)
2.9760476167618717

There is no variable, hence, an empty vector is returned:

v = variable(sol)
Float64[]

The objective value is accessed by:

objective(sol)
6.0000960015360345

Infos from the solver

The problem ocp is solved via a direct method (see solve manual for details). The solver stores data in sol, including the success of the optimization, the iteration count, the time grid used for discretisation, and other specific details within the solver_infos field.

time_grid(sol)
251-element Vector{Float64}:
+ 0.0
+ 0.004
+ 0.008
+ 0.012
+ 0.016
+ 0.02
+ 0.024
+ 0.028
+ 0.032
+ 0.036
+ ⋮
+ 0.968
+ 0.972
+ 0.976
+ 0.98
+ 0.984
+ 0.988
+ 0.992
+ 0.996
+ 1.0
constraints_violation(sol)
2.220446049250313e-16
infos(sol)
Dict{Symbol, Any}()
iterations(sol)
1
message(sol)
"Ipopt/generic"
status(sol)
:first_order
successful(sol)
true

Dual variables

You can retrieved dual variables (or Lagrange multipliers) associated to labelled constraint. To illustrate this, we define a problem with constraints:

ocp = @def begin
+
+    tf ∈ R,             variable
+    t ∈ [0, tf],        time
+    x = (q, v) ∈ R²,    state
+    u ∈ R,              control
+
+    tf ≥ 0,             (eq_tf)
+    -1 ≤ u(t) ≤ 1,      (eq_u)
+    v(t) ≤ 0.75,        (eq_v)
+
+    x(0)  == [-1, 0],   (eq_x0)
+    q(tf) == 0
+    v(tf) == 0
+
+    ẋ(t) == [v(t), u(t)]
+
+    tf → min
+
+end
+sol = solve(ocp; display=false)

Dual variables corresponding to variable and boundary constraints are given as scalar or vectors.

dual(sol, ocp, :eq_tf)
4.800000251396151e-12
dual(sol, ocp, :eq_x0)
2-element Vector{Float64}:
+ 1.3298101221246474
+ 1.0011103794955667

The other type of constraints are associated to dual variables given as functions of time.

μ_u = dual(sol, ocp, :eq_u)
+plot(time_grid(sol), μ_u)
Example block output
μ_v = dual(sol, ocp, :eq_v)
+plot(time_grid(sol), μ_v)
Example block output
diff --git a/.save/docs/build/manual-solve-gpu.html b/.save/docs/build/manual-solve-gpu.html new file mode 100644 index 00000000..a2ca30ff --- /dev/null +++ b/.save/docs/build/manual-solve-gpu.html @@ -0,0 +1,73 @@ + +Solve on GPU · OptimalControl.jl

Solve on GPU

In this manual, we explain how to use the solve function from OptimalControl.jl on GPU. We rely on ExaModels.jl and MadNLPGPU.jl and currently only provide support for NVIDIA thanks to CUDA.jl. Consider the following simple Lagrange optimal control problem:

using OptimalControl
+using MadNLPGPU
+using CUDA
+
+ocp = @def begin
+    t ∈ [0, 1], time
+    x ∈ R², state
+    u ∈ R, control
+    v ∈ R, variable
+    x(0) == [0, 1]
+    x(1) == [0, -1]
+    ∂(x₁)(t) == x₂(t)
+    ∂(x₂)(t) == u(t)
+    0 ≤ x₁(t) + v^2 ≤ 1.1
+    -10 ≤ u(t) ≤ 10
+    1 ≤ v ≤ 2
+    ∫(u(t)^2 + v) → min
+end
Note

We have used MadNLPGPU instead of MadNLP, that is able to solve on GPU (leveraging CUDSS.jl) optimisation problems modelled with ExaModels.jl. As a direct transcription towards an ExaModels.ExaModel is performed (:exa keyword below), there are limitations on the syntax (check the Solve section).

Computation on GPU is currently only tested with CUDA, and the associated backend must be passed to ExaModels as is done below (also note the :exa keyword to indicate the modeller, and :madnlp for the solver):

sol = solve(ocp, :exa, :madnlp; exa_backend=CUDABackend())
▫ This is OptimalControl version v1.1.2 running with: direct, exa, madnlp.
+
+▫ The optimal control problem is solved with CTDirect version v0.17.2.
+
+   ┌─ The NLP is modelled with ExaModels and solved with MadNLPMumps.
+   │
+   ├─ Number of time steps⋅: 250
+   └─ Discretisation scheme: midpoint
+
+▫ This is MadNLP version v0.8.12, running with cuDSS v0.6.0
+
+Number of nonzeros in constraint Jacobian............:     2256
+Number of nonzeros in Lagrangian Hessian.............:     1251
+
+Total number of variables............................:      754
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:      252
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:      504
+Total number of inequality constraints...............:      251
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:      251
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du inf_compl lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  1.0200000e+00 1.10e+00 1.00e+00 1.01e+01  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  1.0199978e+00 1.10e+00 1.45e+00 8.73e-02  -1.0 1.97e+02    -  5.05e-03 4.00e-07h  1
+   ...
+  27  9.8891249e+00 2.22e-16 7.11e-15 1.60e-09  -9.0 2.36e-04    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 27
+
+                                   (scaled)                 (unscaled)
+Objective...............:   9.8891248915014458e+00    9.8891248915014458e+00
+Dual infeasibility......:   7.1054273576010019e-15    7.1054273576010019e-15
+Constraint violation....:   2.2204460492503131e-16    2.2204460492503131e-16
+Complementarity.........:   1.5999963912421547e-09    1.5999963912421547e-09
+Overall NLP error.......:   1.5999963912421547e-09    1.5999963912421547e-09
+
+Number of objective function evaluations             = 28
+Number of objective gradient evaluations             = 28
+Number of constraint evaluations                     = 28
+Number of constraint Jacobian evaluations            = 28
+Number of Lagrangian Hessian evaluations             = 27
+Total wall-clock secs in solver (w/o fun. eval./lin. alg.)  =  0.126
+Total wall-clock secs in linear solver                      =  0.103
+Total wall-clock secs in NLP function evaluations           =  0.022
+Total wall-clock secs                                       =  0.251
+
+EXIT: Optimal Solution Found (tol = 1.0e-08).
diff --git a/.save/docs/build/manual-solve.html b/.save/docs/build/manual-solve.html new file mode 100644 index 00000000..824be40e --- /dev/null +++ b/.save/docs/build/manual-solve.html @@ -0,0 +1,151 @@ + +Solve a problem · OptimalControl.jl

The solve function

In this manual, we explain the solve function from OptimalControl.jl package.

CommonSolve.solveMethod
solve(
+    ocp::Model,
+    description::Symbol...;
+    display,
+    kwargs...
+) -> Solution{TimeGridModelType, TimesModelType, StateModelType, ControlModelType, VariableModelType, CostateModelType, Float64, DualModelType, CTModels.SolverInfos{Dict{Symbol, Any}}, ModelType} where {TimeGridModelType<:CTModels.TimeGridModel, TimesModelType<:CTModels.TimesModel, StateModelType<:Union{CTModels.StateModelSolution{TS} where TS<:CTModels.var"#84#85", CTModels.StateModelSolution{TS} where TS<:CTModels.var"#86#87"}, ControlModelType<:Union{CTModels.ControlModelSolution{TS} where TS<:CTModels.var"#88#89", CTModels.ControlModelSolution{TS} where TS<:CTModels.var"#90#91"}, VariableModelType<:Union{CTModels.VariableModelSolution{Vector{Float64}}, CTModels.VariableModelSolution{Float64}}, CostateModelType<:Union{CTModels.var"#92#93", CTModels.var"#94#95"}, DualModelType<:(CTModels.DualModel{PC_Dual, Vector{Float64}, SC_LB_Dual, SC_UB_Dual, CC_LB_Dual, CC_UB_Dual, Vector{Float64}, Vector{Float64}} where {PC_Dual<:Union{CTModels.var"#100#101"{CTModels.var"#96#97"}, CTModels.var"#98#99"{CTModels.var"#96#97"}}, SC_LB_Dual<:Union{CTModels.var"#104#105"{CTModels.var"#102#103"}, CTModels.var"#106#107"{CTModels.var"#102#103"}}, SC_UB_Dual<:Union{CTModels.var"#110#111"{CTModels.var"#108#109"}, CTModels.var"#112#113"{CTModels.var"#108#109"}}, CC_LB_Dual<:Union{CTModels.var"#116#117"{CTModels.var"#114#115"}, CTModels.var"#118#119"{CTModels.var"#114#115"}}, CC_UB_Dual<:Union{CTModels.var"#122#123"{CTModels.var"#120#121"}, CTModels.var"#124#125"{CTModels.var"#120#121"}}}), ModelType<:(Model{<:CTModels.TimeDependence, T} where T<:CTModels.TimesModel)}
+

Solve the optimal control problem ocp by the method given by the (optional) description. The get the list of available methods:

julia> available_methods()

The higher in the list, the higher is the priority. The keyword arguments are specific to the chosen method and represent the options of the solver.

Arguments

  • ocp::OptimalControlModel: the optimal control problem to solve.
  • description::Symbol...: the description of the method used to solve the problem.
  • kwargs...: the options of the method.

Examples

The simplest way to solve the optimal control problem is to call the function without any argument.

julia> sol = solve(ocp)

The method description is a list of Symbols. The default is

julia> sol = solve(ocp, :direct, :adnlp, :ipopt)

You can provide a partial description, the function will find the best match.

julia> sol = solve(ocp, :direct)
Note

See the resolution methods section for more details about the available methods.

The keyword arguments are specific to the chosen method and correspond to the options of the different solvers. For example, the keyword max_iter is an Ipopt option that may be used to set the maximum number of iterations.

julia> sol = solve(ocp, :direct, :ipopt, max_iter=100)
Note

See the direct method section for more details about associated options. These options also detailed in the CTDirect.solve documentation. This main solve method redirects to CTDirect.solve when the :direct Symbol is given in the description. See also the NLP solvers section for more details about Ipopt or MadNLP options.

To help the solve converge, an initial guess can be provided within the keyword init. You can provide the initial guess for the state, control, and variable.

julia> sol = solve(ocp, init=(state=[-0.5, 0.2], control=0.5))
Note

See how to set an initial guess for more details.

source

Basic usage

Let us define a basic optimal control problem.

using OptimalControl
+
+t0 = 0
+tf = 1
+x0 = [-1, 0]
+
+ocp = @def begin
+    t ∈ [ t0, tf ], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    x(t0) == x0
+    x(tf) == [0, 0]
+    ẋ(t)  == [v(t), u(t)]
+    0.5∫( u(t)^2 ) → min
+end

We can now solve the problem:

using NLPModelsIpopt
+solve(ocp)
▫ This is OptimalControl version v1.1.7 running with: direct, adnlp, ipopt.
+
+▫ The optimal control problem is solved with CTDirect version v0.17.4.
+
+   ┌─ The NLP is modelled with ADNLPModels and solved with NLPModelsIpopt.
+   │
+   ├─ Number of time steps⋅: 250
+   └─ Discretisation scheme: midpoint
+
+▫ This is Ipopt version 3.14.19, running with linear solver MUMPS 5.8.2.
+
+Number of nonzeros in equality constraint Jacobian...:     1754
+Number of nonzeros in inequality constraint Jacobian.:        0
+Number of nonzeros in Lagrangian Hessian.............:      250
+
+Total number of variables............................:      752
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:        0
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:      504
+Total number of inequality constraints...............:        0
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:        0
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  5.0000000e-03 1.10e+00 2.90e-14   0.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  6.0000960e+00 2.22e-16 1.78e-15 -11.0 6.08e+00    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 1
+
+                                   (scaled)                 (unscaled)
+Objective...............:   6.0000960015360345e+00    6.0000960015360345e+00
+Dual infeasibility......:   1.7763568394002505e-15    1.7763568394002505e-15
+Constraint violation....:   2.2204460492503131e-16    2.2204460492503131e-16
+Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
+Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
+Overall NLP error.......:   1.7763568394002505e-15    1.7763568394002505e-15
+
+
+Number of objective function evaluations             = 2
+Number of objective gradient evaluations             = 2
+Number of equality constraint evaluations            = 2
+Number of inequality constraint evaluations          = 0
+Number of equality constraint Jacobian evaluations   = 2
+Number of inequality constraint Jacobian evaluations = 0
+Number of Lagrangian Hessian evaluations             = 1
+Total seconds in IPOPT                               = 1.298
+
+EXIT: Optimal Solution Found.

Note that we must import NLPModelsIpopt.jl before calling solve. This is because the default method uses a direct approach, which transforms the optimal control problem into a nonlinear program (NLP) of the form:

\[\text{minimize}\quad F(y), \quad\text{subject to the constraints}\quad g(y) \le 0, \quad h(y) = 0. \]

Warning

Calling solve without loading a NLP solver package first will notify the user:

julia> solve(ocp)
+ERROR: ExtensionError. Please make: julia> using NLPModelsIpopt

Resolution methods and algorithms

OptimalControl.jl offers a list of methods. To get it, simply call available_methods.

available_methods()
(:direct, :adnlp, :ipopt)
+(:direct, :adnlp, :madnlp)
+(:direct, :adnlp, :knitro)
+(:direct, :exa, :ipopt)
+(:direct, :exa, :madnlp)
+(:direct, :exa, :knitro)

Each line is a method, with priority going from top to bottom. This means that

solve(ocp)

is equivalent to

solve(ocp, :direct, :adnlp, :ipopt)
  1. The first symbol refers to the general class of method. The only possible value is:
    • :direct: currently, only the so-called direct approach is implemented. Direct methods discretise the original optimal control problem and solve the resulting NLP. In this case, the main solve method redirects to CTDirect.solve.
  2. The second symbol refers to the NLP modeler. The possible values are:
  3. The third symbol specifies the NLP solver. Possible values are:
    • :ipopt: calls NLPModelsIpopt.ipopt to solve the NLP problem.
    • :madnlp: creates a MadNLP.MadNLPSolver instance from the NLP problem and solve it. MadNLP.jl is an open-source solver in Julia implementing a filter line-search interior-point algorithm like Ipopt.
    • :knitro: uses the Knitro solver (license required).
Warning

When using :exa for more performance (in particular to solve on GPU), there are limitations on the syntax:

  • dynamics must be declared coordinate by coordinate (not globally as a vector valued expression)
  • nonlinear constraints (boundary, variable, control, state, mixed ones, see Constraints must also be scalar expressions (linear constraints aka. ranges, on the other hand, can be vectors)
  • all expressions must only involve algebraic operations that are known to ExaModels (check the documentation), although one can provide additional user defined functions through registration (check ExaModels API)
Note

MadNLP is shipped only with two linear solvers (Umfpack and Lapack), which are not adapted is some cases. We recommend to use MadNLPMumps to solve your optimal control problem with MUMPS linear solver.

For instance, let us try MadNLPMumps solver with ExaModel modeller.

using MadNLPMumps
+
+ocp = @def begin
+    t ∈ [ t0, tf ], time
+    x = (q, v) ∈ R², state
+    u ∈ R, control
+    x(t0) == x0
+    x(tf) == [0, 0]
+    ∂(q)(t) == v(t)
+    ∂(v)(t) == u(t)
+    0.5∫( u(t)^2 ) → min
+end
+
+solve(ocp, :exa, :madnlp; disc_method=:trapeze)
▫ This is OptimalControl version v1.1.7 running with: direct, exa, madnlp.
+
+▫ The optimal control problem is solved with CTDirect version v0.17.4.
+
+   ┌─ The NLP is modelled with ExaModels and solved with MadNLP suite.
+   │
+   ├─ Number of time steps⋅: 250
+   └─ Discretisation scheme: trapeze
+
+▫ This is MadNLP version v0.8.12, running with mumps
+
+Number of nonzeros in constraint Jacobian............:     2004
+Number of nonzeros in Lagrangian Hessian.............:     1751
+
+Total number of variables............................:      753
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:        0
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:      504
+Total number of inequality constraints...............:        0
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:        0
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du inf_compl lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  5.0000000e-03 1.10e+00 4.39e-15 0.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  6.0003829e+00 1.29e-15 2.00e-11 0.00e+00  -1.0 6.08e+00    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 1
+
+                                   (scaled)                 (unscaled)
+Objective...............:   6.0003828724303769e+00    6.0003828724303769e+00
+Dual infeasibility......:   1.9975132659055816e-11    1.9975132659055816e-11
+Constraint violation....:   1.2906342661267445e-15    1.2906342661267445e-15
+Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
+Overall NLP error.......:   1.9975132659055816e-11    1.9975132659055816e-11
+
+Number of objective function evaluations             = 2
+Number of objective gradient evaluations             = 2
+Number of constraint evaluations                     = 2
+Number of constraint Jacobian evaluations            = 2
+Number of Lagrangian Hessian evaluations             = 1
+Total wall-clock secs in solver (w/o fun. eval./lin. alg.)  =  0.003
+Total wall-clock secs in linear solver                      =  0.001
+Total wall-clock secs in NLP function evaluations           =  0.000
+Total wall-clock secs                                       =  0.004
+
+EXIT: Optimal Solution Found (tol = 1.0e-08).

Note that you can provide a partial description. If multiple full descriptions contain it, priority is given to the first one in the list. Hence, all of the following calls are equivalent:

solve(ocp)
+solve(ocp, :direct                )
+solve(ocp,          :adnlp        )
+solve(ocp,                  :ipopt)
+solve(ocp, :direct, :adnlp        )
+solve(ocp, :direct,         :ipopt)
+solve(ocp, :direct, :adnlp, :ipopt)

Direct method and options

The main options for the direct method, with their [default] values, are:

  • display ([true], false): setting display = false disables output.
  • init: information for the initial guess. It can be given as numerical values, functions, or an existing solution. See how to set an initial guess.
  • grid_size ([250]): number of time steps in the (uniform) time discretization grid. More precisely, if N = grid_size and the initial and final times are t0 and tf, then the step length Δt = (tf - t0) / N.
  • time_grid ([nothing]): explicit time grid (can be non-uniform). If time_grid = nothing, a uniform grid of length grid_size is used.
  • disc_method (:trapeze, [:midpoint], :euler, :euler_implicit, :gauss_legendre_2, :gauss_legendre_3): the discretisation scheme to transform the dynamics into nonlinear equations. See the discretization method tutorial for more details.
  • adnlp_backend ([:optimized], :manual, :default): backend used for automatic differentiation to create the ADNLPModels.ADNLPModel.

For advanced usage, see:

Note

The main solve method from OptimalControl.jl simply redirects to CTDirect.solve in that case.

NLP solvers specific options

In addition to these options, any remaining keyword arguments passed to solve are forwarded to the NLP solver.

Warning

The option names and accepted values depend on the chosen solver. For example, in Ipopt, print_level expects an integer, whereas in MadNLP it must be a MadNLP.LogLevels value (valid options: MadNLP.{TRACE, DEBUG, INFO, NOTICE, WARN, ERROR}). Moreover, some options are solver-specific: for instance, mu_strategy exists in Ipopt but not in MadNLP.

Please refer to the Ipopt options list and the NLPModelsIpopt.jl documentation.

sol = solve(ocp; max_iter=0, tol=1e-6, print_level=0)
+iterations(sol)
0

Likewise, see the MadNLP.jl options and the MadNLP.jl documentation.

sol = solve(ocp, :madnlp; max_iter=0, tol=1e-6, print_level=MadNLP.ERROR)
+iterations(sol)
0
diff --git a/.save/docs/build/objects.inv b/.save/docs/build/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..1608d2595d02082fa4cae010da07cffa0deaa0d5 GIT binary patch literal 3889 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 +RDNOPA 2025 · OptimalControl.jl
rdnopa

Numerical developments to solve optimal control problems in Julia

Jean-Baptiste Caillau, Olivier Cots, Joseph Gergaud, Pierre Martinon, Sophia Sed

affiliations

What it's about

  • Nonlinear optimal control of ODEs:

\[g(x(t_0),x(t_f)) + \int_{t_0}^{t_f} f^0(x(t), u(t))\, \mathrm{d}t \to \min\]

subject to

\[\dot{x}(t) = f(x(t), u(t)),\quad t \in [t_0, t_f]\]

plus boundary, control and state constraints

  • Our core interests: numerical & geometrical methods in control, applications
  • Why Julia: fast (+ JIT), strongly typed, high-level (AD, macros), fast optimisation and ODE solvers available, rapidly growing community

What is important to solve such a problem numerically?

Syntax matters

Do more...
rewrite in OptimalControl.jl DSL the free time problem below as a problem with fixed final time using:
+- a change time from t to s = t / tf
+- tf as an additional state variable subject to dtf / ds = 0
+ocp = @def begin
+    tf ∈ R,          variable
+    t ∈ [0, tf],     time
+    x = (q, v) ∈ R², state
+    u ∈ R,           control
+    -1 ≤ u(t) ≤ 1
+    q(0)  == -1
+    v(0)  == 0
+    q(tf) == 0
+    v(tf) == 0
+    ẋ(t) == [v(t), u(t)]
+    tf → min
+end
ocp_fixed = @def begin
+    # Fixed time domain
+    s ∈ [0, 1], time
+    
+    # Augmented state: (position, velocity, final_time)
+    y = (q, v, tf) ∈ R³, state
+    
+    # Control
+    u ∈ R, control
+    
+    # Transformed dynamics (multiply by tf due to ds = dt/tf)
+    ∂(q)(s)  == tf(s) * v(s)
+    ∂(v)(s)  == tf(s) * u(s)
+    ∂(tf)(s) == 0
+    
+    # Initial conditions
+    q(0)  == -1
+    v(0)  == 0
+    # tf(0) is free (no initial condition needed)
+    
+    # Final conditions
+    q(1)  == 0
+    v(1)  == 0
+    # tf(1) is what we minimize
+    
+    # Control constraints
+    -1 ≤ u(s) ≤ 1
+    
+    # Cost: minimize final time
+    tf(1) → min
+end

Performance matters

  • Discretising an OCP into an NLP: $h_i := t_{i+1}-t_i$,

\[g(X_0,X_N) + \sum_{i=0}^{N} h_i f^0(X_i,U_i) \to \min\]

subject to

\[X_{i+1} - X_i - h_i f(X_i, U_i) = 0,\quad i = 0,\dots,N-1\]

plus other constraints on $X := (X_i)_{i=0,N}$ and $U := (U_i)_{i=0,N}$ such as boundary and path (state and / or control) constraints :

\[b(t_0, X_0, t_N, X_N) = 0\]

\[c(X_i, U_i) \leq 0,\quad i = 0,\dots,N\]

Solving (MadNLP + CUDSS)
This is MadNLP version v0.8.7, running with cuDSS v0.4.0
+
+Number of nonzeros in constraint Jacobian............:    12005
+Number of nonzeros in Lagrangian Hessian.............:     9000
+
+Total number of variables............................:     4004
+                     variables with only lower bounds:        0
+                variables with lower and upper bounds:        0
+                     variables with only upper bounds:        0
+Total number of equality constraints.................:     3005
+Total number of inequality constraints...............:        0
+        inequality constraints with only lower bounds:        0
+   inequality constraints with lower and upper bounds:        0
+        inequality constraints with only upper bounds:        0
+
+iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
+   0  1.0000000e-01 1.10e+00 1.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
+   1  1.0001760e-01 1.10e+00 3.84e-03  -1.0 6.88e+02  -4.0 1.00e+00 2.00e-07h  2
+   2 -5.2365072e-03 1.89e-02 1.79e-07  -1.0 6.16e+00  -4.5 1.00e+00 1.00e+00h  1
+   3  5.9939621e+00 2.28e-03 1.66e-04  -3.8 6.00e+00  -5.0 9.99e-01 1.00e+00h  1
+   4  5.9996210e+00 2.94e-06 8.38e-07  -3.8 7.70e-02    -  1.00e+00 1.00e+00h  1
+
+Number of Iterations....: 4
+
+                                   (scaled)                 (unscaled)
+Objective...............:   5.9996210189633494e+00    5.9996210189633494e+00
+Dual infeasibility......:   8.3756005011360529e-07    8.3756005011360529e-07
+Constraint violation....:   2.9426923277963834e-06    2.9426923277963834e-06
+Complementarity.........:   2.0007459547789288e-06    2.0007459547789288e-06
+Overall NLP error.......:   2.9426923277963834e-06    2.9426923277963834e-06
+
+Number of objective function evaluations             = 6
+Number of objective gradient evaluations             = 5
+Number of constraint evaluations                     = 6
+Number of constraint Jacobian evaluations            = 5
+Number of Lagrangian Hessian evaluations             = 4
+Total wall-clock secs in solver (w/o fun. eval./lin. alg.)  =  0.072
+Total wall-clock secs in linear solver                      =  0.008
+Total wall-clock secs in NLP function evaluations           =  0.003
+Total wall-clock secs                                       =  0.083
goddard-h100
  • Quadrotor, H100 run
quadrotor-h100

Maths matters

  • Coupling direct and indirect (aka shooting methods)
  • Easy access to differential-geometric tools with AD
  • Goddard tutorial

Applications matter

Wrap up

  • High level modelling of optimal control problems
  • High performance solving both on CPU and GPU
  • Driven by applications

control-toolbox.org

control-toolbox.orgct-qr

Credits (not exhaustive!)

Acknowledgements

Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).

affiliations
diff --git a/.save/docs/build/search_index.js b/.save/docs/build/search_index.js new file mode 100644 index 00000000..081f84ec --- /dev/null +++ b/.save/docs/build/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"juliacon2024.html","page":"Trajectory optimisation in space mechanics with Julia","title":"Trajectory optimisation in space mechanics with Julia","text":"\"juliaopt2024\"","category":"section"},{"location":"juliacon2024.html#Trajectory-optimisation-in-space-mechanics-with-Julia","page":"Trajectory optimisation in space mechanics with Julia","title":"Trajectory optimisation in space mechanics with Julia","text":"","category":"section"},{"location":"juliacon2024.html#[Jean-Baptiste-Caillau](http://caillau.perso.math.cnrs.fr),-[Olivier-Cots](https://ocots.github.io),-[Alesia-Herasimenka](https://www.uni.lu/snt-en/people/alesia-herasimenka)","page":"Trajectory optimisation in space mechanics with Julia","title":"Jean-Baptiste Caillau, Olivier Cots, Alesia Herasimenka","text":"\"affiliations\"","category":"section"},{"location":"juliacon2024.html#What-it's-about","page":"Trajectory optimisation in space mechanics with Julia","title":"What it's about","text":"Nonlinear optimal control of ODEs:\n\ng(x(t_0)x(t_f)) + int_t_0^t_f f^0(x(t) u(t)) mathrmdt to min\n\nsubject to\n\ndotx(t) = f(x(t) u(t))quad t in t_0 t_f\n\nplus boundary conditions, control and state constraints\n\nOur core interests: numerical & geometrical methods in control, applications","category":"section"},{"location":"juliacon2024.html#OptimalControl.jl-for-trajectory-optimisation","page":"Trajectory optimisation in space mechanics with Julia","title":"OptimalControl.jl for trajectory optimisation","text":"Basic example\nGoddard problem\nOrbit transfer","category":"section"},{"location":"juliacon2024.html#Wrap-up","page":"Trajectory optimisation in space mechanics with Julia","title":"Wrap up","text":"High level modelling of optimal control problems\nEfficient numerical resolution coupling direct and indirect methods\nCollection of examples","category":"section"},{"location":"juliacon2024.html#Future","page":"Trajectory optimisation in space mechanics with Julia","title":"Future","text":"New applications (biology, space mechanics, quantum mechanics and more)\nAdditional solvers: direct shooting, collocation for BVP, Hamiltonian pathfollowing...\n... and open to contributions!","category":"section"},{"location":"juliacon2024.html#control-toolbox.org","page":"Trajectory optimisation in space mechanics with Julia","title":"control-toolbox.org","text":"Open toolbox\nCollection of Julia Packages rooted at OptimalControl.jl\n\n\"control-toolbox.org\"","category":"section"},{"location":"juliacon2024.html#Credits-(not-exhaustive!)","page":"Trajectory optimisation in space mechanics with Julia","title":"Credits (not exhaustive!)","text":"ADNLPModels.jl\nDifferentiationInterface.jl\nDifferentialEquations.jl\nMLStyle.jl","category":"section"},{"location":"juliacon2024.html#Acknowledgements","page":"Trajectory optimisation in space mechanics with Julia","title":"Acknowledgements","text":"Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).\n\n\"affiliations\"\n\n","category":"section"},{"location":"manual-model.html#manual-model","page":"Problem characteristics","title":"The optimal control problem object: structure and usage","text":"In this manual, we'll first recall the main functionalities you can use when working with an optimal control problem (OCP). This includes essential operations like:\n\nSolving an OCP: How to find the optimal solution for your defined problem.\nComputing flows from an OCP: Understanding the dynamics and trajectories derived from the optimal solution.\nPrinting an OCP: How to display a summary of your problem's definition.\n\nAfter covering these core functionalities, we'll delve into the structure of an OCP. Since an OCP is structured as a Model struct, we'll first explain how to access its underlying attributes, such as the problem's dynamics, costs, and constraints. Following this, we'll shift our focus to the simple properties inherent to an OCP, learning how to determine aspects like whether the problem:\n\nIs autonomous: Does its dynamics depend explicitly on time?\nHas a fixed or free initial/final time: Is the duration of the control problem predetermined or not?\n\n\n\nContent\n\nMain functionalities\nModel struct\nAttributes and properties\n\n","category":"section"},{"location":"manual-model.html#manual-model-main-functionalities","page":"Problem characteristics","title":"Main functionalities","text":"Let's define a basic optimal control problem.\n\nusing OptimalControl\n\nt0 = 0\ntf = 1\nx0 = [-1, 0]\n\nocp = @def begin\n t ∈ [ t0, tf ], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n x(t0) == x0\n x(tf) == [0, 0]\n ẋ(t) == [v(t), u(t)]\n 0.5∫( u(t)^2 ) → min\nend\nnothing # hide\n\nTo print it, simply:\n\nocp\n\nWe can now solve the problem (for more details, visit the solve manual):\n\nusing NLPModelsIpopt\nsolve(ocp)\nnothing # hide\n\nYou can also compute flows (for more details, see the flow manual) from the optimal control problem, providing a control law in feedback form. The pseudo-Hamiltonian of this problem is\n\n H(x p u) = p_q v + p_v u + p^0 u^2 2\n\nwhere p^0 = -1 since we are in the normal case. From the Pontryagin maximum principle, the maximising control is given in feedback form by\n\nu(x p) = p_v\n\nsince partial^2_uu H = p^0 = - 1 0. \n\nu = (x, p) -> p[2] # control law in feedback form\n\nusing OrdinaryDiffEq # needed to import numerical integrators\nf = Flow(ocp, u) # compute the Hamiltonian flow function\n\np0 = [12, 6] # initial covector solution\nxf, pf = f(t0, x0, p0, tf) # flow from (x0, p0) at time t0 to tf\nxf # should be (0, 0)\n\nnote: Note\nA more advanced feature allows for the discretization of the optimal control problem. From the discretized version, you can obtain a Nonlinear Programming problem (or optimization problem) and solve it using any appropriate NLP solver. For more details, visit the NLP manipulation tutorial.","category":"section"},{"location":"manual-model.html#manual-model-struct","page":"Problem characteristics","title":"Model struct","text":"The optimal control problem ocp is a Model struct. \n\nEach field can be accessed directly (ocp.times, etc) or by a getter:\n\ntimes\nstate\ncontrol\nvariable\ndynamics\nobjective\nconstraints\ndefinition\nget_build_examodel\n\nFor instance, we can retrieve the times and definition values.\n\ntimes(ocp)\n\ndefinition(ocp)\n\nnote: Note\nWe refer to the CTModels documentation for more details about this struct and its fields.","category":"section"},{"location":"manual-model.html#manual-model-attributes","page":"Problem characteristics","title":"Attributes and properties","text":"Numerous attributes can be retrieved. To illustrate this, a more complex optimal control problem is defined.\n\nocp = @def begin\n v = (w, tf) ∈ R², variable\n s ∈ [0, tf], time\n q = (x, y) ∈ R², state\n u ∈ R, control\n 0 ≤ tf ≤ 2, (1)\n u(s) ≥ 0, (cons_u)\n x(s) + u(s) ≤ 10, (cons_mixed)\n w == 0\n x(0) == -1\n y(0) - tf == 0, (cons_bound)\n q(tf) == [0, 0]\n q̇(s) == [y(s)+w, u(s)]\n 0.5∫( u(s)^2 ) → min\nend\nnothing # hide","category":"section"},{"location":"manual-model.html#Control,-state-and-variable","page":"Problem characteristics","title":"Control, state and variable","text":"You can access the name of the control, state, and variable, along with the names of their components and their dimensions.\n\nusing DataFrames\ndata = DataFrame(\n Data=Vector{Symbol}(),\n Name=Vector{String}(),\n Components=Vector{Vector{String}}(), \n Dimension=Vector{Int}(),\n)\n\n# control\npush!(data,(\n :control,\n control_name(ocp),\n control_components(ocp),\n control_dimension(ocp),\n))\n\n# state\npush!(data,(\n :state,\n state_name(ocp),\n state_components(ocp),\n state_dimension(ocp),\n))\n\n# variable\npush!(data,(\n :variable,\n variable_name(ocp),\n variable_components(ocp),\n variable_dimension(ocp),\n))\n\nnote: Note\nThe names of the components are used for instance when plotting the solution. See the plot manual.","category":"section"},{"location":"manual-model.html#Constraints","page":"Problem characteristics","title":"Constraints","text":"You can retrieve labelled constraints with the constraint function. The constraint(ocp, label) method returns a tuple of the form (type, f, lb, ub). The signature of the function f depends on the symbol type. For :boundary and :variable constraints, the signature is f(x0, xf, v) where x0 is the initial state, xf the final state and v the variable. For other constraints, the signature is f(t, x, u, v). Here, t represents time, x the state, u the control, and v the variable.\n\n(type, f, lb, ub) = constraint(ocp, :eq1)\nprintln(\"type: \", type)\nx0 = [0, 1]\nxf = [2, 3]\nv = [1, 4]\nprintln(\"val: \", f(x0, xf, v))\nprintln(\"lb: \", lb)\nprintln(\"ub: \", ub)\n\n(type, f, lb, ub) = constraint(ocp, :cons_bound)\nprintln(\"type: \", type)\nprintln(\"val: \", f(x0, xf, v))\nprintln(\"lb: \", lb)\nprintln(\"ub: \", ub)\n\n(type, f, lb, ub) = constraint(ocp, :cons_u)\nprintln(\"type: \", type)\nt = 0\nx = [1, 2]\nu = 3\nprintln(\"val: \", f(t, x, u, v))\nprintln(\"lb: \", lb)\nprintln(\"ub: \", ub)\n\n(type, f, lb, ub) = constraint(ocp, :cons_mixed)\nprintln(\"type: \", type)\nprintln(\"val: \", f(t, x, u, v))\nprintln(\"lb: \", lb)\nprintln(\"ub: \", ub)\n\nnote: Note\nTo get the dual variable (or Lagrange multiplier) associated to the constraint, use the dual method.","category":"section"},{"location":"manual-model.html#Dynamics","page":"Problem characteristics","title":"Dynamics","text":"The dynamics stored in ocp are an in-place function (the first argument is mutated upon call) of the form f!(dx, t, x, u, v). Here, t represents time, x the state, u the control, and v the variable, with dx being the output value.\n\nf! = dynamics(ocp)\nt = 0\nx = [0., 1]\nu = 2\nv = [1, 4]\ndx = similar(x)\nf!(dx, t, x, u, v)\ndx","category":"section"},{"location":"manual-model.html#Criterion-and-objective","page":"Problem characteristics","title":"Criterion and objective","text":"The criterion can be :min or :max.\n\ncriterion(ocp)\n\nThe objective function is either in Mayer, Lagrange or Bolza form. \n\nMayer:\n\ng(x(t_0) x(t_f) v) to min\n\nLagrange:\n\nint_t_0^t_f f^0(t x(t) u(t) v) mathrmdt to min\n\nBolza:\n\ng(x(t_0) x(t_f) v) + int_t_0^t_f f^0(t x(t) u(t) v) mathrmdt to min\n\nThe objective of problem ocp is 0.5∫( u(t)^2 ) → min, hence, in Lagrange form. The signature of the Mayer part of the objective is g(x0, xf, v) but in our case, the method mayer will return an error.\n\ng = mayer(ocp)\n\nThe signature of the Lagrange part of the objective is f⁰(t, x, u, v).\n\nf⁰ = lagrange(ocp)\nf⁰(t, x, u, v)\n\nTo avoid having to capture exceptions, you can check the form of the objective:\n\nprintln(\"Mayer: \", has_mayer_cost(ocp))\nprintln(\"Lagrange: \", has_lagrange_cost(ocp))","category":"section"},{"location":"manual-model.html#Times","page":"Problem characteristics","title":"Times","text":"The time variable is not named t but s in ocp.\n\ntime_name(ocp)\n\nThe initial time is 0.\n\ninitial_time(ocp)\n\nSince the initial time has the value 0, its name is string(0). \n\ninitial_time_name(ocp)\n\nIn contrast, the final time is tf, since in ocp we have s ∈ [0, tf].\n\nfinal_time_name(ocp)\n\nTo get the value of the final time, since it is part of the variable v = (w, tf) of ocp, we need to provide a variable to the function final_time. \n\nv = [1, 2]\ntf = final_time(ocp, v)\n\nfinal_time(ocp)\n\nTo check whether the initial or final time is fixed or free (i.e., part of the variable), you can use the following functions:\n\nprintln(\"Fixed initial time: \", has_fixed_initial_time(ocp))\nprintln(\"Fixed final time: \", has_fixed_final_time(ocp))\n\nOr, similarly:\n\nprintln(\"Free initial time: \", has_free_initial_time(ocp))\nprintln(\"Free final time: \", has_free_final_time(ocp))","category":"section"},{"location":"manual-model.html#manual-model-time-dependence","page":"Problem characteristics","title":"Time dependence","text":"Optimal control problems can be autonomous or non-autonomous. In an autonomous problem, neither the dynamics nor the Lagrange cost explicitly depends on the time variable.\n\nThe following problem is autonomous.\n\nocp = @def begin\n t ∈ [ 0, 1 ], time\n x ∈ R, state\n u ∈ R, control\n ẋ(t) == u(t) # no explicit dependence on t\n x(1) + 0.5∫( u(t)^2 ) → min # no explicit dependence on t\nend\nis_autonomous(ocp)\n\nThe following problem is non-autonomous since the dynamics depends on t.\n\nocp = @def begin\n t ∈ [ 0, 1 ], time\n x ∈ R, state\n u ∈ R, control\n ẋ(t) == u(t) + t # explicit dependence on t\n x(1) + 0.5∫( u(t)^2 ) → min\nend\nis_autonomous(ocp)\n\nFinally, this last problem is non-autonomous because the Lagrange part of the cost depends on t.\n\nocp = @def begin\n t ∈ [ 0, 1 ], time\n x ∈ R, state\n u ∈ R, control\n ẋ(t) == u(t)\n x(1) + 0.5∫( t + u(t)^2 ) → min # explicit dependence on t\nend\nis_autonomous(ocp)\n\n","category":"section"},{"location":"manual-model.html#CTModels.Model-manual-model","page":"Problem characteristics","title":"CTModels.Model","text":"struct Model{TD<:CTModels.TimeDependence, TimesModelType<:CTModels.AbstractTimesModel, StateModelType<:CTModels.AbstractStateModel, ControlModelType<:CTModels.AbstractControlModel, VariableModelType<:CTModels.AbstractVariableModel, DynamicsModelType<:Function, ObjectiveModelType<:CTModels.AbstractObjectiveModel, ConstraintsModelType<:CTModels.AbstractConstraintsModel, BuildExaModelType<:Union{Nothing, Function}} <: CTModels.AbstractModel\n\nFields\n\ntimes::CTModels.AbstractTimesModel\nstate::CTModels.AbstractStateModel\ncontrol::CTModels.AbstractControlModel\nvariable::CTModels.AbstractVariableModel\ndynamics::Function\nobjective::CTModels.AbstractObjectiveModel\nconstraints::CTModels.AbstractConstraintsModel\ndefinition::Expr\nbuild_examodel::Union{Nothing, Function}\n\n\n\n\n\n","category":"type"},{"location":"manual-solve.html#manual-solve","page":"Solve a problem","title":"The solve function","text":"In this manual, we explain the solve function from OptimalControl.jl package.","category":"section"},{"location":"manual-solve.html#Basic-usage","page":"Solve a problem","title":"Basic usage","text":"Let us define a basic optimal control problem.\n\nusing OptimalControl\n\nt0 = 0\ntf = 1\nx0 = [-1, 0]\n\nocp = @def begin\n t ∈ [ t0, tf ], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n x(t0) == x0\n x(tf) == [0, 0]\n ẋ(t) == [v(t), u(t)]\n 0.5∫( u(t)^2 ) → min\nend\nnothing # hide\n\nWe can now solve the problem:\n\nusing NLPModelsIpopt\nsolve(ocp)\nnothing # hide\n\nNote that we must import NLPModelsIpopt.jl before calling solve. This is because the default method uses a direct approach, which transforms the optimal control problem into a nonlinear program (NLP) of the form:\n\ntextminimizequad F(y) quadtextsubject to the constraintsquad g(y) le 0 quad h(y) = 0 \n\nwarning: Warning\nCalling solve without loading a NLP solver package first will notify the user:julia> solve(ocp)\nERROR: ExtensionError. Please make: julia> using NLPModelsIpopt","category":"section"},{"location":"manual-solve.html#manual-solve-methods","page":"Solve a problem","title":"Resolution methods and algorithms","text":"OptimalControl.jl offers a list of methods. To get it, simply call available_methods.\n\navailable_methods()\n\nEach line is a method, with priority going from top to bottom. This means that \n\nsolve(ocp)\n\nis equivalent to \n\nsolve(ocp, :direct, :adnlp, :ipopt)\n\nThe first symbol refers to the general class of method. The only possible value is:\n:direct: currently, only the so-called direct approach is implemented. Direct methods discretise the original optimal control problem and solve the resulting NLP. In this case, the main solve method redirects to CTDirect.solve.\nThe second symbol refers to the NLP modeler. The possible values are:\n:adnlp: the NLP problem is modeled by a ADNLPModels.ADNLPModel. It provides automatic differentiation (AD)-based models that follow the NLPModels.jl API.\n:exa: the NLP problem is modeled by a ExaModels.ExaModel. It provides automatic differentiation and SIMD abstraction.\nThe third symbol specifies the NLP solver. Possible values are:\n:ipopt: calls NLPModelsIpopt.ipopt to solve the NLP problem.\n:madnlp: creates a MadNLP.MadNLPSolver instance from the NLP problem and solve it. MadNLP.jl is an open-source solver in Julia implementing a filter line-search interior-point algorithm like Ipopt.\n:knitro: uses the Knitro solver (license required).\n\nwarning: Warning\nWhen using :exa for more performance (in particular to solve on GPU), there are limitations on the syntax: dynamics must be declared coordinate by coordinate (not globally as a vector valued expression)\nnonlinear constraints (boundary, variable, control, state, mixed ones, see Constraints must also be scalar expressions (linear constraints aka. ranges, on the other hand, can be vectors)\nall expressions must only involve algebraic operations that are known to ExaModels (check the documentation), although one can provide additional user defined functions through registration (check ExaModels API) \n\nnote: Note\nMadNLP is shipped only with two linear solvers (Umfpack and Lapack), which are not adapted is some cases. We recommend to use MadNLPMumps to solve your optimal control problem with MUMPS linear solver.\n\nFor instance, let us try MadNLPMumps solver with ExaModel modeller.\n\nusing MadNLPMumps\n\nocp = @def begin\n t ∈ [ t0, tf ], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n x(t0) == x0\n x(tf) == [0, 0]\n ∂(q)(t) == v(t)\n ∂(v)(t) == u(t)\n 0.5∫( u(t)^2 ) → min\nend\n\nsolve(ocp, :exa, :madnlp; disc_method=:trapeze)\nnothing # hide\n\nNote that you can provide a partial description. If multiple full descriptions contain it, priority is given to the first one in the list. Hence, all of the following calls are equivalent:\n\nsolve(ocp)\nsolve(ocp, :direct )\nsolve(ocp, :adnlp )\nsolve(ocp, :ipopt)\nsolve(ocp, :direct, :adnlp )\nsolve(ocp, :direct, :ipopt)\nsolve(ocp, :direct, :adnlp, :ipopt)","category":"section"},{"location":"manual-solve.html#manual-solve-direct-method","page":"Solve a problem","title":"Direct method and options","text":"The main options for the direct method, with their [default] values, are:\n\ndisplay ([true], false): setting display = false disables output.\ninit: information for the initial guess. It can be given as numerical values, functions, or an existing solution. See how to set an initial guess.\ngrid_size ([250]): number of time steps in the (uniform) time discretization grid. More precisely, if N = grid_size and the initial and final times are t0 and tf, then the step length Δt = (tf - t0) / N.\ntime_grid ([nothing]): explicit time grid (can be non-uniform). If time_grid = nothing, a uniform grid of length grid_size is used.\ndisc_method (:trapeze, [:midpoint], :euler, :euler_implicit, :gauss_legendre_2, :gauss_legendre_3): the discretisation scheme to transform the dynamics into nonlinear equations. See the discretization method tutorial for more details.\nadnlp_backend ([:optimized], :manual, :default): backend used for automatic differentiation to create the ADNLPModels.ADNLPModel.\n\nFor advanced usage, see:\n\ndiscrete continuation tutorial,\nNLP manipulation tutorial.\n\nnote: Note\nThe main solve method from OptimalControl.jl simply redirects to CTDirect.solve in that case.","category":"section"},{"location":"manual-solve.html#manual-solve-solvers-specific-options","page":"Solve a problem","title":"NLP solvers specific options","text":"In addition to these options, any remaining keyword arguments passed to solve are forwarded to the NLP solver.\n\nwarning: Warning\nThe option names and accepted values depend on the chosen solver. For example, in Ipopt, print_level expects an integer, whereas in MadNLP it must be a MadNLP.LogLevels value (valid options: MadNLP.{TRACE, DEBUG, INFO, NOTICE, WARN, ERROR}). Moreover, some options are solver-specific: for instance, mu_strategy exists in Ipopt but not in MadNLP.\n\nPlease refer to the Ipopt options list and the NLPModelsIpopt.jl documentation. \n\nsol = solve(ocp; max_iter=0, tol=1e-6, print_level=0)\niterations(sol)\n\nLikewise, see the MadNLP.jl options and the MadNLP.jl documentation. \n\nsol = solve(ocp, :madnlp; max_iter=0, tol=1e-6, print_level=MadNLP.ERROR)\niterations(sol)\n\n","category":"section"},{"location":"manual-solve.html#CommonSolve.solve-Tuple{Model, Vararg{Symbol}}-manual-solve","page":"Solve a problem","title":"CommonSolve.solve","text":"solve(\n ocp::Model,\n description::Symbol...;\n display,\n kwargs...\n) -> Solution{TimeGridModelType, TimesModelType, StateModelType, ControlModelType, VariableModelType, CostateModelType, Float64, DualModelType, CTModels.SolverInfos{Dict{Symbol, Any}}, ModelType} where {TimeGridModelType<:CTModels.TimeGridModel, TimesModelType<:CTModels.TimesModel, StateModelType<:Union{CTModels.StateModelSolution{TS} where TS<:CTModels.var\"#84#85\", CTModels.StateModelSolution{TS} where TS<:CTModels.var\"#86#87\"}, ControlModelType<:Union{CTModels.ControlModelSolution{TS} where TS<:CTModels.var\"#88#89\", CTModels.ControlModelSolution{TS} where TS<:CTModels.var\"#90#91\"}, VariableModelType<:Union{CTModels.VariableModelSolution{Vector{Float64}}, CTModels.VariableModelSolution{Float64}}, CostateModelType<:Union{CTModels.var\"#92#93\", CTModels.var\"#94#95\"}, DualModelType<:(CTModels.DualModel{PC_Dual, Vector{Float64}, SC_LB_Dual, SC_UB_Dual, CC_LB_Dual, CC_UB_Dual, Vector{Float64}, Vector{Float64}} where {PC_Dual<:Union{CTModels.var\"#100#101\"{CTModels.var\"#96#97\"}, CTModels.var\"#98#99\"{CTModels.var\"#96#97\"}}, SC_LB_Dual<:Union{CTModels.var\"#104#105\"{CTModels.var\"#102#103\"}, CTModels.var\"#106#107\"{CTModels.var\"#102#103\"}}, SC_UB_Dual<:Union{CTModels.var\"#110#111\"{CTModels.var\"#108#109\"}, CTModels.var\"#112#113\"{CTModels.var\"#108#109\"}}, CC_LB_Dual<:Union{CTModels.var\"#116#117\"{CTModels.var\"#114#115\"}, CTModels.var\"#118#119\"{CTModels.var\"#114#115\"}}, CC_UB_Dual<:Union{CTModels.var\"#122#123\"{CTModels.var\"#120#121\"}, CTModels.var\"#124#125\"{CTModels.var\"#120#121\"}}}), ModelType<:(Model{<:CTModels.TimeDependence, T} where T<:CTModels.TimesModel)}\n\n\nSolve the optimal control problem ocp by the method given by the (optional) description. The get the list of available methods:\n\njulia> available_methods()\n\nThe higher in the list, the higher is the priority. The keyword arguments are specific to the chosen method and represent the options of the solver.\n\nArguments\n\nocp::OptimalControlModel: the optimal control problem to solve.\ndescription::Symbol...: the description of the method used to solve the problem.\nkwargs...: the options of the method.\n\nExamples\n\nThe simplest way to solve the optimal control problem is to call the function without any argument.\n\njulia> sol = solve(ocp)\n\nThe method description is a list of Symbols. The default is\n\njulia> sol = solve(ocp, :direct, :adnlp, :ipopt)\n\nYou can provide a partial description, the function will find the best match.\n\njulia> sol = solve(ocp, :direct)\n\nnote: Note\nSee the resolution methods section for more details about the available methods.\n\nThe keyword arguments are specific to the chosen method and correspond to the options of the different solvers. For example, the keyword max_iter is an Ipopt option that may be used to set the maximum number of iterations.\n\njulia> sol = solve(ocp, :direct, :ipopt, max_iter=100)\n\nnote: Note\nSee the direct method section for more details about associated options. These options also detailed in the CTDirect.solve documentation. This main solve method redirects to CTDirect.solve when the :direct Symbol is given in the description. See also the NLP solvers section for more details about Ipopt or MadNLP options.\n\nTo help the solve converge, an initial guess can be provided within the keyword init. You can provide the initial guess for the state, control, and variable.\n\njulia> sol = solve(ocp, init=(state=[-0.5, 0.2], control=0.5))\n\nnote: Note\nSee how to set an initial guess for more details.\n\n\n\n\n\n","category":"method"},{"location":"manual-solve-gpu.html#manual-solve-gpu","page":"Solve on GPU","title":"Solve on GPU","text":"In this manual, we explain how to use the solve function from OptimalControl.jl on GPU. We rely on ExaModels.jl and MadNLPGPU.jl and currently only provide support for NVIDIA thanks to CUDA.jl. Consider the following simple Lagrange optimal control problem:\n\nusing OptimalControl\nusing MadNLPGPU\nusing CUDA\n\nocp = @def begin\n t ∈ [0, 1], time\n x ∈ R², state\n u ∈ R, control\n v ∈ R, variable\n x(0) == [0, 1]\n x(1) == [0, -1]\n ∂(x₁)(t) == x₂(t)\n ∂(x₂)(t) == u(t)\n 0 ≤ x₁(t) + v^2 ≤ 1.1\n -10 ≤ u(t) ≤ 10\n 1 ≤ v ≤ 2\n ∫(u(t)^2 + v) → min\nend\n\nnote: Note\nWe have used MadNLPGPU instead of MadNLP, that is able to solve on GPU (leveraging CUDSS.jl) optimisation problems modelled with ExaModels.jl. As a direct transcription towards an ExaModels.ExaModel is performed (:exa keyword below), there are limitations on the syntax (check the Solve section).\n\nComputation on GPU is currently only tested with CUDA, and the associated backend must be passed to ExaModels as is done below (also note the :exa keyword to indicate the modeller, and :madnlp for the solver):\n\nsol = solve(ocp, :exa, :madnlp; exa_backend=CUDABackend())\n\n▫ This is OptimalControl version v1.1.2 running with: direct, exa, madnlp.\n\n▫ The optimal control problem is solved with CTDirect version v0.17.2.\n\n ┌─ The NLP is modelled with ExaModels and solved with MadNLPMumps.\n │\n ├─ Number of time steps⋅: 250\n └─ Discretisation scheme: midpoint\n\n▫ This is MadNLP version v0.8.12, running with cuDSS v0.6.0\n\nNumber of nonzeros in constraint Jacobian............: 2256\nNumber of nonzeros in Lagrangian Hessian.............: 1251\n\nTotal number of variables............................: 754\n variables with only lower bounds: 0\n variables with lower and upper bounds: 252\n variables with only upper bounds: 0\nTotal number of equality constraints.................: 504\nTotal number of inequality constraints...............: 251\n inequality constraints with only lower bounds: 0\n inequality constraints with lower and upper bounds: 251\n inequality constraints with only upper bounds: 0\n\niter objective inf_pr inf_du inf_compl lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n 0 1.0200000e+00 1.10e+00 1.00e+00 1.01e+01 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0\n 1 1.0199978e+00 1.10e+00 1.45e+00 8.73e-02 -1.0 1.97e+02 - 5.05e-03 4.00e-07h 1\n ...\n 27 9.8891249e+00 2.22e-16 7.11e-15 1.60e-09 -9.0 2.36e-04 - 1.00e+00 1.00e+00h 1\n\nNumber of Iterations....: 27\n\n (scaled) (unscaled)\nObjective...............: 9.8891248915014458e+00 9.8891248915014458e+00\nDual infeasibility......: 7.1054273576010019e-15 7.1054273576010019e-15\nConstraint violation....: 2.2204460492503131e-16 2.2204460492503131e-16\nComplementarity.........: 1.5999963912421547e-09 1.5999963912421547e-09\nOverall NLP error.......: 1.5999963912421547e-09 1.5999963912421547e-09\n\nNumber of objective function evaluations = 28\nNumber of objective gradient evaluations = 28\nNumber of constraint evaluations = 28\nNumber of constraint Jacobian evaluations = 28\nNumber of Lagrangian Hessian evaluations = 27\nTotal wall-clock secs in solver (w/o fun. eval./lin. alg.) = 0.126\nTotal wall-clock secs in linear solver = 0.103\nTotal wall-clock secs in NLP function evaluations = 0.022\nTotal wall-clock secs = 0.251\n\nEXIT: Optimal Solution Found (tol = 1.0e-08).\n\n","category":"section"},{"location":"api-ctbase.html#CTBase.jl","page":"CTBase.jl","title":"CTBase.jl","text":"The CTBase.jl package is part of the control-toolbox ecosystem.\n\nflowchart TD\nB(CTBase)\nM(CTModels)\nP(CTParser)\nO(OptimalControl)\nD(CTDirect)\nF(CTFlows)\nO --> D\nO --> M\nO --> F\nO --> P\nF --> M\nO --> B\nF --> B\nD --> B\nD --> M\nP --> M\nP --> B\nM --> B\nstyle B fill:#FBF275\n\nOptimalControl heavily relies on CTBase. We refer to CTBase API for more details.\n\n","category":"section"},{"location":"api-ctdirect.html#CTDirect.jl","page":"CTDirect.jl","title":"CTDirect.jl","text":"The CTDirect.jl package is part of the control-toolbox ecosystem.\n\nflowchart TD\nB(CTBase)\nM(CTModels)\nP(CTParser)\nO(OptimalControl)\nD(CTDirect)\nF(CTFlows)\nO --> D\nO --> M\nO --> F\nO --> P\nF --> M\nO --> B\nF --> B\nD --> B\nD --> M\nP --> M\nP --> B\nM --> B\nstyle D fill:#FBF275\n\nOptimalControl heavily relies on CTDirect. We refer to CTDirect API for more details.\n\n","category":"section"},{"location":"juliacon-paris-2025.html","page":"Solving optimal control problems on GPU with Julia","title":"Solving optimal control problems on GPU with Julia","text":"\"jlesc17\"","category":"section"},{"location":"juliacon-paris-2025.html#Solving-optimal-control-problems-on-GPU-with-Julia","page":"Solving optimal control problems on GPU with Julia","title":"Solving optimal control problems on GPU with Julia","text":"","category":"section"},{"location":"juliacon-paris-2025.html#[Jean-Baptiste-Caillau](http://caillau.perso.math.cnrs.fr),-[Olivier-Cots](https://ocots.github.io),-[Joseph-Gergaud](https://github.com/joseph-gergaud),-[Pierre-Martinon](https://github.com/PierreMartinon),-[Sophia-Sed](https://sed-sam-blog.gitlabpages.inria.fr)","page":"Solving optimal control problems on GPU with Julia","title":"Jean-Baptiste Caillau, Olivier Cots, Joseph Gergaud, Pierre Martinon, Sophia Sed","text":"\"affiliations\"","category":"section"},{"location":"juliacon-paris-2025.html#What-it's-about","page":"Solving optimal control problems on GPU with Julia","title":"What it's about","text":"Nonlinear optimal control of ODEs:\n\ng(x(t_0)x(t_f)) + int_t_0^t_f f^0(x(t) u(t)) mathrmdt to min\n\nsubject to\n\ndotx(t) = f(x(t) u(t))quad t in t_0 t_f\n\nplus boundary, control and state constraints\n\nOur core interests: numerical & geometrical methods in control, applications\nWhy Julia: fast (+ JIT), strongly typed, high-level (AD, macros), fast optimisation and ODE solvers available, rapidly growing community","category":"section"},{"location":"juliacon-paris-2025.html#Discretise-then-solve-strategy-(*aka*-direct-methods)","page":"Solving optimal control problems on GPU with Julia","title":"Discretise then solve strategy (aka direct methods)","text":"Discretising an OCP into an NLP: h_i = t_i+1-t_i,\n\ng(X_0X_N) + sum_i=0^N h_i f^0(X_iU_i) to min\n\nsubject to \n\nX_i+1 - X_i - h_i f(X_i U_i) = 0quad i = 0dotsN-1\n\nplus other constraints on X = (X_i)_i=0N and U = (U_i)_i=0N such as boundary and path (state and / or control) constraints :\n\nb(t_0 X_0 t_N X_N) = 0\n\nc(X_i U_i) leq 0quad i = 0dotsN\n\nSIMD parallelism (f_0, f, g) + sparsity: Kernels for GPU (KernelAbstraction.jl) and sparse linear algebra (CUDSS.jl)\nModelling and optimising for GPU: ExaModels.jl + MadNLP.jl, with built-in AD\nSimple example, DSL\nCompile into an ExaModel (one pass compiler, syntax + semantics)\n\n
Simple example, generated code\n\nbegin\n #= /data/caillau/CTParser.jl/src/onepass.jl:1003 =#\n function (; scheme = :trapezoidal, grid_size = 200, backend = nothing, init = (0.1, 0.1, 0.1), base_type = Float64)\n #= /data/caillau/CTParser.jl/src/onepass.jl:1003 =#\n #= /data/caillau/CTParser.jl/src/onepass.jl:1004 =#\n LineNumberNode(0, \"box constraints: variable\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:1005 =#\n begin\n LineNumberNode(0, \"box constraints: state\")\n begin\n var\"##235\" = -Inf * ones(3)\n #= /data/caillau/CTParser.jl/src/onepass.jl:461 =#\n var\"##236\" = Inf * ones(3)\n end\n end\n #= /data/caillau/CTParser.jl/src/onepass.jl:1006 =#\n begin\n LineNumberNode(0, \"box constraints: control\")\n begin\n var\"##237\" = -Inf * ones(1)\n #= /data/caillau/CTParser.jl/src/onepass.jl:512 =#\n var\"##238\" = Inf * ones(1)\n end\n end\n #= /data/caillau/CTParser.jl/src/onepass.jl:1007 =#\n var\"##230\" = ExaModels.ExaCore(base_type; backend = backend)\n #= /data/caillau/CTParser.jl/src/onepass.jl:1008 =#\n begin\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:23 =#\n var\"##232\" = begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n (1 - 0) / grid_size\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 1, \": \", \"(t ∈ [0, 1], time)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:24 =#\n x = begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.variable(var\"##230\", 3, 0:grid_size; lvar = [var\"##235\"[i] for (i, j) = Base.product(1:3, 0:grid_size)], uvar = [var\"##236\"[i] for (i, j) = Base.product(1:3, 0:grid_size)], start = init[2])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 2, \": \", \"(x ∈ R ^ 3, state)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:25 =#\n var\"u##239\" = begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.variable(var\"##230\", 1, 0:grid_size; lvar = [var\"##237\"[i] for (i, j) = Base.product(1:1, 0:grid_size)], uvar = [var\"##238\"[i] for (i, j) = Base.product(1:1, 0:grid_size)], start = init[3])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 3, \": \", \"(u ∈ R, control)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:26 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.constraint(var\"##230\", (x[i, 0] for i = 1:3); lcon = [-1, 0, 0], ucon = [-1, 0, 0])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 4, \": \", \"x(0) == [-1, 0, 0]\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:27 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.constraint(var\"##230\", (x[i, grid_size] for i = 1:2); lcon = [0, 0], ucon = [0, 0])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 5, \": \", \"(x[1:2])(1) == [0, 0]\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:28 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#\n if scheme == :trapezoidal\n #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#\n ExaModels.constraint(var\"##230\", ((x[1, j + 1] - x[1, j]) - (var\"##232\" * (x[2, j] + x[2, j + 1])) / 2 for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler\n #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#\n ExaModels.constraint(var\"##230\", ((x[1, j + 1] - x[1, j]) - var\"##232\" * x[2, j] for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b\n #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#\n ExaModels.constraint(var\"##230\", ((x[1, j + 1] - x[1, j]) - var\"##232\" * x[2, j + 1] for j = 0:grid_size - 1))\n else\n #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#\n throw(\"unknown numerical scheme\")\n end\n end\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 6, \": \", \"(∂(x₁))(t) == x₂(t)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:29 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#\n if scheme == :trapezoidal\n #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#\n ExaModels.constraint(var\"##230\", ((x[2, j + 1] - x[2, j]) - (var\"##232\" * (var\"u##239\"[1, j] + var\"u##239\"[1, j + 1])) / 2 for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler\n #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#\n ExaModels.constraint(var\"##230\", ((x[2, j + 1] - x[2, j]) - var\"##232\" * var\"u##239\"[1, j] for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b\n #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#\n ExaModels.constraint(var\"##230\", ((x[2, j + 1] - x[2, j]) - var\"##232\" * var\"u##239\"[1, j + 1] for j = 0:grid_size - 1))\n else\n #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#\n throw(\"unknown numerical scheme\")\n end\n end\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 7, \": \", \"(∂(x₂))(t) == u(t)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:30 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#\n if scheme == :trapezoidal\n #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#\n ExaModels.constraint(var\"##230\", ((x[3, j + 1] - x[3, j]) - (var\"##232\" * (0.5 * var\"u##239\"[1, j] ^ 2 + 0.5 * var\"u##239\"[1, j + 1] ^ 2)) / 2 for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler\n #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#\n ExaModels.constraint(var\"##230\", ((x[3, j + 1] - x[3, j]) - var\"##232\" * (0.5 * var\"u##239\"[1, j] ^ 2) for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b\n #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#\n ExaModels.constraint(var\"##230\", ((x[3, j + 1] - x[3, j]) - var\"##232\" * (0.5 * var\"u##239\"[1, j + 1] ^ 2) for j = 0:grid_size - 1))\n else\n #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#\n throw(\"unknown numerical scheme\")\n end\n end\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 8, \": \", \"(∂(x₃))(t) == 0.5 * u(t) ^ 2\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:31 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.objective(var\"##230\", x[3, grid_size])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 9, \": \", \"x₃(1) → min\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n end\n #= /data/caillau/CTParser.jl/src/onepass.jl:1009 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:994 =#\n !(isempty([1, 2, 3])) || throw(CTBase.ParsingError(\"dynamics not defined\"))\n #= /data/caillau/CTParser.jl/src/onepass.jl:995 =#\n sort([1, 2, 3]) == 1:3 || throw(CTBase.ParsingError(\"some coordinates of dynamics undefined\"))\n end\n #= /data/caillau/CTParser.jl/src/onepass.jl:1010 =#\n return ExaModels.ExaModel(var\"##230\")\n end\nend\n\n
\n\nSolving (MadNLP + CUDSS)\n\nThis is MadNLP version v0.8.7, running with cuDSS v0.4.0\n\nNumber of nonzeros in constraint Jacobian............: 12005\nNumber of nonzeros in Lagrangian Hessian.............: 9000\n\nTotal number of variables............................: 4004\n variables with only lower bounds: 0\n variables with lower and upper bounds: 0\n variables with only upper bounds: 0\nTotal number of equality constraints.................: 3005\nTotal number of inequality constraints...............: 0\n inequality constraints with only lower bounds: 0\n inequality constraints with lower and upper bounds: 0\n inequality constraints with only upper bounds: 0\n\niter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n 0 1.0000000e-01 1.10e+00 1.00e+00 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0\n 1 1.0001760e-01 1.10e+00 3.84e-03 -1.0 6.88e+02 -4.0 1.00e+00 2.00e-07h 2\n 2 -5.2365072e-03 1.89e-02 1.79e-07 -1.0 6.16e+00 -4.5 1.00e+00 1.00e+00h 1\n 3 5.9939621e+00 2.28e-03 1.66e-04 -3.8 6.00e+00 -5.0 9.99e-01 1.00e+00h 1\n 4 5.9996210e+00 2.94e-06 8.38e-07 -3.8 7.70e-02 - 1.00e+00 1.00e+00h 1\n\nNumber of Iterations....: 4\n\n (scaled) (unscaled)\nObjective...............: 5.9996210189633494e+00 5.9996210189633494e+00\nDual infeasibility......: 8.3756005011360529e-07 8.3756005011360529e-07\nConstraint violation....: 2.9426923277963834e-06 2.9426923277963834e-06\nComplementarity.........: 2.0007459547789288e-06 2.0007459547789288e-06\nOverall NLP error.......: 2.9426923277963834e-06 2.9426923277963834e-06\n\nNumber of objective function evaluations = 6\nNumber of objective gradient evaluations = 5\nNumber of constraint evaluations = 6\nNumber of constraint Jacobian evaluations = 5\nNumber of Lagrangian Hessian evaluations = 4\nTotal wall-clock secs in solver (w/o fun. eval./lin. alg.) = 0.072\nTotal wall-clock secs in linear solver = 0.008\nTotal wall-clock secs in NLP function evaluations = 0.003\nTotal wall-clock secs = 0.083","category":"section"},{"location":"juliacon-paris-2025.html#Mini-benchmark:-[Goddard](https://control-toolbox.org/Tutorials.jl/stable/tutorial-goddard.html)-and-[Quadrotor](https://github.com/control-toolbox/CTParser.jl/blob/211042b061be17b3f7fdff41cb53701d30b128db/test/test_onepass_exa.jl#L926)-problems","page":"Solving optimal control problems on GPU with Julia","title":"Mini-benchmark: Goddard and Quadrotor problems","text":"Goddard, A100 run\n\n\"goddard-a100\"\n\nGoddard, H100 run \n\n\"goddard-h100\"\n\nQuadrotor, A100 run \n\n\"quadrotor-a100\"\n\nQuadrotor, H100 run \n\n\"quadrotor-h100\"","category":"section"},{"location":"juliacon-paris-2025.html#Wrap-up","page":"Solving optimal control problems on GPU with Julia","title":"Wrap up","text":"High level modelling of optimal control problems\nSolving on CPU and GPU","category":"section"},{"location":"juliacon-paris-2025.html#What's-next","page":"Solving optimal control problems on GPU with Julia","title":"What's next","text":"New applications (space mechanics, biology, quantum mechanics and more) -> check David's talk\nCollection of problems: OptimalControlProblems.jl\n... and open to contributions! Give it a try, give it a star ⭐️\n\n\"OptimalControl.jl\"","category":"section"},{"location":"juliacon-paris-2025.html#control-toolbox.org","page":"Solving optimal control problems on GPU with Julia","title":"control-toolbox.org","text":"Open toolbox\nCollection of Julia Packages rooted at OptimalControl.jl\n\n\"control-toolbox.org\"","category":"section"},{"location":"juliacon-paris-2025.html#Credits-(not-exhaustive!)","page":"Solving optimal control problems on GPU with Julia","title":"Credits (not exhaustive!)","text":"ADNLPModels.jl\nDifferentiationInterface.jl\nDifferentialEquations.jl\nExaModels.jl\nIpopt.jl\nMadNLP.jl\nMLStyle.jl","category":"section"},{"location":"juliacon-paris-2025.html#Acknowledgements","page":"Solving optimal control problems on GPU with Julia","title":"Acknowledgements","text":"Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).\n\n\"affiliations\"\n\n","category":"section"},{"location":"manual-initial-guess.html#manual-initial-guess","page":"Set an initial guess","title":"Initial guess (or iterate) for the resolution","text":"We present the different possibilities to provide an initial guess to solve an optimal control problem with the OptimalControl.jl package. \n\nFirst, we need to import OptimalControl.jl to define the optimal control problem and NLPModelsIpopt.jl to solve it. We also need to import Plots.jl to plot solutions.\n\nusing OptimalControl\nusing NLPModelsIpopt\nusing Plots\n\nFor the illustrations, we define the following optimal control problem.\n\nt0 = 0\ntf = 10\nα = 5\n\nocp = @def begin\n t ∈ [t0, tf], time\n v ∈ R, variable\n x ∈ R², state\n u ∈ R, control\n x(t0) == [ -1, 0 ]\n x₁(tf) == 0\n ẋ(t) == [ x₂(t), x₁(t) + α*x₁(t)^2 + u(t) ]\n x₂(tf)^2 + ∫( 0.5u(t)^2 ) → min\nend\nnothing # hide","category":"section"},{"location":"manual-initial-guess.html#Default-initial-guess","page":"Set an initial guess","title":"Default initial guess","text":"We first solve the problem without giving an initial guess. This will default to initialize all variables to 0.1.\n\n# solve the optimal control problem without initial guess\nsol = solve(ocp; display=false)\nprintln(\"Number of iterations: \", iterations(sol))\nnothing # hide\n\nLet us plot the solution of the optimal control problem.\n\nplot(sol; size=(600, 450))\n\nNote that the following formulations are equivalent to not giving an initial guess.\n\nsol = solve(ocp; init=nothing, display=false)\nprintln(\"Number of iterations: \", iterations(sol))\n\nsol = solve(ocp; init=(), display=false)\nprintln(\"Number of iterations: \", iterations(sol))\nnothing # hide\n\ntip: Interactions with an optimal control solution\nTo get the number of iterations of the solver, check the iterations function.\n\nTo reduce the number of iterations and improve the convergence, we can give an initial guess to the solver. This initial guess can be built from constant values, interpolated vectors, functions, or existing solutions. Except when initializing from a solution, the arguments are to be passed as a named tuple init=(state=..., control=..., variable=...) whose fields are optional. Missing fields will revert to default initialization (ie constant 0.1).","category":"section"},{"location":"manual-initial-guess.html#Constant-initial-guess","page":"Set an initial guess","title":"Constant initial guess","text":"We first illustrate the constant initial guess, using vectors or scalars according to the dimension.\n\n# solve the optimal control problem with initial guess with constant values\nsol = solve(ocp; init=(state=[-0.2, 0.1], control=-0.2, variable=0.05), display=false)\nprintln(\"Number of iterations: \", iterations(sol))\nnothing # hide\n\nPartial initializations are also valid, as shown below. Note the ending comma when a single argument is passed, since it must be a tuple.\n\n# initialisation only on the state\nsol = solve(ocp; init=(state=[-0.2, 0.1],), display=false)\nprintln(\"Number of iterations: \", iterations(sol))\n\n# initialisation only on the control\nsol = solve(ocp; init=(control=-0.2,), display=false)\nprintln(\"Number of iterations: \", iterations(sol))\n\n# initialisation only on the state and the variable\nsol = solve(ocp; init=(state=[-0.2, 0.1], variable=0.05), display=false)\nprintln(\"Number of iterations: \", iterations(sol))\nnothing # hide","category":"section"},{"location":"manual-initial-guess.html#Functional-initial-guess","page":"Set an initial guess","title":"Functional initial guess","text":"For the state and control, we can also provide functions of time as initial guess.\n\n# initial guess as functions of time\nx(t) = [ -0.2t, 0.1t ]\nu(t) = -0.2t\n\nsol = solve(ocp; init=(state=x, control=u, variable=0.05), display=false)\nprintln(\"Number of iterations: \", iterations(sol))\nnothing # hide","category":"section"},{"location":"manual-initial-guess.html#Vector-initial-guess-(interpolated)","page":"Set an initial guess","title":"Vector initial guess (interpolated)","text":"Initialization can also be provided with vectors / matrices to be interpolated along a given time grid. In this case the time steps must be given through an additional argument time, which can be a vector or line/column matrix. For the values to be interpolated both matrices and vectors of vectors are allowed, but the shape should be number of time steps x variable dimension. Simple vectors are also allowed for variables of dimension 1.\n\n# initial guess as vector of points\nt_vec = LinRange(t0,tf,4)\nx_vec = [[0, 0], [-0.1, 0.3], [-0.15,0.4], [-0.3, 0.5]]\nu_vec = [0, -0.8, -0.3, 0]\n\nsol = solve(ocp; init=(time=t_vec, state=x_vec, control=u_vec, variable=0.05), display=false)\nprintln(\"Number of iterations: \", iterations(sol))\nnothing # hide\n\nNote: in the free final time case, the given time grid should be consistent with the initial guess provided for the final time (in the optimization variables).","category":"section"},{"location":"manual-initial-guess.html#Mixed-initial-guess","page":"Set an initial guess","title":"Mixed initial guess","text":"The constant, functional and vector initializations can be mixed, for instance as\n\n# we can mix constant values with functions of time\nsol = solve(ocp; init=(state=[-0.2, 0.1], control=u, variable=0.05), display=false)\nprintln(\"Number of iterations: \", iterations(sol))\n\n# wa can mix every possibility\nsol = solve(ocp; init=(time=t_vec, state=x_vec, control=u, variable=0.05), display=false)\nprintln(\"Number of iterations: \", iterations(sol))\nnothing # hide","category":"section"},{"location":"manual-initial-guess.html#Solution-as-initial-guess-(warm-start)","page":"Set an initial guess","title":"Solution as initial guess (warm start)","text":"Finally, we can use an existing solution to provide the initial guess. The dimensions of the state, control and optimization variable must coincide. This particular feature allows an easy implementation of discrete continuations.\n\n# generate the initial solution\nsol_init = solve(ocp; display=false)\n\n# solve the problem using solution as initial guess\nsol = solve(ocp; init=sol_init, display=false)\nprintln(\"Number of iterations: \", iterations(sol))\nnothing # hide\n\nNote that you can also manually pick and choose which data to reuse from a solution, by recovering the functions state(sol), control(sol) and the values variable(sol). For instance the following formulation is equivalent to the init=sol one.\n\n# use a previous solution to initialise picking data\nsol = solve(ocp; \n init = (\n state = state(sol), \n control = control(sol), \n variable = variable(sol)\n ), \n display=false)\nprintln(\"Number of iterations: \", iterations(sol))\nnothing # hide\n\ntip: Interactions with an optimal control solution\nPlease check state, costate, control and variable to get data from the solution. The functions state, costate and control return functions of time and variable returns a vector.","category":"section"},{"location":"manual-initial-guess.html#Costate-/-multipliers","page":"Set an initial guess","title":"Costate / multipliers","text":"For the moment there is no option to provide an initial guess for the costate / multipliers.\n\n","category":"section"},{"location":"example-double-integrator-energy.html#example-double-integrator-energy","page":"Energy minimisation","title":"Double integrator: energy minimisation","text":"Let us consider a wagon moving along a rail, whose acceleration can be controlled by a force u. We denote by x = (x_1 x_2) the state of the wagon, where x_1 is the position and x_2 the velocity.\n\n\n\nWe assume that the mass is constant and equal to one, and that there is no friction. The dynamics are given by\n\n dot x_1(t) = x_2(t) quad dot x_2(t) = u(t)quad u(t) in R\n\nwhich is simply the double integrator system. Let us consider a transfer starting at time t_0 = 0 and ending at time t_f = 1, for which we want to minimise the transfer energy\n\n frac12int_0^1 u^2(t) mathrmdt\n\nstarting from x(0) = (-1 0) and aiming to reach the target x(1) = (0 0).\n\nFirst, we need to import the OptimalControl.jl package to define the optimal control problem, NLPModelsIpopt.jl to solve it, and Plots.jl to visualise the solution.\n\nusing OptimalControl\nusing NLPModelsIpopt\nusing Plots","category":"section"},{"location":"example-double-integrator-energy.html#Optimal-control-problem","page":"Energy minimisation","title":"Optimal control problem","text":"Let us define the problem with the @def macro:\n\n
\n
\n\nt0 = 0\ntf = 1\nx0 = [-1, 0]\nxf = [0, 0]\nocp = @def begin\n t ∈ [t0, tf], time\n x ∈ R², state\n u ∈ R, control\n x(t0) == x0\n x(tf) == xf\n ẋ(t) == [x₂(t), u(t)]\n 0.5∫( u(t)^2 ) → min\nend\nnothing # hide\n\n
\n
","category":"section"},{"location":"example-double-integrator-energy.html#Mathematical-formulation","page":"Energy minimisation","title":"Mathematical formulation","text":" beginaligned\n textMinimise frac12int_0^1 u^2(t) mathrmdt \n textsubject to \n dotx_1(t) = x_2(t) 05em\n dotx_2(t) = u(t) 10em\n x(0) = (-10) 05em \n x(1) = (00)\n endaligned\n\n
\n
\n\nnote: Nota bene\nFor a comprehensive introduction to the syntax used above to define the optimal control problem, see this abstract syntax tutorial. In particular, non-Unicode alternatives are available for derivatives, integrals, etc.","category":"section"},{"location":"example-double-integrator-energy.html#example-double-integrator-energy-solve-plot","page":"Energy minimisation","title":"Solve and plot","text":"","category":"section"},{"location":"example-double-integrator-energy.html#Direct-method","page":"Energy minimisation","title":"Direct method","text":"We can solve it simply with:\n\nsol = solve(ocp)\nnothing # hide\n\nAnd plot the solution with:\n\nplot(sol)\n\nnote: Nota bene\nThe solve function has options, see the solve tutorial. You can customise the plot, see the plot tutorial.","category":"section"},{"location":"example-double-integrator-energy.html#Indirect-method","page":"Energy minimisation","title":"Indirect method","text":"The first solution was obtained using the so-called direct method.[1] Another approach is to use an indirect simple shooting method. We begin by importing the necessary packages.\n\nusing OrdinaryDiffEq # Ordinary Differential Equations (ODE) solver\nusing NonlinearSolve # Nonlinear Equations (NLE) solver\n\nTo define the shooting function, we must provide the maximising control in feedback form:\n\n# maximising control, H(x, p, u) = p₁x₂ + p₂u - u²/2\nu(x, p) = p[2]\n\n# Hamiltonian flow\nf = Flow(ocp, u)\n\n# state projection, p being the costate\nπ((x, p)) = x\n\n# shooting function\nS(p0) = π( f(t0, x0, p0, tf) ) - xf\nnothing # hide\n\nWe are now ready to solve the shooting equations.\n\n# auxiliary in-place NLE function\nnle!(s, p0, λ) = s[:] = S(p0)\n\n# initial guess for the Newton solver\np0_guess = [1, 1]\n\n# NLE problem with initial guess\nprob = NonlinearProblem(nle!, p0_guess)\n\n# resolution of S(p0) = 0\nsol = solve(prob; show_trace=Val(true))\np0_sol = sol.u # costate solution\n\n# print the costate solution and the shooting function evaluation\nprintln(\"\\ncostate: p0 = \", p0_sol)\nprintln(\"shoot: S(p0) = \", S(p0_sol), \"\\n\")\n\nTo plot the solution obtained by the indirect method, we need to build the solution of the optimal control problem. This is done using the costate solution and the flow function.\n\nsol = f((t0, tf), x0, p0_sol; saveat=range(t0, tf, 100))\nplot(sol)\n\n[1]: J. T. Betts. Practical methods for optimal control using nonlinear programming. Society for Industrial and Applied Mathematics (SIAM), Philadelphia, PA, 2001.\n\nnote: Note\nYou can use MINPACK.jl instead of NonlinearSolve.jl.\nFor more details about the flow construction, visit the Compute flows from optimal control problems page.\nIn this simple example, we have set an arbitrary initial guess. It can be helpful to use the solution of the direct method to initialise the shooting method. See the Goddard tutorial for such a concrete application.","category":"section"},{"location":"example-double-integrator-energy.html#State-constraint","page":"Energy minimisation","title":"State constraint","text":"","category":"section"},{"location":"example-double-integrator-energy.html#Direct-method:-constrained-case","page":"Energy minimisation","title":"Direct method: constrained case","text":"We add the path constraint\n\n x_2(t) le 12\n\nLet us model, solve and plot the optimal control problem with this constraint.\n\n# the upper bound for x₂\na = 1.2\n\n# the optimal control problem\nocp = @def begin\n t ∈ [t0, tf], time\n x ∈ R², state\n u ∈ R, control\n x₂(t) ≤ a\n x(t0) == x0\n x(tf) == xf\n ẋ(t) == [x₂(t), u(t)]\n 0.5∫( u(t)^2 ) → min\nend\n\n# solve with a direct method using default settings\nsol = solve(ocp)\n\n# plot the solution\nplt = plot(sol; label=\"Direct\", size=(800, 600))","category":"section"},{"location":"example-double-integrator-energy.html#Indirect-method:-constrained-case","page":"Energy minimisation","title":"Indirect method: constrained case","text":"The pseudo-Hamiltonian is (considering the normal case):\n\nH(x p u mu) = p_1 x_2 + p_2 u - fracu^22 + mu c(x)\n\nwith c(x) = x_2 - a. Along a boundary arc we have c(x(t)) = 0. Differentiating, we obtain:\n\n fracmathrmdmathrmdtc(x(t)) = dotx_2(t) = u(t) = 0\n\nThe zero control is maximising; hence, p_2(t) = 0 along the boundary arc.\n\n dotp_2(t) = -p_1(t) - mu(t) quad Rightarrow mu(t) = -p_1(t)\n\nSince the adjoint vector is continuous at the entry time t_1 and the exit time t_2, we have four unknowns: the initial costate p_0 in mathbbR^2 and the times t_1 and t_2. We need four equations: the target condition provides two, reaching the constraint at time t_1 gives c(x(t_1)) = 0, and finally p_2(t_1) = 0.\n\n# flow for unconstrained extremals\nf = Flow(ocp, (x, p) -> p[2])\n\nub = 0 # boundary control\nc(x) = x[2]-a # constraint: c(x) ≥ 0\nμ(p) = -p[1] # dual variable\n\n# flow for boundary extremals\ng = Flow(ocp, (x, p) -> ub, (x, u) -> c(x), (x, p) -> μ(p))\n\n# shooting function\nfunction shoot!(s, p0, t1, t2)\n x_t0, p_t0 = x0, p0\n x_t1, p_t1 = f(t0, x_t0, p_t0, t1)\n x_t2, p_t2 = g(t1, x_t1, p_t1, t2)\n x_tf, p_tf = f(t2, x_t2, p_t2, tf)\n s[1:2] = x_tf - xf\n s[3] = c(x_t1)\n s[4] = p_t1[2]\nend\nnothing # hide\n\nWe are now ready to solve the shooting equations.\n\n# auxiliary in-place NLE function\nnle!(s, ξ, λ) = shoot!(s, ξ[1:2], ξ[3], ξ[4])\n\n# initial guess for the Newton solver\nξ_guess = [40, 10, 0.25, 0.75]\n\n# NLE problem with initial guess\nprob = NonlinearProblem(nle!, ξ_guess)\n\n# resolution of the shooting equations\nsol = solve(prob; show_trace=Val(true))\np0, t1, t2 = sol.u[1:2], sol.u[3], sol.u[4]\n\n# print the costate solution and the entry and exit times\nprintln(\"\\np0 = \", p0, \"\\nt1 = \", t1, \"\\nt2 = \", t2)\n\nTo reconstruct the trajectory obtained with the state constraint, we concatenate the flows: one unconstrained arc up to the entry time t_1, a boundary arc between t_1 and t_2, and finally another unconstrained arc up to t_f. This concatenation allows us to compute the complete solution — state, costate, and control — which we can then plot together with the direct solution for comparison.\n\n# concatenation of the flows\nφ = f * (t1, g) * (t2, f)\n\n# compute the solution: state, costate, control...\nflow_sol = φ((t0, tf), x0, p0; saveat=range(t0, tf, 100)) \n\n# plot the solution on the previous plot\nplot!(plt, flow_sol; label=\"Indirect\", color=2, linestyle=:dash)\n\n","category":"section"},{"location":"example-double-integrator-time.html#example-double-integrator-time","page":"Time mininimisation","title":"Double integrator: time minimisation","text":"The problem consists in minimising the final time t_f for the double integrator system\n\n dot x_1(t) = x_2(t) quad dot x_2(t) = u(t) quad u(t) in -11\n\nand the limit conditions\n\n x(0) = (-10) quad x(t_f) = (00)\n\nThis problem can be interpreted as a simple model for a wagon with constant mass moving along a line without friction.\n\n\n\nFirst, we need to import the OptimalControl.jl package to define the optimal control problem and NLPModelsIpopt.jl to solve it. We also need to import the Plots.jl package to plot the solution.\n\nusing OptimalControl\nusing NLPModelsIpopt\nusing Plots","category":"section"},{"location":"example-double-integrator-time.html#Optimal-control-problem","page":"Time mininimisation","title":"Optimal control problem","text":"Let us define the problem:\n\n
\n
\n\nocp = @def begin\n\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n\n -1 ≤ u(t) ≤ 1\n\n q(0) == -1\n v(0) == 0\n q(tf) == 0\n v(tf) == 0\n\n ẋ(t) == [v(t), u(t)]\n\n tf → min\n\nend\nnothing # hide\n\n
\n
","category":"section"},{"location":"example-double-integrator-time.html#Mathematical-formulation","page":"Time mininimisation","title":"Mathematical formulation","text":" beginaligned\n textMinimise t_f 05em\n textsubject to 05em\n dot q(t) = v(t) \n dot v(t) = u(t) 05em\n -1 le u(t) le 1 05em\n q(0) = -1 05em\n v(0) = 0 05em\n q(t_f) = 0 05em\n v(t_f) = 0\n endaligned\n\n
\n
\n\nnote: Nota bene\nFor a comprehensive introduction to the syntax used above to define the optimal control problem, see this abstract syntax tutorial. In particular, non-Unicode alternatives are available for derivatives, integrals, etc.","category":"section"},{"location":"example-double-integrator-time.html#Solve-and-plot","page":"Time mininimisation","title":"Solve and plot","text":"","category":"section"},{"location":"example-double-integrator-time.html#Direct-method","page":"Time mininimisation","title":"Direct method","text":"Let us solve it with a direct method (we set the number of time steps to 200):\n\nsol = solve(ocp; grid_size=200)\nnothing # hide\n\nand plot the solution:\n\nplt = plot(sol; label=\"Direct\", size=(800, 600))\n\nnote: Nota bene\nThe solve function has options, see the solve tutorial. You can customise the plot, see the plot tutorial.","category":"section"},{"location":"example-double-integrator-time.html#Indirect-method","page":"Time mininimisation","title":"Indirect method","text":"We now turn to the indirect method, which relies on Pontryagin’s Maximum Principle. The pseudo-Hamiltonian is given by\n\nH(x p u) = p_1 v + p_2 u - 1\n\nwhere p = (p_1 p_2) is the costate vector. The optimal control is of bang–bang type:\n\nu(t) = mathrmsign(p_2(t))\n\nwith one switch from u=+1 to u=-1 at one single time denoted t_1. Let us implement this approach. First, we import the necessary packages:\n\nusing OrdinaryDiffEq\nusing NonlinearSolve\n\nDefine the bang–bang control and Hamiltonian flow:\n\n# pseudo-Hamiltonian\nH(x, p, u) = p[1]*x[2] + p[2]*u - 1\n\n# bang–bang control\nu_max = +1\nu_min = -1\n\n# Hamiltonian flow\nf_max = Flow(ocp, (x, p, tf) -> u_max)\nf_min = Flow(ocp, (x, p, tf) -> u_min)\nnothing # hide\n\nThe shooting function enforces the conditions:\n\nt0 = 0\nx0 = [-1, 0]\nxf = [ 0, 0]\nfunction shoot!(s, p0, t1, tf) \n x_t0, p_t0 = x0, p0\n x_t1, p_t1 = f_max(t0, x_t0, p_t0, t1)\n x_tf, p_tf = f_min(t1, x_t1, p_t1, tf)\n s[1:2] = x_tf - xf # target conditions\n s[3] = p_t1[2] # switching condition\n s[4] = H(x_tf, p_tf, -1) # free final time\nend\nnothing # hide\n\nWe are now ready to solve the shooting equations:\n\n# in-place shooting function\nnle!(s, ξ, λ) = shoot!(s, ξ[1:2], ξ[3], ξ[4]) \n\n# initial guess: costate and final time\nξ_guess = [0.1, 0.1, 0.5, 1]\n\n# NLE problem\nprob = NonlinearProblem(nle!, ξ_guess)\n\n# resolution of the shooting equations\nsol = solve(prob; show_trace=Val(true))\np0, t1, tf = sol.u[1:2], sol.u[3], sol.u[4]\n\n# print the solution\nprintln(\"\\np0 = \", p0, \"\\nt1 = \", t1, \"\\ntf = \", tf)\n\nFinally, we reconstruct and plot the solution obtained by the indirect method:\n\n# concatenation of the flows\nφ = f_max * (t1, f_min)\n\n# compute the solution: state, costate, control...\nflow_sol = φ((t0, tf), x0, p0; saveat=range(t0, tf, 200))\n\n# plot the solution on the previous plot\nplot!(plt, flow_sol; label=\"Indirect\", color=2, linestyle=:dash)\n\nnote: Note\nYou can use MINPACK.jl instead of NonlinearSolve.jl.\nFor more details about the flow construction, visit the Compute flows from optimal control problems page.\nIn this simple example, we have set an arbitrary initial guess. It can be helpful to use the solution of the direct method to initialise the shooting method. See the Goddard tutorial for such a concrete application.\n\n","category":"section"},{"location":"manual-flow-api.html#manual-flow-api","page":"Flow API","title":"API of the Flow function","text":"","category":"section"},{"location":"manual-flow-api.html#CTFlows.Flow-manual-flow-api","page":"Flow API","title":"CTFlows.Flow","text":"Flow(\n vf::VectorField;\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> CTFlowsODE.VectorFieldFlow\n\n\nConstructs a flow object for a classical (non-Hamiltonian) vector field.\n\nThis creates a VectorFieldFlow that integrates the ODE system dx/dt = vf(t, x, v) using DifferentialEquations.jl. It handles both fixed and parametric dynamics, as well as jump discontinuities and event stopping.\n\nKeyword Arguments\n\nalg, abstol, reltol, saveat, internalnorm: Solver options.\nkwargs_Flow...: Additional arguments passed to the solver configuration.\n\nExample\n\njulia> vf(t, x, v) = -v * x\njulia> flow = CTFlows.Flow(CTFlows.VectorField(vf))\njulia> x1 = flow(0.0, 1.0, 1.0)\n\n\n\n\n\nFlow(\n h::CTFlows.AbstractHamiltonian;\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> CTFlowsODE.HamiltonianFlow\n\n\nConstructs a Hamiltonian flow from a scalar Hamiltonian.\n\nThis method builds a numerical integrator that simulates the evolution of a Hamiltonian system given a Hamiltonian function h(t, x, p, l) or h(x, p).\n\nInternally, it computes the right-hand side of Hamilton’s equations via automatic differentiation and returns a HamiltonianFlow object.\n\nKeyword Arguments\n\nalg, abstol, reltol, saveat, internalnorm: solver options.\nkwargs_Flow...: forwarded to the solver.\n\nExample\n\njulia> H(x, p) = dot(p, p) + dot(x, x)\njulia> flow = CTFlows.Flow(CTFlows.Hamiltonian(H))\njulia> xf, pf = flow(0.0, x0, p0, 1.0)\n\n\n\n\n\nFlow(\n hv::HamiltonianVectorField;\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> CTFlowsODE.HamiltonianFlow\n\n\nConstructs a Hamiltonian flow from a precomputed Hamiltonian vector field.\n\nThis method assumes you already provide the Hamiltonian vector field (dx/dt, dp/dt) instead of deriving it from a scalar Hamiltonian.\n\nReturns a HamiltonianFlow object that integrates the given system.\n\nKeyword Arguments\n\nalg, abstol, reltol, saveat, internalnorm: solver options.\nkwargs_Flow...: forwarded to the solver.\n\nExample\n\njulia> hv(t, x, p, l) = (∇ₚH, -∇ₓH)\njulia> flow = CTFlows.Flow(CTFlows.HamiltonianVectorField(hv))\njulia> xf, pf = flow(0.0, x0, p0, 1.0, l)\n\n\n\n\n\nFlow(\n ocp::Model,\n u::CTFlows.ControlLaw;\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}\n\n\nConstruct a flow for an optimal control problem using a given control law.\n\nThis method builds the Hamiltonian system associated with the optimal control problem (ocp) and integrates the corresponding state–costate dynamics using the specified control law u.\n\nArguments\n\nocp::CTModels.Model: An optimal control problem defined using CTModels.\nu::CTFlows.ControlLaw: A feedback control law generated by ControlLaw(...) or similar.\nalg: Integration algorithm (default inferred).\nabstol: Absolute tolerance for the ODE solver.\nreltol: Relative tolerance for the ODE solver.\nsaveat: Time points at which to save the solution.\ninternalnorm: Optional norm function used by the integrator.\nkwargs_Flow: Additional keyword arguments passed to the solver.\n\nReturns\n\nA flow object f such that:\n\nf(t0, x0, p0, tf) integrates the state and costate from t0 to tf.\nf((t0, tf), x0, p0) returns the full trajectory over the interval.\n\nExample\n\njulia> u = (x, p) -> p\njulia> f = Flow(ocp, ControlLaw(u))\n\n\n\n\n\nFlow(\n ocp::Model,\n u::Function;\n autonomous,\n variable,\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}\n\n\nConstruct a flow for an optimal control problem using a control function in feedback form.\n\nThis method constructs the Hamiltonian and integrates the associated state–costate dynamics using a raw function u. It automatically wraps u as a control law.\n\nArguments\n\nocp::CTModels.Model: The optimal control problem.\nu::Function: A feedback control function:\nIf ocp is autonomous: u(x, p)\nIf non-autonomous: u(t, x, p)\nautonomous::Bool: Whether the control law depends on time.\nvariable::Bool: Whether the OCP involves variable time (e.g., free final time).\nalg, abstol, reltol, saveat, internalnorm: ODE solver parameters.\nkwargs_Flow: Additional options.\n\nReturns\n\nA Flow object compatible with function call interfaces for state propagation.\n\nExample\n\njulia> u = (t, x, p) -> t + p\njulia> f = Flow(ocp, u)\n\n\n\n\n\nFlow(\n ocp::Model,\n u::Union{CTFlows.ControlLaw{<:Function, T, V}, CTFlows.FeedbackControl{<:Function, T, V}},\n g::Union{CTFlows.MixedConstraint{<:Function, T, V}, CTFlows.StateConstraint{<:Function, T, V}},\n μ::CTFlows.Multiplier{<:Function, T, V};\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}\n\n\nConstruct a flow for an optimal control problem with control and constraint multipliers in feedback form.\n\nThis variant constructs a Hamiltonian system incorporating both the control law and a multiplier law (e.g., for enforcing state or mixed constraints). All inputs must be consistent in time dependence.\n\nArguments\n\nocp::CTModels.Model: The optimal control problem.\nu::ControlLaw or FeedbackControl: Feedback control.\ng::StateConstraint or MixedConstraint: Constraint function.\nμ::Multiplier: Multiplier function.\nalg, abstol, reltol, saveat, internalnorm: Solver settings.\nkwargs_Flow: Additional options.\n\nReturns\n\nA Flow object that integrates the constrained Hamiltonian dynamics.\n\nExample\n\njulia> f = Flow(ocp, (x, p) -> p[1], (x, u) -> x[1] - 1, (x, p) -> x[1]+p[1])\n\nFor non-autonomous cases:\n\njulia> f = Flow(ocp, (t, x, p) -> t + p, (t, x, u) -> x - 1, (t, x, p) -> x+p)\n\nwarning: Warning\nAll input functions must match the autonomous/non-autonomous nature of the problem.\n\n\n\n\n\nFlow(\n ocp::Model,\n u::Function,\n g::Function,\n μ::Function;\n autonomous,\n variable,\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}\n\n\nConstruct a flow from a raw feedback control, constraint, and multiplier.\n\nThis version is for defining flows directly from user functions without wrapping them into ControlLaw, Constraint, or Multiplier types. Automatically wraps and adapts them based on time dependence.\n\nArguments\n\nocp::CTModels.Model: The optimal control problem.\nu::Function: Control law.\ng::Function: Constraint.\nμ::Function: Multiplier.\nautonomous::Bool: Whether the system is autonomous.\nvariable::Bool: Whether time is a free variable.\nalg, abstol, reltol, saveat, internalnorm: Solver parameters.\nkwargs_Flow: Additional options.\n\nReturns\n\nA Flow object ready for trajectory integration.\n\n\n\n\n\nFlow(\n dyn::Function;\n autonomous,\n variable,\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> CTFlowsODE.ODEFlow\n\n\nConstructs a Flow from a user-defined dynamical system given as a Julia function.\n\nThis high-level interface handles:\n\nautonomous and non-autonomous systems,\npresence or absence of additional variables (v),\nselection of ODE solvers and tolerances,\nand integrates with the CTFlows event system (e.g., jumps, callbacks).\n\nArguments\n\ndyn: A function defining the vector field. Its signature must match the values of autonomous and variable.\nautonomous: Whether the dynamics are time-independent (false by default).\nvariable: Whether the dynamics depend on a control or parameter v.\nalg, abstol, reltol, saveat, internalnorm: Solver settings passed to OrdinaryDiffEq.solve.\nkwargs_Flow: Additional keyword arguments passed to the solver.\n\nReturns\n\nAn ODEFlow object, wrapping both the full solver and its right-hand side (RHS).\n\nSupported Function Signatures for dyn\n\nDepending on the (autonomous, variable) flags:\n\n(false, false): dyn(x)\n(false, true): dyn(x, v)\n(true, false): dyn(t, x)\n(true, true): dyn(t, x, v)\n\nExample\n\njulia> dyn(t, x, v) = [-x[1] + v[1] * sin(t)]\njulia> flow = CTFlows.Flow(dyn; autonomous=true, variable=true)\njulia> xT = flow((0.0, 1.0), [1.0], [0.1])\n\n\n\n\n\n","category":"function"},{"location":"manual-plot.html#manual-plot","page":"Plot a solution","title":"How to plot a solution","text":"In this tutorial, we explain the different options for plotting the solution of an optimal control problem using the plot and plot! functions, which are extensions of the Plots.jl package. Use plot to create a new plot object, and plot! to add to an existing one:\n\nplot(args...; kw...) # creates a new Plot, and set it to be the `current`\nplot!(args...; kw...) # modifies Plot `current()`\nplot!(plt, args...; kw...) # modifies Plot `plt`\n\nMore precisely, the signature of plot, to plot a solution, is as follows.","category":"section"},{"location":"manual-plot.html#Argument-Overview","page":"Plot a solution","title":"Argument Overview","text":"The table below summarizes the main plotting arguments and links to the corresponding documentation sections for detailed explanations:\n\nSection Relevant Arguments\nBasic concepts size, state_style, costate_style, control_style, time_style, kwargs...\nSplit vs. group layout layout\nPlotting control norm control\nNormalised time time\nConstraints state_bounds_style, control_bounds_style, path_style, path_bounds_style, dual_style\nWhat to plot description...\n\nYou can plot solutions obtained from the solve function or from a flow computed using an optimal control problem and a control law. See the Basic Concepts and From Flow function sections for details.\n\nTo overlay a new plot on an existing one, use the plot! function (see Add a plot).\n\nIf you prefer full control over the visualisation, you can extract the state, costate, and control to create your own plots. Refer to the Custom plot section for guidance. You can also access the subplots.","category":"section"},{"location":"manual-plot.html#The-problem-and-the-solution","page":"Plot a solution","title":"The problem and the solution","text":"Let us start by importing the packages needed to define and solve the problem.\n\nusing OptimalControl\nusing NLPModelsIpopt\n\nWe consider the simple optimal control problem from the basic example page.\n\nt0 = 0 # initial time\ntf = 1 # final time\nx0 = [-1, 0] # initial condition\nxf = [ 0, 0] # final condition\n\nocp = @def begin\n t ∈ [t0, tf], time\n x ∈ R², state\n u ∈ R, control\n x(t0) == x0\n x(tf) == xf\n ẋ(t) == [x₂(t), u(t)]\n ∫( 0.5u(t)^2 ) → min\nend\n\nsol = solve(ocp, display=false)\nnothing # hide","category":"section"},{"location":"manual-plot.html#manual-plot-basic","page":"Plot a solution","title":"Basic concepts","text":"The simplest way to plot the solution is to use the plot function with the solution as the only argument.\n\ncaveat: Caveat\nThe plot function for a solution of an optimal control problem extends the plot function from Plots.jl. Therefore, you need to import this package in order to plot a solution.\n\nusing Plots\nplot(sol)\n\nIn the figure above, we have a grid of subplots: the left column displays the state component trajectories, the right column shows the costate component trajectories, and the bottom row contains the control component trajectory.\n\nAs in Plots.jl, input data is passed positionally (for example, sol in plot(sol)), and attributes are passed as keyword arguments (for example, plot(sol; color = :blue)). After executing using Plots in the REPL, you can use the plotattr() function to print a list of all available attributes for series, plots, subplots, or axes.\n\n# Valid Operations\nplotattr(:Plot)\nplotattr(:Series)\nplotattr(:Subplot)\nplotattr(:Axis)\n\nOnce you have the list of attributes, you can either use the aliases of a specific attribute or inspect a specific attribute to display its aliases and description.\n\nplotattr(\"color\") # Specific Attribute Example\n\nwarning: Warning\nSome attributes have different default values in OptimalControl.jl compared to Plots.jl. For instance, the default figure size is 600x400 in Plots.jl, while in OptimalControl.jl, it depends on the number of states and controls.\n\nYou can also visit the Plot documentation online to get the descriptions of the attributes:\n\nTo pass attributes to the plot, see the attributes plot documentation. For instance, you can specify the size of the figure.\n\n
List of plot attributes.\n\nfor a in Plots.attributes(:Plot) # hide\n println(a) # hide\nend # hide\n\n
\n\nYou can pass attributes to all subplots at once by referring to the attributes subplot documentation. For example, you can specify the location of the legends.\n\n
List of subplot attributes.\n\nfor a in Plots.attributes(:Subplot) # hide\n println(a) # hide\nend # hide\n\n
\n\nSimilarly, you can pass axis attributes to all subplots. See the attributes axis documentation. For example, you can remove the grid from every subplot.\n\n
List of axis attributes.\n\nfor a in Plots.attributes(:Axis) # hide\n println(a) # hide\nend # hide\n\n
\n\nFinally, you can pass series attributes to all subplots. Refer to the attributes series documentation. For instance, you can set the width of the curves using linewidth.\n\n
List of series attributes.\n\nfor a in Plots.attributes(:Series) # hide\n println(a) # hide\nend # hide\n\n
\n
\n\nplot(sol, size=(700, 450), label=\"sol\", legend=:bottomright, grid=false, linewidth=2)\n\nTo specify series attributes for a specific group of subplots (state, costate or control), you can use the optional keyword arguments state_style, costate_style, and control_style, which correspond to the state, costate, and control trajectories, respectively.\n\nplot(sol; \n state_style = (color=:blue,), # style: state trajectory\n costate_style = (color=:black, linestyle=:dash), # style: costate trajectory\n control_style = (color=:red, linewidth=2)) # style: control trajectory\n\nVertical axes at the initial and final times are automatically plotted. The style can me modified with the time_style keyword argument. Additionally, you can choose not to display for instance the state and the costate trajectories by setting their styles to :none. You can set to :none any style.\n\nplot(sol; \n state_style = :none, # do not plot the state\n costate_style = :none, # do not plot the costate\n control_style = (color = :red,), # plot the control in red\n time_style = (color = :green,)) # vertical axes at initial and final times in green\n\nTo select what to display, you can also use the description argument by providing a list of symbols such as :state, :costate, and :control.\n\nplot(sol, :state, :control) # plot the state and the control\n\nnote: Select what to plot\nFor more details on how to choose what to plot, see the What to plot section.","category":"section"},{"location":"manual-plot.html#manual-plot-flow","page":"Plot a solution","title":"From Flow function","text":"The previous solution of the optimal control problem was obtained using the solve function. If you prefer using an indirect shooting method and solving shooting equations, you may also want to plot the associated solution. To do this, you need to use the Flow function to reconstruct the solution. See the manual on how to compute flows for more details. In our case, you must provide the maximizing control (x p) mapsto p_2 along with the optimal control problem. For an introduction to simple indirect shooting, see the indirect simple shooting tutorial for an example.\n\ntip: Interactions with an optimal control solution\nPlease check state, costate, control, and variable to retrieve data from the solution. The functions state, costate, and control return functions of time, while variable returns a vector.\n\nusing OrdinaryDiffEq\n\np = costate(sol) # costate as a function of time\np0 = p(t0) # costate solution at the initial time\nf = Flow(ocp, (x, p) -> p[2]) # flow from an ocp and a control law in feedback form\n\nsol_flow = f((t0, tf), x0, p0) # compute the solution\nplot(sol_flow) # plot the solution from a flow\n\nWe may notice that the time grid contains very few points. This is evident from the subplot of x_2, or by retrieving the time grid directly from the solution.\n\ntime_grid(sol_flow)\n\nTo improve visualisation (without changing the accuracy), you can provide a finer grid.\n\nfine_grid = range(t0, tf, 100)\nsol_flow = f((t0, tf), x0, p0; saveat=fine_grid)\nplot(sol_flow)","category":"section"},{"location":"manual-plot.html#manual-plot-layout","page":"Plot a solution","title":"Split vs. group layout","text":"If you prefer to get a more compact figure, you can use the layout optional keyword argument with :group value. It will group the state, costate and control trajectories in one subplot for each.\n\nplot(sol; layout=:group)\n\nThe default layout value is :split which corresponds to the grid of subplots presented above.\n\nplot(sol; layout=:split)","category":"section"},{"location":"manual-plot.html#manual-plot-add","page":"Plot a solution","title":"Add a plot","text":"You can plot the solution of a second optimal control problem on the same figure if it has the same number of states, costates and controls. For instance, consider the same optimal control problem but with a different initial condition.\n\nocp = @def begin\n t ∈ [t0, tf], time\n x ∈ R², state\n u ∈ R, control\n x(t0) == [-0.5, -0.5]\n x(tf) == xf\n ẋ(t) == [x₂(t), u(t)]\n ∫( 0.5u(t)^2 ) → min\nend\nsol2 = solve(ocp; display=false)\nnothing # hide\n\nWe first plot the solution of the first optimal control problem, then, we plot the solution of the second optimal control problem on the same figure, but with dashed lines.\n\nplt = plot(sol; label=\"sol1\", size=(700, 500))\nplot!(plt, sol2; label=\"sol2\", linestyle=:dash)\n\nYou can also, implicitly, use the current plot.\n\nplot(sol; label=\"sol1\", size=(700, 500))\nplot!(sol2; label=\"sol2\", linestyle=:dash)","category":"section"},{"location":"manual-plot.html#manual-plot-control","page":"Plot a solution","title":"Plotting the control norm","text":"For some problem, it is interesting to plot the (Euclidean) norm of the control. You can do it by using the control optional keyword argument with :norm value.\n\nplot(sol; control=:norm, size=(800, 300), layout=:group)\n\nThe default value is :components.\n\nplot(sol; control=:components, size=(800, 300), layout=:group)\n\nYou can also plot the control and its norm.\n\nplot(sol; control=:all, layout=:group)","category":"section"},{"location":"manual-plot.html#manual-plot-custom","page":"Plot a solution","title":"Custom plot and subplots","text":"You can, of course, create your own plots by extracting the state, costate, and control from the optimal control solution. For instance, let us plot the norm of the control.\n\nusing LinearAlgebra\nt = time_grid(sol)\nu = control(sol)\nplot(t, norm∘u; label=\"‖u‖\", xlabel=\"t\") \n\nYou can also get access to the subplots. The order is as follows: state, costate, control, path constraints (if any) and their dual variables.\n\nplt = plot(sol)\nplot(plt[1]) # x₁\n\nplt = plot(sol)\nplot(plt[2]) # x₂\n\nplt = plot(sol)\nplot(plt[3]) # p₁\n\nplot(plt[4]) # p₂\n\nplot(plt[5]) # u","category":"section"},{"location":"manual-plot.html#manual-plot-time","page":"Plot a solution","title":"Normalised time","text":"We consider a LQR example and solve the problem for different values of the final time tf. Then, we plot the solutions on the same figure using a normalised time s = (t - t_0) (t_f - t_0), enabled by the keyword argument time = :normalize (or :normalise) in the plot function.\n\n# definition of the problem, parameterised by the final time\nfunction lqr(tf)\n\n ocp = @def begin\n t ∈ [0, tf], time\n x ∈ R², state\n u ∈ R, control\n x(0) == [0, 1]\n ẋ(t) == [x₂(t), - x₁(t) + u(t)]\n ∫( 0.5(x₁(t)^2 + x₂(t)^2 + u(t)^2) ) → min\n end\n\n return ocp\nend\n\n# solve the problems and store them\nsolutions = []\ntfs = [3, 5, 30]\nfor tf ∈ tfs\n solution = solve(lqr(tf); display=false)\n push!(solutions, solution)\nend\n\n# create plots\nplt = plot()\nfor (tf, sol) ∈ zip(tfs, solutions)\n plot!(plt, sol; time=:normalize, label=\"tf = $tf\", xlabel=\"s\")\nend\n\n# make a custom plot: keep only state and control\npx1 = plot(plt[1]; legend=false) # x₁\npx2 = plot(plt[2]; legend=true) # x₂\npu = plot(plt[5]; legend=false) # u \n\nusing Plots.PlotMeasures # for leftmargin, bottommargin\nplot(px1, px2, pu; layout=(1, 3), size=(800, 300), leftmargin=5mm, bottommargin=5mm)","category":"section"},{"location":"manual-plot.html#manual-plot-constraints","page":"Plot a solution","title":"Constraints","text":"We define an optimal control problem with constraints, solve it and plot the solution.\n\nocp = @def begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n tf ≥ 0\n -1 ≤ u(t) ≤ 1\n q(0) == -1\n v(0) == 0\n q(tf) == 0\n v(tf) == 0\n 1 ≤ v(t)+1 ≤ 1.8, (1)\n ẋ(t) == [v(t), u(t)]\n tf → min\nend\nsol = solve(ocp)\nplot(sol)\n\nOn the plot, you can see the lower and upper bounds of the path constraint. Additionally, the dual variable associated with the path constraint is displayed alongside it.\n\nYou can customise the plot styles. For style options related to the state, costate, and control, refer to the Basic Concepts section.\n\nplot(sol; \n state_bounds_style = (linestyle = :dash,),\n control_bounds_style = (linestyle = :dash,),\n path_style = (color = :green,),\n path_bounds_style = (linestyle = :dash,),\n dual_style = (color = :red,),\n time_style = :none, # do not plot axes at t0 and tf\n)","category":"section"},{"location":"manual-plot.html#manual-plot-select","page":"Plot a solution","title":"What to plot","text":"You can choose what to plot using the description argument. To plot only one subgroup:\n\nplot(sol, :state) # plot only the state\nplot(sol, :costate) # plot only the costate\nplot(sol, :control) # plot only the control\nplot(sol, :path) # plot only the path constraint\nplot(sol, :dual) # plot only the path constraint dual variable\n\nYou can combine elements to plot exactly what you need:\n\nplot(sol, :state, :control, :path)\n\nSimilarly, you can choose what not to plot passing :none to the corresponding style.\n\nplot(sol; state_style=:none) # do not plot the state\nplot(sol; costate_style=:none) # do not plot the costate\nplot(sol; control_style=:none) # do not plot the control\nplot(sol; path_style=:none) # do not plot the path constraint\nplot(sol; dual_style=:none) # do not plot the path constraint dual variable\n\nFor instance, let's plot everything except the dual variable associated with the path constraint.\n\nplot(sol; dual_style=:none)\n\n","category":"section"},{"location":"manual-plot.html#RecipesBase.plot-Tuple{Solution, Vararg{Symbol}}-manual-plot","page":"Plot a solution","title":"RecipesBase.plot","text":"plot(\n sol::Solution,\n description::Symbol...;\n layout,\n control,\n time,\n state_style,\n state_bounds_style,\n control_style,\n control_bounds_style,\n costate_style,\n time_style,\n path_style,\n path_bounds_style,\n dual_style,\n size,\n color,\n kwargs...\n) -> Plots.Plot\n\n\nPlot the components of an optimal control solution.\n\nThis is the main user-facing function to visualise the solution of an optimal control problem solved with the control-toolbox ecosystem.\n\nIt generates a set of subplots showing the evolution of the state, control, costate, path constraints, and dual variables over time, depending on the problem and the user’s choices.\n\nArguments\n\nsol::CTModels.Solution: The optimal control solution to visualise.\ndescription::Symbol...: A variable number of symbols indicating which components to include in the plot. Common values include:\n:state – plot the state.\n:costate – plot the costate (adjoint).\n:control – plot the control.\n:path – plot the path constraints.\n:dual – plot the dual variables (or Lagrange multipliers) associated with path constraints.\n\nIf no symbols are provided, a default set is used based on the problem and styles.\n\nKeyword Arguments (Optional)\n\nlayout::Symbol = :group: Specifies how to arrange plots.\n:group: Fewer plots, grouping similar variables together (e.g., all states in one subplot).\n:split: One plot per variable component, stacked in a layout.\ncontrol::Symbol = :components: Defines how to represent control inputs.\n:components: One curve per control component.\n:norm: Single curve showing the Euclidean norm ‖u(t)‖.\n:all: Plot both components and norm.\ntime::Symbol = :default: Time normalisation for plots.\n:default: Real time scale.\n:normalize or :normalise: Normalised to the interval [0, 1].\ncolor: set the color of the all the graphs.\n\nStyle Options (Optional)\n\nAll style-related keyword arguments can be either a NamedTuple of plotting attributes or the Symbol :none referring to not plot the associated element. These allow you to customise color, line style, markers, etc.\n\ntime_style: Style for vertical lines at initial and final times.\nstate_style: Style for state components.\ncostate_style: Style for costate components.\ncontrol_style: Style for control components.\npath_style: Style for path constraint values.\ndual_style: Style for dual variables.\n\nBounds Decorations (Optional)\n\nUse these options to customise bounds on the plots if applicable and defined in the model. Set to :none to hide.\n\nstate_bounds_style: Style for state bounds.\ncontrol_bounds_style: Style for control bounds.\npath_bounds_style: Style for path constraint bounds.\n\nReturns\n\nA Plots.Plot object, which can be displayed, saved, or further customised.\n\nExample\n\n# basic plot\njulia> plot(sol)\n\n# plot only the state and control\njulia> plot(sol, :state, :control)\n\n# customise layout and styles, no costate\njulia> plot(sol;\n layout = :group,\n control = :all,\n state_style = (color=:blue, linestyle=:solid),\n control_style = (color=:red, linestyle=:dash),\n costate_style = :none) \n\n\n\n\n\n","category":"method"},{"location":"manual-plot.html#RecipesBase.plot!-Tuple{Solution, Vararg{Symbol}}-manual-plot","page":"Plot a solution","title":"RecipesBase.plot!","text":"plot!(\n sol::Solution,\n description::Symbol...;\n layout,\n control,\n time,\n state_style,\n state_bounds_style,\n control_style,\n control_bounds_style,\n costate_style,\n time_style,\n path_style,\n path_bounds_style,\n dual_style,\n color,\n kwargs...\n) -> Any\n\n\nModify Plot current() with the optimal control solution sol.\n\nSee plot for full behavior and keyword arguments.\n\n\n\n\n\n","category":"method"},{"location":"manual-plot.html#RecipesBase.plot!-Tuple{Plots.Plot, Solution, Vararg{Symbol}}-manual-plot","page":"Plot a solution","title":"RecipesBase.plot!","text":"plot!(\n p::Plots.Plot,\n sol::Solution,\n description::Symbol...;\n layout,\n control,\n time,\n state_style,\n state_bounds_style,\n control_style,\n control_bounds_style,\n costate_style,\n time_style,\n path_style,\n path_bounds_style,\n dual_style,\n color,\n kwargs...\n) -> Plots.Plot\n\n\nModify Plot p with the optimal control solution sol.\n\nSee plot for full behavior and keyword arguments.\n\n\n\n\n\n","category":"method"},{"location":"manual-abstract.html#manual-abstract-syntax","page":"Define a problem","title":"The syntax to define an optimal control problem","text":"The full grammar of OptimalControl.jl small Domain Specific Language is given below. The idea is to use a syntax that is\n\npure Julia (and, as such, effortlessly analysed by the standard Julia parser),\nas close as possible to the mathematical description of an optimal control problem. \n\nWhile the syntax will be transparent to those users familiar with Julia expressions (Expr's), we provide examples for every case that should be widely understandable. We rely heavily on MLStyle.jl and its pattern matching abilities 👍🏽 both for the syntactic and semantic pass. Abstract definitions use the macro @def.","category":"section"},{"location":"manual-abstract.html#manual-abstract-variable","page":"Define a problem","title":"Variable","text":":( $v ∈ R^$q, variable ) \n:( $v ∈ R , variable ) \n\nA variable (only one is allowed) is a finite dimensional vector or reals that will be optimised along with state and control values. To define an (almost empty!) optimal control problem, named ocp, having a dimension two variable named v, do the following:\n\n@def begin\n v ∈ R², variable\n ...\nend\n\nwarning: Warning\nNote that the full code of the definition above is not provided (hence the ...) The same is true for most examples below (only those without ... are indeed complete). Also note that problem definitions must at least include definitions for time, state, control, dynamics and cost.\n\nAliases v₁, v₂ (and v1, v2) are automatically defined and can be used in subsequent expressions instead of v[1] and v[2]. The user can also define her own aliases for the components (one alias per dimension):\n\n@def begin\n v = (a, b) ∈ R², variable\n ...\nend\n\nA one dimensional variable can be declared according to\n\n@def begin\n v ∈ R, variable\n ...\nend\n\nwarning: Warning\nAliases during definition of variable, state or control are only allowed for multidimensional (dimension two or more) cases. Something like u = T ∈ R, control is not allowed... and useless (directly write T ∈ R, control).","category":"section"},{"location":"manual-abstract.html#Time","page":"Define a problem","title":"Time","text":":( $t ∈ [$t0, $tf], time ) \n\nThe independent variable or time is a scalar bound to a given interval. Its name is arbitrary.\n\nt0 = 1\ntf = 5\n@def begin\n t ∈ [t0, tf], time\n ...\nend\n\nOne (or even the two bounds) can be variable, typically for minimum time problems (see Mayer cost section):\n\n@def begin\n v = (T, λ) ∈ R², variable\n t ∈ [0, T], time\n ...\nend","category":"section"},{"location":"manual-abstract.html#manual-abstract-state","page":"Define a problem","title":"State","text":":( $x ∈ R^$n, state ) \n:( $x ∈ R , state ) \n\nThe state declaration defines the name and the dimension of the state:\n\n@def begin\n x ∈ R⁴, state\n ...\nend\n\nAs for the variable, there are automatic aliases (x₁ and x1 for x[1], etc.) and the user can define her own aliases (one per scalar component of the state):\n\n@def begin\n x = (q₁, q₂, v₁, v₂) ∈ R⁴, state\n ...\nend","category":"section"},{"location":"manual-abstract.html#manual-abstract-control","page":"Define a problem","title":"Control","text":":( $u ∈ R^$m, control ) \n:( $u ∈ R , control ) \n\nThe control declaration defines the name and the dimension of the control:\n\n@def begin\n u ∈ R², control\n ...\nend\n\nAs before, there are automatic aliases (u₁ and u1 for u[1], etc.) and the user can define her own aliases (one per scalar component of the state):\n\n@def begin\n u = (α, β) ∈ R², control\n ...\nend\n\nnote: Note\nOne dimensional variable, state or control are treated as scalars (Real), not vectors (Vector). In Julia, for x::Real, it is possible to write x[1] (and x[1][1]...) so it is OK (though useless) to write x₁, x1 or x[1] instead of simply x to access the corresponding value. Conversely it is not OK to use such an x as a vector, for instance as in ...f(x)... where f(x::Vector{T}) where {T <: Real}.","category":"section"},{"location":"manual-abstract.html#manual-abstract-dynamics","page":"Define a problem","title":"Dynamics","text":":( ∂($x)($t) == $e1 ) \n\nThe dynamics is given in the standard vectorial ODE form:\n\n dotx(t) = f(t x(t) u(t) v)\n\ndepending on whether it is autonomous / with a variable or not (the parser will detect time and variable dependences, which entails that time, state and variable must be declared prior to dynamics - an error will be issued otherwise). The symbol ∂, or the dotted state name (ẋ), or the keyword derivative can be used:\n\n@def begin\n t ∈ [0, 1], time\n x ∈ R², state\n u ∈ R, control\n ∂(x)(t) == [x₂(t), u(t)]\n ...\nend\n\nor\n\n@def begin\n t ∈ [0, 1], time\n x ∈ R², state\n u ∈ R, control\n ẋ(t) == [x₂(t), u(t)]\n ...\nend\n\nor\n\n@def begin\n t ∈ [0, 1], time\n x ∈ R², state\n u ∈ R, control\n derivative(x)(t) == [x₂(t), u(t)]\n ...\nend\n\nAny Julia code can be used, so the following is also OK: \n\nocp = @def begin\n t ∈ [0, 1], time\n x ∈ R², state\n u ∈ R, control\n ẋ(t) == F₀(x(t)) + u(t) * F₁(x(t))\n ...\nend\n\nF₀(x) = [x[2], 0]\nF₁(x) = [0, 1]\n\nnote: Note\nThe vector fields F₀ and F₁ can be defined afterwards, as they only need to be available when the dynamics will be evaluated.\n\nWhile it is also possible to declare the dynamics component after component (see below), one may equivalently use aliases (check the relevant aliases section below):\n\n@def damped_integrator begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n q̇ = v(t)\n v̇ = u(t) - c(t)\n ẋ(t) == [q̇, v̇]\n ...\nend","category":"section"},{"location":"manual-abstract.html#manual-abstract-dynamics-coord","page":"Define a problem","title":"Dynamics (coordinatewise)","text":":( ∂($x[$i])($t) == $e1 ) \n\nThe dynamics can also be declared coordinate by coordinate. The previous example can be written as\n\n@def damped_integrator begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n ∂(q)(t) == v(t)\n ∂(v)(t) == u(t) - c(t)\n ...\nend\n\nwarning: Warning\nDeclaring the dynamics coordinate by coordinate is compulsory when solving with the option :exa to rely on the ExaModels modeller (check the solve section), for instance to solve on GPU.","category":"section"},{"location":"manual-abstract.html#manual-abstract-constraints","page":"Define a problem","title":"Constraints","text":":( $e1 == $e2 ) \n:( $e1 ≤ $e2 ≤ $e3 ) \n:( $e2 ≤ $e3 ) \n:( $e3 ≥ $e2 ≥ $e1 ) \n:( $e2 ≥ $e1 ) \n\nAdmissible constraints can be\n\nof five types: boundary, variable, control, state, mixed (the last three ones are path constraints, that is constraints evaluated all times)\nlinear (ranges) or nonlinear (not ranges),\nequalities or (one or two-sided) inequalities.\n\nBoundary conditions are detected when the expression contains evaluations of the state at initial and / or final time bounds (e.g., x(0)), and may not involve the control. Conversely control, state or mixed constraints will involve control, state or both evaluated at the declared time (e.g., x(t) + u(t)). Other combinations should be detected as incorrect by the parser 🤞🏾. The variable may be involved in any of the four previous constraints. Constraints involving the variable only are variable constraints, either linear or nonlinear. In the example below, there are\n\ntwo linear boundary constraints,\none linear variable constraint,\none linear state constraint,\none (two-sided) nonlinear control constraint.\n\n@def begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x ∈ R², state\n u ∈ R, control\n x(0) == [-1, 0]\n x(tf) == [0, 0]\n ẋ(t) == [x₂(t), u(t)]\n tf ≥ 0 \n x₂(t) ≤ 1\n 0.1 ≤ u(t)^2 ≤ 1\n ...\nend\n\nnote: Note\nSymbols like <= or >= are also authorised:\n\n@def begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x ∈ R², state\n u ∈ R, control\n x(0) == [-1, 0]\n x(tf) == [0, 0]\n ẋ(t) == [x₂(t), u(t)]\n tf >= 0 \n x₂(t) <= 1\n 0.1 ≤ u(t)^2 <= 1\n ...\nend\n\nwarning: Warning\nWrite either u(t)^2 or (u^2)(t), not u^2(t) since in Julia the latter means u^(2t). Moreover, in the case of equalities or of one-sided inequalities, the control and / or the state must belong to the left-hand side. The following will error:\n\n@def begin\n t ∈ [0, 2], time\n x ∈ R², state\n u ∈ R, control\n x(0) == [-1, 0]\n x(2) == [0, 0]\n ẋ(t) == [x₂(t), u(t)]\n 1 ≤ x₂(t)\n -1 ≤ u(t) ≤ 1\nend\n\nwarning: Warning\nConstraint bounds must be effective, that is must not depend on a variable. For instance, instead of\n\no = @def begin\n v ∈ R, variable\n t ∈ [0, 1], time\n x ∈ R², state\n u ∈ R, control\n -1 ≤ v ≤ 1\n x₁(0) == -1\n x₂(0) == v # wrong: the bound is not effective (as it depends on the variable)\n x(1) == [0, 0]\n ẋ(t) == [x₂(t), u(t)]\n ∫( 0.5u(t)^2 ) → min\nend\n\nwrite\n\no = @def begin\n v ∈ R, variable\n t ∈ [0, 1], time\n x ∈ R², state\n u ∈ R, control\n -1 ≤ v ≤ 1\n x₁(0) == -1\n x₂(0) - v == 0 # OK: the boundary constraint may involve the variable\n x(1) == [0, 0]\n ẋ(t) == [x₂(t), u(t)]\n ∫( 0.5u(t)^2 ) → min\nend\n\nwarning: Warning\nWhen solving with the option :exa to rely on the ExaModels modeller (check the solve section), for instance to solve on GPU, it is compulsory that nonlinear constraints (not ranges) are scalar, whatever the type (boundary, variable, control, state, mixed).","category":"section"},{"location":"manual-abstract.html#manual-abstract-mayer","page":"Define a problem","title":"Mayer cost","text":":( $e1 → min ) \n:( $e1 → max ) \n\nMayer costs are defined in a similar way to boundary conditions and follow the same rules. The symbol → is used to denote minimisation or maximisation, the latter being treated by minimising the opposite cost. (The symbol => can also be used.)\n\n@def begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n tf ≥ 0\n -1 ≤ u(t) ≤ 1\n q(0) == 1\n v(0) == 2\n q(tf) == 0\n v(tf) == 0\n 0 ≤ q(t) ≤ 5\n -2 ≤ v(t) ≤ 3\n ẋ(t) == [v(t), u(t)]\n tf → min\nend","category":"section"},{"location":"manual-abstract.html#Lagrange-cost","page":"Define a problem","title":"Lagrange cost","text":":( ∫($e1) → min ) \n:( - ∫($e1) → min ) \n:( $e1 * ∫($e2) → min ) \n:( ∫($e1) → max ) \n:( - ∫($e1) → max ) \n:( $e1 * ∫($e2) → max ) \n\nLagrange (integral) costs are defined used the symbol ∫, with parentheses. The keyword integral can also be used:\n\n@def begin\n t ∈ [0, 1], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n 0.5∫(q(t) + u(t)^2) → min\n ...\nend\n\nor\n\n@def begin\n t ∈ [0, 1], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n 0.5integral(q(t) + u(t)^2) → min\n ...\nend\n\nThe integration range is implicitly equal to the time range, so the cost above is to be understood as\n\nfrac12 int_0^1 left( q(t) + u^2(t) right) mathrmdt to min\n\nAs for the dynamics, the parser will detect whether the integrand depends or not on time (autonomous / non-autonomous case).","category":"section"},{"location":"manual-abstract.html#Bolza-cost","page":"Define a problem","title":"Bolza cost","text":":( $e1 + ∫($e2) → min ) \n:( $e1 + $e2 * ∫($e3) → min ) \n:( $e1 - ∫($e2) → min ) \n:( $e1 - $e2 * ∫($e3) → min ) \n:( $e1 + ∫($e2) → max ) \n:( $e1 + $e2 * ∫($e3) → max ) \n:( $e1 - ∫($e2) → max ) \n:( $e1 - $e2 * ∫($e3) → max ) \n:( ∫($e2) + $e1 → min ) \n:( $e2 * ∫($e3) + $e1 → min ) \n:( ∫($e2) - $e1 → min ) \n:( $e2 * ∫($e3) - $e1 → min ) \n:( ∫($e2) + $e1 → max ) \n:( $e2 * ∫($e3) + $e1 → max ) \n:( ∫($e2) - $e1 → max ) \n:( $e2 * ∫($e3) - $e1 → max ) \n\nQuite readily, Mayer and Lagrange costs can be combined into general Bolza costs. For instance as follows:\n\n@def begin\n p = (t0, tf) ∈ R², variable\n t ∈ [t0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R², control\n (tf - t0) + 0.5∫(c(t) * u(t)^2) → min\n ...\nend\n\nwarning: Warning\nThe expression must be the sum of two terms (plus, possibly, a scalar factor before the integral), not more, so mind the parentheses. For instance, the following errors:\n\n@def begin\n p = (t0, tf) ∈ R², variable\n t ∈ [t0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R², control\n (tf - t0) + q(tf) + 0.5∫( c(t) * u(t)^2 ) → min\n ...\nend\n\nThe correct syntax is\n\n@def begin\n p = (t0, tf) ∈ R², variable\n t ∈ [t0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R², control\n ((tf - t0) + q(tf)) + 0.5∫( c(t) * u(t)^2 ) → min\n ...\nend","category":"section"},{"location":"manual-abstract.html#manual-abstract-aliases","page":"Define a problem","title":"Aliases","text":":( $a = $e1 )\n\nThe single = symbol is used to define not a constraint but an alias, that is a purely syntactic replacement. There are some automatic aliases, e.g. x₁ and x1 for x[1] if x is the state (same for variable and control, for indices comprised between 1 and 9), and we have also seen that the user can define her own aliases when declaring the variable, state and control. Arbitrary aliases can be further defined, as below (compare with previous examples in the dynamics section):\n\n@def begin\n t ∈ [0, 1], time\n x ∈ R², state\n u ∈ R, control\n F₀ = [x₂(t), 0]\n F₁ = [0, 1]\n ẋ(t) == F₀ + u(t) * F₁\n ...\nend\n\nwarning: Warning\nSuch aliases do not define any additional function and are just replaced textually by the parser. In particular, they cannot be used outside the @def begin ... end block. Conversely, constants and functions used within the @def block must be defined outside and before this block.\n\nhint: Hint\nYou can rely on a trace mode for the macro @def to look at your code after expansions of the aliases using the @def ocp ... syntax and adding true after your begin ... end block:\n\n@def damped_integrator begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n q̇ = v(t)\n v̇ = u(t) - c(t)\n ẋ(t) == [q̇, v̇]\nend true;\n\nwarning: Warning\nThe dynamics of an OCP is indeed a particular constraint, be careful to use == and not a single = that would try to define an alias:\n\ndouble_integrator = @def begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n q̇ = v\n v̇ = u\n ẋ(t) = [q̇, v̇]\nend","category":"section"},{"location":"manual-abstract.html#Misc","page":"Define a problem","title":"Misc","text":"Declarations (of variable - if any -, time, state and control) must be done first. Then, dynamics, constraints and cost can be introduced in an arbitrary order.\nIt is possible to provide numbers / labels (as in math equations) for the constraints to improve readability (this is mostly for future use, typically to retrieve the Lagrange multiplier associated with the discretisation of a given constraint):\n\n@def damped_integrator begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n tf ≥ 0, (1)\n q(0) == 2, (♡)\n q̇ = v(t)\n v̇ = u(t) - c(t)\n ẋ(t) == [q̇, v̇]\n x(t).^2 ≤ [1, 2], (state_con) \n ...\nend\n\nParsing errors should be explicit enough (with line number in the @def begin ... end block indicated) 🤞🏾\nCheck tutorials and applications in the documentation for further use.","category":"section"},{"location":"manual-abstract.html#manual-abstract-known-issues","page":"Define a problem","title":"Known issues","text":"Reverse over forward AD issues with ADNLP\n\n","category":"section"},{"location":"jlesc17.html","page":"Solving optimal control problems on GPU with Julia","title":"Solving optimal control problems on GPU with Julia","text":"\"jlesc17\"","category":"section"},{"location":"jlesc17.html#Solving-optimal-control-problems-on-GPU-with-Julia","page":"Solving optimal control problems on GPU with Julia","title":"Solving optimal control problems on GPU with Julia","text":"","category":"section"},{"location":"jlesc17.html#[Jean-Baptiste-Caillau](http://caillau.perso.math.cnrs.fr),-[Olivier-Cots](https://ocots.github.io),-[Joseph-Gergaud](https://github.com/joseph-gergaud),-[Pierre-Martinon](https://github.com/PierreMartinon),-[Sophia-Sed](https://sed-sam-blog.gitlabpages.inria.fr)","page":"Solving optimal control problems on GPU with Julia","title":"Jean-Baptiste Caillau, Olivier Cots, Joseph Gergaud, Pierre Martinon, Sophia Sed","text":"\"affiliations\"","category":"section"},{"location":"jlesc17.html#What-it's-about","page":"Solving optimal control problems on GPU with Julia","title":"What it's about","text":"Nonlinear optimal control of ODEs:\n\ng(x(t_0)x(t_f)) + int_t_0^t_f f^0(x(t) u(t)) mathrmdt to min\n\nsubject to\n\ndotx(t) = f(x(t) u(t))quad t in t_0 t_f\n\nplus boundary, control and state constraints\n\nOur core interests: numerical & geometrical methods in control, applications\nWhy Julia: fast (+ JIT), strongly typed, high-level (AD, macros), fast optimisation and ODE solvers available, rapidly growing community\n\n\"juliacon2025\"","category":"section"},{"location":"jlesc17.html#Discretise-then-solve-strategy-(*aka*-direct-methods)","page":"Solving optimal control problems on GPU with Julia","title":"Discretise then solve strategy (aka direct methods)","text":"Discretising an OCP into an NLP: h_i = t_i+1-t_i,\n\ng(X_0X_N) + sum_i=0^N h_i f^0(X_iU_i) to min\n\nsubject to \n\nX_i+1 - X_i - h_i f(X_i U_i) = 0quad i = 0dotsN-1\n\nplus other constraints on X = (X_i)_i=0N and U = (U_i)_i=0N such as boundary and path (state and / or control) constraints :\n\nb(t_0 X_0 t_N X_N) = 0\n\nc(X_i U_i) = 0quad i = 0dotsN\n\nSIMD parallelism (f_0, f, g) + sparsity: Kernels for GPU (KernelAbstraction.jl) and sparse linear algebra (CUDSS.jl)\nModelling and optimising for GPU: ExaModels.jl + MadNLP.jl, with built-in AD\nSimple example, DSL\nCompile into an ExaModel (one pass compiler, syntax + semantics)\n\n
Simple example, generated code\n\nbegin\n #= /data/caillau/CTParser.jl/src/onepass.jl:1003 =#\n function (; scheme = :trapezoidal, grid_size = 200, backend = nothing, init = (0.1, 0.1, 0.1), base_type = Float64)\n #= /data/caillau/CTParser.jl/src/onepass.jl:1003 =#\n #= /data/caillau/CTParser.jl/src/onepass.jl:1004 =#\n LineNumberNode(0, \"box constraints: variable\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:1005 =#\n begin\n LineNumberNode(0, \"box constraints: state\")\n begin\n var\"##235\" = -Inf * ones(3)\n #= /data/caillau/CTParser.jl/src/onepass.jl:461 =#\n var\"##236\" = Inf * ones(3)\n end\n end\n #= /data/caillau/CTParser.jl/src/onepass.jl:1006 =#\n begin\n LineNumberNode(0, \"box constraints: control\")\n begin\n var\"##237\" = -Inf * ones(1)\n #= /data/caillau/CTParser.jl/src/onepass.jl:512 =#\n var\"##238\" = Inf * ones(1)\n end\n end\n #= /data/caillau/CTParser.jl/src/onepass.jl:1007 =#\n var\"##230\" = ExaModels.ExaCore(base_type; backend = backend)\n #= /data/caillau/CTParser.jl/src/onepass.jl:1008 =#\n begin\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:23 =#\n var\"##232\" = begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n (1 - 0) / grid_size\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 1, \": \", \"(t ∈ [0, 1], time)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:24 =#\n x = begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.variable(var\"##230\", 3, 0:grid_size; lvar = [var\"##235\"[i] for (i, j) = Base.product(1:3, 0:grid_size)], uvar = [var\"##236\"[i] for (i, j) = Base.product(1:3, 0:grid_size)], start = init[2])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 2, \": \", \"(x ∈ R ^ 3, state)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:25 =#\n var\"u##239\" = begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.variable(var\"##230\", 1, 0:grid_size; lvar = [var\"##237\"[i] for (i, j) = Base.product(1:1, 0:grid_size)], uvar = [var\"##238\"[i] for (i, j) = Base.product(1:1, 0:grid_size)], start = init[3])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 3, \": \", \"(u ∈ R, control)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:26 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.constraint(var\"##230\", (x[i, 0] for i = 1:3); lcon = [-1, 0, 0], ucon = [-1, 0, 0])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 4, \": \", \"x(0) == [-1, 0, 0]\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:27 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.constraint(var\"##230\", (x[i, grid_size] for i = 1:2); lcon = [0, 0], ucon = [0, 0])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 5, \": \", \"(x[1:2])(1) == [0, 0]\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:28 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#\n if scheme == :trapezoidal\n #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#\n ExaModels.constraint(var\"##230\", ((x[1, j + 1] - x[1, j]) - (var\"##232\" * (x[2, j] + x[2, j + 1])) / 2 for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler\n #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#\n ExaModels.constraint(var\"##230\", ((x[1, j + 1] - x[1, j]) - var\"##232\" * x[2, j] for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b\n #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#\n ExaModels.constraint(var\"##230\", ((x[1, j + 1] - x[1, j]) - var\"##232\" * x[2, j + 1] for j = 0:grid_size - 1))\n else\n #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#\n throw(\"unknown numerical scheme\")\n end\n end\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 6, \": \", \"(∂(x₁))(t) == x₂(t)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:29 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#\n if scheme == :trapezoidal\n #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#\n ExaModels.constraint(var\"##230\", ((x[2, j + 1] - x[2, j]) - (var\"##232\" * (var\"u##239\"[1, j] + var\"u##239\"[1, j + 1])) / 2 for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler\n #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#\n ExaModels.constraint(var\"##230\", ((x[2, j + 1] - x[2, j]) - var\"##232\" * var\"u##239\"[1, j] for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b\n #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#\n ExaModels.constraint(var\"##230\", ((x[2, j + 1] - x[2, j]) - var\"##232\" * var\"u##239\"[1, j + 1] for j = 0:grid_size - 1))\n else\n #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#\n throw(\"unknown numerical scheme\")\n end\n end\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 7, \": \", \"(∂(x₂))(t) == u(t)\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:30 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:735 =#\n if scheme == :trapezoidal\n #= /data/caillau/CTParser.jl/src/onepass.jl:736 =#\n ExaModels.constraint(var\"##230\", ((x[3, j + 1] - x[3, j]) - (var\"##232\" * (0.5 * var\"u##239\"[1, j] ^ 2 + 0.5 * var\"u##239\"[1, j + 1] ^ 2)) / 2 for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:737 =# scheme == :euler\n #= /data/caillau/CTParser.jl/src/onepass.jl:738 =#\n ExaModels.constraint(var\"##230\", ((x[3, j + 1] - x[3, j]) - var\"##232\" * (0.5 * var\"u##239\"[1, j] ^ 2) for j = 0:grid_size - 1))\n elseif #= /data/caillau/CTParser.jl/src/onepass.jl:739 =# scheme == :euler_b\n #= /data/caillau/CTParser.jl/src/onepass.jl:740 =#\n ExaModels.constraint(var\"##230\", ((x[3, j + 1] - x[3, j]) - var\"##232\" * (0.5 * var\"u##239\"[1, j + 1] ^ 2) for j = 0:grid_size - 1))\n else\n #= /data/caillau/CTParser.jl/src/onepass.jl:742 =#\n throw(\"unknown numerical scheme\")\n end\n end\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 8, \": \", \"(∂(x₃))(t) == 0.5 * u(t) ^ 2\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n #= /data/caillau/CTParser.jl/test/test_onepass_exa.jl:31 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:111 =#\n local ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:112 =#\n try\n #= /data/caillau/CTParser.jl/src/onepass.jl:113 =#\n ExaModels.objective(var\"##230\", x[3, grid_size])\n catch ex\n #= /data/caillau/CTParser.jl/src/onepass.jl:115 =#\n println(\"Line \", 9, \": \", \"x₃(1) → min\")\n #= /data/caillau/CTParser.jl/src/onepass.jl:116 =#\n throw(ex)\n end\n end\n end\n #= /data/caillau/CTParser.jl/src/onepass.jl:1009 =#\n begin\n #= /data/caillau/CTParser.jl/src/onepass.jl:994 =#\n !(isempty([1, 2, 3])) || throw(CTBase.ParsingError(\"dynamics not defined\"))\n #= /data/caillau/CTParser.jl/src/onepass.jl:995 =#\n sort([1, 2, 3]) == 1:3 || throw(CTBase.ParsingError(\"some coordinates of dynamics undefined\"))\n end\n #= /data/caillau/CTParser.jl/src/onepass.jl:1010 =#\n return ExaModels.ExaModel(var\"##230\")\n end\nend\n\n
\n\nSolving (MadNLP + CUDSS)\n\nThis is MadNLP version v0.8.7, running with cuDSS v0.4.0\n\nNumber of nonzeros in constraint Jacobian............: 12005\nNumber of nonzeros in Lagrangian Hessian.............: 9000\n\nTotal number of variables............................: 4004\n variables with only lower bounds: 0\n variables with lower and upper bounds: 0\n variables with only upper bounds: 0\nTotal number of equality constraints.................: 3005\nTotal number of inequality constraints...............: 0\n inequality constraints with only lower bounds: 0\n inequality constraints with lower and upper bounds: 0\n inequality constraints with only upper bounds: 0\n\niter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n 0 1.0000000e-01 1.10e+00 1.00e+00 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0\n 1 1.0001760e-01 1.10e+00 3.84e-03 -1.0 6.88e+02 -4.0 1.00e+00 2.00e-07h 2\n 2 -5.2365072e-03 1.89e-02 1.79e-07 -1.0 6.16e+00 -4.5 1.00e+00 1.00e+00h 1\n 3 5.9939621e+00 2.28e-03 1.66e-04 -3.8 6.00e+00 -5.0 9.99e-01 1.00e+00h 1\n 4 5.9996210e+00 2.94e-06 8.38e-07 -3.8 7.70e-02 - 1.00e+00 1.00e+00h 1\n\nNumber of Iterations....: 4\n\n (scaled) (unscaled)\nObjective...............: 5.9996210189633494e+00 5.9996210189633494e+00\nDual infeasibility......: 8.3756005011360529e-07 8.3756005011360529e-07\nConstraint violation....: 2.9426923277963834e-06 2.9426923277963834e-06\nComplementarity.........: 2.0007459547789288e-06 2.0007459547789288e-06\nOverall NLP error.......: 2.9426923277963834e-06 2.9426923277963834e-06\n\nNumber of objective function evaluations = 6\nNumber of objective gradient evaluations = 5\nNumber of constraint evaluations = 6\nNumber of constraint Jacobian evaluations = 5\nNumber of Lagrangian Hessian evaluations = 4\nTotal wall-clock secs in solver (w/o fun. eval./lin. alg.) = 0.072\nTotal wall-clock secs in linear solver = 0.008\nTotal wall-clock secs in NLP function evaluations = 0.003\nTotal wall-clock secs = 0.083\n\nGoddard problem\n\nThis is MadNLP version v0.8.4, running with cuDSS v0.3.0\n\nNumber of nonzeros in constraint Jacobian............: 135017\nNumber of nonzeros in Lagrangian Hessian.............: 130008\n\nTotal number of variables............................: 35008\n variables with only lower bounds: 0\n variables with lower and upper bounds: 0\n variables with only upper bounds: 0\nTotal number of equality constraints.................: 30007\nTotal number of inequality constraints...............: 15004\n inequality constraints with only lower bounds: 5002\n inequality constraints with lower and upper bounds: 10002\n inequality constraints with only upper bounds: 0\n\n[...]\n\nNumber of Iterations....: 35\n\n (scaled) (unscaled)\nObjective...............: -1.0142336978192805e+00 -1.0142336978192805e+00\nDual infeasibility......: 4.7384318691001681e-13 4.7384318691001681e-13\nConstraint violation....: 1.4068322357215250e-09 1.4068322357215250e-09\nComplementarity.........: 9.0909295306344959e-09 9.0909295306344959e-09\nOverall NLP error.......: 9.0909295306344959e-09 9.0909295306344959e-09\n\nNumber of objective function evaluations = 36\nNumber of objective gradient evaluations = 36\nNumber of constraint evaluations = 36\nNumber of constraint Jacobian evaluations = 36\nNumber of Lagrangian Hessian evaluations = 35\nTotal wall-clock secs in solver (w/o fun. eval./lin. alg.) = 0.911\nTotal wall-clock secs in linear solver = 0.227\nTotal wall-clock secs in NLP function evaluations = 0.059\nTotal wall-clock secs = 1.198","category":"section"},{"location":"jlesc17.html#Wrap-up","page":"Solving optimal control problems on GPU with Julia","title":"Wrap up","text":"High level modelling of optimal control problems\nSolving on CPU and GPU","category":"section"},{"location":"jlesc17.html#Future","page":"Solving optimal control problems on GPU with Julia","title":"Future","text":"New applications (space mechanics, biology, quantum mechanics and more)\nAdditional solvers: benchmarking on CPU / GPU for optimisation, Hamiltonian shooting and pathfollowing\nImproved AD: collab between Argonne and Inria, JLESC Shared Infra AD project...\n... and open to contributions! If you like the package, please give us a star ⭐️\n\n\"OptimalControl.jl\"","category":"section"},{"location":"jlesc17.html#control-toolbox.org","page":"Solving optimal control problems on GPU with Julia","title":"control-toolbox.org","text":"Open toolbox\nCollection of Julia Packages rooted at OptimalControl.jl\n\n\"control-toolbox.org\"","category":"section"},{"location":"jlesc17.html#Credits-(not-exhaustive!)","page":"Solving optimal control problems on GPU with Julia","title":"Credits (not exhaustive!)","text":"ADNLPModels.jl\nDifferentiationInterface.jl\nDifferentialEquations.jl\nExaModels.jl\nIpopt.jl\nMadNLP.jl\nMLStyle.jl","category":"section"},{"location":"jlesc17.html#Acknowledgements","page":"Solving optimal control problems on GPU with Julia","title":"Acknowledgements","text":"Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).\n\n\"affiliations\"\n\n","category":"section"},{"location":"manual-flow-ocp.html#manual-flow-ocp","page":"From optimal control problems","title":"How to compute flows from optimal control problems","text":"In this tutorial, we explain the Flow function, in particular to compute flows from an optimal control problem.","category":"section"},{"location":"manual-flow-ocp.html#Basic-usage","page":"From optimal control problems","title":"Basic usage","text":"Les us define a basic optimal control problem.\n\nusing OptimalControl\n\nt0 = 0\ntf = 1\nx0 = [-1, 0]\n\nocp = @def begin\n\n t ∈ [ t0, tf ], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n\n x(t0) == x0\n x(tf) == [0, 0]\n ẋ(t) == [v(t), u(t)]\n\n ∫( 0.5u(t)^2 ) → min\n\nend\nnothing # hide\n\nThe pseudo-Hamiltonian of this problem is\n\n H(x p u) = p_q v + p_v u + p^0 u^2 2\n\nwhere p^0 = -1 since we are in the normal case. From the Pontryagin maximum principle, the maximising control is given in feedback form by\n\nu(x p) = p_v\n\nsince partial^2_uu H = p^0 = - 1 0. \n\nu(x, p) = p[2]\nnothing # hide\n\nActually, if (x u) is a solution of the optimal control problem, then, the Pontryagin maximum principle tells us that there exists a costate p such that u(t) = u(x(t) p(t)) and such that the pair (x p) satisfies:\n\nbeginarrayl\n dotx(t) = displaystylephantom-nabla_p H(x(t) p(t) u(x(t) p(t))) 05em\n dotp(t) = displaystyle - nabla_x H(x(t) p(t) u(x(t) p(t)))\nendarray\n\nThe Flow function aims to compute t mapsto (x(t) p(t)) from the optimal control problem ocp and the control in feedback form u(x, p).\n\nnote: Nota bene\nActually, writing z = (x p), then the pair (x p) is also solution of dotz(t) = vecmathbfH(z(t))where mathbfH(z) = H(z u(z)) and vecmathbfH = (nabla_p mathbfH -nabla_x mathbfH). This is what is actually computed by Flow.\n\nLet us try to get the associated flow:\n\njulia> f = Flow(ocp, u)\nERROR: ExtensionError. Please make: julia> using OrdinaryDiffEq\n\nAs you can see, an error occurred since we need the package OrdinaryDiffEq.jl. This package provides numerical integrators to compute solutions of the ordinary differential equation dotz(t) = vecmathbfH(z(t)).\n\nnote: OrdinaryDiffEq.jl\nThe package OrdinaryDiffEq.jl is part of DifferentialEquations.jl. You can either use one or the other.\n\nusing OrdinaryDiffEq\nf = Flow(ocp, u)\nnothing # hide\n\nNow we have the flow of the associated Hamiltonian vector field, we can use it. Some simple calculations shows that the initial covector p(0) solution of the Pontryagin maximum principle is 12 6. Let us check that integrating the flow from (t_0 x_0 p_0) = (0 -1 0 12 6) to the final time t_f we reach the target x_f = 0 0.\n\np0 = [12, 6]\nxf, pf = f(t0, x0, p0, tf)\nxf\n\nIf you prefer to get the state, costate and control trajectories at any time, you can call the flow like this:\n\nsol = f((t0, tf), x0, p0)\nnothing # hide\n\nIn this case, you obtain a data that you can plot exactly like when solving the optimal control problem with the function solve. See for instance the basic example or the plot tutorial.\n\nusing Plots\nplot(sol)\n\nYou can notice from the graph of v that the integrator has made very few steps:\n\ntime_grid(sol)\n\nnote: Time grid\nThe function time_grid returns the discretised time grid returned by the solver. In this case, the solution has been computed by numerical integration with an adaptive step-length Runge-Kutta scheme.\n\nTo have a better visualisation (the accuracy won't change), you can provide a fine grid.\n\nsol = f((t0, tf), x0, p0; saveat=range(t0, tf, 100))\nplot(sol)\n\nThe argument saveat is an option from OrdinaryDiffEq.jl. Please check the list of common options. For instance, one can change the integrator with the keyword argument alg or the absolute tolerance with abstol. Note that you can set an option when declaring the flow or set an option in a particular call of the flow. In the following example, the integrator will be BS5() and the absolute tolerance will be abstol=1e-8.\n\nf = Flow(ocp, u; alg=BS5(), abstol=1) # alg=BS5(), abstol=1\nxf, pf = f(t0, x0, p0, tf; abstol=1e-8) # alg=BS5(), abstol=1e-8","category":"section"},{"location":"manual-flow-ocp.html#Non-autonomous-case","page":"From optimal control problems","title":"Non-autonomous case","text":"Let us consider the following optimal control problem:\n\nt0 = 0\ntf = π/4\nx0 = 0\nxf = tan(π/4) - 2log(√(2)/2)\n\nocp = @def begin\n\n t ∈ [t0, tf], time\n x ∈ R, state\n u ∈ R, control\n\n x(t0) == x0\n x(tf) == xf\n ẋ(t) == u(t) * (1 + tan(t)) # The dynamics depend explicitly on t\n\n 0.5∫( u(t)^2 ) → min\n\nend\nnothing # hide\n\nThe pseudo-Hamiltonian of this problem is\n\n H(t x p u) = p u (1+tan t) + p^0 u^2 2\n\nwhere p^0 = -1 since we are in the normal case. We can notice that the pseudo-Hamiltonian is non-autonomous since it explicitly depends on the time t. \n\nis_autonomous(ocp)\n\nFrom the Pontryagin maximum principle, the maximising control is given in feedback form by\n\nu(t x p) = p (1+tan t)\n\nsince partial^2_uu H = p^0 = - 1 0. \n\nu(t, x, p) = p * (1 + tan(t))\nnothing # hide\n\nAs before, the Flow function aims to compute (x p) from the optimal control problem ocp and the control in feedback form u(t, x, p). Since the problem is non-autonomous, we must provide a control law that depends on time.\n\nf = Flow(ocp, u)\nnothing # hide\n\nNow we have the flow of the associated Hamiltonian vector field, we can use it. Some simple calculations shows that the initial covector p(0) solution of the Pontryagin maximum principle is 1. Let us check that integrating the flow from (t_0 x_0) = (0 0) to the final time t_f = pi4 we reach the target x_f = tan(pi4) - 2 log(sqrt22).\n\np0 = 1\nxf, pf = f(t0, x0, p0, tf)\nxf - (tan(π/4) - 2log(√(2)/2))","category":"section"},{"location":"manual-flow-ocp.html#Variable","page":"From optimal control problems","title":"Variable","text":"Let us consider an optimal control problem with a (decision / optimisation) variable.\n\nt0 = 0\nx0 = 0\n\nocp = @def begin\n\n tf ∈ R, variable # the optimisation variable is tf\n t ∈ [t0, tf], time\n x ∈ R, state\n u ∈ R, control\n\n x(t0) == x0\n x(tf) == 1\n ẋ(t) == tf * u(t)\n\n tf + 0.5∫(u(t)^2) → min\n\nend\nnothing # hide\n\nAs you can see, the variable is the final time tf. Note that the dynamics depends on tf. From the Pontryagin maximum principle, the solution is given by:\n\ntf = (3/2)^(1/4)\np0 = 2tf/3\nnothing # hide\n\nThe input arguments of the maximising control are now the state x, the costate p and the variable tf.\n\nu(x, p, tf) = tf * p\nnothing # hide\n\nLet us check that the final condition x(tf) = 1 is satisfied.\n\nf = Flow(ocp, u)\nxf, pf = f(t0, x0, p0, tf, tf)\n\nThe usage of the flow f is the following: f(t0, x0, p0, tf, v) where v is the variable. If one wants to compute the state at time t1 = 0.5, then, one must write:\n\nt1 = 0.5\nx1, p1 = f(t0, x0, p0, t1, tf)\n\nnote: Free times\nIn the particular cases: the initial time t0 is the only variable, the final time tf is the only variable, or the initial and final times t0 and tf are the only variables and are in order v=(t0, tf), the times do not need to be repeated in the call of the flow:xf, pf = f(t0, x0, p0, tf)\n\nSince the variable is the final time, we can make the time-reparameterisation t = s t_f to normalise the time s in 0 1.\n\nocp = @def begin\n\n tf ∈ R, variable\n s ∈ [0, 1], time\n x ∈ R, state\n u ∈ R, control\n\n x(0) == 0\n x(1) == 1\n ẋ(s) == tf^2 * u(s)\n\n tf + (0.5*tf)*∫(u(s)^2) → min\n\nend\n\nf = Flow(ocp, u)\nxf, pf = f(0, x0, p0, 1, tf)\n\nAnother possibility is to add a new state variable t_f(s). The problem has no variable anymore.\n\nocp = @def begin\n\n s ∈ [0, 1], time\n y = (x, tf) ∈ R², state\n u ∈ R, control\n\n x(0) == 0\n x(1) == 1\n dx = tf(s)^2 * u(s)\n dtf = 0 * u(s) # 0\n ẏ(s) == [dx, dtf]\n\n tf(1) + 0.5∫(tf(s) * u(s)^2) → min\n\nend\n\nu(y, q) = y[2] * q[1]\n\nf = Flow(ocp, u)\nyf, pf = f(0, [x0, tf], [p0, 0], 1)\n\ndanger: Bug\nNote that in the previous optimal control problem, we have dtf = 0 * u(s) instead of dtf = 0. The latter does not work.\n\nnote: Goddard problem\nIn the Goddard problem, you may find other constructions of flows, especially for singular and boundary arcs.","category":"section"},{"location":"manual-flow-ocp.html#Concatenation-of-arcs","page":"From optimal control problems","title":"Concatenation of arcs","text":"In this part, we present how to concatenate several flows. Let us consider the following problem.\n\nt0 = 0\ntf = 1\nx0 = -1\nxf = 0\n\n@def ocp begin\n\n t ∈ [ t0, tf ], time\n x ∈ R, state\n u ∈ R, control\n\n x(t0) == x0\n x(tf) == xf\n -1 ≤ u(t) ≤ 1\n ẋ(t) == -x(t) + u(t)\n\n ∫( abs(u(t)) ) → min\n\nend\nnothing # hide\n\nFrom the Pontryagin maximum principle, the optimal control is a concatenation of an off arc (u=0) followed by a positive bang arc (u=1). The initial costate is \n\np_0 = frac1x_0 - (x_f-1) e^t_f\n\nand the switching time is t_1 = -ln(p_0).\n\np0 = 1/( x0 - (xf-1) * exp(tf) )\nt1 = -log(p0)\nnothing # hide\n\nLet us define the two flows and the concatenation. Note that the concatenation of two flows is a flow.\n\nf0 = Flow(ocp, (x, p) -> 0) # off arc: u = 0\nf1 = Flow(ocp, (x, p) -> 1) # positive bang arc: u = 1\n\nf = f0 * (t1, f1) # f0 followed by f1 whenever t ≥ t1\nnothing # hide\n\nNow, we can check that the state reach the target.\n\nsol = f((t0, tf), x0, p0)\nplot(sol)\n\nnote: Goddard problem\nIn the Goddard problem, you may find more complex concatenations.\n\nFor the moment, this concatenation is not equivalent to an exact concatenation.\n\nf = Flow(x -> x)\ng = Flow(x -> -x)\n\nx0 = 1\nφ(t) = (f * (t/2, g))(0, x0, t)\nψ(t) = g(t/2, f(0, x0, t/2), t)\n\nprintln(\"φ(t) = \", abs(φ(1)-x0))\nprintln(\"ψ(t) = \", abs(ψ(1)-x0))\n\nt = range(1, 5e2, 201)\n\nplt = plot(yaxis=:log, legend=:bottomright, title=\"Comparison of concatenations\", xlabel=\"t\")\nplot!(plt, t, t->abs(φ(t)-x0), label=\"OptimalControl\")\nplot!(plt, t, t->abs(ψ(t)-x0), label=\"Classical\")","category":"section"},{"location":"manual-flow-ocp.html#State-constraints","page":"From optimal control problems","title":"State constraints","text":"We consider an optimal control problem with a state constraints of order 1.[1] \n\n[1]: B. Bonnard, L. Faubourg, G. Launay & E. Trélat, Optimal Control With State Constraints And The Space Shuttle Re-entry Problem, J. Dyn. Control Syst., 9 (2003), no. 2, 155–199.\n\nt0 = 0\ntf = 2\nx0 = 1\nxf = 1/2\nlb = 0.1\n\nocp = @def begin\n\n t ∈ [t0, tf], time\n x ∈ R, state\n u ∈ R, control\n\n -1 ≤ u(t) ≤ 1\n x(t0) == x0\n x(tf) == xf\n x(t) - lb ≥ 0 # state constraint\n ẋ(t) == u(t)\n\n ∫( x(t)^2 ) → min\n\nend\nnothing # hide\n\nThe pseudo-Hamiltonian of this problem is\n\n H(x p u mu) = p u + p^0 x^2 + mu c(x)\n\nwhere $ p^0 = -1 $ since we are in the normal case, and where c(x) = x - l_b. Along a boundary arc, when c(x(t)) = 0, we have x(t) = l_b, so $ x(\\cdot) $ is constant. Differentiating, we obtain dotx(t) = u(t) = 0. Hence, along a boundary arc, the control in feedback form is:\n\nu(x) = 0\n\nFrom the maximisation condition, along a boundary arc, we have p(t) = 0. Differentiating, we obtain dotp(t) = 2 x(t) - mu(t) = 0. Hence, along a boundary arc, the dual variable mu is given in feedback form by:\n\nmu(x) = 2x\n\nnote: Note\nWithin OptimalControl.jl, the constraint must be given in the form:c([t, ]x, u[, v])the control law in feedback form must be given as:u([t, ]x, p[, v])and the dual variable:μ([t, ]x, p[, v])The time t must be provided when the problem is non-autonomous and the variable v must be given when the optimal control problem contains a variable to optimise.\n\nThe optimal control is a concatenation of 3 arcs: a negative bang arc followed by a boundary arc, followed by a positive bang arc. The initial covector is approximately p(0)=-0982237546583301, the first switching time is t_1 = 09, and the exit time of the boundary is t_2 = 16. Let us check this by concatenating the three flows.\n\nu(x) = 0 # boundary control\nc(x) = x-lb # constraint\nμ(x) = 2x # dual variable\n\nf1 = Flow(ocp, (x, p) -> -1)\nf2 = Flow(ocp, (x, p) -> u(x), (x, u) -> c(x), (x, p) -> μ(x))\nf3 = Flow(ocp, (x, p) -> +1)\n\nt1 = 0.9\nt2 = 1.6\nf = f1 * (t1, f2) * (t2, f3)\n\np0 = -0.982237546583301\nxf, pf = f(t0, x0, p0, tf)\nxf","category":"section"},{"location":"manual-flow-ocp.html#Jump-on-the-costate","page":"From optimal control problems","title":"Jump on the costate","text":"Let consider the following problem:\n\nt0=0\ntf=1\nx0=[0, 1]\nl = 1/9\n@def ocp begin\n t ∈ [ t0, tf ], time\n x ∈ R², state\n u ∈ R, control\n x(t0) == x0\n x(tf) == [0, -1]\n x₁(t) ≤ l, (x_con)\n ẋ(t) == [x₂(t), u(t)]\n 0.5∫(u(t)^2) → min\nend\nnothing # hide\n\nThe pseudo-Hamiltonian of this problem is\n\n H(x p u mu) = p_1 x_2 + p_2 u + 05 p^0 u^2 + mu c(x)\n\nwhere $ p^0 = -1 $ since we are in the normal case, and where the constraint is c(x) = l - x_1 ge 0. Along a boundary arc, when c(x(t)) = 0, we have x_1(t) = l, so dotx_1(t) = x_2(t) = 0. Differentiating again, we obtain dotx_2(t) = u(t) = 0 (the constraint is of order 2). Hence, along a boundary arc, the control in feedback form is:\n\nu(x p) = 0\n\nFrom the maximisation condition, along a boundary arc, we have p_2(t) = 0. Differentiating, we obtain dotp_2(t) = -p_1(t) = 0. Differentiating again, we obtain dotp_1(t) = mu(t) = 0. Hence, along a boundary arc, the Lagrange multiplier mu is given in feedback form by:\n\nmu(x p) = 0\n\nOutside a boundary arc, the maximisation condition gives u(x p) = p_2. A deeper analysis of the problem shows that the optimal solution has 3 arcs, the first and the third ones are interior to the constraint. The second arc is a boundary arc, that is x_1(t) = l along the second arc. We denote by t_1 and t_2 the two switching times. We have t_1 = 3l = 13 and t_2 = 1 - 3l = 23, since l=19. The initial costate solution is p(0) = -18 -6.\n\ndanger: Important\nThe costate is discontinuous at t_1 and t_2 with a jump of 18.\n\nLet us compute the solution concatenating the flows with the jumps.\n\nt1 = 3l\nt2 = 1 - 3l\np0 = [-18, -6]\n\nfs = Flow(ocp, \n (x, p) -> p[2] # control along regular arc\n )\nfc = Flow(ocp, \n (x, p) -> 0, # control along boundary arc\n (x, u) -> l-x[1], # state constraint\n (x, p) -> 0 # Lagrange multiplier\n )\n\nν = 18 # jump value of p1 at t1 and t2\n\nf = fs * (t1, [ν, 0], fc) * (t2, [ν, 0], fs)\n\nxf, pf = f(t0, x0, p0, tf) # xf should be [0, -1]\n\nLet us solve the problem with a direct method to compare with the solution from the flow.\n\nusing NLPModelsIpopt\n\ndirect_sol = solve(ocp)\nplot(direct_sol; label=\"direct\", size=(800, 700))\n\nflow_sol = f((t0, tf), x0, p0; saveat=range(t0, tf, 100))\nplot!(flow_sol; label=\"flow\", state_style=(color=3,), linestyle=:dash)\n\n","category":"section"},{"location":"rdnopa-2025.html","page":"RDNOPA 2025","title":"RDNOPA 2025","text":"\"rdnopa\"","category":"section"},{"location":"rdnopa-2025.html#Numerical-developments-to-solve-optimal-control-problems-in-Julia","page":"RDNOPA 2025","title":"Numerical developments to solve optimal control problems in Julia","text":"","category":"section"},{"location":"rdnopa-2025.html#[Jean-Baptiste-Caillau](http://caillau.perso.math.cnrs.fr),-[Olivier-Cots](https://ocots.github.io),-[Joseph-Gergaud](https://github.com/joseph-gergaud),-[Pierre-Martinon](https://github.com/PierreMartinon),-[Sophia-Sed](https://sed-sam-blog.gitlabpages.inria.fr)","page":"RDNOPA 2025","title":"Jean-Baptiste Caillau, Olivier Cots, Joseph Gergaud, Pierre Martinon, Sophia Sed","text":"\"affiliations\"","category":"section"},{"location":"rdnopa-2025.html#What-it's-about","page":"RDNOPA 2025","title":"What it's about","text":"Nonlinear optimal control of ODEs:\n\ng(x(t_0)x(t_f)) + int_t_0^t_f f^0(x(t) u(t)) mathrmdt to min\n\nsubject to\n\ndotx(t) = f(x(t) u(t))quad t in t_0 t_f\n\nplus boundary, control and state constraints\n\nOur core interests: numerical & geometrical methods in control, applications\nWhy Julia: fast (+ JIT), strongly typed, high-level (AD, macros), fast optimisation and ODE solvers available, rapidly growing community\n\nWhat is important to solve such a problem numerically?","category":"section"},{"location":"rdnopa-2025.html#Syntax-matters","page":"RDNOPA 2025","title":"Syntax matters","text":"Simple example\nUse LLM\n\n
Do more...\n\nrewrite in OptimalControl.jl DSL the free time problem below as a problem with fixed final time using:\n- a change time from t to s = t / tf\n- tf as an additional state variable subject to dtf / ds = 0\nocp = @def begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n -1 ≤ u(t) ≤ 1\n q(0) == -1\n v(0) == 0\n q(tf) == 0\n v(tf) == 0\n ẋ(t) == [v(t), u(t)]\n tf → min\nend\n\nocp_fixed = @def begin\n # Fixed time domain\n s ∈ [0, 1], time\n \n # Augmented state: (position, velocity, final_time)\n y = (q, v, tf) ∈ R³, state\n \n # Control\n u ∈ R, control\n \n # Transformed dynamics (multiply by tf due to ds = dt/tf)\n ∂(q)(s) == tf(s) * v(s)\n ∂(v)(s) == tf(s) * u(s)\n ∂(tf)(s) == 0\n \n # Initial conditions\n q(0) == -1\n v(0) == 0\n # tf(0) is free (no initial condition needed)\n \n # Final conditions\n q(1) == 0\n v(1) == 0\n # tf(1) is what we minimize\n \n # Control constraints\n -1 ≤ u(s) ≤ 1\n \n # Cost: minimize final time\n tf(1) → min\nend\n\n
","category":"section"},{"location":"rdnopa-2025.html#Performance-matters","page":"RDNOPA 2025","title":"Performance matters","text":"Discretising an OCP into an NLP: h_i = t_i+1-t_i,\n\ng(X_0X_N) + sum_i=0^N h_i f^0(X_iU_i) to min\n\nsubject to \n\nX_i+1 - X_i - h_i f(X_i U_i) = 0quad i = 0dotsN-1\n\nplus other constraints on X = (X_i)_i=0N and U = (U_i)_i=0N such as boundary and path (state and / or control) constraints :\n\nb(t_0 X_0 t_N X_N) = 0\n\nc(X_i U_i) leq 0quad i = 0dotsN\n\nSIMD parallelism (f_0, f, g) + sparsity: Kernels for GPU (KernelAbstraction.jl) and sparse linear algebra (CUDSS.jl)\nModelling and optimising for GPU: ExaModels.jl + MadNLP.jl, with built-in AD\nCompile into an ExaModel (one pass compiler, syntax + semantics)\n\n
Solving (MadNLP + CUDSS)\n\nThis is MadNLP version v0.8.7, running with cuDSS v0.4.0\n\nNumber of nonzeros in constraint Jacobian............: 12005\nNumber of nonzeros in Lagrangian Hessian.............: 9000\n\nTotal number of variables............................: 4004\n variables with only lower bounds: 0\n variables with lower and upper bounds: 0\n variables with only upper bounds: 0\nTotal number of equality constraints.................: 3005\nTotal number of inequality constraints...............: 0\n inequality constraints with only lower bounds: 0\n inequality constraints with lower and upper bounds: 0\n inequality constraints with only upper bounds: 0\n\niter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls\n 0 1.0000000e-01 1.10e+00 1.00e+00 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0\n 1 1.0001760e-01 1.10e+00 3.84e-03 -1.0 6.88e+02 -4.0 1.00e+00 2.00e-07h 2\n 2 -5.2365072e-03 1.89e-02 1.79e-07 -1.0 6.16e+00 -4.5 1.00e+00 1.00e+00h 1\n 3 5.9939621e+00 2.28e-03 1.66e-04 -3.8 6.00e+00 -5.0 9.99e-01 1.00e+00h 1\n 4 5.9996210e+00 2.94e-06 8.38e-07 -3.8 7.70e-02 - 1.00e+00 1.00e+00h 1\n\nNumber of Iterations....: 4\n\n (scaled) (unscaled)\nObjective...............: 5.9996210189633494e+00 5.9996210189633494e+00\nDual infeasibility......: 8.3756005011360529e-07 8.3756005011360529e-07\nConstraint violation....: 2.9426923277963834e-06 2.9426923277963834e-06\nComplementarity.........: 2.0007459547789288e-06 2.0007459547789288e-06\nOverall NLP error.......: 2.9426923277963834e-06 2.9426923277963834e-06\n\nNumber of objective function evaluations = 6\nNumber of objective gradient evaluations = 5\nNumber of constraint evaluations = 6\nNumber of constraint Jacobian evaluations = 5\nNumber of Lagrangian Hessian evaluations = 4\nTotal wall-clock secs in solver (w/o fun. eval./lin. alg.) = 0.072\nTotal wall-clock secs in linear solver = 0.008\nTotal wall-clock secs in NLP function evaluations = 0.003\nTotal wall-clock secs = 0.083\n\nMini-benchmark: Goddard and Quadrotor problems\nGoddard, H100 run \n\n\"goddard-h100\"\n\nQuadrotor, H100 run \n\n\"quadrotor-h100\"\n\n
","category":"section"},{"location":"rdnopa-2025.html#Maths-matters","page":"RDNOPA 2025","title":"Maths matters","text":"Coupling direct and indirect (aka shooting methods)\nEasy access to differential-geometric tools with AD\nGoddard tutorial","category":"section"},{"location":"rdnopa-2025.html#Applications-matter","page":"RDNOPA 2025","title":"Applications matter","text":"Use case approach: aerospace engineering, quantum mechanics, biology, environment...\nMagnetic Resonance Imaging","category":"section"},{"location":"rdnopa-2025.html#Wrap-up","page":"RDNOPA 2025","title":"Wrap up","text":"High level modelling of optimal control problems\nHigh performance solving both on CPU and GPU\nDriven by applications","category":"section"},{"location":"rdnopa-2025.html#control-toolbox.org","page":"RDNOPA 2025","title":"control-toolbox.org","text":"Collection of Julia Packages rooted at OptimalControl.jl\n\n\"control-toolbox.org\"\n\nOpen to contributions! Give it a try, give it a star ⭐️\nCollection of problems: OptimalControlProblems.jl\n\n\"ct-qr\"","category":"section"},{"location":"rdnopa-2025.html#Credits-(not-exhaustive!)","page":"RDNOPA 2025","title":"Credits (not exhaustive!)","text":"ADNLPModels.jl\nDifferentiationInterface.jl\nDifferentialEquations.jl\nExaModels.jl\nIpopt.jl\nMadNLP.jl\nMLStyle.jl","category":"section"},{"location":"rdnopa-2025.html#Acknowledgements","page":"RDNOPA 2025","title":"Acknowledgements","text":"Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).\n\n\"affiliations\"\n\n","category":"section"},{"location":"api-optimalcontrol-user.html#OptimalControl.jl","page":"OptimalControl.jl - User","title":"OptimalControl.jl","text":"OptimalControl.jl is the core package of the control-toolbox ecosystem. Below, we group together the documentation of all the functions and types exported by OptimalControl.\n\ntip: Beware!\nEven if the following functions are prefixed by another package, such as CTFlows.Lift, they can all be used with OptimalControl. In fact, all functions prefixed with another package are simply reexported. For example, Lift is defined in CTFlows but accessible from OptimalControl.julia> using OptimalControl\njulia> F(x) = 2x\njulia> H = Lift(F)\njulia> x = 1\njulia> p = 2\njulia> H(x, p)\n4","category":"section"},{"location":"api-optimalcontrol-user.html#Exported-functions-and-types","page":"OptimalControl.jl - User","title":"Exported functions and types","text":"","category":"section"},{"location":"api-optimalcontrol-user.html#Documentation","page":"OptimalControl.jl - User","title":"Documentation","text":"","category":"section"},{"location":"api-optimalcontrol-user.html#OptimalControl.OptimalControl","page":"OptimalControl.jl - User","title":"OptimalControl.OptimalControl","text":"OptimalControl module.\n\nList of all the exported names:\n\n*\nAmbiguousDescription\nCTException\nExtensionError\nFlow\nHamiltonian\nHamiltonianLift\nHamiltonianVectorField\nIncorrectArgument\nIncorrectMethod\nIncorrectOutput\n@Lie\nLie\nLift\nModel\nNotImplemented\nParsingError\nPoisson\nSolution\nUnauthorizedCall\nVectorField\navailable_methods\nbuild_OCP_solution\nconstraint\nconstraints\nconstraints_violation\ncontrol\ncontrol_components\ncontrol_dimension\ncontrol_name\ncostate\ncriterion\n@def\ndefinition\ndirect_transcription\ndual\ndynamics\nexport_ocp_solution\nfinal_time\nfinal_time_name\nget_build_examodel\nhas_fixed_final_time\nhas_fixed_initial_time\nhas_free_final_time\nhas_free_initial_time\nhas_lagrange_cost\nhas_mayer_cost\nimport_ocp_solution\ninfos\ninitial_time\ninitial_time_name\nis_autonomous\niterations\nlagrange\nmayer\nmessage\nnlp_model\nobjective\nocp_model\nplot\nset_initial_guess\nsolve\nstate\nstate_components\nstate_dimension\nstate_name\nstatus\nsuccessful\ntime_grid\ntime_name\ntimes\nvariable\nvariable_components\nvariable_dimension\nvariable_name\n⋅\n\n\n\n\n\n","category":"module"},{"location":"api-optimalcontrol-user.html#Base.:*-Tuple{CTFlowsODE.AbstractFlow}","page":"OptimalControl.jl - User","title":"Base.:*","text":"*(x, y...)\n\nMultiplication operator.\n\nInfix x*y*z*... calls this function with all arguments, i.e. *(x, y, z, ...), which by default then calls (x*y) * z * ... starting from the left.\n\nJuxtaposition such as 2pi also calls *(2, pi). Note that this operation has higher precedence than a literal *. Note also that juxtaposition \"0x...\" (integer zero times a variable whose name starts with x) is forbidden as it clashes with unsigned integer literals: 0x01 isa UInt8.\n\nNote that overflow is possible for most integer types, including the default Int, when multiplying large numbers.\n\nExamples\n\njulia> 2 * 7 * 8\n112\n\njulia> *(2, 7, 8)\n112\n\njulia> [2 0; 0 3] * [1, 10] # matrix * vector\n2-element Vector{Int64}:\n 2\n 30\n\njulia> 1/2pi, 1/2*pi # juxtaposition has higher precedence\n(0.15915494309189535, 1.5707963267948966)\n\njulia> x = [1, 2]; x'x # adjoint vector * vector\n5\n\n\n\n\n\n*(\n F::CTFlowsODE.AbstractFlow,\n g::Tuple{Real, TF<:CTFlowsODE.AbstractFlow}\n) -> Any\n\n\nShorthand for concatenate(F, g) when g is a tuple (t_switch, G).\n\nArguments\n\nF::AbstractFlow: The first flow.\ng::Tuple{ctNumber, AbstractFlow}: Tuple containing the switching time and second flow.\n\nReturns\n\nA new flow that switches from F to G at t_switch.\n\nExample\n\njulia> F * (1.0, G)\n\n\n\n\n\n*(\n F::CTFlowsODE.AbstractFlow,\n g::Tuple{Real, Any, TF<:CTFlowsODE.AbstractFlow}\n) -> Any\n\n\nShorthand for concatenate(F, g) when g is a tuple (t_switch, η_switch, G) including a jump.\n\nArguments\n\nF::AbstractFlow: The first flow.\ng::Tuple{ctNumber, Any, AbstractFlow}: Tuple with switching time, jump value, and second flow.\n\nReturns\n\nA flow with a jump at t_switch and a switch from F to G.\n\nExample\n\njulia> F * (1.0, η, G)\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#CTBase.AmbiguousDescription","page":"OptimalControl.jl - User","title":"CTBase.AmbiguousDescription","text":"struct AmbiguousDescription <: CTException\n\nException thrown when a description is ambiguous or does not match any known descriptions.\n\nFields\n\nvar::Tuple{Vararg{Symbol}}: The ambiguous or incorrect description tuple that caused the error.\n\nExample\n\njulia> complete(:f; descriptions=((:a, :b), (:a, :b, :c)))\nERROR: AmbiguousDescription: the description (:f,) is ambiguous / incorrect\n\nThis error is useful to signal when a user provides a description that cannot be matched to any known valid descriptions.\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTBase.CTException","page":"OptimalControl.jl - User","title":"CTBase.CTException","text":"abstract type CTException <: Exception\n\nAbstract supertype for all custom exceptions in this module.\n\nUse this as the common ancestor for all domain-specific errors to allow catching all exceptions of this family via catch e::CTException.\n\nNo fields.\n\nExample\n\njulia> try\n throw(IncorrectArgument(\"invalid input\"))\n catch e::CTException\n println(\"Caught a domain-specific exception: \", e)\n end\nCaught a domain-specific exception: IncorrectArgument: invalid input\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTBase.ExtensionError","page":"OptimalControl.jl - User","title":"CTBase.ExtensionError","text":"struct ExtensionError <: CTException\n\nException thrown when an extension or optional dependency is not loaded but a function requiring it is called.\n\nFields\n\nweakdeps::Tuple{Vararg{Symbol}}: The tuple of symbols representing the missing dependencies.\n\nConstructor\n\nThrows UnauthorizedCall if no weak dependencies are provided.\n\nExample\n\njulia> throw(ExtensionError(:MyExtension))\nERROR: ExtensionError. Please make: julia> using MyExtension\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTFlows.Flow","page":"OptimalControl.jl - User","title":"CTFlows.Flow","text":"Flow(\n vf::VectorField;\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> CTFlowsODE.VectorFieldFlow\n\n\nConstructs a flow object for a classical (non-Hamiltonian) vector field.\n\nThis creates a VectorFieldFlow that integrates the ODE system dx/dt = vf(t, x, v) using DifferentialEquations.jl. It handles both fixed and parametric dynamics, as well as jump discontinuities and event stopping.\n\nKeyword Arguments\n\nalg, abstol, reltol, saveat, internalnorm: Solver options.\nkwargs_Flow...: Additional arguments passed to the solver configuration.\n\nExample\n\njulia> vf(t, x, v) = -v * x\njulia> flow = CTFlows.Flow(CTFlows.VectorField(vf))\njulia> x1 = flow(0.0, 1.0, 1.0)\n\n\n\n\n\nFlow(\n h::CTFlows.AbstractHamiltonian;\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> CTFlowsODE.HamiltonianFlow\n\n\nConstructs a Hamiltonian flow from a scalar Hamiltonian.\n\nThis method builds a numerical integrator that simulates the evolution of a Hamiltonian system given a Hamiltonian function h(t, x, p, l) or h(x, p).\n\nInternally, it computes the right-hand side of Hamilton’s equations via automatic differentiation and returns a HamiltonianFlow object.\n\nKeyword Arguments\n\nalg, abstol, reltol, saveat, internalnorm: solver options.\nkwargs_Flow...: forwarded to the solver.\n\nExample\n\njulia> H(x, p) = dot(p, p) + dot(x, x)\njulia> flow = CTFlows.Flow(CTFlows.Hamiltonian(H))\njulia> xf, pf = flow(0.0, x0, p0, 1.0)\n\n\n\n\n\nFlow(\n hv::HamiltonianVectorField;\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> CTFlowsODE.HamiltonianFlow\n\n\nConstructs a Hamiltonian flow from a precomputed Hamiltonian vector field.\n\nThis method assumes you already provide the Hamiltonian vector field (dx/dt, dp/dt) instead of deriving it from a scalar Hamiltonian.\n\nReturns a HamiltonianFlow object that integrates the given system.\n\nKeyword Arguments\n\nalg, abstol, reltol, saveat, internalnorm: solver options.\nkwargs_Flow...: forwarded to the solver.\n\nExample\n\njulia> hv(t, x, p, l) = (∇ₚH, -∇ₓH)\njulia> flow = CTFlows.Flow(CTFlows.HamiltonianVectorField(hv))\njulia> xf, pf = flow(0.0, x0, p0, 1.0, l)\n\n\n\n\n\nFlow(\n ocp::Model,\n u::CTFlows.ControlLaw;\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}\n\n\nConstruct a flow for an optimal control problem using a given control law.\n\nThis method builds the Hamiltonian system associated with the optimal control problem (ocp) and integrates the corresponding state–costate dynamics using the specified control law u.\n\nArguments\n\nocp::CTModels.Model: An optimal control problem defined using CTModels.\nu::CTFlows.ControlLaw: A feedback control law generated by ControlLaw(...) or similar.\nalg: Integration algorithm (default inferred).\nabstol: Absolute tolerance for the ODE solver.\nreltol: Relative tolerance for the ODE solver.\nsaveat: Time points at which to save the solution.\ninternalnorm: Optional norm function used by the integrator.\nkwargs_Flow: Additional keyword arguments passed to the solver.\n\nReturns\n\nA flow object f such that:\n\nf(t0, x0, p0, tf) integrates the state and costate from t0 to tf.\nf((t0, tf), x0, p0) returns the full trajectory over the interval.\n\nExample\n\njulia> u = (x, p) -> p\njulia> f = Flow(ocp, ControlLaw(u))\n\n\n\n\n\nFlow(\n ocp::Model,\n u::Function;\n autonomous,\n variable,\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}\n\n\nConstruct a flow for an optimal control problem using a control function in feedback form.\n\nThis method constructs the Hamiltonian and integrates the associated state–costate dynamics using a raw function u. It automatically wraps u as a control law.\n\nArguments\n\nocp::CTModels.Model: The optimal control problem.\nu::Function: A feedback control function:\nIf ocp is autonomous: u(x, p)\nIf non-autonomous: u(t, x, p)\nautonomous::Bool: Whether the control law depends on time.\nvariable::Bool: Whether the OCP involves variable time (e.g., free final time).\nalg, abstol, reltol, saveat, internalnorm: ODE solver parameters.\nkwargs_Flow: Additional options.\n\nReturns\n\nA Flow object compatible with function call interfaces for state propagation.\n\nExample\n\njulia> u = (t, x, p) -> t + p\njulia> f = Flow(ocp, u)\n\n\n\n\n\nFlow(\n ocp::Model,\n u::Union{CTFlows.ControlLaw{<:Function, T, V}, CTFlows.FeedbackControl{<:Function, T, V}},\n g::Union{CTFlows.MixedConstraint{<:Function, T, V}, CTFlows.StateConstraint{<:Function, T, V}},\n μ::CTFlows.Multiplier{<:Function, T, V};\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}\n\n\nConstruct a flow for an optimal control problem with control and constraint multipliers in feedback form.\n\nThis variant constructs a Hamiltonian system incorporating both the control law and a multiplier law (e.g., for enforcing state or mixed constraints). All inputs must be consistent in time dependence.\n\nArguments\n\nocp::CTModels.Model: The optimal control problem.\nu::ControlLaw or FeedbackControl: Feedback control.\ng::StateConstraint or MixedConstraint: Constraint function.\nμ::Multiplier: Multiplier function.\nalg, abstol, reltol, saveat, internalnorm: Solver settings.\nkwargs_Flow: Additional options.\n\nReturns\n\nA Flow object that integrates the constrained Hamiltonian dynamics.\n\nExample\n\njulia> f = Flow(ocp, (x, p) -> p[1], (x, u) -> x[1] - 1, (x, p) -> x[1]+p[1])\n\nFor non-autonomous cases:\n\njulia> f = Flow(ocp, (t, x, p) -> t + p, (t, x, u) -> x - 1, (t, x, p) -> x+p)\n\nwarning: Warning\nAll input functions must match the autonomous/non-autonomous nature of the problem.\n\n\n\n\n\nFlow(\n ocp::Model,\n u::Function,\n g::Function,\n μ::Function;\n autonomous,\n variable,\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> Union{CTFlowsODE.OptimalControlFlow{CTFlows.Fixed}, CTFlowsODE.OptimalControlFlow{CTFlows.NonFixed}}\n\n\nConstruct a flow from a raw feedback control, constraint, and multiplier.\n\nThis version is for defining flows directly from user functions without wrapping them into ControlLaw, Constraint, or Multiplier types. Automatically wraps and adapts them based on time dependence.\n\nArguments\n\nocp::CTModels.Model: The optimal control problem.\nu::Function: Control law.\ng::Function: Constraint.\nμ::Function: Multiplier.\nautonomous::Bool: Whether the system is autonomous.\nvariable::Bool: Whether time is a free variable.\nalg, abstol, reltol, saveat, internalnorm: Solver parameters.\nkwargs_Flow: Additional options.\n\nReturns\n\nA Flow object ready for trajectory integration.\n\n\n\n\n\nFlow(\n dyn::Function;\n autonomous,\n variable,\n alg,\n abstol,\n reltol,\n saveat,\n internalnorm,\n kwargs_Flow...\n) -> CTFlowsODE.ODEFlow\n\n\nConstructs a Flow from a user-defined dynamical system given as a Julia function.\n\nThis high-level interface handles:\n\nautonomous and non-autonomous systems,\npresence or absence of additional variables (v),\nselection of ODE solvers and tolerances,\nand integrates with the CTFlows event system (e.g., jumps, callbacks).\n\nArguments\n\ndyn: A function defining the vector field. Its signature must match the values of autonomous and variable.\nautonomous: Whether the dynamics are time-independent (false by default).\nvariable: Whether the dynamics depend on a control or parameter v.\nalg, abstol, reltol, saveat, internalnorm: Solver settings passed to OrdinaryDiffEq.solve.\nkwargs_Flow: Additional keyword arguments passed to the solver.\n\nReturns\n\nAn ODEFlow object, wrapping both the full solver and its right-hand side (RHS).\n\nSupported Function Signatures for dyn\n\nDepending on the (autonomous, variable) flags:\n\n(false, false): dyn(x)\n(false, true): dyn(x, v)\n(true, false): dyn(t, x)\n(true, true): dyn(t, x, v)\n\nExample\n\njulia> dyn(t, x, v) = [-x[1] + v[1] * sin(t)]\njulia> flow = CTFlows.Flow(dyn; autonomous=true, variable=true)\njulia> xT = flow((0.0, 1.0), [1.0], [0.1])\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTFlows.Hamiltonian","page":"OptimalControl.jl - User","title":"CTFlows.Hamiltonian","text":"struct Hamiltonian{TF<:Function, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence} <: CTFlows.AbstractHamiltonian{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}\n\nEncodes the Hamiltonian function H = ⟨p, f⟩ + L in optimal control.\n\nFields\n\nf: a callable of the form:\nf(x, p)\nf(t, x, p)\nf(x, p, v)\nf(t, x, p, v)\n\nType Parameters\n\nTD: Autonomous or NonAutonomous\nVD: Fixed or NonFixed\n\nExample\n\njulia> Hf(x, p) = dot(p, [x[2], -x[1]])\njulia> H = Hamiltonian{typeof(Hf), Autonomous, Fixed}(Hf)\njulia> H([1.0, 0.0], [1.0, 1.0])\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTFlows.HamiltonianLift","page":"OptimalControl.jl - User","title":"CTFlows.HamiltonianLift","text":"struct HamiltonianLift{TV<:VectorField, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence} <: CTFlows.AbstractHamiltonian{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}\n\nLifts a vector field X into a Hamiltonian function using the canonical symplectic structure.\n\nThis is useful to convert a vector field into a Hamiltonian via the identity: H(x, p) = ⟨p, X(x)⟩.\n\nConstructor\n\nUse HamiltonianLift(X::VectorField) where X is a VectorField{...}.\n\nExample\n\nf(x) = [x[2], -x[1]]\njulia> X = VectorField{typeof(f), Autonomous, Fixed}(f)\njulia> H = HamiltonianLift(X)\njulia> H([1.0, 0.0], [0.5, 0.5])\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTFlows.HamiltonianVectorField","page":"OptimalControl.jl - User","title":"CTFlows.HamiltonianVectorField","text":"struct HamiltonianVectorField{TF<:Function, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence} <: CTFlows.AbstractVectorField{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}\n\nRepresents the Hamiltonian vector field associated to a Hamiltonian function, typically defined as (∂H/∂p, -∂H/∂x).\n\nFields\n\nf: a callable implementing the Hamiltonian vector field.\n\nExample\n\njulia> f(x, p) = [p[2], -p[1], -x[1], -x[2]]\njulia> XH = HamiltonianVectorField{typeof(f), Autonomous, Fixed}(f)\njulia> XH([1.0, 0.0], [0.5, 0.5])\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTBase.IncorrectArgument","page":"OptimalControl.jl - User","title":"CTBase.IncorrectArgument","text":"struct IncorrectArgument <: CTException\n\nException thrown when an argument passed to a function or constructor is inconsistent, invalid, or does not satisfy preconditions.\n\nFields\n\nvar::String: A descriptive message explaining the nature of the incorrect argument.\n\nExample\n\njulia> throw(IncorrectArgument(\"the argument must be a non-empty tuple\"))\nERROR: IncorrectArgument: the argument must be a non-empty tuple\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTBase.IncorrectMethod","page":"OptimalControl.jl - User","title":"CTBase.IncorrectMethod","text":"struct IncorrectMethod <: CTException\n\nException thrown when a specified method name or function symbol does not exist.\n\nFields\n\nvar::Symbol: The method or function symbol that was expected but not found.\n\nExample\n\njulia> throw(IncorrectMethod(:nonexistent_func))\nERROR: IncorrectMethod: nonexistent_func is not an existing method\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTBase.IncorrectOutput","page":"OptimalControl.jl - User","title":"CTBase.IncorrectOutput","text":"struct IncorrectOutput <: CTException\n\nException thrown when the output produced by a function is incorrect or inconsistent with expected results.\n\nFields\n\nvar::String: A descriptive message explaining the incorrect output.\n\nExample\n\njulia> throw(IncorrectOutput(\"the function returned NaN\"))\nERROR: IncorrectOutput: the function returned NaN\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTFlows.@Lie","page":"OptimalControl.jl - User","title":"CTFlows.@Lie","text":"Compute Lie or Poisson brackets.\n\nThis macro provides a unified notation to define recursively nested Lie brackets (for vector fields) or Poisson brackets (for Hamiltonians).\n\nSyntax\n\n@Lie [F, G]: computes the Lie bracket [F, G] of two vector fields.\n@Lie [[F, G], H]: supports arbitrarily nested Lie brackets.\n@Lie {H, K}: computes the Poisson bracket {H, K} of two Hamiltonians.\n@Lie {{H, K}, L}: supports arbitrarily nested Poisson brackets.\n@Lie expr autonomous = false: specifies a non-autonomous system.\n@Lie expr variable = true: indicates presence of an auxiliary variable v.\n\nKeyword-like arguments can be provided to control the evaluation context for Poisson brackets with raw functions:\n\nautonomous = Bool: whether the system is time-independent (default: true).\nvariable = Bool: whether the system depends on an extra variable v (default: false).\n\nBracket type detection\n\nSquare brackets [...] denote Lie brackets between VectorField objects.\nCurly brackets {...} denote Poisson brackets between Hamiltonian objects or between raw functions.\nThe macro automatically dispatches to Lie or Poisson depending on the input pattern.\n\nReturn\n\nA callable object representing the specified Lie or Poisson bracket expression. The returned function can be evaluated like any other vector field or Hamiltonian.\n\n\n\nExamples\n\n■ Lie brackets with VectorField (autonomous)\n\njulia> F1 = VectorField(x -> [0, -x[3], x[2]])\njulia> F2 = VectorField(x -> [x[3], 0, -x[1]])\njulia> L = @Lie [F1, F2]\njulia> L([1.0, 2.0, 3.0])\n3-element Vector{Float64}:\n 2.0\n -1.0\n 0.0\n\n■ Lie brackets with VectorField (non-autonomous, with auxiliary variable)\n\njulia> F1 = VectorField((t, x, v) -> [0, -x[3], x[2]]; autonomous=false, variable=true)\njulia> F2 = VectorField((t, x, v) -> [x[3], 0, -x[1]]; autonomous=false, variable=true)\njulia> L = @Lie [F1, F2]\njulia> L(0.0, [1.0, 2.0, 3.0], 1.0)\n3-element Vector{Float64}:\n 2.0\n -1.0\n 0.0\n\n■ Poisson brackets with Hamiltonian (autonomous)\n\njulia> H1 = Hamiltonian((x, p) -> x[1]^2 + p[2]^2)\njulia> H2 = Hamiltonian((x, p) -> x[2]^2 + p[1]^2)\njulia> P = @Lie {H1, H2}\njulia> P([1.0, 1.0], [3.0, 2.0])\n-4.0\n\n■ Poisson brackets with Hamiltonian (non-autonomous, with variable)\n\njulia> H1 = Hamiltonian((t, x, p, v) -> x[1]^2 + p[2]^2 + v; autonomous=false, variable=true)\njulia> H2 = Hamiltonian((t, x, p, v) -> x[2]^2 + p[1]^2 + v; autonomous=false, variable=true)\njulia> P = @Lie {H1, H2}\njulia> P(1.0, [1.0, 3.0], [4.0, 2.0], 3.0)\n8.0\n\n■ Poisson brackets from raw functions\n\njulia> H1 = (x, p) -> x[1]^2 + p[2]^2\njulia> H2 = (x, p) -> x[2]^2 + p[1]^2\njulia> P = @Lie {H1, H2}\njulia> P([1.0, 1.0], [3.0, 2.0])\n-4.0\n\n■ Poisson bracket with non-autonomous raw functions\n\njulia> H1 = (t, x, p) -> x[1]^2 + p[2]^2 + t\njulia> H2 = (t, x, p) -> x[2]^2 + p[1]^2 + t\njulia> P = @Lie {H1, H2} autonomous = false\njulia> P(3.0, [1.0, 2.0], [4.0, 1.0])\n-8.0\n\n■ Nested brackets\n\njulia> F = VectorField(x -> [-x[1], x[2], x[3]])\njulia> G = VectorField(x -> [x[3], -x[2], 0])\njulia> H = VectorField(x -> [0, 0, -x[1]])\njulia> nested = @Lie [[F, G], H]\njulia> nested([1.0, 2.0, 3.0])\n3-element Vector{Float64}:\n 2.0\n 0.0\n -6.0\n\njulia> H1 = (x, p) -> x[2]*x[1]^2 + p[1]^2\njulia> H2 = (x, p) -> x[1]*p[2]^2\njulia> H3 = (x, p) -> x[1]*p[2] + x[2]*p[1]\njulia> nested_poisson = @Lie {{H1, H2}, H3}\njulia> nested_poisson([1.0, 2.0], [0.5, 1.0])\n14.0\n\n■ Mixed expressions with arithmetic\n\njulia> F1 = VectorField(x -> [0, -x[3], x[2]])\njulia> F2 = VectorField(x -> [x[3], 0, -x[1]])\njulia> x = [1.0, 2.0, 3.0]\njulia> @Lie [F1, F2](x) + 3 * [F1, F2](x)\n3-element Vector{Float64}:\n 8.0\n -4.0\n 0.0\n\njulia> H1 = (x, p) -> x[1]^2\njulia> H2 = (x, p) -> p[1]^2\njulia> H3 = (x, p) -> x[1]*p[1]\njulia> x = [1.0, 2.0, 3.0]\njulia> p = [3.0, 2.0, 1.0]\njulia> @Lie {H1, H2}(x, p) + 2 * {H2, H3}(x, p)\n24.0\n\n\n\n\n\n","category":"macro"},{"location":"api-optimalcontrol-user.html#CTFlows.Lie","page":"OptimalControl.jl - User","title":"CTFlows.Lie","text":"Lie derivative of a scalar function along a vector field.\n\nExample:\n\njulia> φ = x -> [x[2], -x[1]]\njulia> X = VectorField(φ)\njulia> f = x -> x[1]^2 + x[2]^2\njulia> Lie(X,f)([1, 2])\n0\njulia> φ = (t, x, v) -> [t + x[2] + v[1], -x[1] + v[2]]\njulia> X = VectorField(φ, NonAutonomous, NonFixed)\njulia> f = (t, x, v) -> t + x[1]^2 + x[2]^2\njulia> Lie(X, f)(1, [1, 2], [2, 1])\n10\n\n\n\n\n\nLie derivative of a scalar function along a function with specified dependencies.\n\nExample:\n\njulia> φ = x -> [x[2], -x[1]]\njulia> f = x -> x[1]^2 + x[2]^2\njulia> Lie(φ,f)([1, 2])\n0\njulia> φ = (t, x, v) -> [t + x[2] + v[1], -x[1] + v[2]]\njulia> f = (t, x, v) -> t + x[1]^2 + x[2]^2\njulia> Lie(φ, f, autonomous=false, variable=true)(1, [1, 2], [2, 1])\n10\n\n\n\n\n\nLie bracket of two vector fields in the autonomous case.\n\nExample:\n\njulia> f = x -> [x[2], 2x[1]]\njulia> g = x -> [3x[2], -x[1]]\njulia> X = VectorField(f)\njulia> Y = VectorField(g)\njulia> Lie(X, Y)([1, 2])\n[7, -14]\n\n\n\n\n\nLie bracket of two vector fields in the nonautonomous case.\n\nExample:\n\njulia> f = (t, x, v) -> [t + x[2] + v, -2x[1] - v]\njulia> g = (t, x, v) -> [t + 3x[2] + v, -x[1] - v]\njulia> X = VectorField(f, NonAutonomous, NonFixed)\njulia> Y = VectorField(g, NonAutonomous, NonFixed)\njulia> Lie(X, Y)(1, [1, 2], 1)\n[-7, 12]\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTFlows.Lift","page":"OptimalControl.jl - User","title":"CTFlows.Lift","text":"Lift(\n X::VectorField\n) -> HamiltonianLift{VectorField{TF, TD, VD}} where {TF<:Function, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}\n\n\nConstruct the Hamiltonian lift of a VectorField.\n\nArguments\n\nX::VectorField: The vector field to lift. Its signature determines if it is autonomous and/or variable.\n\nReturns\n\nA HamiltonianLift callable object representing the Hamiltonian lift of X.\n\nExamples\n\njulia> HL = Lift(VectorField(x -> [x[1]^2, x[2]^2], autonomous=true, variable=false))\njulia> HL([1, 0], [0, 1]) # returns 0\n\njulia> HL2 = Lift(VectorField((t, x, v) -> [t + x[1]^2, x[2]^2 + v], autonomous=false, variable=true))\njulia> HL2(1, [1, 0], [0, 1], 1) # returns 1\n\njulia> H = Lift(x -> 2x)\njulia> H(1, 1) # returns 2\n\njulia> H2 = Lift((t, x, v) -> 2x + t - v, autonomous=false, variable=true)\njulia> H2(1, 1, 1, 1) # returns 2\n\n# Alternative syntax using symbols for autonomy and variability\njulia> H3 = Lift((t, x, v) -> 2x + t - v, NonAutonomous, NonFixed)\njulia> H3(1, 1, 1, 1) # returns 2\n\n\n\n\n\nLift(\n X::Function;\n autonomous,\n variable\n) -> CTFlows.var\"#21#22\"{<:Function}\n\n\nConstruct the Hamiltonian lift of a function.\n\nArguments\n\nX::Function: The function representing the vector field.\nautonomous::Bool=true: Whether the function is autonomous (time-independent).\nvariable::Bool=false: Whether the function depends on an additional variable argument.\n\nReturns\n\nA callable function computing the Hamiltonian lift, \n\n(and variants depending on autonomous and variable).\n\nDetails\n\nDepending on the autonomous and variable flags, the returned function has one of the following call signatures:\n\n(x, p) if autonomous=true and variable=false\n(x, p, v) if autonomous=true and variable=true\n(t, x, p) if autonomous=false and variable=false\n(t, x, p, v) if autonomous=false and variable=true\n\nExamples\n\njulia> H = Lift(x -> 2x)\njulia> H(1, 1) # returns 2\n\njulia> H2 = Lift((t, x, v) -> 2x + t - v, autonomous=false, variable=true)\njulia> H2(1, 1, 1, 1) # returns 2\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.Model","page":"OptimalControl.jl - User","title":"CTModels.Model","text":"struct Model{TD<:CTModels.TimeDependence, TimesModelType<:CTModels.AbstractTimesModel, StateModelType<:CTModels.AbstractStateModel, ControlModelType<:CTModels.AbstractControlModel, VariableModelType<:CTModels.AbstractVariableModel, DynamicsModelType<:Function, ObjectiveModelType<:CTModels.AbstractObjectiveModel, ConstraintsModelType<:CTModels.AbstractConstraintsModel, BuildExaModelType<:Union{Nothing, Function}} <: CTModels.AbstractModel\n\nFields\n\ntimes::CTModels.AbstractTimesModel\nstate::CTModels.AbstractStateModel\ncontrol::CTModels.AbstractControlModel\nvariable::CTModels.AbstractVariableModel\ndynamics::Function\nobjective::CTModels.AbstractObjectiveModel\nconstraints::CTModels.AbstractConstraintsModel\ndefinition::Expr\nbuild_examodel::Union{Nothing, Function}\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTBase.NotImplemented","page":"OptimalControl.jl - User","title":"CTBase.NotImplemented","text":"struct NotImplemented <: CTException\n\nException thrown when a method or function has not been implemented yet.\n\nFields\n\nvar::String: A message indicating what functionality is not yet implemented.\n\nExample\n\njulia> throw(NotImplemented(\"feature X is not implemented\"))\nERROR: NotImplemented: feature X is not implemented\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTBase.ParsingError","page":"OptimalControl.jl - User","title":"CTBase.ParsingError","text":"struct ParsingError <: CTException\n\nException thrown during parsing when a syntax error or invalid structure is detected.\n\nFields\n\nvar::String: A message describing the parsing error.\n\nExample\n\njulia> throw(ParsingError(\"unexpected token\"))\nERROR: ParsingError: unexpected token\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTFlows.Poisson","page":"OptimalControl.jl - User","title":"CTFlows.Poisson","text":"Poisson(\n f::CTFlows.AbstractHamiltonian{CTFlows.Autonomous, V<:CTFlows.VariableDependence},\n g::CTFlows.AbstractHamiltonian{CTFlows.Autonomous, V<:CTFlows.VariableDependence}\n) -> Any\n\n\nPoisson bracket of two Hamiltonian functions (subtype of AbstractHamiltonian). Autonomous case.\n\nReturns a Hamiltonian representing the Poisson bracket {f, g} of two autonomous Hamiltonian functions f and g.\n\nExample\n\njulia> f = (x, p) -> x[2]^2 + 2x[1]^2 + p[1]^2\njulia> g = (x, p) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1]\njulia> F = Hamiltonian(f)\njulia> G = Hamiltonian(g)\njulia> Poisson(f, g)([1, 2], [2, 1]) # -20\njulia> Poisson(f, G)([1, 2], [2, 1]) # -20\njulia> Poisson(F, g)([1, 2], [2, 1]) # -20\n\n\n\n\n\nPoisson(\n f::CTFlows.AbstractHamiltonian{CTFlows.NonAutonomous, V<:CTFlows.VariableDependence},\n g::CTFlows.AbstractHamiltonian{CTFlows.NonAutonomous, V<:CTFlows.VariableDependence}\n) -> Any\n\n\nPoisson bracket of two Hamiltonian functions. Non-autonomous case.\n\nReturns a Hamiltonian representing {f, g} where f and g are time-dependent.\n\nExample\n\njulia> f = (t, x, p, v) -> t*v[1]*x[2]^2 + 2x[1]^2 + p[1]^2 + v[2]\njulia> g = (t, x, p, v) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1] + t - v[2]\njulia> F = Hamiltonian(f, autonomous=false, variable=true)\njulia> G = Hamiltonian(g, autonomous=false, variable=true)\njulia> Poisson(F, G)(2, [1, 2], [2, 1], [4, 4]) # -76\njulia> Poisson(f, g, NonAutonomous, NonFixed)(2, [1, 2], [2, 1], [4, 4]) # -76\n\n\n\n\n\nPoisson(\n f::HamiltonianLift{T<:CTFlows.TimeDependence, V<:CTFlows.VariableDependence},\n g::HamiltonianLift{T<:CTFlows.TimeDependence, V<:CTFlows.VariableDependence}\n)\n\n\nPoisson bracket of two HamiltonianLift vector fields.\n\nReturns the HamiltonianLift corresponding to the Lie bracket of vector fields f.X and g.X.\n\nExample\n\njulia> f = x -> [x[1]^2 + x[2]^2, 2x[1]^2]\njulia> g = x -> [3x[2]^2, x[2] - x[1]^2]\njulia> F = Lift(f)\njulia> G = Lift(g)\njulia> Poisson(F, G)([1, 2], [2, 1]) # -64\n\njulia> f = (t, x, v) -> [t*v[1]*x[2]^2, 2x[1]^2 + v[2]]\njulia> g = (t, x, v) -> [3x[2]^2 - x[1]^2, t - v[2]]\njulia> F = Lift(f, NonAutonomous, NonFixed)\njulia> G = Lift(g, NonAutonomous, NonFixed)\njulia> Poisson(F, G)(2, [1, 2], [2, 1], [4, 4]) # 100\n\n\n\n\n\nPoisson(\n f::Function,\n g::Function;\n autonomous,\n variable\n) -> Hamiltonian\n\n\nPoisson bracket of two functions. The time and variable dependence are specified with keyword arguments.\n\nReturns a Hamiltonian computed from the functions promoted as Hamiltonians.\n\nExample\n\njulia> f = (x, p) -> x[2]^2 + 2x[1]^2 + p[1]^2\njulia> g = (x, p) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1]\njulia> Poisson(f, g)([1, 2], [2, 1]) # -20\n\njulia> f = (t, x, p, v) -> t*v[1]*x[2]^2 + 2x[1]^2 + p[1]^2 + v[2]\njulia> g = (t, x, p, v) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1] + t - v[2]\njulia> Poisson(f, g, autonomous=false, variable=true)(2, [1, 2], [2, 1], [4, 4]) # -76\n\n\n\n\n\nPoisson(\n f::Function,\n g::CTFlows.AbstractHamiltonian{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}\n) -> Hamiltonian\n\n\nPoisson bracket of a function and a Hamiltonian.\n\nReturns a Hamiltonian representing {f, g} where g is already a Hamiltonian.\n\nExample\n\njulia> f = (x, p) -> x[2]^2 + 2x[1]^2 + p[1]^2\njulia> g = (x, p) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1]\njulia> G = Hamiltonian(g)\njulia> Poisson(f, G)([1, 2], [2, 1]) # -20\n\njulia> f = (t, x, p, v) -> t*v[1]*x[2]^2 + 2x[1]^2 + p[1]^2 + v[2]\njulia> g = (t, x, p, v) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1] + t - v[2]\njulia> G = Hamiltonian(g, autonomous=false, variable=true)\njulia> Poisson(f, G)(2, [1, 2], [2, 1], [4, 4]) # -76\n\n\n\n\n\nPoisson(\n f::CTFlows.AbstractHamiltonian{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence},\n g::Function\n) -> Hamiltonian\n\n\nPoisson bracket of a Hamiltonian and a function.\n\nReturns a Hamiltonian representing {f, g} where f is already a Hamiltonian.\n\nExample\n\njulia> f = (x, p) -> x[2]^2 + 2x[1]^2 + p[1]^2\njulia> g = (x, p) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1]\njulia> F = Hamiltonian(f)\njulia> Poisson(F, g)([1, 2], [2, 1]) # -20\n\njulia> f = (t, x, p, v) -> t*v[1]*x[2]^2 + 2x[1]^2 + p[1]^2 + v[2]\njulia> g = (t, x, p, v) -> 3x[2]^2 - x[1]^2 + p[2]^2 + p[1] + t - v[2]\njulia> F = Hamiltonian(f, autonomous=false, variable=true)\njulia> Poisson(F, g)(2, [1, 2], [2, 1], [4, 4]) # -76\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.Solution","page":"OptimalControl.jl - User","title":"CTModels.Solution","text":"struct Solution{TimeGridModelType<:CTModels.AbstractTimeGridModel, TimesModelType<:CTModels.AbstractTimesModel, StateModelType<:CTModels.AbstractStateModel, ControlModelType<:CTModels.AbstractControlModel, VariableModelType<:CTModels.AbstractVariableModel, CostateModelType<:Function, ObjectiveValueType<:Real, DualModelType<:CTModels.AbstractDualModel, SolverInfosType<:CTModels.AbstractSolverInfos, ModelType<:CTModels.AbstractModel} <: CTModels.AbstractSolution\n\nFields\n\ntime_grid::CTModels.AbstractTimeGridModel\ntimes::CTModels.AbstractTimesModel\nstate::CTModels.AbstractStateModel\ncontrol::CTModels.AbstractControlModel\nvariable::CTModels.AbstractVariableModel\ncostate::Function\nobjective::Real\ndual::CTModels.AbstractDualModel\nsolver_infos::CTModels.AbstractSolverInfos\nmodel::CTModels.AbstractModel\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTFlows.VectorField","page":"OptimalControl.jl - User","title":"CTFlows.VectorField","text":"struct VectorField{TF<:Function, TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence} <: CTFlows.AbstractVectorField{TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}\n\nRepresents a dynamical system dx/dt = f(...) as a vector field.\n\nFields\n\nf: a callable of the form:\nf(x)\nf(t, x)\nf(x, v)\nf(t, x, v)\n\nExample\n\nf(x) = [x[2], -x[1]]\nvf = VectorField{typeof(f), Autonomous, Fixed}(f)\nvf([1.0, 0.0])\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#CTBase.UnauthorizedCall","page":"OptimalControl.jl - User","title":"CTBase.UnauthorizedCall","text":"struct UnauthorizedCall <: CTException\n\nException thrown when a function call is not authorized in the current context or with the given arguments.\n\nFields\n\nvar::String: A message explaining why the call is unauthorized.\n\nExample\n\njulia> throw(UnauthorizedCall(\"user does not have permission\"))\nERROR: UnauthorizedCall: user does not have permission\n\n\n\n\n\n","category":"type"},{"location":"api-optimalcontrol-user.html#OptimalControl.available_methods","page":"OptimalControl.jl - User","title":"OptimalControl.available_methods","text":"available_methods(\n\n) -> Tuple{Vararg{Tuple{Symbol, Symbol, Symbol}}}\n\n\nReturn the list of available methods that can be used to solve optimal control problems.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTDirect.build_OCP_solution","page":"OptimalControl.jl - User","title":"CTDirect.build_OCP_solution","text":"build_OCP_solution(\n docp::CTDirect.DOCP,\n nlp_solution::SolverCore.AbstractExecutionStats\n) -> Solution{TimeGridModelType, TimesModelType, StateModelType, ControlModelType, VariableModelType, CostateModelType, Float64, DualModelType, CTModels.SolverInfos{Dict{Symbol, Any}}, ModelType} where {TimeGridModelType<:CTModels.TimeGridModel, TimesModelType<:CTModels.TimesModel, StateModelType<:Union{CTModels.StateModelSolution{TS} where TS<:CTModels.var\"#84#85\", CTModels.StateModelSolution{TS} where TS<:CTModels.var\"#86#87\"}, ControlModelType<:Union{CTModels.ControlModelSolution{TS} where TS<:CTModels.var\"#88#89\", CTModels.ControlModelSolution{TS} where TS<:CTModels.var\"#90#91\"}, VariableModelType<:Union{CTModels.VariableModelSolution{Vector{Float64}}, CTModels.VariableModelSolution{Float64}}, CostateModelType<:Union{CTModels.var\"#92#93\", CTModels.var\"#94#95\"}, DualModelType<:(CTModels.DualModel{PC_Dual, Vector{Float64}, SC_LB_Dual, SC_UB_Dual, CC_LB_Dual, CC_UB_Dual, Vector{Float64}, Vector{Float64}} where {PC_Dual<:Union{CTModels.var\"#100#101\"{CTModels.var\"#96#97\"}, CTModels.var\"#98#99\"{CTModels.var\"#96#97\"}}, SC_LB_Dual<:Union{CTModels.var\"#104#105\"{CTModels.var\"#102#103\"}, CTModels.var\"#106#107\"{CTModels.var\"#102#103\"}}, SC_UB_Dual<:Union{CTModels.var\"#110#111\"{CTModels.var\"#108#109\"}, CTModels.var\"#112#113\"{CTModels.var\"#108#109\"}}, CC_LB_Dual<:Union{CTModels.var\"#116#117\"{CTModels.var\"#114#115\"}, CTModels.var\"#118#119\"{CTModels.var\"#114#115\"}}, CC_UB_Dual<:Union{CTModels.var\"#122#123\"{CTModels.var\"#120#121\"}, CTModels.var\"#124#125\"{CTModels.var\"#120#121\"}}}), ModelType<:(Model{<:CTModels.TimeDependence, T} where T<:CTModels.TimesModel)}\n\n\nBuild an OCP functional solution from a DOCP discrete solution given as a SolverCore.AbstractExecutionStats object.\n\nArguments\n\ndocp: The discretized optimal control problem (DOCP).\nnlp_solution: A solver execution statistics object.\n\nReturns\n\nsolution::CTModels.Solution: A functional OCP solution containing trajectories, multipliers, and solver information.\n\nExample\n\njulia> build_OCP_solution(docp, nlp_solution)\nCTModels.Solution(...)\n\n\n\n\n\nbuild_OCP_solution(\n docp;\n primal,\n dual,\n multipliers_L,\n multipliers_U,\n nlp_model_backend,\n nlp_solution\n)\n\n\nBuild an OCP functional solution from a DOCP discrete solution, given explicit primal variables, and optionally dual variables and bound multipliers.\n\nArguments\n\ndocp: The discretized optimal control problem (DOCP).\nprimal: Array of primal decision variables.\ndual: Array of dual variables (default: nothing).\nmultipliers_L: Lower bound multipliers (default: nothing).\nmultipliers_U: Upper bound multipliers (default: nothing).\nnlp_model_backend: The NLP model backend (default: ADNLPBackend()).\nnlp_solution: A solver execution statistics object.\n\nReturns\n\nsolution::CTModels.Solution: A functional OCP solution with trajectories, multipliers, and solver information.\n\nExample\n\njulia> build_OCP_solution(docp; primal=primal_vars, nlp_solution=nlp_solution)\nCTModels.Solution(...)\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#ExaModels.constraint-Tuple{Model, Symbol}","page":"OptimalControl.jl - User","title":"ExaModels.constraint","text":"constraint(\n ocp::Model,\n label::Symbol\n) -> Tuple{Symbol, Any, Any, Any}\n\n\nGet a labelled constraint from the model. Returns a tuple of the form (type, f, lb, ub) where type is the type of the constraint, f is the function, lb is the lower bound and ub is the upper bound. \n\nThe function returns an exception if the label is not found in the model.\n\nArguments\n\nmodel: The model from which to retrieve the constraint.\nlabel: The label of the constraint to retrieve.\n\nReturns\n\nTuple: A tuple containing the type, function, lower bound, and upper bound of the constraint.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#CTModels.constraints","page":"OptimalControl.jl - User","title":"CTModels.constraints","text":"constraints(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.AbstractObjectiveModel, C<:CTModels.AbstractConstraintsModel}\n) -> CTModels.AbstractConstraintsModel\n\n\nReturn the constraints struct.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.constraints_violation","page":"OptimalControl.jl - User","title":"CTModels.constraints_violation","text":"constraints_violation(sol::Solution) -> Float64\n\n\nReturn the constraints violation.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.control","page":"OptimalControl.jl - User","title":"CTModels.control","text":"control(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel, <:CTModels.AbstractStateModel, T<:CTModels.AbstractControlModel}\n) -> CTModels.AbstractControlModel\n\n\nReturn the control struct.\n\n\n\n\n\ncontrol(\n sol::Solution{<:CTModels.AbstractTimeGridModel, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.ControlModelSolution{TS<:Function}}\n) -> Function\n\n\nReturn the control as a function of time.\n\njulia> u = control(sol)\njulia> t0 = time_grid(sol)[1]\njulia> u0 = u(t0) # control at the initial time\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.control_components","page":"OptimalControl.jl - User","title":"CTModels.control_components","text":"control_components(ocp::Model) -> Vector{String}\n\n\nReturn the names of the components of the control.\n\n\n\n\n\ncontrol_components(sol::Solution) -> Vector{String}\n\n\nReturn the names of the components of the control.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.control_dimension","page":"OptimalControl.jl - User","title":"CTModels.control_dimension","text":"control_dimension(ocp::Model) -> Int64\n\n\nReturn the control dimension.\n\n\n\n\n\ncontrol_dimension(sol::Solution) -> Int64\n\n\nReturn the dimension of the control.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.control_name","page":"OptimalControl.jl - User","title":"CTModels.control_name","text":"control_name(ocp::Model) -> String\n\n\nReturn the name of the control.\n\n\n\n\n\ncontrol_name(sol::Solution) -> String\n\n\nReturn the name of the control.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.costate","page":"OptimalControl.jl - User","title":"CTModels.costate","text":"costate(\n sol::Solution{<:CTModels.AbstractTimeGridModel, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, Co<:Function}\n) -> Function\n\n\nReturn the costate as a function of time.\n\njulia> p = costate(sol)\njulia> t0 = time_grid(sol)[1]\njulia> p0 = p(t0) # costate at the initial time\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.criterion","page":"OptimalControl.jl - User","title":"CTModels.criterion","text":"criterion(model::CTModels.MayerObjectiveModel) -> Symbol\n\n\nReturn the criterion (:min or :max).\n\n\n\n\n\ncriterion(model::CTModels.LagrangeObjectiveModel) -> Symbol\n\n\nReturn the criterion (:min or :max).\n\n\n\n\n\ncriterion(model::CTModels.BolzaObjectiveModel) -> Symbol\n\n\nReturn the criterion (:min or :max).\n\n\n\n\n\ncriterion(ocp::Model) -> Symbol\n\n\nReturn the type of criterion (:min or :max).\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTParser.@def","page":"OptimalControl.jl - User","title":"CTParser.@def","text":"Define an optimal control problem. One pass parsing of the definition. Can be used writing either ocp = @def begin ... end or @def ocp begin ... end. In the second case, setting log to true will display the parsing steps.\n\nExample\n\nocp = @def begin\n tf ∈ R, variable\n t ∈ [ 0, tf ], time\n x ∈ R², state\n u ∈ R, control\n tf ≥ 0\n -1 ≤ u(t) ≤ 1\n q = x₁\n v = x₂\n q(0) == 1\n v(0) == 2\n q(tf) == 0\n v(tf) == 0\n 0 ≤ q(t) ≤ 5, (1)\n -2 ≤ v(t) ≤ 3, (2)\n ẋ(t) == [ v(t), u(t) ]\n tf → min\nend\n\n@def ocp begin\n tf ∈ R, variable\n t ∈ [ 0, tf ], time\n x ∈ R², state\n u ∈ R, control\n tf ≥ 0\n -1 ≤ u(t) ≤ 1\n q = x₁\n v = x₂\n q(0) == 1\n v(0) == 2\n q(tf) == 0\n v(tf) == 0\n 0 ≤ q(t) ≤ 5, (1)\n -2 ≤ v(t) ≤ 3, (2)\n ẋ(t) == [ v(t), u(t) ]\n tf → min\nend true # final boolean to show parsing log\n\n\n\n\n\n","category":"macro"},{"location":"api-optimalcontrol-user.html#CTModels.definition","page":"OptimalControl.jl - User","title":"CTModels.definition","text":"definition(ocp::Model) -> Expr\n\n\nReturn the model definition of the optimal control problem.\n\n\n\n\n\ndefinition(ocp::CTModels.PreModel) -> Union{Nothing, Expr}\n\n\nReturn the model definition of the optimal control problem or nothing.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTDirect.direct_transcription","page":"OptimalControl.jl - User","title":"CTDirect.direct_transcription","text":"direct_transcription(\n ocp::Model,\n description...;\n grid_size,\n disc_method,\n time_grid,\n init,\n lagrange_to_mayer,\n kwargs...\n) -> CTDirect.DOCP\n\n\nConvert a continuous-time optimal control problem into a discretized nonlinear programming problem.\n\nArguments\n\nocp::CTModels.Model: Continuous-time optimal control problem.\ndescription...: Symbols specifying the NLP model ([:adnlp] or :exa) and/or solver ([:ipopt], :madnlp or :knitro).\n\nKeyword Arguments (optional)\n\ngrid_size::Int: Number of discretization steps ([250]).\ndisc_method: Discretization scheme (:trapeze, :euler, :euler_implicit, [:midpoint], gauss_legendre_2, gauss_legendre_3).\ntime_grid: Explicit time grid (can be non uniform).\ninit: Initial guess values or existing solution.\nlagrange_to_mayer::Bool: Convert Lagrange cost to Mayer cost (true or false).\nkwargs...: Additional arguments passed to the NLP modeler.\n\nReturns\n\ndocp::CTDirect.DOCP: Discretized optimal control problem ready for NLP solving.\n\nExample\n\njulia> docp = direct_transcription(ocp, :adnlp, :ipopt; grid_size=100, disc_method=:trapeze)\nCTDirect.DOCP(...)\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.dual","page":"OptimalControl.jl - User","title":"CTModels.dual","text":"dual(sol::Solution, model::Model, label::Symbol) -> Any\n\n\nReturn the dual variable associated with a constraint identified by its label.\n\nSearches through all constraint types (path, boundary, state, control, and variable constraints) defined in the model and returns the corresponding dual value from the solution.\n\nArguments\n\nsol::Solution: Solution object containing dual variables.\nmodel::Model: Model containing constraint definitions.\nlabel::Symbol: Symbol corresponding to a constraint label.\n\nReturns\n\nA function of time t for time-dependent constraints, or a scalar/vector for time-invariant duals. If the label is not found, throws an IncorrectArgument exception.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.dynamics","page":"OptimalControl.jl - User","title":"CTModels.dynamics","text":"dynamics(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, D<:Function}\n) -> Function\n\n\nReturn the dynamics.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.export_ocp_solution","page":"OptimalControl.jl - User","title":"CTModels.export_ocp_solution","text":"export_ocp_solution(\n sol::CTModels.AbstractSolution;\n format,\n filename\n)\n\n\nExport a solution in JLD or JSON formats. Redirect to one of the methods:\n\nexport_ocp_solution(JLD2Tag(), sol, filename=filename)\nexport_ocp_solution(JSON3Tag(), sol, filename=filename)\n\nExamples\n\njulia> using JSON3\njulia> export_ocp_solution(sol; filename=\"solution\", format=:JSON)\njulia> using JLD2\njulia> export_ocp_solution(sol; filename=\"solution\", format=:JLD) # JLD is the default\n\n\n\n\n\nexport_ocp_solution(\n ::CTModels.JSON3Tag,\n sol::Solution;\n filename\n)\n\n\nExport an optimal control solution to a .json file using the JSON3 format.\n\nThis function serializes a CTModels.Solution into a structured JSON dictionary, including all primal and dual information, which can be read by external tools.\n\nArguments\n\n::CTModels.JSON3Tag: A tag used to dispatch the export method for JSON3.\nsol::CTModels.Solution: The solution to be saved.\n\nKeyword Arguments\n\nfilename::String = \"solution\": Base filename. The .json extension is automatically appended.\n\nNotes\n\nThe exported JSON includes the time grid, state, control, costate, objective, solver info, and all constraint duals (if available).\n\nExample\n\njulia> using JSON3\njulia> export_ocp_solution(JSON3Tag(), sol; filename=\"mysolution\")\n# → creates \"mysolution.json\"\n\n\n\n\n\nexport_ocp_solution(\n ::CTModels.JLD2Tag,\n sol::Solution;\n filename\n)\n\n\nExport an optimal control solution to a .jld2 file using the JLD2 format.\n\nThis function serializes and saves a CTModels.Solution object to disk, allowing it to be reloaded later.\n\nArguments\n\n::CTModels.JLD2Tag: A tag used to dispatch the export method for JLD2.\nsol::CTModels.Solution: The optimal control solution to be saved.\n\nKeyword Arguments\n\nfilename::String = \"solution\": Base name of the file. The .jld2 extension is automatically appended.\n\nExample\n\njulia> using JLD2\njulia> export_ocp_solution(JLD2Tag(), sol; filename=\"mysolution\")\n# → creates \"mysolution.jld2\"\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.final_time","page":"OptimalControl.jl - User","title":"CTModels.final_time","text":"final_time(\n model::CTModels.TimesModel{<:CTModels.AbstractTimeModel, <:CTModels.FixedTimeModel{T<:Real}}\n) -> Real\n\n\nGet the final time from the times model, from a fixed final time model.\n\n\n\n\n\nfinal_time(\n model::CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FreeTimeModel},\n variable::AbstractArray{T<:Real, 1}\n) -> Any\n\n\nGet the final time from the times model, from a free final time model.\n\n\n\n\n\nfinal_time(ocp::CTModels.AbstractModel) -> Real\n\n\n\n\n\n\nfinal_time(\n ocp::CTModels.AbstractModel,\n variable::AbstractVector\n) -> Any\n\n\n\n\n\n\nfinal_time(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FixedTimeModel{T<:Real}}}\n) -> Real\n\n\nReturn the final time, for a fixed final time.\n\n\n\n\n\nfinal_time(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FreeTimeModel}},\n variable::AbstractArray{T<:Real, 1}\n) -> Any\n\n\nReturn the final time, for a free final time.\n\n\n\n\n\nfinal_time(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FreeTimeModel}},\n variable::Real\n) -> Real\n\n\nReturn the final time, for a free final time.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.final_time_name","page":"OptimalControl.jl - User","title":"CTModels.final_time_name","text":"final_time_name(model::CTModels.TimesModel) -> String\n\n\nGet the name of the final time from the times model.\n\n\n\n\n\nfinal_time_name(ocp::Model) -> String\n\n\nReturn the name of the final time.\n\n\n\n\n\nfinal_time_name(sol::Solution) -> String\n\n\nReturn the name of the final time.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.get_build_examodel","page":"OptimalControl.jl - User","title":"CTModels.get_build_examodel","text":"get_build_examodel(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.AbstractObjectiveModel, <:CTModels.AbstractConstraintsModel, BE<:Function}\n) -> Function\n\n\nReturn the build_examodel.\n\n\n\n\n\nget_build_examodel(\n _::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.AbstractObjectiveModel, <:CTModels.AbstractConstraintsModel, <:Nothing}\n)\n\n\nReturn an error (UnauthorizedCall) since the model is not built with the :exa backend.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.has_fixed_final_time","page":"OptimalControl.jl - User","title":"CTModels.has_fixed_final_time","text":"has_fixed_final_time(\n times::CTModels.TimesModel{<:CTModels.AbstractTimeModel, <:CTModels.FixedTimeModel{T<:Real}}\n) -> Bool\n\n\nCheck if the final time is fixed. Return true.\n\n\n\n\n\nhas_fixed_final_time(\n times::CTModels.TimesModel{<:CTModels.AbstractTimeModel, CTModels.FreeTimeModel}\n) -> Bool\n\n\nCheck if the final time is free. Return false.\n\n\n\n\n\nhas_fixed_final_time(ocp::Model) -> Bool\n\n\nCheck if the final time is fixed.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.has_fixed_initial_time","page":"OptimalControl.jl - User","title":"CTModels.has_fixed_initial_time","text":"has_fixed_initial_time(\n times::CTModels.TimesModel{<:CTModels.FixedTimeModel{T<:Real}}\n) -> Bool\n\n\nCheck if the initial time is fixed. Return true.\n\n\n\n\n\nhas_fixed_initial_time(\n times::CTModels.TimesModel{CTModels.FreeTimeModel}\n) -> Bool\n\n\nCheck if the initial time is free. Return false.\n\n\n\n\n\nhas_fixed_initial_time(ocp::Model) -> Bool\n\n\nCheck if the initial time is fixed.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.has_free_final_time","page":"OptimalControl.jl - User","title":"CTModels.has_free_final_time","text":"has_free_final_time(times::CTModels.TimesModel) -> Bool\n\n\nCheck if the final time is free.\n\n\n\n\n\nhas_free_final_time(ocp::Model) -> Bool\n\n\nCheck if the final time is free.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.has_free_initial_time","page":"OptimalControl.jl - User","title":"CTModels.has_free_initial_time","text":"has_free_initial_time(times::CTModels.TimesModel) -> Bool\n\n\nCheck if the final time is free.\n\n\n\n\n\nhas_free_initial_time(ocp::Model) -> Bool\n\n\nCheck if the initial time is free.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.has_lagrange_cost","page":"OptimalControl.jl - User","title":"CTModels.has_lagrange_cost","text":"has_lagrange_cost(_::CTModels.MayerObjectiveModel) -> Bool\n\n\nReturn false.\n\n\n\n\n\nhas_lagrange_cost(\n _::CTModels.LagrangeObjectiveModel\n) -> Bool\n\n\nReturn true.\n\n\n\n\n\nhas_lagrange_cost(_::CTModels.BolzaObjectiveModel) -> Bool\n\n\nReturn true.\n\n\n\n\n\nhas_lagrange_cost(ocp::Model) -> Bool\n\n\nCheck if the model has a Lagrange cost.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.has_mayer_cost","page":"OptimalControl.jl - User","title":"CTModels.has_mayer_cost","text":"has_mayer_cost(_::CTModels.MayerObjectiveModel) -> Bool\n\n\nReturn true.\n\n\n\n\n\nhas_mayer_cost(_::CTModels.LagrangeObjectiveModel) -> Bool\n\n\nReturn false.\n\n\n\n\n\nhas_mayer_cost(_::CTModels.BolzaObjectiveModel) -> Bool\n\n\nReturn true.\n\n\n\n\n\nhas_mayer_cost(ocp::Model) -> Bool\n\n\nCheck if the model has a Mayer cost.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.import_ocp_solution","page":"OptimalControl.jl - User","title":"CTModels.import_ocp_solution","text":"import_ocp_solution(\n ocp::CTModels.AbstractModel;\n format,\n filename\n) -> Any\n\n\nImport a solution from a JLD or JSON file. Redirect to one of the methods:\n\nimport_ocp_solution(JLD2Tag(), ocp, filename=filename)\nimport_ocp_solution(JSON3Tag(), ocp, filename=filename)\n\nExamples\n\njulia> using JSON3\njulia> sol = import_ocp_solution(ocp; filename=\"solution\", format=:JSON)\njulia> using JLD2\njulia> sol = import_ocp_solution(ocp; filename=\"solution\", format=:JLD) # JLD is the default\n\n\n\n\n\nimport_ocp_solution(\n ::CTModels.JSON3Tag,\n ocp::Model;\n filename\n)\n\n\nImport an optimal control solution from a .json file exported with export_ocp_solution.\n\nThis function reads the JSON contents and reconstructs a CTModels.Solution object, including the discretized primal and dual trajectories.\n\nArguments\n\n::CTModels.JSON3Tag: A tag used to dispatch the import method for JSON3.\nocp::CTModels.Model: The model associated with the optimal control problem. Used to rebuild the full solution.\n\nKeyword Arguments\n\nfilename::String = \"solution\": Base filename. The .json extension is automatically appended.\n\nReturns\n\nCTModels.Solution: A reconstructed solution instance.\n\nNotes\n\nHandles both vector and matrix encodings of signals. If dual fields are missing or null, the corresponding attributes are set to nothing.\n\nExample\n\njulia> using JSON3\njulia> sol = import_ocp_solution(JSON3Tag(), model; filename=\"mysolution\")\n\n\n\n\n\nimport_ocp_solution(\n ::CTModels.JLD2Tag,\n ocp::Model;\n filename\n)\n\n\nImport an optimal control solution from a .jld2 file.\n\nThis function loads a previously saved CTModels.Solution from disk.\n\nArguments\n\n::CTModels.JLD2Tag: A tag used to dispatch the import method for JLD2.\nocp::CTModels.Model: The associated model (used for dispatch consistency; not used internally).\n\nKeyword Arguments\n\nfilename::String = \"solution\": Base name of the file. The .jld2 extension is automatically appended.\n\nReturns\n\nCTModels.Solution: The loaded solution object.\n\nExample\n\njulia> using JLD2\njulia> sol = import_ocp_solution(JLD2Tag(), model; filename=\"mysolution\")\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.infos","page":"OptimalControl.jl - User","title":"CTModels.infos","text":"infos(sol::Solution) -> Dict{Symbol, Any}\n\n\nReturn a dictionary of additional infos depending on the solver or nothing.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.initial_time","page":"OptimalControl.jl - User","title":"CTModels.initial_time","text":"initial_time(\n model::CTModels.TimesModel{<:CTModels.FixedTimeModel{T<:Real}}\n) -> Real\n\n\nGet the initial time from the times model, from a fixed initial time model.\n\n\n\n\n\ninitial_time(\n model::CTModels.TimesModel{CTModels.FreeTimeModel},\n variable::AbstractArray{T<:Real, 1}\n) -> Any\n\n\nGet the initial time from the times model, from a free initial time model.\n\n\n\n\n\ninitial_time(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{CTModels.FixedTimeModel{T<:Real}}}\n) -> Real\n\n\nReturn the initial time, for a fixed initial time.\n\n\n\n\n\ninitial_time(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{CTModels.FreeTimeModel}},\n variable::AbstractArray{T<:Real, 1}\n) -> Any\n\n\nReturn the initial time, for a free initial time.\n\n\n\n\n\ninitial_time(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel{CTModels.FreeTimeModel}},\n variable::Real\n) -> Real\n\n\nReturn the initial time, for a free initial time.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.initial_time_name","page":"OptimalControl.jl - User","title":"CTModels.initial_time_name","text":"initial_time_name(model::CTModels.TimesModel) -> String\n\n\nGet the name of the initial time from the times model.\n\n\n\n\n\ninitial_time_name(ocp::Model) -> String\n\n\nReturn the name of the initial time.\n\n\n\n\n\ninitial_time_name(sol::Solution) -> String\n\n\nReturn the name of the initial time.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.is_autonomous-Tuple{Model{CTModels.Autonomous, <:CTModels.TimesModel}}","page":"OptimalControl.jl - User","title":"CTModels.is_autonomous","text":"is_autonomous(\n _::Model{CTModels.Autonomous, <:CTModels.TimesModel}\n) -> Bool\n\n\nReturn true.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#CTModels.iterations","page":"OptimalControl.jl - User","title":"CTModels.iterations","text":"iterations(sol::Solution) -> Int64\n\n\nReturn the number of iterations (if solved by an iterative method).\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.lagrange","page":"OptimalControl.jl - User","title":"CTModels.lagrange","text":"lagrange(\n model::CTModels.LagrangeObjectiveModel{L<:Function}\n) -> Function\n\n\nReturn the Lagrange function.\n\n\n\n\n\nlagrange(\n model::CTModels.BolzaObjectiveModel{<:Function, L<:Function}\n) -> Function\n\n\nReturn the Lagrange function.\n\n\n\n\n\nlagrange(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, CTModels.LagrangeObjectiveModel{L<:Function}}\n) -> Function\n\n\nReturn the Lagrange cost.\n\n\n\n\n\nlagrange(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.BolzaObjectiveModel{<:Function, L<:Function}}\n) -> Any\n\n\nReturn the Lagrange cost.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.mayer","page":"OptimalControl.jl - User","title":"CTModels.mayer","text":"mayer(\n model::CTModels.MayerObjectiveModel{M<:Function}\n) -> Function\n\n\nReturn the Mayer function.\n\n\n\n\n\nmayer(\n model::CTModels.BolzaObjectiveModel{M<:Function}\n) -> Function\n\n\nReturn the Mayer function.\n\n\n\n\n\nmayer(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.MayerObjectiveModel{M<:Function}}\n) -> Any\n\n\nReturn the Mayer cost.\n\n\n\n\n\nmayer(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.AbstractTimesModel, <:CTModels.AbstractStateModel, <:CTModels.AbstractControlModel, <:CTModels.AbstractVariableModel, <:Function, <:CTModels.BolzaObjectiveModel{M<:Function}}\n) -> Any\n\n\nReturn the Mayer cost.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.message","page":"OptimalControl.jl - User","title":"CTModels.message","text":"message(sol::Solution) -> String\n\n\nReturn the message associated to the status criterion.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTDirect.nlp_model","page":"OptimalControl.jl - User","title":"CTDirect.nlp_model","text":"nlp_model(docp::CTDirect.DOCP) -> Any\n\n\nReturn the nonlinear programming (NLP) model associated with a given discretized optimal control problem (DOCP).\n\nArguments\n\ndocp::DOCP: The discretized optimal control problem.\n\nReturns\n\nnlp::Any: The underlying NLP model stored in docp.\n\nExample\n\njulia> nlp_model(docp)\nNLPModel(...)\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#ExaModels.objective-Tuple{Model}","page":"OptimalControl.jl - User","title":"ExaModels.objective","text":"objective(ocp::Model) -> CTModels.AbstractObjectiveModel\n\n\nSee CTModels.objective.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#ExaModels.objective-Tuple{Solution}","page":"OptimalControl.jl - User","title":"ExaModels.objective","text":"objective(sol::Solution) -> Real\n\n\nReturn the objective value.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#CTDirect.ocp_model","page":"OptimalControl.jl - User","title":"CTDirect.ocp_model","text":"ocp_model(docp::CTDirect.DOCP) -> Model\n\n\nReturn the continuous-time optimal control problem (OCP) model associated with a given discretized optimal control problem (DOCP).\n\nArguments\n\ndocp::DOCP: The discretized optimal control problem.\n\nReturns\n\nocp::Any: The underlying OCP model stored in docp.\n\nExample\n\njulia> ocp_model(docp)\nOCPModel(...)\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#RecipesBase.plot-Tuple{Solution, Vararg{Symbol}}","page":"OptimalControl.jl - User","title":"RecipesBase.plot","text":"plot(\n sol::Solution,\n description::Symbol...;\n layout,\n control,\n time,\n state_style,\n state_bounds_style,\n control_style,\n control_bounds_style,\n costate_style,\n time_style,\n path_style,\n path_bounds_style,\n dual_style,\n size,\n color,\n kwargs...\n) -> Plots.Plot\n\n\nPlot the components of an optimal control solution.\n\nThis is the main user-facing function to visualise the solution of an optimal control problem solved with the control-toolbox ecosystem.\n\nIt generates a set of subplots showing the evolution of the state, control, costate, path constraints, and dual variables over time, depending on the problem and the user’s choices.\n\nArguments\n\nsol::CTModels.Solution: The optimal control solution to visualise.\ndescription::Symbol...: A variable number of symbols indicating which components to include in the plot. Common values include:\n:state – plot the state.\n:costate – plot the costate (adjoint).\n:control – plot the control.\n:path – plot the path constraints.\n:dual – plot the dual variables (or Lagrange multipliers) associated with path constraints.\n\nIf no symbols are provided, a default set is used based on the problem and styles.\n\nKeyword Arguments (Optional)\n\nlayout::Symbol = :group: Specifies how to arrange plots.\n:group: Fewer plots, grouping similar variables together (e.g., all states in one subplot).\n:split: One plot per variable component, stacked in a layout.\ncontrol::Symbol = :components: Defines how to represent control inputs.\n:components: One curve per control component.\n:norm: Single curve showing the Euclidean norm ‖u(t)‖.\n:all: Plot both components and norm.\ntime::Symbol = :default: Time normalisation for plots.\n:default: Real time scale.\n:normalize or :normalise: Normalised to the interval [0, 1].\ncolor: set the color of the all the graphs.\n\nStyle Options (Optional)\n\nAll style-related keyword arguments can be either a NamedTuple of plotting attributes or the Symbol :none referring to not plot the associated element. These allow you to customise color, line style, markers, etc.\n\ntime_style: Style for vertical lines at initial and final times.\nstate_style: Style for state components.\ncostate_style: Style for costate components.\ncontrol_style: Style for control components.\npath_style: Style for path constraint values.\ndual_style: Style for dual variables.\n\nBounds Decorations (Optional)\n\nUse these options to customise bounds on the plots if applicable and defined in the model. Set to :none to hide.\n\nstate_bounds_style: Style for state bounds.\ncontrol_bounds_style: Style for control bounds.\npath_bounds_style: Style for path constraint bounds.\n\nReturns\n\nA Plots.Plot object, which can be displayed, saved, or further customised.\n\nExample\n\n# basic plot\njulia> plot(sol)\n\n# plot only the state and control\njulia> plot(sol, :state, :control)\n\n# customise layout and styles, no costate\njulia> plot(sol;\n layout = :group,\n control = :all,\n state_style = (color=:blue, linestyle=:solid),\n control_style = (color=:red, linestyle=:dash),\n costate_style = :none) \n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#RecipesBase.plot!-Tuple{Plots.Plot, Solution, Vararg{Symbol}}","page":"OptimalControl.jl - User","title":"RecipesBase.plot!","text":"plot!(\n p::Plots.Plot,\n sol::Solution,\n description::Symbol...;\n layout,\n control,\n time,\n state_style,\n state_bounds_style,\n control_style,\n control_bounds_style,\n costate_style,\n time_style,\n path_style,\n path_bounds_style,\n dual_style,\n color,\n kwargs...\n) -> Plots.Plot\n\n\nModify Plot p with the optimal control solution sol.\n\nSee plot for full behavior and keyword arguments.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#CTDirect.set_initial_guess","page":"OptimalControl.jl - User","title":"CTDirect.set_initial_guess","text":"set_initial_guess(docp::CTDirect.DOCP, init) -> Any\n\n\nSet the initial guess for the decision variables in a discretized optimal control problem.\n\nArguments\n\ndocp::DOCP: The discretized optimal control problem.\ninit: Initial guess values as a named tuple or existing solution.\n\nReturns\n\nnothing\n\nExample\n\njulia> set_initial_guess(docp, init)\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CommonSolve.solve-Tuple{Model, Vararg{Symbol}}","page":"OptimalControl.jl - User","title":"CommonSolve.solve","text":"solve(\n ocp::Model,\n description::Symbol...;\n display,\n kwargs...\n) -> Solution{TimeGridModelType, TimesModelType, StateModelType, ControlModelType, VariableModelType, CostateModelType, Float64, DualModelType, CTModels.SolverInfos{Dict{Symbol, Any}}, ModelType} where {TimeGridModelType<:CTModels.TimeGridModel, TimesModelType<:CTModels.TimesModel, StateModelType<:Union{CTModels.StateModelSolution{TS} where TS<:CTModels.var\"#84#85\", CTModels.StateModelSolution{TS} where TS<:CTModels.var\"#86#87\"}, ControlModelType<:Union{CTModels.ControlModelSolution{TS} where TS<:CTModels.var\"#88#89\", CTModels.ControlModelSolution{TS} where TS<:CTModels.var\"#90#91\"}, VariableModelType<:Union{CTModels.VariableModelSolution{Vector{Float64}}, CTModels.VariableModelSolution{Float64}}, CostateModelType<:Union{CTModels.var\"#92#93\", CTModels.var\"#94#95\"}, DualModelType<:(CTModels.DualModel{PC_Dual, Vector{Float64}, SC_LB_Dual, SC_UB_Dual, CC_LB_Dual, CC_UB_Dual, Vector{Float64}, Vector{Float64}} where {PC_Dual<:Union{CTModels.var\"#100#101\"{CTModels.var\"#96#97\"}, CTModels.var\"#98#99\"{CTModels.var\"#96#97\"}}, SC_LB_Dual<:Union{CTModels.var\"#104#105\"{CTModels.var\"#102#103\"}, CTModels.var\"#106#107\"{CTModels.var\"#102#103\"}}, SC_UB_Dual<:Union{CTModels.var\"#110#111\"{CTModels.var\"#108#109\"}, CTModels.var\"#112#113\"{CTModels.var\"#108#109\"}}, CC_LB_Dual<:Union{CTModels.var\"#116#117\"{CTModels.var\"#114#115\"}, CTModels.var\"#118#119\"{CTModels.var\"#114#115\"}}, CC_UB_Dual<:Union{CTModels.var\"#122#123\"{CTModels.var\"#120#121\"}, CTModels.var\"#124#125\"{CTModels.var\"#120#121\"}}}), ModelType<:(Model{<:CTModels.TimeDependence, T} where T<:CTModels.TimesModel)}\n\n\nSolve the optimal control problem ocp by the method given by the (optional) description. The get the list of available methods:\n\njulia> available_methods()\n\nThe higher in the list, the higher is the priority. The keyword arguments are specific to the chosen method and represent the options of the solver.\n\nArguments\n\nocp::OptimalControlModel: the optimal control problem to solve.\ndescription::Symbol...: the description of the method used to solve the problem.\nkwargs...: the options of the method.\n\nExamples\n\nThe simplest way to solve the optimal control problem is to call the function without any argument.\n\njulia> sol = solve(ocp)\n\nThe method description is a list of Symbols. The default is\n\njulia> sol = solve(ocp, :direct, :adnlp, :ipopt)\n\nYou can provide a partial description, the function will find the best match.\n\njulia> sol = solve(ocp, :direct)\n\nnote: Note\nSee the resolution methods section for more details about the available methods.\n\nThe keyword arguments are specific to the chosen method and correspond to the options of the different solvers. For example, the keyword max_iter is an Ipopt option that may be used to set the maximum number of iterations.\n\njulia> sol = solve(ocp, :direct, :ipopt, max_iter=100)\n\nnote: Note\nSee the direct method section for more details about associated options. These options also detailed in the CTDirect.solve documentation. This main solve method redirects to CTDirect.solve when the :direct Symbol is given in the description. See also the NLP solvers section for more details about Ipopt or MadNLP options.\n\nTo help the solve converge, an initial guess can be provided within the keyword init. You can provide the initial guess for the state, control, and variable.\n\njulia> sol = solve(ocp, init=(state=[-0.5, 0.2], control=0.5))\n\nnote: Note\nSee how to set an initial guess for more details.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#CTModels.state","page":"OptimalControl.jl - User","title":"CTModels.state","text":"state(\n ocp::Model{<:CTModels.TimeDependence, <:CTModels.TimesModel, T<:CTModels.AbstractStateModel}\n) -> CTModels.AbstractStateModel\n\n\nReturn the state struct.\n\n\n\n\n\nstate(\n sol::Solution{<:CTModels.AbstractTimeGridModel, <:CTModels.AbstractTimesModel, <:CTModels.StateModelSolution{TS<:Function}}\n) -> Function\n\n\nReturn the state as a function of time.\n\njulia> x = state(sol)\njulia> t0 = time_grid(sol)[1]\njulia> x0 = x(t0) # state at the initial time\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.state_components","page":"OptimalControl.jl - User","title":"CTModels.state_components","text":"state_components(ocp::Model) -> Vector{String}\n\n\nReturn the names of the components of the state.\n\n\n\n\n\nstate_components(sol::Solution) -> Vector{String}\n\n\nReturn the names of the components of the state.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.state_dimension","page":"OptimalControl.jl - User","title":"CTModels.state_dimension","text":"state_dimension(ocp::CTModels.PreModel) -> Int64\n\n\n\n\n\n\nstate_dimension(ocp::Model) -> Int64\n\n\nReturn the state dimension.\n\n\n\n\n\nstate_dimension(sol::Solution) -> Int64\n\n\nReturn the dimension of the state.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.state_name","page":"OptimalControl.jl - User","title":"CTModels.state_name","text":"state_name(ocp::Model) -> String\n\n\nReturn the name of the state.\n\n\n\n\n\nstate_name(sol::Solution) -> String\n\n\nReturn the name of the state.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.status","page":"OptimalControl.jl - User","title":"CTModels.status","text":"status(sol::Solution) -> Symbol\n\n\nReturn the status criterion (a Symbol).\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.successful","page":"OptimalControl.jl - User","title":"CTModels.successful","text":"successful(sol::Solution) -> Bool\n\n\nReturn the successful status.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.time_grid","page":"OptimalControl.jl - User","title":"CTModels.time_grid","text":"time_grid(\n sol::Solution{<:CTModels.TimeGridModel{T<:Union{StepRangeLen, AbstractVector{<:Real}}}}\n) -> Union{StepRangeLen, AbstractVector{<:Real}}\n\n\nReturn the time grid.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.time_name","page":"OptimalControl.jl - User","title":"CTModels.time_name","text":"time_name(model::CTModels.TimesModel) -> String\n\n\nGet the name of the time variable from the times model.\n\n\n\n\n\ntime_name(ocp::Model) -> String\n\n\nReturn the name of the time.\n\n\n\n\n\ntime_name(sol::Solution) -> String\n\n\nReturn the name of the time component.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.times","page":"OptimalControl.jl - User","title":"CTModels.times","text":"times(\n ocp::Model{<:CTModels.TimeDependence, T<:CTModels.TimesModel}\n) -> CTModels.TimesModel\n\n\nReturn the times struct.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#ExaModels.variable-Tuple{Model}","page":"OptimalControl.jl - User","title":"ExaModels.variable","text":"variable(ocp::Model) -> CTModels.AbstractVariableModel\n\n\nSee CTModels.variable.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#ExaModels.variable-Tuple{Solution}","page":"OptimalControl.jl - User","title":"ExaModels.variable","text":"variable(\n sol::Solution\n) -> Union{Real, AbstractVector{<:Real}}\n\n\nReturn the variable or nothing.\n\njulia> v = variable(sol)\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-user.html#CTModels.variable_components","page":"OptimalControl.jl - User","title":"CTModels.variable_components","text":"variable_components(ocp::Model) -> Vector{String}\n\n\nReturn the names of the components of the variable.\n\n\n\n\n\nvariable_components(sol::Solution) -> Vector{String}\n\n\nReturn the names of the components of the variable.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.variable_dimension","page":"OptimalControl.jl - User","title":"CTModels.variable_dimension","text":"variable_dimension(ocp::Model) -> Int64\n\n\nReturn the variable dimension.\n\n\n\n\n\nvariable_dimension(sol::Solution) -> Int64\n\n\nReturn the dimension of the variable.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTModels.variable_name","page":"OptimalControl.jl - User","title":"CTModels.variable_name","text":"variable_name(ocp::Model) -> String\n\n\nReturn the name of the variable.\n\n\n\n\n\nvariable_name(sol::Solution) -> String\n\n\nReturn the name of the variable.\n\n\n\n\n\n","category":"function"},{"location":"api-optimalcontrol-user.html#CTFlows.:⋅","page":"OptimalControl.jl - User","title":"CTFlows.:⋅","text":"Lie derivative of a scalar function along a vector field in the autonomous case.\n\nExample:\n\njulia> φ = x -> [x[2], -x[1]]\njulia> X = VectorField(φ)\njulia> f = x -> x[1]^2 + x[2]^2\njulia> (X⋅f)([1, 2])\n0\n\n\n\n\n\nLie derivative of a scalar function along a vector field in the nonautonomous case.\n\nExample:\n\njulia> φ = (t, x, v) -> [t + x[2] + v[1], -x[1] + v[2]]\njulia> X = VectorField(φ, NonAutonomous, NonFixed)\njulia> f = (t, x, v) -> t + x[1]^2 + x[2]^2\njulia> (X⋅f)(1, [1, 2], [2, 1])\n10\n\n\n\n\n\nLie derivative of a scalar function along a function (considered autonomous and non-variable).\n\nExample:\n\njulia> φ = x -> [x[2], -x[1]]\njulia> f = x -> x[1]^2 + x[2]^2\njulia> (φ⋅f)([1, 2])\n0\njulia> φ = (t, x, v) -> [t + x[2] + v[1], -x[1] + v[2]]\njulia> f = (t, x, v) -> t + x[1]^2 + x[2]^2\njulia> (φ⋅f)(1, [1, 2], [2, 1])\nMethodError\n\n\n\n\n\n","category":"function"},{"location":"api-ctflows.html#CTFlows.jl","page":"CTFlows.jl","title":"CTFlows.jl","text":"The CTFlows.jl package is part of the control-toolbox ecosystem.\n\nflowchart TD\nB(CTBase)\nM(CTModels)\nP(CTParser)\nO(OptimalControl)\nD(CTDirect)\nF(CTFlows)\nO --> D\nO --> M\nO --> F\nO --> P\nF --> M\nO --> B\nF --> B\nD --> B\nD --> M\nP --> M\nP --> B\nM --> B\nstyle F fill:#FBF275\n\nOptimalControl heavily relies on CTFlows. We refer to CTFlows API for more details.\n\n","category":"section"},{"location":"api-ctparser.html#CTParser.jl","page":"CTParser.jl","title":"CTParser.jl","text":"The CTParser.jl package is part of the control-toolbox ecosystem.\n\nflowchart TD\nB(CTBase)\nM(CTModels)\nP(CTParser)\nO(OptimalControl)\nD(CTDirect)\nF(CTFlows)\nO --> D\nO --> M\nO --> F\nO --> P\nF --> M\nO --> B\nF --> B\nD --> B\nD --> M\nP --> M\nP --> B\nM --> B\nstyle P fill:#FBF275\n\nOptimalControl heavily relies on CTParser. We refer to CTParser API for more details.\n\n","category":"section"},{"location":"zhejiang-2025.html","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"Solving optimal control problems in Julia: the OptimalControl.jl package","text":"\"juliaopt2024\"","category":"section"},{"location":"zhejiang-2025.html#Solving-optimal-control-problems-in-Julia:-the-OptimalControl.jl-package","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"Solving optimal control problems in Julia: the OptimalControl.jl package","text":"","category":"section"},{"location":"zhejiang-2025.html#[Jean-Baptiste-Caillau](http://caillau.perso.math.cnrs.fr),-[Olivier-Cots](https://ocots.github.io),-[Joseph-Gergaud](https://github.com/joseph-gergaud),-[Pierre-Martinon](https://github.com/PierreMartinon),-[Sophia-Sed](https://sed-sam-blog.gitlabpages.inria.fr)","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"Jean-Baptiste Caillau, Olivier Cots, Joseph Gergaud, Pierre Martinon, Sophia Sed","text":"\"affiliations\"","category":"section"},{"location":"zhejiang-2025.html#What-it's-about","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"What it's about","text":"Nonlinear optimal control of ODEs:\n\ng(x(t_0)x(t_f)) + int_t_0^t_f f^0(x(t) u(t)) mathrmdt to min\n\nsubject to\n\ndotx(t) = f(x(t) u(t))quad t in t_0 t_f\n\nplus boundary, control and state constraints\n\nOur core interests: numerical & geometrical methods in control, applications","category":"section"},{"location":"zhejiang-2025.html#OptimalControl.jl-for-trajectory-optimisation","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"OptimalControl.jl for trajectory optimisation","text":"Basic example\nGoddard problem\nOrbit transfer","category":"section"},{"location":"zhejiang-2025.html#Wrap-up","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"Wrap up","text":"High level modelling of optimal control problems\nEfficient numerical resolution coupling direct and indirect methods\nCollection of examples","category":"section"},{"location":"zhejiang-2025.html#Future","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"Future","text":"New applications (space mechanics, biology, quantum mechanics and more)\nAdditional solvers: optimisation on GPU, direct shooting, collocation for BVP, Hamiltonian pathfollowing...\n... and open to contributions! If you like the package, please give us a star ⭐️\n\n\"OptimalControl.jl\"","category":"section"},{"location":"zhejiang-2025.html#control-toolbox.org","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"control-toolbox.org","text":"Open toolbox\nCollection of Julia Packages rooted at OptimalControl.jl\n\n\"control-toolbox.org\"","category":"section"},{"location":"zhejiang-2025.html#Credits-(not-exhaustive!)","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"Credits (not exhaustive!)","text":"ADNLPModels.jl\nDifferentiationInterface.jl\nDifferentialEquations.jl\nIpopt.jl\nMadNLP.jl\nMLStyle.jl","category":"section"},{"location":"zhejiang-2025.html#Stand-up-for-science-2025","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"Stand up for science 2025","text":"\"stand","category":"section"},{"location":"zhejiang-2025.html#Acknowledgements","page":"Solving optimal control problems in Julia: the OptimalControl.jl package","title":"Acknowledgements","text":"Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).\n\n\"affiliations\"\n\n","category":"section"},{"location":"api-optimalcontrol-dev.html#OptimalControl.jl-(Private)","page":"OptimalControl.jl","title":"OptimalControl.jl (Private)","text":"OptimalControl.jl is the root package of the control-toolbox ecosystem.\n\nflowchart TD\nB(CTBase)\nM(CTModels)\nP(CTParser)\nO(OptimalControl)\nD(CTDirect)\nF(CTFlows)\nO --> D\nO --> M\nO --> F\nO --> P\nF --> M\nO --> B\nF --> B\nD --> B\nD --> M\nP --> M\nP --> B\nM --> B\nstyle O fill:#FBF275","category":"section"},{"location":"api-optimalcontrol-dev.html#Index","page":"OptimalControl.jl","title":"Index","text":"Pages = [\"api-optimalcontrol-dev.md\"]\nModules = [OptimalControl]\nOrder = [:module, :constant, :type, :function, :macro]","category":"section"},{"location":"api-optimalcontrol-dev.html#Documentation","page":"OptimalControl.jl","title":"Documentation","text":"","category":"section"},{"location":"api-optimalcontrol-dev.html#ExaModels.constraint!-Tuple{CTModels.PreModel, Symbol}","page":"OptimalControl.jl","title":"ExaModels.constraint!","text":"constraint!(ocp::CTModels.PreModel, type::Symbol; kwargs...)\n\n\nSee CTModels.constraint!.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-dev.html#OptimalControl.__display-Tuple{}","page":"OptimalControl.jl","title":"OptimalControl.__display","text":"__display() -> Bool\n\n\nUsed to set the default display toggle. The default value is true.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-dev.html#OptimalControl.clean-Tuple{Tuple{Vararg{Symbol}}}","page":"OptimalControl.jl","title":"OptimalControl.clean","text":"clean(d::Tuple{Vararg{Symbol}}) -> Tuple{Vararg{Symbol}}\n\n\nWhen calling the function solve, the user can provide a description of the method to use to solve the optimal control problem. The description can be a partial description or a full description. The function solve will find the best match from the available methods, thanks to the function getFullDescription. Then, the description is cleaned by the function clean to remove the Symbols that are specific to OptimalControl.jl and so must not be passed to the solver. For instance, the Symbol :direct is specific to OptimalControl.jl and must be removed. It must not be passed to the CTDirect.jl solver.\n\n\n\n\n\n","category":"method"},{"location":"api-optimalcontrol-dev.html#OptimalControl.version-Tuple{}","page":"OptimalControl.jl","title":"OptimalControl.version","text":"Return the version of the current module as a string.\n\nThis function returns the version number defined in the Project.toml of the package to which the current module belongs. It uses @__MODULE__ to infer the calling context.\n\nExample\n\njulia> version() # e.g., \"1.2.3\"\n\n\n\n\n\n","category":"method"},{"location":"api-ctmodels.html#CTModels.jl","page":"CTModels.jl","title":"CTModels.jl","text":"The CTModels.jl package is part of the control-toolbox ecosystem.\n\nflowchart TD\nB(CTBase)\nM(CTModels)\nP(CTParser)\nO(OptimalControl)\nD(CTDirect)\nF(CTFlows)\nO --> D\nO --> M\nO --> F\nO --> P\nF --> M\nO --> B\nF --> B\nD --> B\nD --> M\nP --> M\nP --> B\nM --> B\nstyle M fill:#FBF275\n\nOptimalControl heavily relies on CTModels. We refer to CTModels API for more details.\n\n","category":"section"},{"location":"manual-flow-others.html#manual-flow-others","page":"From Hamiltonians and others","title":"How to compute Hamiltonian flows and trajectories","text":"In this tutorial, we explain the Flow function, in particular to compute flows from a Hamiltonian vector fields, but also from general vector fields.","category":"section"},{"location":"manual-flow-others.html#Introduction","page":"From Hamiltonians and others","title":"Introduction","text":"Consider the simple optimal control problem from the basic example page. The pseudo-Hamiltonian is\n\n H(x p u) = p_q v + p_v u + p^0 u^2 2\n\nwhere x=(qv), p=(p_qp_v), p^0 = -1 since we are in the normal case. From the Pontryagin maximum principle, the maximising control is given in feedback form by\n\nu(x p) = p_v\n\nsince partial^2_uu H = p^0 = - 1 0. \n\nu(x, p) = p[2]\nnothing # hide\n\nActually, if (x u) is a solution of the optimal control problem, then, the Pontryagin maximum principle tells us that there exists a costate p such that u(t) = u(x(t) p(t)) and such that the pair (x p) satisfies:\n\nbeginarrayl\n dotx(t) = displaystylephantom-nabla_p H(x(t) p(t) u(x(t) p(t))) 05em\n dotp(t) = displaystyle - nabla_x H(x(t) p(t) u(x(t) p(t)))\nendarray\n\nnote: Nota bene\nActually, writing z = (x p), then the pair (x p) is also solution of dotz(t) = vecmathbfH(z(t))where mathbfH(z) = H(z u(z)) and vecmathbfH = (nabla_p mathbfH -nabla_x mathbfH).\n\nLet us import the necessary packages.\n\nusing OptimalControl\nusing OrdinaryDiffEq\n\nThe package OrdinaryDiffEq.jl provides numerical integrators to compute solutions of ordinary differential equations.\n\nnote: OrdinaryDiffEq.jl\nThe package OrdinaryDiffEq.jl is part of DifferentialEquations.jl. You can either use one or the other.","category":"section"},{"location":"manual-flow-others.html#Extremals-from-the-Hamiltonian","page":"From Hamiltonians and others","title":"Extremals from the Hamiltonian","text":"The pairs (x p) solution of the Hamitonian vector field are called extremals. We can compute some constructing the flow from the optimal control problem and the control in feedback form. Another way to compute extremals is to define explicitly the Hamiltonian.\n\nH(x, p, u) = p[1] * x[2] + p[2] * u - 0.5 * u^2 # pseudo-Hamiltonian\nH(x, p) = H(x, p, u(x, p)) # Hamiltonian\n\nz = Flow(Hamiltonian(H))\n\nt0 = 0\ntf = 1\nx0 = [-1, 0]\np0 = [12, 6]\nxf, pf = z(t0, x0, p0, tf)","category":"section"},{"location":"manual-flow-others.html#Extremals-from-the-Hamiltonian-vector-field","page":"From Hamiltonians and others","title":"Extremals from the Hamiltonian vector field","text":"You can also provide the Hamiltonian vector field.\n\nHv(x, p) = [x[2], p[2]], [0.0, -p[1]] # Hamiltonian vector field\n\nz = Flow(HamiltonianVectorField(Hv))\nxf, pf = z(t0, x0, p0, tf)\n\nNote that if you call the flow on tspan=(t0, tf), then you obtain the output solution from OrdinaryDiffEq.jl.\n\nsol = z((t0, tf), x0, p0)\nxf, pf = sol(tf)[1:2], sol(tf)[3:4]","category":"section"},{"location":"manual-flow-others.html#Trajectories","page":"From Hamiltonians and others","title":"Trajectories","text":"You can also compute trajectories from the control dynamics (x u) mapsto (v u) and a control law t mapsto u(t).\n\nu(t) = 6-12t\nx = Flow((t, x) -> [x[2], u(t)]; autonomous=false) # the vector field depends on t\nx(t0, x0, tf)\n\nAgain, giving a tspan you get an output solution from OrdinaryDiffEq.jl.\n\nusing Plots\nsol = x((t0, tf), x0)\nplot(sol)\n\n","category":"section"},{"location":"manual-solution.html#manual-solution","page":"Solution characteristics","title":"The optimal control solution object: structure and usage","text":"In this manual, we'll first recall the main functionalities you can use when working with a solution of an optimal control problem (SOL). This includes essential operations like:\n\nPlotting a SOL: How to plot the optimal solution for your defined problem.\nPrinting a SOL: How to display a summary of your solution.\n\nAfter covering these core functionalities, we'll delve into the structure of a SOL. Since a SOL is structured as a Solution struct, we'll first explain how to access its underlying attributes. Following this, we'll shift our focus to the simple properties inherent to a SOL.\n\n\n\nContent\n\nMain functionalities\nSolution struct\nAttributes and properties\n\n","category":"section"},{"location":"manual-solution.html#manual-solution-main-functionalities","page":"Solution characteristics","title":"Main functionalities","text":"Let's define a basic optimal control problem.\n\nusing OptimalControl\n\nt0 = 0\ntf = 1\nx0 = [-1, 0]\n\nocp = @def begin\n t ∈ [ t0, tf ], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n x(t0) == x0\n x(tf) == [0, 0]\n ẋ(t) == [v(t), u(t)]\n 0.5∫( u(t)^2 ) → min\nend\nnothing # hide\n\nWe can now solve the problem (for more details, visit the solve manual):\n\nusing NLPModelsIpopt\nsol = solve(ocp)\nnothing # hide\n\nnote: Note\nYou can export (or save) the solution in a Julia .jld2 data file and reload it later, and also export a discretised version of the solution in a more portable JSON format. Note that the optimal control problem is needed when loading a solution.See the two functions:import_ocp_solution,\nexport_ocp_solution.\n\nTo print sol, simply:\n\nsol\n\nFor complementary information, you can plot the solution:\n\nusing Plots\nplot(sol)\n\nnote: Note\nFor more details about plotting a solution, visit the plot manual.","category":"section"},{"location":"manual-solution.html#manual-solution-struct","page":"Solution characteristics","title":"Solution struct","text":"The solution sol is a Solution struct.\n\nEach field can be accessed directly (ocp.times, etc) but we recommend to use the sophisticated getters we provide: the state(sol::Solution) method does not return sol.state but a function of time that can be called at any time, not only on the grid time_grid.\n\n0.25 ∈ time_grid(sol)\n\nx = state(sol)\nx(0.25)","category":"section"},{"location":"manual-solution.html#manual-solution-attributes","page":"Solution characteristics","title":"Attributes and properties","text":"","category":"section"},{"location":"manual-solution.html#State,-costate,-control,-variable-and-objective-value","page":"Solution characteristics","title":"State, costate, control, variable and objective value","text":"You can access the values of the state, costate, control and variable by eponymous functions. The returned values are functions of time for the state, costate and control and a scalar or a vector for the variable.\n\nt = 0.25\nx = state(sol)\np = costate(sol)\nu = control(sol)\nnothing # hide\n\nSince the state is of dimension 2, evaluating x(t) returns a vector:\n\nx(t)\n\nIt is the same for the costate:\n\np(t)\n\nBut the control is one-dimensional:\n\nu(t)\n\nThere is no variable, hence, an empty vector is returned:\n\nv = variable(sol)\n\nThe objective value is accessed by:\n\nobjective(sol)","category":"section"},{"location":"manual-solution.html#Infos-from-the-solver","page":"Solution characteristics","title":"Infos from the solver","text":"The problem ocp is solved via a direct method (see solve manual for details). The solver stores data in sol, including the success of the optimization, the iteration count, the time grid used for discretisation, and other specific details within the solver_infos field.\n\ntime_grid(sol)\n\nconstraints_violation(sol)\n\ninfos(sol)\n\niterations(sol)\n\nmessage(sol)\n\nstatus(sol)\n\nsuccessful(sol)","category":"section"},{"location":"manual-solution.html#Dual-variables","page":"Solution characteristics","title":"Dual variables","text":"You can retrieved dual variables (or Lagrange multipliers) associated to labelled constraint. To illustrate this, we define a problem with constraints:\n\nocp = @def begin\n\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n\n tf ≥ 0, (eq_tf)\n -1 ≤ u(t) ≤ 1, (eq_u)\n v(t) ≤ 0.75, (eq_v)\n\n x(0) == [-1, 0], (eq_x0)\n q(tf) == 0\n v(tf) == 0\n\n ẋ(t) == [v(t), u(t)]\n\n tf → min\n\nend\nsol = solve(ocp; display=false)\nnothing # hide\n\nDual variables corresponding to variable and boundary constraints are given as scalar or vectors.\n\ndual(sol, ocp, :eq_tf)\n\ndual(sol, ocp, :eq_x0)\n\nThe other type of constraints are associated to dual variables given as functions of time.\n\nμ_u = dual(sol, ocp, :eq_u)\nplot(time_grid(sol), μ_u)\n\nμ_v = dual(sol, ocp, :eq_v)\nplot(time_grid(sol), μ_v)\n\n","category":"section"},{"location":"manual-solution.html#CTModels.Solution-manual-solution","page":"Solution characteristics","title":"CTModels.Solution","text":"struct Solution{TimeGridModelType<:CTModels.AbstractTimeGridModel, TimesModelType<:CTModels.AbstractTimesModel, StateModelType<:CTModels.AbstractStateModel, ControlModelType<:CTModels.AbstractControlModel, VariableModelType<:CTModels.AbstractVariableModel, CostateModelType<:Function, ObjectiveValueType<:Real, DualModelType<:CTModels.AbstractDualModel, SolverInfosType<:CTModels.AbstractSolverInfos, ModelType<:CTModels.AbstractModel} <: CTModels.AbstractSolution\n\nFields\n\ntime_grid::CTModels.AbstractTimeGridModel\ntimes::CTModels.AbstractTimesModel\nstate::CTModels.AbstractStateModel\ncontrol::CTModels.AbstractControlModel\nvariable::CTModels.AbstractVariableModel\ncostate::Function\nobjective::Real\ndual::CTModels.AbstractDualModel\nsolver_infos::CTModels.AbstractSolverInfos\nmodel::CTModels.AbstractModel\n\n\n\n\n\n","category":"type"},{"location":"index.html#OptimalControl.jl","page":"Getting Started","title":"OptimalControl.jl","text":"The OptimalControl.jl package is the root package of the control-toolbox ecosystem. The control-toolbox ecosystem gathers Julia packages for mathematical control and applications. It aims to provide tools to model and solve optimal control problems with ordinary differential equations by direct and indirect methods, both on CPU and GPU.","category":"section"},{"location":"index.html#Installation","page":"Getting Started","title":"Installation","text":"To install OptimalControl.jl, please open Julia's interactive session (known as REPL) and use the Julia package manager:\n\nusing Pkg\nPkg.add(\"OptimalControl\")\n\ntip: Tip\nIf you are new to Julia, please follow this guidelines.","category":"section"},{"location":"index.html#Basic-usage","page":"Getting Started","title":"Basic usage","text":"Let us model, solve and plot a simple optimal control problem.\n\nusing OptimalControl\nusing NLPModelsIpopt\nusing Plots\n\nocp = @def begin\n t ∈ [0, 1], time\n x ∈ R², state\n u ∈ R, control\n x(0) == [-1, 0]\n x(1) == [0, 0]\n ẋ(t) == [x₂(t), u(t)]\n ∫( 0.5u(t)^2 ) → min\nend\n\nsol = solve(ocp)\nplot(sol)\n\nFor more details, see the basic example tutorial. \nThe @def macro defines the problem. See the abstract syntax tutorial. \nThe solve function has many options. See the solve tutorial. \nThe plot function is flexible. See the plot tutorial.","category":"section"},{"location":"index.html#Citing-us","page":"Getting Started","title":"Citing us","text":"If you use OptimalControl.jl in your work, please cite us:\n\nCaillau, J.-B., Cots, O., Gergaud, J., Martinon, P., & Sed, S. OptimalControl.jl: a Julia package to model and solve optimal control problems with ODE's. doi.org/10.5281/zenodo.13336563\n\nor in bibtex format:\n\n@software{OptimalControl_jl,\nauthor = {Caillau, Jean-Baptiste and Cots, Olivier and Gergaud, Joseph and Martinon, Pierre and Sed, Sophia},\ndoi = {10.5281/zenodo.13336563},\nlicense = {[\"MIT\"]},\ntitle = {{OptimalControl.jl: a Julia package to model and solve optimal control problems with ODE's}},\nurl = {https://control-toolbox.org/OptimalControl.jl}\n}","category":"section"},{"location":"index.html#Contributing","page":"Getting Started","title":"Contributing","text":"If you think you found a bug or if you have a feature request / suggestion, feel free to open an issue. Before opening a pull request, please start an issue or a discussion on the topic. \n\nContributions are welcomed, check out how to contribute to a Github project. If it is your first contribution, you can also check this first contribution tutorial. You can find first good issues (if any 🙂) here. You may find other packages to contribute to at the control-toolbox organization.\n\nIf you want to ask a question, feel free to start a discussion here. This forum is for general discussion about this repository and the control-toolbox organization.\n\nnote: Note\nIf you want to add an application or a package to the control-toolbox ecosystem, please follow this set up tutorial.","category":"section"},{"location":"index.html#Reproducibility","page":"Getting Started","title":"Reproducibility","text":"_downloads_toml(\".\") # hide\n\n
ℹ️ Version info\n\nversioninfo() # hide\n\n
\n\n
📦 Package status\n\nPkg.status() # hide\n\n
\n\n
📚 Complete manifest\n\nPkg.status(; mode = PKGMODE_MANIFEST) # hide\n\n
\n\n","category":"section"},{"location":"manual-ai-llm.html#manual-ai-llm","page":"Use AI","title":"Use AI","text":"Using now common models from AI, it is an elementary task to have such an agent learn the syntax of OptimalControl.jl DSL, then use the agent to translate standard math into this DSL. Here is a typical prompt, pointing to the DSL syntax:\n\nLearn the syntax of OptimalControl.jl DSL described at the link below \nto translate math into this DSL (Julia language): \nhttps://control-toolbox.org/OptimalControl.jl/stable/manual-abstract.html.\n\n
\n Try with:\n \n \n ChatGPT\n \n\n \n \n Claude\n \n\n \n \n Perplexity\n \n\n \n \n Mistral\n \n
\n\nNow, here is an extract of, e.g., claude.ai answer (Sonnet 4 model) to the request below:\n\nTranslate the problem below into this DSL:\n\n minimise the final time tf \n under the constraint q''(t) = u(t) \n with -1 <= u(t) <= 1, \n q(0) = 1, q'(0) = -2, q(tf) = 3, q'(tf) = 1, and q'(t) <= 1.\n\n@def begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n \n # Variable constraint\n tf ≥ 0\n \n # Control constraint\n -1 ≤ u(t) ≤ 1\n \n # Initial conditions\n q(0) == 1\n v(0) == -2\n \n # Final conditions \n q(tf) == 3\n v(tf) == 1\n \n # Path constraint\n v(t) ≤ 1\n \n # Dynamics (q'' = u becomes first-order system)\n ẋ(t) == [v(t), u(t)]\n \n # Objective: minimize final time\n tf → min\nend\n\nThe answer is syntactically correct and can be updated, for instance according to the new request below:\n\nUse a form compatible with examodels.\n\n@def begin\n tf ∈ R, variable\n t ∈ [0, tf], time\n x = (q, v) ∈ R², state\n u ∈ R, control\n \n # Variable constraint\n tf ≥ 0\n \n # Control constraint\n -1 ≤ u(t) ≤ 1\n \n # Initial conditions\n q(0) == 1\n v(0) == -2\n \n # Final conditions \n q(tf) == 3\n v(tf) == 1\n \n # Path constraint\n v(t) ≤ 1\n \n # Dynamics (coordinate-wise for ExaModels)\n ∂(q)(t) == v(t)\n ∂(v)(t) == u(t)\n \n # Objective: minimize final time\n tf → min\nend\n\nIt is also possible to feed the model directly with math definitions (here from a snapshot), as in the example below:\n\ntranslate the problem below into OptimalControl.jl DSL:\n\n\"rocket-def\"\n\n\nThis prompt generates the syntactically correct code:\n\n# Parameters\nh₀ = 1\nv₀ = 0\nm₀ = 1\ng₀ = 1\nTc = 3.5\nhc = 500\nvc = 620\nmc = 0.6\n\n# Derived constants\nDc = 0.5 * vc * m₀ / g₀\nmf = mc * m₀\nc = 0.5 * sqrt(g₀ * h₀)\nTmax = Tc * m₀ * g₀\n\n# Auxiliary functions\nD(h, v) = Dc * v^2 * exp(-hc * (h - h₀) / h₀)\ng(h) = g₀ * (h₀ / h)^2\n\nrocket = @def begin\n # Variable (free final time)\n tf ∈ R, variable\n \n # Time\n t ∈ [0, tf], time\n \n # State: (altitude, velocity, mass)\n x = (h, v, m) ∈ R³, state\n \n # Control: thrust\n T ∈ R, control\n \n # Dynamics\n ∂(h)(t) == v(t)\n ∂(v)(t) == (T(t) - D(h(t), v(t)) - m(t) * g(h(t))) / m(t)\n ∂(m)(t) == -T(t) / c\n \n # Initial conditions\n h(0) == h₀\n v(0) == v₀\n m(0) == m₀\n \n # Final condition\n m(tf) == mf\n \n # State constraints\n h(t) ≥ h₀\n v(t) ≥ v₀\n mf ≤ m(t) ≤ m₀\n \n # Control constraint\n 0 ≤ T(t) ≤ Tmax\n \n # Variable constraint\n tf ≥ 0\n \n # Objective: maximize final altitude h(tf)\n -h(tf) → min\nend\n\n","category":"section"}] +} diff --git a/.save/docs/build/zhejiang-2025.html b/.save/docs/build/zhejiang-2025.html new file mode 100644 index 00000000..a6edd115 --- /dev/null +++ b/.save/docs/build/zhejiang-2025.html @@ -0,0 +1,7 @@ + +Solving optimal control problems in Julia: the OptimalControl.jl package · OptimalControl.jl
juliaopt2024

Solving optimal control problems in Julia: the OptimalControl.jl package

Jean-Baptiste Caillau, Olivier Cots, Joseph Gergaud, Pierre Martinon, Sophia Sed

affiliations

What it's about

  • Nonlinear optimal control of ODEs:

\[g(x(t_0),x(t_f)) + \int_{t_0}^{t_f} f^0(x(t), u(t))\, \mathrm{d}t \to \min\]

subject to

\[\dot{x}(t) = f(x(t), u(t)),\quad t \in [t_0, t_f]\]

plus boundary, control and state constraints

  • Our core interests: numerical & geometrical methods in control, applications

OptimalControl.jl for trajectory optimisation

Wrap up

  • High level modelling of optimal control problems
  • Efficient numerical resolution coupling direct and indirect methods
  • Collection of examples

Future

  • New applications (space mechanics, biology, quantum mechanics and more)
  • Additional solvers: optimisation on GPU, direct shooting, collocation for BVP, Hamiltonian pathfollowing...
  • ... and open to contributions! If you like the package, please give us a star ⭐️
OptimalControl.jl

control-toolbox.org

control-toolbox.org

Credits (not exhaustive!)

Stand up for science 2025

stand up for science 2025

Acknowledgements

Jean-Baptiste Caillau is partially funded by a France 2030 support managed by the Agence Nationale de la Recherche, under the reference ANR-23-PEIA-0004 (PDE-AI project).

affiliations
diff --git a/docs/make.jl b/.save/docs/make.jl similarity index 100% rename from docs/make.jl rename to .save/docs/make.jl diff --git a/docs/src/api-ctbase.md b/.save/docs/src/api-ctbase.md similarity index 100% rename from docs/src/api-ctbase.md rename to .save/docs/src/api-ctbase.md diff --git a/docs/src/api-ctdirect.md b/.save/docs/src/api-ctdirect.md similarity index 100% rename from docs/src/api-ctdirect.md rename to .save/docs/src/api-ctdirect.md diff --git a/docs/src/api-ctflows.md b/.save/docs/src/api-ctflows.md similarity index 100% rename from docs/src/api-ctflows.md rename to .save/docs/src/api-ctflows.md diff --git a/docs/src/api-ctmodels.md b/.save/docs/src/api-ctmodels.md similarity index 100% rename from docs/src/api-ctmodels.md rename to .save/docs/src/api-ctmodels.md diff --git a/docs/src/api-ctparser.md b/.save/docs/src/api-ctparser.md similarity index 100% rename from docs/src/api-ctparser.md rename to .save/docs/src/api-ctparser.md diff --git a/docs/src/api-optimalcontrol-dev.md b/.save/docs/src/api-optimalcontrol-dev.md similarity index 100% rename from docs/src/api-optimalcontrol-dev.md rename to .save/docs/src/api-optimalcontrol-dev.md diff --git a/docs/src/api-optimalcontrol-user.md b/.save/docs/src/api-optimalcontrol-user.md similarity index 100% rename from docs/src/api-optimalcontrol-user.md rename to .save/docs/src/api-optimalcontrol-user.md diff --git a/.save/docs/src/assets/Project.toml b/.save/docs/src/assets/Project.toml new file mode 100644 index 00000000..5677beda --- /dev/null +++ b/.save/docs/src/assets/Project.toml @@ -0,0 +1,57 @@ +[deps] +ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a" +CTBase = "54762871-cc72-4466-b8e8-f6c8b58076cd" +CTDirect = "790bbbee-bee9-49ee-8912-a9de031322d5" +CTFlows = "1c39547c-7794-42f7-af83-d98194f657c2" +CTModels = "34c4fa32-2049-4079-8329-de33c2a22e2d" +CTParser = "32681960-a1b1-40db-9bff-a1ca817385d1" +CommonSolve = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" +Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" +DocumenterInterLinks = "d12716ef-a0f6-4df4-a9f1-a5a34e75c656" +DocumenterMermaid = "a078cd44-4d9c-4618-b545-3ab9d77f9177" +ExaModels = "1037b233-b668-4ce9-9b63-f9f681f55dd2" +ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" +JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +MINPACK = "4854310b-de5a-5eb6-a2a5-c1dee2bd17f9" +MadNLP = "2621e9c9-9eb4-46b1-8089-e8c72242dfb6" +MadNLPMumps = "3b83494e-c0a4-4895-918b-9157a7a085a1" +NLPModelsIpopt = "f4238b75-b362-5c4c-b852-0801c9a21d71" +NLPModelsKnitro = "bec4dd0d-7755-52d5-9a02-22f0ffc7efcb" +NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" +OptimalControl = "5f98b655-cc9a-415a-b60e-744165666948" +OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" + +[compat] +ADNLPModels = "0.8" +CTBase = "0.16" +CTDirect = "0.17" +CTFlows = "0.8" +CTModels = "0.6" +CTParser = "0.7" +CommonSolve = "0.2" +DataFrames = "1" +DifferentiationInterface = "0.7" +Documenter = "1" +DocumenterInterLinks = "1" +DocumenterMermaid = "0.2" +ExaModels = "0.9" +ForwardDiff = "0.10, 1" +JLD2 = "0.6" +JSON3 = "1" +LinearAlgebra = "1" +MINPACK = "1" +MadNLP = "0.8" +MadNLPMumps = "0.5" +NLPModelsIpopt = "0.11" +NLPModelsKnitro = "0.9" +NonlinearSolve = "4" +OrdinaryDiffEq = "6" +Plots = "1" +Suppressor = "0.2" +julia = "1.10" diff --git a/.save/docs/src/assets/affil-lux.jpg b/.save/docs/src/assets/affil-lux.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc1c87d16253d6135e5db252d2cb71c69264e3da GIT binary patch literal 217232 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 &IR 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С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 F{}Z(uo5=tG literal 0 HcmV?d00001 diff --git a/.save/docs/src/assets/affil.jpg b/.save/docs/src/assets/affil.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83a1966ba8041f658cc00ba1c75b1782fab6caa4 GIT binary patch literal 133497 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%0DNwHSmxSQI6jq5Wr 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%0A~a;i0nm?bx~Ax%)avYAnI5naums?%|bPC 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 literal 0 HcmV?d00001 diff --git a/.save/docs/src/assets/chariot.png b/.save/docs/src/assets/chariot.png new file mode 100644 index 0000000000000000000000000000000000000000..5814f2d94214a9770af4065ec11500739a18cf4b GIT binary patch literal 20448 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 literal 0 HcmV?d00001 diff --git a/.save/docs/src/assets/chariot.svg b/.save/docs/src/assets/chariot.svg new file mode 100644 index 00000000..0d3c7181 --- /dev/null +++ b/.save/docs/src/assets/chariot.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.save/docs/src/assets/control-toolbox.jpg b/.save/docs/src/assets/control-toolbox.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78e496bebe19d27766c7d12da035aed463f49bfc GIT binary patch literal 771699 zcmeFZ2~bnpx-L2q5CI_~oq`Y*5fvdeAWNDAMMOl5Ev=AcgAgKSp&$_gL6BZx2}@YQ zf}jY92q+Lx2#J9JDk^;!gmgBvGNTfvBqVpb&)NIDdUa0KzVF_u{Z7>hRWq}SWX#e0 z<8Qw28<7vodBCc}2VD;W3JL)5JNyU8`M@n_68<6pxVr<}003A4C@ZW66yZAs_zzGp z0F?iB4*-W14F7R|LSf6le`Xl~B;f(2fB%dR{QmO=xBTsp$AXAq#H&HX-`4N8+yVTu-_>2|XY26mZ}+BuyIs|9bZaCNs8O1X zRsC}Y+8-l-0cfpIs#5u;sGtQb(^62>QjoI&B-{&Sg}=T2_BHsTuuM@&dAZ68RW)_^ z1GH7ZG6hA&WlD<5%0C~Y5DotyP|{Lfy&Ugy%i?=pR#mM^njao zpSu#Ls-~yEX03tgX0t6@w^>>5vH4}MtGX=kwo&1z-PdWdE;m!IPk{Oi4*m zN#*Cb6qZH&9JrQ}@`jzuSMNKnayC?ZYLXi*7 zKzb?hjh~OK3%5Mv5z^u z&n;9V-;v!~^?PiqTdI?7M0egliu*J_9A`7P=`t{lV)BFt=$CK2Fuld0b_*9ah}WxL zSKB4Z7H;xCtVYWT z{AR+aP1hTHfvKiIW)V`oX_=}}4k%mEYI~W1UAKOpK);u0uP-cFmgayaTTGpGSVyq zMT$R2rwxW9wO(e)ffhO_E-rPwUjg-b#h(CwQ2{0JmYtRZaY3?S3g}7Un4AU?EIakL z!J!XPsWHDuqoK6u$7e{p`LonyV$~N*dw19jbzSvJ9uZ=;iL5{P{E>%DdfZ+jVCqjD zo6 zs>h*+mfxi#z;mBxl=zmE=H8#ki!RN6Fj;?F4ph*d^gZ4f_wL;|`r1C?%Ft@?VUfn3)8QAwJzY*z z-BL6+U%9L1uS5@}xD~8*>%KW6Gr0|c(pA|q)qHqs0ic+MXv2(jvfy4YOsDpIlLLX| zaLBNDf~y{5KI!w<4Qb`cV*^$iJFT!rYkXXgBXU6NJ4PShWb{U_e!*P%4S@UvyDnuP zcs`HI`Z1t$HHXj|xw%OY;_C?>rIou0ks}r2e9%lxy-DG3HeS-~QTqPOm{}ry>)CsxbMFFcdw;zKNCf|8i-ogEg%Ojp&(Pw*~&6Gz}nCJ6){pQu1s}1F2E)G1GFbl{#m?% zZ|ei8ALuvG6_4IB%nG{UURWrz?xv+X?N905liS*`=)f_{zN)=LWx^fM0gfp+D*w;h zKQ#pudH=t9&&k3lylErinI1X7OO^w5^Nfr>(|V>5F*1EXr1a#AvXu?=4U_{X18(=P z{{4M$qyHVerMKRxXM4VQZzjE0l*-^Qj$+jC{=49~@LtC9Ias^$B*z;P3IbF4u7B*Z ztl(i|nY#4Qdq)&QKaCO!jr*$BUoN*gUL$>7ryy%T^$&wlfeI+Bi!vQNP6=+a0tX&L zBt`1hdH5J5%{q%tvTZG?%T~Zd-GG}8~euCE0s z5mYcBDLvf%s!X*+G|g(f`Spx9q%VFgy4@{p-{g%iG=rQ#!l`_0Y;^yP@IS3X+=ABH z7?gCb`=X<;bhG>amh~DNN)E>KQk0k%s&6hXbRao!*2>jH>p~a5IXxM&_l+nfW%|dp z%&{Ze3ghp$ECwc6MMwDl$qimiD9CHB&)@!AU5js0qH>lq0I9!Vf__xU6v1X1LN@%4 z8*t9utl}@KW+QY-Q7rVTZUJ;w)c)E%u+7+fVCFjtF?oDE7^kuQ`?O1cI6>lO^_xIla*sbJwUPr!=8wT+DpPYUb197FP#?&B!PG~u znHG^M_*{0i+C2@F>d99fuV{Z{+B>11iKUU8Adi92B*v@$kg}d81_io?#ZI0&WBOX24_xPUD*1Ru^ zU%f0s?yr2!xX^ol*^59k9fhx%sTAHl%oCd%)y2Ki5Xo<{m&Tg?pZ@f1EhCkQbD*94 z>B-BgEi9wbYN4-P(x1OOrW}7?xJUbjqj4MfO&kZQi^7GOd`$b?O`P_J9J9hLGGnqU z7?|#V=(r8Nr#f-I(zS3Cw&26*E#==fsJ|3>Lb}Pa8!TN-g@W*RI&?u&YCWN+jy*3?Vsaa)pnmkpz-Cn4RfKo*2XP*~lR8dL{`lg6ja41hu&uA`z0@?{#>8-hf*K+&=;0rzCye;Xf^^(_0m0~?xRxX=9?T=y`S0{j0?!Z%x2DvF@v7an1MCPii;QibF3D@LP2{evg67U zN6PSL&_oV+V&WbuO206FMg2g}4VTH@jf#Jh0|RY54x9;{-}a9&D}Iy%qc&n1gp;h4 zy`^Ylf>F1Qlj6R;psc(UcD?$0wd(N5l)u?fIA%2|?GTuo6y~7Td8|JyUzIrTM>*3M zVm~^2_;q{x$QNt%>4%qQ&F%mgYbNhc*pK62?+uuMt|>EQHXdT(8|K52K$>dBlQh~n9AIdm*%u06*ywC<_Jllt05jV*t$s}v;J|D_jK zXeYbKfvoGoE{V4NaXClV_;zI>tr3CBk7 z5p|?kp;SmVEk5XC0ZIp|W-nG|B=Ea5gAAM>H*l(GRRo`cwyJ^>yifQa+I~13_Y8|b zAnIhhZ`-(giwc+q*PI?OI>4^9cPNMQc@5IleJvc%1P%-fs;2{aBd6kQjYOX=`n%DkT`n zv4K-_e2di2bz&zha?yL^`3H}A0LOO(d`mak*%-~GJ(IrNA<4Lc51Y}(D* z=w=xE^2M!(Ds!Ku+Mi{bKg;O9Vp<~GGapP-^}=zS4qi#!6X!={lci$X*!gzPr}*Tl zYD65`9EXh(X|p_Y#7(o`(;^0}<-l^hq&SMII7L{wbG^!<9fh?GPMBzzryWw=T$YUu zPB~n{TqX?x8Fw^GL}ubEqNTU#)oh~LK8B%hLDc>%4sHex%+M-amqwj23LK%-7&h-h z=uXJA2j=bkHpF85|HZV2qI~dQ9VE6WLYHByyT|0+G&Y3ZVv;eu`^*|~Eu0IpD2Dn+ ze5o8oJ_0U4`4j~>}-0C6k6s0VdWOv3kk}{X0`PtYGt?Iz}71OnA5vN+=oenKC$% zB5c|_V}DIy5(kE4O4se?VKSL3r3i_#Y!tVuE_1o82cr>YhfpKyK()f?bEAj5WeyPX zKwU~^}k(o^qi zTPV>UZ>8P3(QRe->wChSt;cFy*Cjg@7w_8jBw*93pk+QkeI23`1#LHz>a_CVT{SAU zgwjMpc4Pe=o3`kyhX?3}lD%Z~^Srgzm}KM{Yl}S>x=&lRZ}z5}^HndVwZ+)?A1W#l6Kx0Ps?o? z*Z8(u>SerID^Pa#{F5TY6#9QJmr?vsJ^ERIm2RCIjuJDWqFm&~CJ;5#BWhy%oXW4? zO~^rNlASllD-mzk6Dos-eOj*U-2N)dwp-c5kk!Qub=oIjs@{m4DYXe3a`ob^K6+2$Cd+6I%b%{wUwCjbMdmx z*{)EUfT+pcwNG-0d<=a1!>#jq^{lCCxpWg~SsOe!uF-c7Zifh3k-@kgqapK{v zenqr%hq1C16>wMK$&Sk+uYuAEG zMhOrsY;vQ|k0E0nD1~3()|!{zmhHOf*c8W&>)VE}n($25F2LY=EW?fTPo$Hl)g{Tv zk${L4^7+}W73=e^>V#Outr>S(=eqDQ`&|9YKFsbXoaUEBD}ofohGGl2`|1?dNeU6Q z63<=5SP}EaR(uDn_BdqL8?%kHC zIBeaN!p{tpGPOMK)CgA|s!XTormfO-Up{OoN)d0vtZ{7+w?c3I^gVIy{$w?qnk)Da7e0$5lB~)_e1wY`C@Dz zIkfVi<-8w8(9w~33vDTy_S^Bkdm6nS>|)`PBXvJ=vQBlXq|I+xnUt1wvl)o7rLYb% zc_~!z7>qp*WF!fwoIrlY?dxCzJMYi#I?63MpeEhVu!RE5lKo8ckccVHpHF+k=TxT_ z2EoqI2R=|oYa!C$`!RnFHTT2ryHC2UN32--9m6ZbH8ji^RpJ-RW@wUQ(o+z=#B0p7 zpNkk`Ym;*M=&A$xAKb65!}b-o2h`}X%-w)_>kDiXT%%o@^P~;xumSNR8HYN;I5+~GbuDo<_8fjnX@*mYX#)#niyij|J;gHr?H;J zw;(m?Tg4U6tc>*ZM@VQ{5t>#xy}Ik+YXy-75R)o<#{@mPpsk3RJ7B8| zgp&LcGepsqttOjyqi6+g2SH52m+z;$>tK#;)s&|}J1tz9aj$s%kZFIoT}9exT<b?nKW)D%BU693ek5>-p#69(wwK)Gju zlE943T}wL8Ux=lfmA!fdQQQ4@4OwwDpg_mI;;{5;>ky*HGg{xwue&;Rwk+st{iyBK z(fX3-)$;=LXC|jYrpa2m6{9t6FqA;KIG2Ef6OCX8oNJ-m0Z~})AazBI&eX{bU&sCQ z{fDgPw4mveapTAMCHZ_t?s@XVEPURbfya}iBII8uDJ(w4!1uIwr5reiOArOc+kOAR zu!O3jPkn12J8N$i67=j$e1XQ-qXz-b3*@z!H}L9So0};Ysd)5RAvjlg`fTQiz;FK- za~l!$rgal4-CwC!7@-!9UFAY}08>KO^mdlL-DGSG5^v4jep0^jk&iPVyDvjX10i>b zBN@}p*d|>K=K{!7oF?5(-Tgj1leS|S&G*NxTmlA)&kT2>MywssmpD^-?o*>vd8Y+# z0p&hEW3Ah_DNNQWfJmuMlXwo!_jrHdYM99w{L*=T{XLO?=RQ$jJbBx=W*-?#l9bbqM0ywM&0KSfWY; zKuo*L1nfv5JMp5i$3*Sf!ZCGruD@0v)o<{-`rS)X3_oqm@VK!NZGcv>HN9Xd{f(`| zNBYp7h+W<;VG7~~sg9vc-CUwYVf_+Eq6m@c^T@SQzebvG6Y>UAb+)ccmwYI7kYqpY z;KJ_qn>Ikl^P;!S*dqv-H0x$~x1XZj`69)XOdsdGe*{qW$ZTPAZlzyEm+d0&UP_d1 zEe-1N-!*!MG%fUhS~V3hsJcOQ`(O+b)K3ZttLRL2yx5Q-@kxAlaA#V@0Cv|gL^;d^ z;~={zo=T<^TLO8CpDq9HTvblPl7(EZ?j#mk{8p5scT>{M-+Lv>6D<%OxYGHi>k^% zTE>!(3(Ro{D5*_f?*yrsy@-mpT5+~pYFLq5*5H{}1 z7Xa}gUZ%!{U7~Ib8(GJM1IE6XPHrt3xz656gb>IQ_;c!bW7GfxIa#O&DraOPGw7&C z5RFE7OK8^{x5%88t?COOvvW`FV+}E`m0SQnj9_6ixhrJbNEPlNt%@2g@N;S%UnUw)5Tu{$Y86M;m*1O=@Ok@=T6)H*bacvg zF#EiYB-1^h$^(TD}-^a+dS)0mFGP zKL9U2^yPvi^sY(6Z-`<#%I;I(`~6lKNO znOA}(FMQ~D6)pV!G|0|bN&Xx=`R209%Nlk}Fd&7o#<)PZ;%t)xsubRRO5LY4i6v%c zT8NA*M2RSgQqM}r+_zaI%M`vf^zFAdy8j-cdUjWz7;P=oqxW7mY>m7~d*nU#z~_(E z^|_{xD=vR)GX<9Qsbe%r-=|>sjo|>LIYmdbV3yG}Lh;LM774FR zn=_h(%+>zeImA{uuo5@cYTaBgKT!3wdMd`be^DhNyaL9Pd>s*=UK1gEb72&z(C!)L zTxP;?(vCx=e#?ldGD|9ZZq*<9hool;4H|ljZ{K@EFd=O`?Rw~swvAikVlj2d5i@ao z%~A#PA|(z}myyqR$G+fD+N+Zakx+a9-{Rcj=&AlNbC@&ta|%G01nTGw@eUsN-QSrQ zBF?|Q@y={WL7@^b#n?-ZhAbpjWZOZs1$>(ihuE83&AMH;xll!WUK=C(*P(2e?KzDe z`Ri_u6MViDS$y(CwJuuIWDSox4V}uo{EqB7rt+09fuTv(dl-GRiKDqY9aw@3lR!iY z&M4>gSKkAo+)SxU8Cf69Db_im>*wj%mwi|y2X2LHp!v(_t4L}4L61@!Y8}T{X9W+b zK(edPHFg8+eSD=$Wm@i zpw#HRM2k!qti!I5^&k<94Kc6%*AJRz49QlfAN|rPNNO=Oe6H4^6Ipi4O5Fj`ws|_cz(2cyG&8!l0+x)xH|ZHPFEt`o9`ZY zRD?*B?t9>Gb{Ahh(KwzR8c{lRO@C(r=r?laty0D7L!pjFMnH@zh1Dqsz9yqMin0#O z4dmi;sjegPbGSr-@@gTb4I{qBtxb|up_X^6NY?(HU{`s8Yrsi$hQ#|}Q@i3tMmH^$ z)5EJt9^V9ypyv$ZiSc!ySsFdyA#{ff(_Jfuq^6tqhG|%ScIl4o;pu8q zcKltTWzIWjG?t=?1b;(H^~}ZB;U@0}F>9%@n2XJZf_DXc=1u<%&>aEMFqpDhYR!jj z)q9##mRvWdG6@6v>Z5q{4iUQes&PT!S;5?_w{?@o@ajEQ< zG#pOX-O~=b+pzK;XrJ+&TJY?QcDNZjS;Mkud;3sj9t)EOS12qSIWUnT8)ZTv3`IHc z{m3zu*)pm2w0H^H3qRWgLWE14$eQ2~yGsqS?CW4`fFd^Mif{+P`XoW(pwzl-!uHO5 zuQ$o5z0j`rXzq674K;4Aqi1}dZ%&=O__X0b%4a~55sNXP5Q&f_cSc2`5WJWfE5!>7 ze1$6Q>6X_Y)3EVe#o6zfdQfJoes`hoB)Ylkb?!09 zXKJMbK*1Qpt^y8&1nZ?4%1X*vraHdS=g4H~IB8DkUs=h0?_1u2jVdKkUic#$YV(eN zYkpur`|6whF>SP<)B~7C>%zNJ{!ma``C)ax!qT>w7Px-r4(H3%%u0|@V0G&8vdr1-7y84wam-Z~ zvvj10vac>FkaPJ1SeKW0k07wH>~>Qb4TqPIV7v{Sy_LI1Jd{V*&r%NnmW*K3XIbbg zo~EnALq*U~4C`g%GhokO$bI^SSuVwZ<4po22cGCZ7CiE(Nit}7(Zc0Sp(^x{%SqD(dJo3l$-n6kSg-t z$5_G@j%MwnQTEVE1#tinN`({K4~3*}GIo~^Win$CR`G0$#SFm`JqMV2d9`$dInx^h z!-b9AL5i>#Bd!|;5n*Wma&{|Qu3(`p^T~AHEo3XYj7M1x zoj?Ahr)0ula7dup*xWY!ZUC4;E5L@xl`S72?+Yw}v!NP9vb{ckIw{UP(}27dipLA{ zoAhr>p9fN36k7I34SK!zufbZ?7g|4W_BwI8p^tcRI74CSqU;^AZsu)FZP8W+Srh{;3zUqkJcz{;AgI$>>2Y#7xU*<;W?L|1{l44 z+&A*r#^dX2g)iTMV=Aqf`VOfMMT~}LG@5i2wHof5-gl~c@M6KuA(;*oQoL1U)`m6g z(8+Q%Y&Blq_dwQ{!}=m1thINk*ptmSSAXO5Xj-iFDHd}V0RvtnY{IN{S{e!_NsltC zCsaR0=d!75(B_jceewl;$@w#6&MI6hD!EgnX2Z-Cj@Go%pJ<=G{lY#U-fg4^b|+z& z!ncR>UG>NKw^x`!Xf0@<8oDetKbZX~=wK}mqswx5bNs@i=k*!a^_45{)D$5bxlfqV zb+C6+T3o6RUqbOe$jpYAfylH*`e2T&%MF>GWm3_EY}>%)v9p=(peNg6w|BqPw8Gy# ze7l~{*a*R zl*q>l(h(9xhERtv5tWnI#q#FFr z5D&qMS6Oyj!{1t%nSacGdBq?WQ^if-YLnGP#jw&vW+B}r(oIT>F_yZ3j5Hz4Bxbu` z5l40;%}Z8<8||6ZZE;tsB-)k?6ub%b_Zr(Y81ehQaHZ}dmFtd3hnN9M-9ig-c$9}= zXL2yY%k>;o>s(@^;Z$B6=kacW!I!d7D-Q#en^KzqhqlL&a4vqb^33o=o@xI3(H9Ft zPu-%z1I}uU%|284S`F_v6$%OIJy;or)sVfwY0Zz0d7g?t+q=Ay0? z`<)L6g-sGGidfipO^@FKOBBp9R@Z|&w+P(V>tslet zgSjd!IV{A<{W%)lVAteum;*yN=(YWpJZ4=}s(C))*(cv*OB2`ocP^X`1{O`VOb%pN zc?q3Q9dK4lP6bXmAJaYUsBr4%k-VL$@Oo&E9X@~Q;a1xFg=N_c&t4|46UN` zs{_RchtRg9ygsZbqAgR;?+nRIOop(bks&3}4Us|Ao@e^DMGd!6vvgHn(=K}_VS&eR zOV4m+#*M%Tm1KLjqK@AbWIo(leHI3`7Mc2II6>IaM@I><$v$0ajP2y#L>h7+1HD`7 zKU9=^yqBRz-U5CbWu}n#g%mq&*R%CZByV`oRR*2pe~znL=(TcsjDy@*Ijbjso6bIut`;}I~MG33#AKA z)i*SWV2CAR|F^MsPrdLt%!@ttcBK=AMtyZ}jbAEGF9L7{1yffFF*-5*7-iX}m@e)* z@`h4qj*o4ls0X99MAXFaU%u&n%8!Zd2oLzJsH>C^=`eGxu`7wzsULr`JA7Kh&ZqZF zCCyOXHyOaR31w>8a5VY?!P*d|)}^P6&9XNbtq_{slFH%!%_4mkH`(UeMNWr+%38Yk zWs<&D=(g4*ef#J!g4cx}vR~Oq-IEFb-M!XJS^;@>YrdEP(6^sTm}KrUnWc0$)CtC) z=_gx@T=+>D_SV8oU^>z>Z)gxsIX_hr$|vU5X{~~N^L3(8^LQSg*FS4Y#Xe8-@jbctbK^T)(}~G>+6n{b0u7Nhcr9D z>xC=u7o1?Ku({A4qHIN_D6pf@0?HO-4$t_I$~ufU3`kE4Ji+SrIgWaZfze=76&G6` zoEu3=Alr%DuwYlx>=)GK&3CP;H79+JX5yKhHBajkJhlO{U<~hLCbUuICoZBoDp7zi z!iAY!@H`u%0iVI3)-hYV5*r%tEVNap#@P0KA#W9+mPtw1XXJ3d+a5mk>jZu&Fe*(UmU_7u!&2G@uYxTvD>Ynw zf99ydB3!7gs(_oZ1u5^@ccH08>=cP z#@An?5*Uron;Uno{qn`^S(dApV)NhGW5maJnWiKBKqjd|ycfKfB0`$Jp~)ir?gi&-2j8-es6o?128SXry#+k!UiBZlXj_RYi4 zOWw!dRlsJ+df7`POaTyanf^#f9aL#OL8|SLZ6Q?Ryawh8`S~z_?$SEg*SZ9QGe}ah zFLzHSzuD65C3-YwaG^2r-otUP366DQwLru7Nbi>y7#cH{3I;XI+$$oTKbkAfUb-jy zg?v~fWQACkBU%+dKVTsfq;yrWOic?kl&NVKk-ed%^8(5Ulh2%4iVB6f ziLG#^h(!1`bl@KZxbNl{Or2d-BGFzu+d zBOM=Kl}|NFn%RYjKAK|>3DeTc@%0%VCM@Qr60LvJER(6iVkjjQ2$mZwZw9}T38JL5 zK5_KY-Q^`wrSPe-etQQ@GC4p5L(hi`Drtve3?Uyv<;HfQV_)?>s>=X5q#{_n=vVqw zx1CyyXP7a1X`>EX6c;3DV{hF7q2A}!#$h$?P-K6oqiZum>`b@1BY&MW0fdlpZU zS3Hk1-@54svK?eWRF_mu;xG(VjiN6|S74u?TVUQApi$mK#U%C&2T-BN( z&qOb&t;}JZj!X}q^;(o3#kNJ~@3~hDm9cVg6Vs2OrUSXIjXmSjvyo*tXRHkE#;yT~ z1URkBf-7}Q8U{R4%~5m~Y2;K^lhR;iS5?E=K+!bsyUqS+8~^T7^|Pp3FpS~%vObc+ z#;N)43bx%`OthqKey))u-PrhcaiTH4xkzQPie%Ov14|=#TvhUZ@MvwI0JWSn-D<0U zi)<>;aCnnr@Hvs}Uc#C7(W|~Nqgyz1qIWKYXfblft8Le61wkxEk;$7t{x~qi#!Ae& z%9we}pZTIKWrQluf@&ouWIRZnRR(SR>cOry?6MK4eW)d7ePdrpIO+R!7$c*sCMllm zKi@~paZ_*Vbk}dQ{eyEQSZ^UOa!Qq8I-frO$USh2${bay4aZoG@ujCs-u+NH(0Wuh zfYF+-j%8{x%y13qLJ=<03Z8Kzas>3UaKl|1fvL}dD5v|s|FBB8V_&>(SxLtU3r<@b zxy^cTKHcRxv>5&-boIe9nI7L z#$#h-6xKsbLszOjMikW!H;=7eH$7yV6pLOzVQd1Gf#}zZ-j>)z^akkSmT;6YDbU&S zW2F^k4QaoFTie1Ob6I@gV+g&t*t>!#b*p&q7fU%uX`sv`@KK|kVl31w*+Sy78@uA^ z7!mF$ID-;YE*s}8oCakTe8gJlY6ruppZBDRR7qPCLU-baSX6(X46N5*yxv&rTj6=v zaw8zqVe%efz{}i3CNCe>!JuGzY8EA~970=+O~hD%E;ol*4RDP#V{b^j0#_5h?oq-j zU+DqSrrXxBxV<6mx$B={Hslx^Ibx{H5iIWkvW_~tSK<)UW#hjwzhw`19mATu3vvq; zJhWmDmVxgvtLOp6kcZzDBV)JOT@EMwwpt%-&csF^Y_sHODf*43tbC-f1gAA@Bebd< zDE=YB%1lb(w4^IF76U7#v$)`XCISv)<}tg;t`PGFdDwEE!vwaNY%X0Y{aslywhW^ zvi8*W&RJ7+yqqe=+diN1#)n*w2q8p-DtWw9_?|Q~Dp97eoGCmSWgU8}6c3i>!qp%g z42UG~`rB$F2$m1Ik@ z8NZ?XY_?l3**0f)k;>FXIG8U_i5ct0d(=*F>s)5;mJ=)tti|~c3Ai;@1!z^bbBAVV zFc1;kH-5kDP1bw7LFly~K3kIBy+Dp)TMA5AOb|OaY{#!og889Z_jney1~Jpb8`Bmb z(v>i zQwtH5$<)qE9H*&T6EOA1Og$pVfo!?%c!M2B}O%z{*9L#zTlH2`2vnrv@4lSMvUTN+2dKW_NA< zAOi^zT*2>=9WcO=T)6JpHu3moH$OaF!z++{ed|J__#uST^`gyX)!sjR9-#G-9GSh= zmB$npY)-+84l@b-%NYS4B%Beif+Uv_W{x(UpbQiZCl%oTDu*L$8E(s#) zjG?Hj6{#TGL25eL4-3~RX@wh-_78=ndw}mJ;g8tECk`go_rZ%5-X8teagd`kiP8R5g=9f5}61#T;nYSBcV%C8Mz$+8Pk~2_#%PWG;q!5pKSJco)CzhE$sXKe6?|{P6I?8|M zbM7-CQ)x z`%DFFfCZ^=bg4tZT)sHAhoLN8-c4;Ywij(}9)eY4xK;lC`}kB9Qlw#WMzgRh8ExY0 zcQD$F4s9tTvv@eTQCxAhY%G?7M=DWx-LR(B$r&6hb(~z}T^;DuS>-9(1ir!HJtq1dYIF5z=ZUF*8x<9LWwxldG1__tV4TY<| znY{M#8-sSYJ#B93&=7K*tQr%ZsfbD*4##v;pJHd#Bg)2*hEnCF`?6)w2=Df+<>ziX zjz`s-==%B=PYKwX5#?Kf_we=Y+&gE5)tayoz4v`v9u#@s0oEE3Ve8X|b!9m?@FZsB zFiIPG?2U(q$m%RGdBH?l`L3y)y)V%)t7O8*zqShhD{`3GN`b6AVa*`jfuPbxKqVA`{2g=3G36?kR(CC!p&hZO^9{F4cvOle$i47Tw+iBmz*981@$NZbY&n&z;i2 ze3H~Yr$;_GWN&viv>e4krGumpd#s={$_{_oa=X-2WZsg8O`zM$OrHhiXqfC9qU#sq zBX9O8Jr`ZhJHPKY1t}Gl4=hRc$FOn6VboNn3Vec_auc_fv1YoV(eL|i-}jRX$Ggh7 z(b??6<)W^{@HGN=tV`pwnrt@_=H|S_CeHK5y(U`f*Fm#n#U(fmsywSB$Lj zY@Op^S@rm$DbC$Su$n!ml$J?z<-tD|VU+lWRNcCfSL^UDPatk(8ynE`17M2l=KPr2 z;v(nWqTti(_lh$=QT4A_dze2x7nq9q-VyDH6x?w{PQQXzrV!RnUx1ICiSd|an0db- zD+M-%6-4={OKI?2`W>MQlb6>{Daa0kM+U#O{&vHSwf*Y)Uk~S`v_AZGg{iCJ`cV-utP}>W&B8&I{u! zAT5wHC^-~2-7=2Y`1x>(aKPS<*R1zReRM^*pD#OSaUeA|X2A>Idz2?T(M!^87fg#q_> zrT@%~4_R?jeK2Vz(4=G+l;oY{SP$Jjf6omz1T9FPt^e`@thP$=U+Y$RqVH&$hq-li zlJxY0sfN5g)z=B8rNu;k^9hMdFY$%_kZeT(JWxwfpj5j|Oa~M1Jtid`N7hEP%@SY* zVh5Zdxsrs=NzVOMl-lo^Dc#N{=n3c5uwqSIZ8t(y3p0UiY2wLzN2I3 zhS=&C6c&HLDR~2hbsRqQq9xkI1>L#n{u@X5)HU2-m^aIvuk@L|WPrSN*?!5l9l0Xs z`uh&$%v*<=L=o|o--xS8^{Ca8q4{sI?Y7Pj9Fb#pU=c9lW?ex$+iSFmP?`dfuV(xFhNuntI#N;hdZ!PAO zNe;-^$lBL_FY{dD(CVcI{{aj9X z9gcqV8+`tIJhyb5U|U#FJlS)7F|mSzFCAt*_k2fZJj)p5SiIR^eb@eB{+|hkHHUya z7@P=04rl%^?%q49sqRf14x%6;hN4sk0K&sz(N(GA~gc~2ofdaAV?Px z3n)Agl&T0wM_PbTR783ZP*SkaIY9_VQl5A7`_1>w%$hZ8ee=Gv-dXGWC$e04%-Q?i z`)=2D-CTPljE5$J%Xkge6Cdp$e-i-y4B_RYaK%tc%5;EmC+A4y?3gj9@x`mS9|X07 zoTwkw>@N2+uT<;?=hj}Qt-rq+wesR$a93G zj{s>7e8P`D#o6cvHs&sUOui9;*mb>%U&D&Vh*qs>lqf^V$=IM?k_^knaO{C63LDd4 zYS-8oEUD^fQ&$6+g!>mp?fL=Zg{U`E@;dMSkG?rNarjC!dxX8~M}*U``ym-Or~MIG zn7MhL9^U~Zv{8FF1hTJ_8T?(r( z*F`l9Q>^OYp}U6Zb@(kL%L=D2F5NdcHf^wi7@|Cr|#iB~9NUpE9dO?t<--M5e z{I=$4fG=7|g-_y#G2@uK=7)UE)sP`hbvqut#KXuF)jG$2wjP#j9g~HB#w{ik%vac6 zCuuV&Yxsxzf~Sk*7j_jdjzaQnY*izbcmDHN-lQyyj1fUtvVz(r`dbYwY)^n05Uaqn zJpBbQ;!w3#iw#uFh{RUd(y9 zjj47GTGeC5>!@l1AJL_%e@FB~a|B>Do|1dhD6^LUgMSdOsvqoInRuX$qGWa{AKAlp zHfyU!2rQ|ScyW@!o4Xs2Cl4bE7Cqac-RF1K$bETmCDZB}dUjbTbzbm@bQq>^H_@@a zyxE<@!tKI=%)=aYS3;R9TiDI=Zt1#l2FAqj4{v-J{ZLVhQ}t-PTiUImG+OtJ_N>C} zzHY%I&pqLgUB#+Z1IRagEoK(;lH3Ir_ixmQoIN~ObUm9$9T(@T<58r2p@i+x*UWeN zLEfB-eJ5*Dc6%evc|`6(uc#CsZ=c-6-UlY((9`86?A=;wNB4b-7+GvWPLS$~yyrNw zmRq`Z&b0IwWj-JO8zt{+zNMn!;g&sD;y?MH*Yk4wU{>%~`KyR25#f8PgiwK~&P<|V zP$W?Mc;QM6Y{G1;-=0Opv?y!7c-5Bgqo&gDU(sNq;CakgK{xPf+1S`gskWtWkH#+4 zeZgthh-dYP8OQQXpA)IHk@>rP`yAgD;8aMsY`;uZj(k+1OIv6zs0>$nnx_{|DnI#a zs^{zEN($x1b?;k*{S{|NZFSDdjf-63O)4(6xWdlO}ABf>0_|o|5(5SIx`XeJ|>t|84l{3>gamg>`C$t_y?8eF8pL-RF^fKB41maSmdjm z+QwKv;%DMsl!v#x?pZK7#C>GrAL-(gUi~StSwvXAS%l94(hHP@xNZzI?16w{ z(#vCyMfkG+Iloo>S2w8W9sxMCosB!7VRvLV_&0w7PHZDz4#BaZB&?FT93KtihOw-D zNE=71>2H)|{hnZnsD=n6rlV1_-%L0A@KQ5da@UfS!`HbV*r_7AHTEumtx2r9;c`sN z{O55X^LUAOkdNstsz_Q#Isgx*ByQ%6S_Ou&ZLb0rmDat=ANQ(9>MhxVKV1co%Ukb@ zfhD=|49^?~xK(7)5(Vi|;a~`)u!1p^7y}X0N z?cj_&O1_J$lP_1k$Jy!gu*H_5j3*hdt=EB8S%t(_BQ702{-Am7uH>V#8rNUEc-6Bm z4aLEZSTT+7Q2j9B6nW4vqQ)6X`>9DH4Ip)HHu=yMkg9(%n6O*UcIdVJhuEbgDZlAU zY}HM(YKLA2XXv$X$DH!3?^}XkN135YG<8O9jRRbwXzO(VWQC36>yI*LZ?0ujse02) z8paY{9jogz9#x%vJYoF8T;Yf1q16_S0~Og3IIHrKJOII`u){~$xY%IVMDKQGt2=t; z^2ATVm9ysg!EE$hmmm4?G|%dM&E>8eF9{>qm>`PGS2t6$A=}rI3DL&;Pi_|df&VY6 zZ}3lmg>M8RP(cu)0iG{sI|zAq;l`7ZpO-j0S0q3<8h4Y5j){(;)g_5GYy6qp9YMki zUIlxMAG;DnK$k+^dp+Os&OAi{>=Sz*v>xicLj(;0St}dRr`A0p&OfftLa*%Amxb6T zCL#X!0?-H&N`U-j9k~z7e0>|=(O`2Dk$g##!iee%Rh+svJ?AJ7u_ZXWk+{I|I6$M< ztyf}+Pg&TZ%R#W)O)Y)0yIet+6V6kDCb{kfaQm-%JmacX9 zGczQC!R&dd*?-|e)nxudE0mClWex@opQQoJFZQCFD>tRCuP7bZaHUqOzTAb5;)cdi z9u$q;P}zV38F)0`bnC<2#91oqKwslF!moO%t+yklMtm|4LFGE%?a-4ez~2gGvCKK@ zup>>VjKuK_g`YE(`(|GUW8-Q=VjDN|&%CXwmWKSM-Pc!^4mEC_HZD;dzEyZ(RWYG; zWnJ6X_R-{Q1V^Lq>UVWMo|1(DIXryT5ttPTSan1u(U?^+Qq-0o3CfvCYlsY%SHs0V z%FO$Eix(3ipd}zx@Wu68p`YEfnrsdH<4MpfuRA1HC_qWKBp?w5<;1iyFh2MV<|=#( zB%2+ltS?0ZB2o!vVeH*@;T#|LO+A5p%fffLjdt(zCx?s@ocR1+TA<&e$^X&!N_ zdc>L^$!E3Yw`K&4eEQ-t0=4wPKVAm2uo$?Jzx1mXrQzj-@}K$c@K~x@?#x9_3GHy`DVSR%ph#%A zPMIu6nFRzGDyg4$?Zk>X717F_hF^q3H$k!H{~WHIdR5)J#0= zTkl-7(wXBHYj3I-p`c32oq9BLwW}os12{~~m~t;)l?ko$aq*4@eJniMsTm-dFg*r@ z6R(51v~5bO&P9)W`qZcRJl?=PAw}nVM!3l<)bA2*2jG4k<~ayIfS{A=jhFj8ik}3L zl29J0YjME)MJu&GW4jjV`SMlS+UNgLJbMPFCipMnWF`;1Ul{efeLlCj`$;s|5ar*` zQ^uSxX71jeDWRtH{E70R%PB^?HO?Gw+HbA$((1U#lRInItj|I(0nZp=#lO;sfK(pn zD#Z(TPE|W9taO2$gw_)s-3N-l-6~$fOY;xJL(%Tr28+KZKl@%g7)%jo_!;ltC-^p` z$JD#oBhCSp6Y(qL-j&o={n1ob$;_lj;RS1!{xE~dee}{#+4!kt1x8k==Vrt95BSZ# zp!3k0se*}4KC%!)JV4yO(Dwsxu;wRUIhePH2(cNnaU6*Ih~xgmztEZ7NkIn@0>x;z z0)MpS^G_ok!Nn6R*x0Q7+J7vY7)R7=an|&$z2d7|VmPXLT4~$c((0RF3692tP#%^P zZaOV^Lc;Qnf`nneP?K*V?5v`&F*6MXlUSvCxkABTDm;Jr!#Etg+}fq+zU@F;&XoCv z0r0HRBg!N54lpIg`|Wv?u!gn*@!##jPKs*1HE$oV%e9aXR^scJ3xOgIVEEXMYY9qb zFH2^EbiL@)EXfB-G3= zCf=|ur5hAZ-1s);TbuFPvC8;*fJl8^f;0P>G3sW`JMnlF!Vqo%d;$J`uv^jOPOLQ5 zixFo}^Vr$oXGo1{G?0%ADc~PO(z7js#$-5EPjhmLbpisk`YT5jy{f}*wAAJ`WEpnV z-_HINj`{YLbAyF%@BU2XCUC51=&i0(f1{)TFKP`ExpBYSWJrin>WWsp*#U^~ni$xY zDNoUies*3mTUCCPH3Jvb`naStj5}4h zowg;g9zQxM!skNG>R4tvdG&Rl3I~O1$k~9}%p@SI1zqBl%!-V6?)re1B4MlR*Bj{W z=bp%^N@^#Y)kfnsAt%LM<1Ts)l1_4sYaOEvgN~q={)END>s8?LCZP;MfPc|yz3-AF znEIQ1gfcJ`wdk|1>PZ%0RdS_$(~dv!*yNPk@FcN*@AI1v9Y0@5bN2L34mX+lhtABe ztsnp&3UWJ+Ms|nHu-LmVU(cDMyy=KAaNQkiej)At9nLa0wsCOB*<~A=KihWumrZ|k zE1B&Fr$g|3YRE*aI(xe6lJdOepnKa|W=jpA{n&Oz5RL20gNy)JO zvBB*RWHemvKY`Ir@(QH~1D~3O7%gOrecQWjVVCIKKZJSyQ6~HUB)s(p@U3t{q zTkk!dfj)1cqD?7%pk%%h4#f?kpi(?v#W}~>hYBCVeKw)DE3)E$HZwL?-nx6q>RD(p z2|`L=<4=7Ho7AjpeD>w9s?+Ern?;w6{!Ohx6cGZW9W1T~ZQY?Jl_S@NfVu?Ddi~P< zQ7%c4AA;unHqffZk@kxJz6-1m)Lom=Or9}c79*7CSKC*|wL@&M!ga)(V?VJ;8EGg1 z?*9QcuI^d)U~WUq$$=mJJDitxRq%#`5d2(MsA@$bLGBtu=TU4AzlatDz-auFIkz+) zT5EdUx^nZD>U+HfQ~8^J{%LbS*6Gp1)2ILR5fyk~nK5=wu2Az%U|*jX`=shf7`b=n z)?or`IrzAMO8Yy>Z-Wn&Y)Nvs==|oRC5rs|AEiG?n*xUzw&!9%$C~L`F9E{jI?AYa zvzFas+4XN@m?a&l{Y9Ul&3_iUe;ht2>(YAd#JVF`P^&@IbsL_5-t7$^t3}7vZvwoD(BvaPvH5gqJT%0hQxu&bSN`lnA>>-(=^1F z{UtmD>g*uf2MK4l;2E^^Ct?J6SKQS=7aa2Gq~FKIKrHHQ15^G+*<<3*iSSQ@-Bg9X z@5a7~5&T7=B?(M(QBbiI3NpjPL0bG5H#!(xC!r)XWv_{X)>2@bz~9#R84>W1Cp;r) ziUET_wWJLNQf^QLYwp1=#FfNSxQ>k*ps5QLB77;RSs(jd69eP^M)Ax*I0;J0j{1>c zHz6M&%LM{VA$n`g0JQ?k%&fYX9(2c>cjn6x&`F zbYw~j-z%ShUA41|v$>4bq>TKbg(=EW5pMgz!3s3c79cnA8i0PU*nwS=zCol2ABt!F zjbb10!}0~YM3=pV>pQ_Kg%5y=)4{%*BIkC@AhinYB)t&4B}5I!PME-%@X>CYT;Nr1>mP$NIh2UjVSs3^i}m zohhOM^jqoL+qcBT5M0Rh?He|SRn4~xwQC2W71Y)3(a0J*6pPltdgC1D#>g3N?ZYBSbKffjm)1knZsT#Lm zHJdzg%YI)!_wQ7nZV}fHBI?S)Uw@4dq#j7L_{uR3sVeSX8~$e&W-=Qj*+*&yia>Az zRex=Nm_C1&YbeM)(!8g46x%$nXa!xn`=>_Lo6z*w(#RjjYSc|1i}J&FiLSE4uMk4D zal=;J%a#2nOoFRtmS7hKZqM^`!$)BT&3@!T;S;-yPVdei6ut9cm*@m=prQzX%tm%( zl_`J|CYg0);7Sa)DB=i8higZj`L40^_|)37-Pp(LX-awODpDx&X{fo>SQ&8p9J-@q zKEEUos8I}+qNNB46@%}vSZ;`%w8+LyC4}6(O=1_eJ_HAJ@fDKvH%jAI2ZalIt$(9V zg$#%Ycb@~L9|~+e|NA&@MhXyh9<54_o~K71*=og?j}h8C@`9mZ6bCPi@jQb0)|>~u zvjOM7WEv;f1z5$Seyh$$lz*;qx3#x^Dx^=I=f`1lxoul4!<%Yt+vI`L3{o_Vj=<=SgvYx_Hw z<8;79yv$dc4ZK1X#roS6yc71OvpZS}L!Va!$UBUoIR>h8%> z)UXpr1i+2zkvpoD6B#qfJYBcx4QCx|1%CJDc-SN`7ay9EOe;7ueu+An z1}2?^5H;C-HmZW^$T0+oI21J6y{7&MrUNulvmw56`8c?bLtO*V1K;kRNq$BA$-OE_g|2o>`9Az=+=Rm*k64)2XS3V&HK`Ge2V5r= zgmOc{)<#caPWG7HU{=C2n^dg_$r>ZaJW@ZQQR2VfO^)c578d=QG&!CBYG`23}Ged)`Zdy=l zzGH&2p|T`eIzJlNYsr1{g9EHSvvq9z8k=B^G+YZ_4arXNugQ7V7OY?Qy+(QD zmdB>_TcNBHG1Wi%?T`$PGIvm8p#mFYj*9qBvS1gTp8I~LySuU~=~$l&zM7ci)N2r{ zZ>W6@&EbKosR$g6t~`C3qxa6K|WS6gQXDllNz{z z=v)%|nPjCgxXP-+|8nw|WvdMNpt=E^ah`!x`essBq0AMuJl9V9kyW zG-|phTg)hA1=~T5bGc6u9e=QZcsRpLza3Cf4R*$QLl@B#@~gMaf7p&n0DPu}N#(BR+e1beEj-6-s|9=u2r=Yw9{{p7cCJPou&6LnodMH(mfaQakxQRv9{Cm!?JSM zXq5JrdUss}Vm8P)4~MuBxV_VNybiic>|m6oRv=9||t~srN2_W+XWA<8zy0 zu3dOUOE|XOW?Z4w-)0=$)*TPYFFp2Ig5vQq{OcT*^NHVnxf$xKAn9j0h6`pjY96}u z{5=&x)o>R&IdUEtDcrha2W9$20_MHahc)aN7G zj%D`Zf1j}Gpz;pj75_#}%_34qFcV?mMuHNTXK64G~?92wrYqf=csAdEeCK|V=lDGD2T}kw$ zw76uHi5Z=q5fN+#7bT{3nXf9~9rgJe^_f~`HIth+C1GAaLQQ~t(2A3Bdjk3mMhQw} zHIivv<~AGo!8t>8-1VjlS}AE}Ie~Kga13aw!~R1}bwDB#1D~J2Gt%OE!8VJuvB!KH z=_<$UO?#XF>>_rf8*-K=rSW-ROVRke64B-+|Jifv=l8U0l2O>cq45%$B)}r9CGX=a z4$PUq&*QrxjvPr=^z)Dia;N9`yo8@{b8Su2M%*K@B8{32t+Pxuu%7pD@%8(P5v^9B zzZV#9FrBF0+9*3znY59ZU|n}qm7ZEWVG`B;q|kS0UzM_Hf;JC?$H~zSC!U>NZ8Si@ zWVBZoa#kO>l2$>o86n?qci3wpmSq(qltkz|pJ-6aIH}E{2gzHfppk;&A1Yk|{YU!i z9oIAtrQ2{eWf0Ym)mmnu2UcS(J`6Eu=0{YlkR)CpX$KPFtk_wN)|VM0&7*b+bDC&z!4e;ShwC`9E(g{YM=f z|5YQ=7mhH%=sn(U@_T%R)vQd3dz(ifoXx`CGsERR^Sm!VVCJay6mI zs{lwTs9CHN_KaX>Ry$gSf*j#cfo4gp&~Q>Ya0aA6br{1P=}rTUJKYoX`~9HoMjV@!c$vIxFKqv%4JJ5gBwo*#MFthFZd(9zNQ8 z%kflC(5Ty3!zMcXPXV@=oDxoU`jtM%Qg`q5|-tAsDt$#nqjYHQMQqW;gGqT?~} zbhFp2f1psEkE0jOrM9ST=x6+RBFp_T7G~q#7@-npfZO2fBCPi>ma`#l73F90q4A_7 zY_- zo+B!hc+YbtigRONXfzlvWuedC!BD7|^uM+}hK*^-@SEyED72y<)>~?)xD>Anj>6q} zJ=IJ7e8(3PLx3)PIPmIRIF_EuQfNy8oe9-OMWW=mRtr^Tm{`pkYNbm02=~EIYz22G z<4mt%-HEwb4dPQBddM3I<)JhE0evd7`t}jir>PN=qpq>iqP?JQxhCBFw%|47l@v{_ zvYHv?WOLmS>ct`OvgSraNf+3>z9$C<<-CX1r(1H4-}82i#z-SaTjf_ATX4s?)hq~x#l8VMw{BD?VoyJIL8@6Dao`ed3yfK5Rgi?M!JH&R z%>};^shN~tZ8|ZuMnia!E7X9o@vqO5ESbD6%Lh;Aw+$_thNH*utGX;QlAyL5k-*=D zfa1)$Kf%vNd`#a`(t0qhYtv$&GRaHuv|ct%Ji2mJUv6wZ=?o|JPW?XBwxnopj`^e4 zmah=)adZU9_(tG0(j^w1V;mFIMgHZ?IX{C^vjyLFwcdLWVwRg@1eNB}!z71t@L${^ zci>BL;lZ#4vsD$w60%JCL%S_g-;3-Ce-0`Da0gdhX*(Z7c;Pi;#Yo^Pqf zsv1z``KmxYABr(a0@6ZEr=4{GAD1NKXD$y?^FQXT=w>o{Z$tB~)(t2)H16rEKYT;A zx!mpe2fipj7<5x8DkLk8{Bw}|#*+7Pa7kvag$Gm5ajfp~Eee5vsmtTYoV4ibVz;p= z$NT%QEi3Hb+wD%ixXA_7GGl}rXTkfP^J`Qt<5=;xXpcKa=e?=rm?szU_X-{vbh&rE zcnerFH|MyRZyksRl-z2SNbH$@);}r6y3mexCz^E`~S_o{v`$b zzxoIEe{w*d=iVq>x9Oj|(KK`-5ON^}7o6B!J*+cde~}@T0uD%! z%6zPYL)(4vmD8r-O_*8xx-Cr)--qP6`s(H*lI_MCSv@lb(7LHL3jL$43M)?HzYYN>_72$MBa#RB^dR@p z0R~8@>|()YND$*&&>Knai2W-@XTA?4OH!ZweN#66^ zuV&kecOhgwT5t`pb>b!i&+2^l7Bc}_l}A0WSZGHNOp{=^%m(YmWOMkwodA2=6d|2Xf;@M=0Fa=~U<4 z&-Y}i9;dhCRi@^dPWNi53Ew!B_~7)zxMuFi;!xRSxwEfw3efwQB+^>kRXEFc>+P91 zB_A$%I~A~64X_kx5YW|tIdG2n`7dny~mA+kA<*U61 z5+u1`FTNlE1_ppK`SsRtYAZdhxE#)Jbu=DRM`Sq13A@jpo@$UES%Nz1o)Ow+jCaI1Xu!Ed29CDByS45;bs_;JfW3rpKxWES_~#GB9W z)<$0R(#Z?QW>QxD%GORM;~sTA-U8Q4q}6?S99go-3dgpdz;645OEJN3p)jHGjQN&vQuWSBeZ z`@n5Vwmmta!PS1RQTA(m?eCHMFM~tEuDOS%-bV3F!6N-fB(*a5j_%NhlK?RRvc_AW z&#Esh#sj(96=4sE%Dcq*s-S?ktEmT?nIy}BWK*4UG8`MnK-5e4xmsLczU7Y)@EiF- zAm3@uLbu_NgB~okLJlO9(Bz$U_EC15D=i^z=x)MnnbFnJ{ZX5C7~6!A;p-M6op!{F zj*n()apB?#hBj|+KAkO^`Tq9l>%H$LM1&q#5uxrhglarUQbDF!g*Ks}pbLh=yo7n| zs;EmLI&YjA0K|hPIp-kNxYGKxja{m_vt!9pmHn-fv6_#3Jnn#-^j9v_+)aT`s&q%m zQ=|>CaTvJ@NW~^QcWJ(991iIK;keAyd9$pbK8oV=naRzQ-7+*!n!qrx&O*)qj9E8q-4DUVYSA z#Kfi;JGeL`Za$+|Q061lg9SMz6>72rdKDUw^wa|+=JYcVas6*>h}t^dS@NewQ9%*a z8@h)r4{Uwsf)gWMg3U{rf|FCbcGT4O>g$cWCW^P2TsSLaPLpLgQdLjbiBfrDic5(* z+O5wgZ+IjAdmDKKUpmwt_}PXV&0)+;a_at|oaSiV4OYT~>9IyYzv~MnT|sKJv1GP`DRq{6PVf*EAE_e3Zj-Oy z|DwnNwswoDn|23Q!9S?3)6EJ8H&U{kzWRwa3)dt$lt-Q&NTlaqXX`5nD5pyYbj=KN zXoVBP?I`|7aA?5rwtb`!5QypsUYZ?d9SUkVdm5bcty3m=P_OXOkCh|@%V&77TwQB^ zCN!CxE@(XemebLyE;muDn-e1T>r}sr6Nlh>VVHQEJ$4Pf1gaoirk4Fd0u`&$ioV5+ zo$dXn`W8DSiA6dFvnDNLrmos5+D==xRaI0}#cPKWi1s_875fej+8@b6x1j&GD@91_o02`R96 zNx*EXhh9|N9MggIs&8zRr})(N&a0Uwn%aj-nesxxz-+C!ZEq^e>HaT(uDiH!6F{s* zI3k4|iN4^ms(@(QnE_5UO--?{UY%!)IR4S^Sxd*z$QWmTzAh*8pzh_ApLW&o*h8*R zhVv!9c*QDek-A|zZ&!tzT0GdOx;H?pUygk&We{W@99~PMENC0*dF`-ROwXtIF6l0^g zs;|*Xb=+r~(!zvE&_rFnX*x_t;lmN7CVez`aLpzzmH(=91e9shIy|1TZ5GX zOVU{|>xa=%66<&y%qa27&?{mmsUW}FUCKWKVjIRL9BnkWGT}No;_!^H?tX^X181jE zm(MP=jQ}=b0geXP(1;)!_+dzJkF*a&qx*epliHJ1rylZg$aK+U<2fz`&X~R(7WJ38 zY~Rwl{fD_xOkG(T4*vS&gAMmE?p&lBM>C`H0cUO1l*o!32P3rpnS`A=#jz4Toi7mO zpD7R(+`=*+F&6GoKC1}3w1AFIVUbw)!6ZZ%&3{qC1u;jN2%9R{^Z^9OF*bni>w31o zqCxfpP~D{mYx53cPxM#R5fZvUvEpof&Hb^K&eP=;)_QX#bH%ywlBR?!p>cC+2cI8L ze&Qp_D**4~2{rd&ByqHPDH0%IMm(@&QzS^o;EX4Ecc~SDG4+QEh~>1#LzQJa>4$CD zR(DB;-q+bwDPqem`LDtLM}hWRoI#27m?pPSGb!5Bv;QYb@RWn&Z`}fxDF&{N*~yV3 ze>PVe8uWK(4;_Q6!SW^C9*Uj+=B{2IV;$3Et@&hN?vL$s%&E$xkn|fj0@th_P-O<} zibeFOu~=rVx-B9HpQVwv0k+pJ;@MUiVtgo0*2WuiU$~E$eTsL=1q_Ds_Ram`{uv3S z-QFA`+r^q+>*7~iYo0gWnkIaH>!s_2Nk~*U0L%&3uLIxf6GvmZFnSzHDX$7Wre9r6f1NucgPBPZrYZ9;MK ze7#irnkxyml}KdX=x0gompKui^c4`OMQ$q9VdR*?LYDaNr=(rTb51q)pdhPWn}cl{ zQeJKW)Xp{ae-2e$n>Mj+r@RKD*ehGw+S7|bz9&>2%!=?>*J@jU+-P%G87#8b4;pR2 z9UmzAc;JgAh(y=%RKPyt--NW|)=gAVD=oWYv7S(ZowH>i`$Ry!F1s7U*P$DpxO~qR zVu7JITGpJM)cntWn>60q8n>H>JzhB!IMZKD7&~>lXhM9DvIWZ=*GDvxX!@JJP8(q> zGKSg?yC@#30;3XL;eNJJIa|v4p8pOSA*=);vGeU-rQn zofrFD|ER@9Ev6H~B#-mXbrlmMTaREsxeO*S__CdC?m7qs+{nNqcCkh?)LBEcR{A0| zOglke9KMv=(P%nQ!OK9qBF}uKre5J#*tL@(BPq$O*^>vgV$N|YXNGD$zg7<2@m4@# z#&nmKQc^u{z4UWTsU>IRyL`d>DMu}}8l^ZGIXq}+8~px#kk+xTvZzAlyWwBElL1d%aLxt#-89m-v*OQtc51Tz<|csc#7}6ouB=!Dd$Z9S{p?YY z??bDtz3(^n=9HdH+**3#73aOmOUL`iE}rilc;b2S{No1}YgZ+y^^*{NDql_>hiFk} z2_fvH7-h*}^2b#&cI7y9H~N#9GX75GVof}>m89-{Ucw&}HDAIUG*g$1awf^W_Tlcs z6#yc}TeBmWTnHxoyC7EV`#JN$#iV_| z<`k_6FZib(Sid4(9@dOjG~b>(Mj`m$dPTBe1c(UcL0Sl)4mpk!Mkn7C)=Ai`JVi-LzeTJ?_*bCilfs9c~qdMD^0U&+5{DpS1_(c&E;db@DE zTc&>-9%^-@$TW%}zgo<9z{M|(W9qFmsUue?Esc7Ouz&lTp?(5cF`+He`9wH2zZ=<} z&)*uu15@bELjfIvr;WQoGA#=9UH6hUah6-31qY&za^$Dm<&cCH7fR%7ouU^5B+Kzc zE6d2^ZO;EdAb0U0?h33ktdtB=S2MEJKbz01x7jU6V_K`{svB1j{hb z#bTurpgxySkQ){To(l*RvrA^nONhqYY(Wi4pN+c2qVV)C68EAM}(6M!T z5mZ}R^`<> z7(g44qb)8wpMWv5L=W0XaB*@L5<(kMy{GJz_RLbk{v6!=%s{QJJqbRWc%@(j#+4UfrF1C zSuydOk<@1My}czsyP6?RSm}-;on_5Bh*b_6U}TU``?r0;4Jv1zg}IH`y5TvS8N7%@ldpmx042k+QN{g>Bk5) z5Yy#PRsO+6$Wi-2^=sIDt(sHm~loh#BS`u0#V;nw&=B~~&! zSxMlRlN5D82?qoUhyu4!T2crA7Ya2)YR` z@1iuOKiefbu3A);qJHL&uZm!=0eFbuek@$fQrY6INb1MxKUD2RC-v_DQRwB_boT7Y z-DGoqD6$0xD}VK}C+vshgHFx8Qyx`ln4IMkcB7LqD}`_5C{YcA`tN;pV{t5O@MA^e~V639)(2ml5QURVEm+ zWX!Z|Tc~PER>0Lte^Hl8>oXm#nQ|QYXNNQ2vLG2Joqo%}LZ51Ss=n{_TX|mvg*H@b zX)Q{4i0W5@7#!`mnbuxeLT&>xh1F3@C7ZgsvI9$ z?3Vq4dFH>f0Y=}wEZP~pFd6@z#Qet~$YKaS|GDyfe}4;RZGgYZp`lAiSGLsdy+_u) zsOi5*|77*i$frZ}kkWQQxnc}cgi-uMV5goRK@@ zy13I;tz1cViNb_X8t#rVRO;Cmb0*;^XDRp1!pF4W&I4`I;#_^6qOgTpt~Db8my%`4 zAE}#)%oLt~{X%<5%*NNhO?Tx`lMLTo+A9^(KBnC$Zci^cuWaw>mDhi?hn-2lqJ36u zBhy__D+}RR9W1j9^9E#e5VFgA#)3^9&Sz3%$!bK84ww1+LN#J$zXS5Tkod?Fetc6+ zcIbG10qq9F!mdXcPB!mn+dFr$d$gjh8=dEL?S4NN;lCrdQ(?mV>=Mt6JcKO+(8X?L zzPli42?vl>f-Ewc@5pgTXF(XgPXkBqIg1f9hV3ys|9Y56?sgDR3=Zo}yS(jREQ}56 z46}0SyXw_I^r#!S%Ji;@73DR8UJiCUmRSY8LAPU(-I$r{dE{=qD9HxyZfP_qL%Nws zv1L<~ElZTm6J!N{IofT7dyAdZPV=PgOseWs$N7};RtJ4wQ6GY@#y&TLA^Kdh1{2eb zo&m*Tu}<y(lHaX#M3ALG)0~o24+cM)c2JZI(VH0)D^d$z-Ccc* zOc+g=O_RnhkCPLtdZv_rr25UbRws+RJ%W9khRQFP{MiuO^pX7`Szrd zvtV-iax}KO;`2OT0Um0u)vI}s5n=_j=KPmb61un8-0o@KxU!rWFjw@=RYgUBX=zj% z$iC$xIt?V)VrH;_tgu0eCrvEj`Xc&lOiZRChYmFHV=}cW1{-(zjcN3fG*x5nR`$M} z+WUop;9AU$>9Px<*ULT}tdL+m3`_}4IA;!;f%`F~C46NbFO1xcsqCJia(=Z_6{sG9 zv%oE_!}?%Arm%&7J`cfnfD(m1$)Ky{9H{X48Mw=@i%{8)P%i1KZ0GA z$9us)^olWsEi0Mb4ueD|T5Znxs+lP#zQY~y9Ji4&w^o_qYB|DVPsS;d$U`pO$nx#L z58OJ}ud@${289m0uQXvck3h}Ec=&v0hW+C2dQJF`mfn+5LwdpkKJ&TnB(^<{?l{#z z54YPt=Jg5>R8TCuD8fg?Bz+YNN5xk~*1V(-19no8Tfe-IHB zF=7D)Au1>;B`Qq;6B$KBWMTygLPilOF~kBAAS8&=g;+)yVIV5fq=^tv2ni61j)e{q zN(!S=Wp4+nP*S!dq&x1PUTELXC#?{eMOeU;BQmRHdnmmkF_df1eB z_A2brs&_EOFnR5U{e`W0G`pTpFA_g9kMvIZowi=1q6B8tAJbnXq5vId7N4~c=g*8M z=<+df+_jzr{=SZt5>E=|3yoJz%21XUxP_Ha)0+sHPWnMU8~WH<&K}&ak6n|iQWqcJ zfV%n+^_GX23MYNx{ZggkCVeaYEn35RS_L7s4%@&Qd~c7#J<2UX*&91JXbMFnOfWQr zee!^EoETKs_Ysl;XQsA%(pRs7W(BShQ0ry$;$?H%Dva%{3Y1*04Xgw;#8h@z*@jyy z2N53W9v;-%NK7Rz;clU(@MG*)K`OwmPb9L=6h6jn1`bKg)UuRLL;+qhhN0I z#ejaBu8W^IRNtCzvxojK_MxWf|5m^KEmPW{xJTEf4+tw-oACWbBiAy+B1OamLdc5O z1%bP~yr|5^`7aN`mgkG7b*Tj9c&}6o*Mv3fDIo&{TSo7v_hULEM|#XLGs%h{KzA8p zsdxykbKSs1oA8CJ$B)s}VPeCyK)0TGb!U6%e#w2rdxTNG{G6dNRDJ6lad}{0{ulKQ zhcJn0_|DG`Rk_Nx6$`(!^t*xEAJ3c}*sa_}<%uZum?eo*EhPm*)aMft|72hGo%(Dy zRHG7}Ax`uQYvC;VCPRbGT8q@4 zfUmK^l_3#p52qDbrDyMePt_%jbr3%w7dlS?xLM_d>t-)a1Khz1SxD7UK`E~oiIMi2 z&Z;O@rEUG3dgwyR=D73J+@zD9MrnIi7quE+Tv}syxAfN1=XV!xxU&!a25dDorBUAChc=gUb^!50#FpDvq zcukLme4B6ZV*|_jYsG|vDoWb-bjYG2@Ips9=8Q;+I2^3l#0;9HU4M|_TBIm4XYUkm z(Keqqt#oZDQ*h+ubqADL;p*SUR?qEtir=l_36&|eaKL-Kh44>5PnLM3F#IVu4Gqtg z6pq`{ZTjSw%e)R8j`Oy4gvxGy>asR1zuTzawt7@r44j#<-N_vbiu#>)(`iDzZC#b6_IZ%kNmfIlyl(3?}VRZM1cb>4xXJaqz ztRxB>nii$$(LVAr1MtowMpYgz!>ywF^Rum>FE7RDwE=pzNkHy}yj}JKjE>_t<#|rn zEw6h#p4RC(PB>Wp1X$D4;{>weN#}r%r;npG`|V1H69-4%g5J@4^Z_0e*xGC`hM7C#NkC4{02Z8A4Y`c!_*CRKykH}p36YRZG zS~!wwZozR|!yY^vy4SwGX3Z1VM>K~HOk&!$bDf)N;muOkhAsz3N!>Mp@lw_K*?j;n zkZe_y64}Vz(mpv1&IJ}~!tPXYy4e`Tpd}~&j9}j!YW0c3&x-Gv9`4|qK3%kJ)w9L* z=+EFst^oBk4To@}RrDqza)s`|n6Yfvm?O%xKu3}h?L z=i^q7(^u7YmvMG7z*W34<3eoV(5P-r%e{x=)r13c*N(qFi_Li)XnS|SigGz$@SD$S zmCrcQLtcdtTzY~)0dtx3uHsj^!8ma285I0%WOIxX^K-ZYz^Wptuk)yF36+#vmmG5*Z~GQ(h+2VM{h?1@sPdax#H#mds9jrMneIbB#68Ez z^{nCTAf=(_oWLXVfC`hLK6F28#>0-u$3=q(Q)aW_#%GCN1?107c%6W3!w&gIf*$A0*m!)p)&NUdHE!>7bywW`w$bomk62M_5* zK3Fz4UsX~lYzr$Q38Y0={`T+CthA(Xusq}I7k`xk4K@gCph3UraUKWd1CDLn3QLLT|Ypu{_@=H>{qK7^vzV8F;NG0qvwYoHdUp5b(ul0&0~@L zatX+9eJ;&HjeonPg;;`G~xhHhdsVx6p9%97ZBAhYXmQaYqnF=)1H9J>wS zP^LsTU$aZ!ViyDS&9u+vBfo7*?Jr%ok7%}M<33y{<1A<$GLc3gwq+nKh`TtQ*hTLm zNFP||D&iY?nq#)gMF@@*6+E#MziQaE;0%>7+599-yV=<0qEe$H_|YF1Llqil%Cn|M z)#mw~Rw*X@`5zxV9M$v5dK?h3h2{TbRA6(*kDNDVckn*Q$pz+*Wn9PtV$;|3Kp<%+ zp}(KNU&Aip9NWJvP;XO##wUz?O`G(R0=UJbwtg=UMJB@+wVtMn_~Dwp3M+9bSZkyL ztb8=}oPxV{@tQK)8c`Eu!pA49ax+P_@RHd!SI^%PI9#G07anat%kH_?Y$N9hJst4-zq!o>%Xo|`b>D#FBt#tFwnQxt+C`-n^Qp?0R zewHO4B2A#BFvTI`Lq*ZOv3-MA_#W0n^&p_Rf?|q24Hr8M>#X?Plc(7A$ zFK$DPN^g(N9|QuORY%8a4l;8;co|=l60T+D4|w%^5**iG8t`&lz4P(o?FArrMzaKq zNmp@G3F7=t3_psY@*PimGxK0=PcKTFwi_0l-jY*5vqc^}YQ03;Iijg~;jYe0AnQFG zz}?vO_ys%N6UwV79ff^9yo)jbx|OgO1-xwZ5UJoURWq z#Az!XM(t*^-e*#)2?xs-g8+qp=BJKXQuw2oub5}!b8cs^C6UWM2HcfI<7!#`6gNeV z6)_sO%nB!HJC2Y`mF*e2aX?Qa5xWI(Eh5dgUYC0njhS!0X=u^)3C7%zYd-Z9BANK= zie9#2D>b+c-#I(+?qKVoyHOUJdrqqf!QuG5>F`^hG*bcMpcfbemg1hiMuy;?C>?Bw z6y<^!fqB&(oU4!cjH{1{c+~BAUaU3Z#!KMnmnB#(^VtApmpq=hbl}~3yPHAai2QaI zD=3yY(mgX< z7lW=ItBHM({r(cFwd{k5QmY(zEobNr1aA6Bmah0FoDb_CI_7 zx{xer(*NTUSOQf%5mWDTBl?zJx_tGt$RyUk76?DHPIXN&0*8zaJP$WQNN^g&&-);E z#gD7(ec&JX?$ zG4c|wrP}oV;Z+A~#LItDRc3+`xVb4)NKIOdgyzZ#pc#J$4TtnV6CQ_@ZzQaEu5lM< zzc1wyoQOWsyRq_TA(i3H)~YxLDeFji6A|afrGiuz`Lcdfw4rd{x`^SIj}iYv-5f{B zUSC&8c|FJTOpskmb;-C+hWi~5zrRyi?E(1PQD!*&@G`>NB8Shyxvq`z7O5f zCf8vqm%l)4W%dDtxq1w;g_$Hbf`!r>9Iq6NkK$qRqY9W<55_|DCCO86aCKMPL(nJr z8)n*S%dUN~b90~0eEiMZYI7CJ#XQ+TWgm|X3UMk#CatJ}NO7aw9{DU$ zV2<96WKPyHmbHO^>b1E@hc)n(KN@r(FK1CC4?S9+4)QTuXlO-^zR3%ogJdo7d` z^XSWJ@`=;j+X+)vZ?rE*UisZ@hyD7a8jgQqX5~Kw)c@xaI{)3rs{YycS6ZFrCt7{f zA%C#o7E$v-9}Q760BZ}OQ>_e6G!E~87)e%d+(>-xX6RG3zj+)uwg_(W6Q1LG*B<#f z^v=0gYdc&y`1^`ofHVXwf?Nl!)UrT6LLdlXicEu3t-XWIWTF>L2V;PwkMyc8vw(IP zIkmcYZq*o9-K!r|M%?1AsIY(BX*OlyCAptf`(fxUj7Tc(?#+P9t|Kgi8oz zEJphH5py>kJj4J#H5AD=+}bgVLLu=7x_{cu!uQO06TtD_MLBD{giIkn%-(egF5UNV zd6}5fLcE1mqaDt+{2uO<;6VUyt+VbubP^yfe&1&(x$AoS>TfQk2>xWJwNo-x>tji~ zo6rUzi08NE06!#zA$q1~m~MFIdv1TFqQJj0b>q@^#k7MwczMAwkAPjI2zf*v+w8@J zL-n+!?fcH)cPg$Tb4{h@M(}}q@I^yaXfAJL%il)s4TcLq1K2AK_wph%VO>I34nu;h}s$W*cdvs1=2LdC{_vwVG zphtw@{qev@_(9ntgbw3x)udlnS|VOYVN9ce|7lLLXl`nacxclf$~DzZ3f+*3(@lLj zQ%9-z)~eoZtd(+y-ZEX!&eF5l6Gzg0peBKHV(2AQ8|Ef!Eq%LuArcGFdFX}8O-P&A zxv6cjkN)=-w~2Z~qaF~^PSFuds3tO<@|;1zu(591^LKs)gmr|jW6xf^Ea%32dM}9# zQ&9x~OcaPFYAv%GNf9pJf6-A~fv++YjD(T}wVQ zRH1}^J8xg0Hlwdx!UId(6};j1ShyG0MsEK-!$iU*F)E!Ki8rwZ@bVjy38KJDngA11 zt$8UKiqiW}Jtxw($*@#LYesBe()pUZktF*RjaI#z1Y7<)-HQ>WcOoTTLz^9TUQ<;T zsQjdQ_max%7W~VWMfekdq;qsZ`~Oge`oC+?{;edz$$Zqon+&L^hvb1h!lVORRLWwyyOXjAF)WxZ8eN=GI-pgp}GS& zlLX`h_|#&sHh0t3b(^zsix>?!tlGG4TI%xwUeg=YO4`M^J;$07P5QBxNOEiMT^Idm zz(m`8JNm?0kQ_VhU@pdKQqlXmfS5v=R)8T2;-;vuJLI-vvi^_2LCYn?nVDA(pW3jfmB@ITy{{{Ub3Z>?$EUmIxq z#}xiOrm+35jFtXl3jZEc*zu1k{I?RnzsK41KYj1`$Gz~sb^iQMPt*U?^Zs!!{Qtoe zcK^eW{-170|K(n|%UTh62&%eKg0Px&p+JI0yj6;;PoK4GmSn)K(<*rnTkEh=^td*` zY_jC@i}Z8$-!516d`JDHgRTuZXo&u-K+Sqm36c8ccAb2zNO{CEAKM*<93&ktz=tm)=gtd zH&(K5x@>BS^GY1vog*}T5?B{EW^mN+!G0CDg^;(S*1O7%GhSz$)=TGB9J=S|uxi8I zZI9A+b-YBzgjgkq&W;_nUt zfl$1dycDlJVHznZxzP7R=K;Nw9yVoGZjA7ygNL>l9&viIF?v%pHV)z?R0?$w5`WmN zLvW$f0sm+WyQwonVx-Owtm%p6=AP@S_q=7P@Ab>Aavfj&yRoT*&lY`D@gEEloXY)} zmlakxCasB8PCxrF=rgcCJhEb1aktk+Co=1oZ=9c_>fn8P|1u`3Ur{%4!Kmv#wu%b+ zc6x(g&F3Wa$Xr8PTm-JUOwZGsdd-Wm)Jd#$nYL8AYmB?u)_jffAzxw=Cm&eDPRS95 zKhU2nd7*+h%P!HD0-l5$K*K!8UoUewW()cx`st`;gR~RuZn?chmUx0H_asxoo-odm zQbNrl8UljP*)FiBI;0IQzb3Co6aU{kTUA+?ivr!#(=tMb^YaDcx-u@`_i`jz>*JR; zp48RT*z?OZ-%nqUN#~kX0{&Ourh0r{*?NSXCOckN*){p_gFn!=kL&E!Hcno-F4%-B zVbV(Pa%sjW>;aicOKDgbn?s%9MLYj8>SK!^`DYB>moj}bEy=k9=TKLFh6fJV^Mkm ziO`aBxpq>j=YBuXT>2;y+Z^_lOx}LW`{8%JygT{p%x{X&m;Xz88Ev8bz+;0& z`@vV_k-!KjW7_&`sz4~>EH8e9MIkP>a+`y5amjQNJJVa!WkukzGXhSBwc>Zv%Nu?P z->GvuP6eo*=r<}ib%E(ALs2W712Yf7*!U+%@?lcKEnTg=33r|O`^k9K3p?JDgU{`1 z^1Ky%SjYZKz5dVtHJ6NDuM_}Xvq_#z1ytB8jp<#C6+AJj%i&mwZM?&}hk=BH`4Xlc zwa+U_{bfx#)EZmq3VL3Zd$B{}d#AcTx_axn$S$yS@(TrLf+8;3{$#+K%#t0KV-@8} z%~6H{eQf|>4B3kf7$^EdGWVKF;%|K6XiAV^2VB9MyrDPY;)&YKmp@g$NWKwO=Lblf2Hunq0EO=ur`xj@U1D{M23=ci&-|j#uPwm&fExsQU zO?x2QqZ~vp;0586iEMNOG1fMF>q}77cO7297w5Me3I+QiCoqj`(#=M%8@mRw#YgXc z3hld?BD`)5&0TH{F4QCN(&(Kw(f@Trz~h3Gf?M+k2-z%)64KH^@4(B$Uf3M6T0#nPiUm9M3 zoLGKc>@^kX%5+zLfZF0WabWixiZLlC(8F*893LN&kRM}kc*?(9Yf!pl?3%|Mq!QKo zPrFp(ueA67V#L3%!F7Pxd(!Tf-hrBImQG2i<{84+6(6rHIae1facxt-cgW&GtP|(s zlT;h06~DO{dQGXc|IOQ1@6LU`-iDHO1(wXVpCdB+$-v}6JkqIY|V=b zOWQjW)DfsX?9N~`JTb?mTNQBQ||x%c*G zLZGyBXmIVw!gax_2tHR@pjwKSP~CL0_MzOld%irkm1v%h|*gNIc)> z9#Xb1olj`!0Tm``gvYOQ-&_qDThO*CVT+~qE_s8;YSmftzqY@B{|V>~O2MBh)f)9> zA2h`lOt?sTlLI@Y$5^)|7^0EDv$i)m_LxMr4U9_+nF>4EWt5JO`_z;3oP=KVHdeRXN8BA>pIBJUqO30k1Z4_2Ks_@|$!jd##_=63a}mAkYTcG=t9^woHW z$L0A+s?gWqxzR?xsk#cnlDhx%s;-r&<2=v6S%gX|r`~9+ z7A$(O1$5&}QdEeb|L&6uC|J_~z=r%&2^yq3C~E)c=}8H$=-E zm7S~wpt}PX-wHSxDA*Jfg)XHVT2$vDmpLAi3w7Q*NEwYo*avx^8sE>4Oz9^3hn!Qi zy!}CzMJK4t_Vrf&Qduzjde+pGZ0Hq9s_g#q@7VuBGC- z&(IexlFY?mRRDDV0nC@2njOvr^&9}fDR+f6TReL8qIydhWU+8*pe^Bj(dN_#=b535 zaH*?{PH*Q5y>P+qxyKcDD&eh@v9i;&O^RxUzfkqN$h}%HTUHh)T#@eWy`GxmbdRsx zSWySHC9o+=Cu)LAavl1P?GMeLh_HARk=NpSl2hp60u|7>OdIV!hI z;p*O58L)D~qkBfNUEq>7WMOUkhP2i&%p>Ib=9;@(1^$PA552YX+UddTvA+N2qy4*0 z_RlmBbSANiCtq_zYNLpud5bY|faXV(l#nE!Q$q@^r)n#z&Fo~4 z+K!p)26-udQJ2Y4hId2j@ISIVm2Z29E-})*n4^)GP#n5GGVP4yLeurcRkXe2V$T4y zHceMdF&Mo@-`M5X!Irt9n*|2U1gkgXtIk;&QKqM3-W-iF$Gbhq@Y3(e=sk$hHd7V+ zue`2*_X6u}K|x~zeLdm?^-0jp%(bt>b%BrtRlk|HLVm&`E2vL!lfE8uzg|GScjj)( zYabg9$IbG{OA_f+2r2RArTF6w1!@5E=!X-8i78X}Ar0}|)HcX{@l*V_86 z;~72=N&_=elS=}7?OIZbPY;bnRNZ?@@EX^6q|%(q*UwyJ#w2%J4AC-_&mZf(JRoRTz2os#jS@L1 z>WcZKYzHk-!)5SXBN1`|Z6__PavLT&ybL991!6ADn9vlGc!q4yk_DeQjNqa~Q74*g zc&JeCHTRmXMSumuE?NH0O0zZ!f3l|YTy^aM6~#RSCnM5SkpY<*5-EKP#iw4J!ubz{ ziNBP?yGB~FjZkSHR^12%z!W*+V8xw~ecJ2*wH4a`$T6XT`Rw zqUlEcjD`qC03&6a1fRewN6S|_OMg)m;x6E{#sztqs8&l!9}zSpDF_Y*^v+B{UNSy zqV%^)A0cZ(HX(eOjhxsu+}4t<`z&qT)Sjpv7$)g#5fUMJwTDhsm?b;){?ov|Fn9B) zC;RhAhK4=Xw^2U>sdB`;Hz!}&3H+~njGyoyY9(#*)o2MgV(lw(Y3F-r8j{^Kb*M;O zT4PaKIgx@o2~Q5MhO;>H+38RFy~pf|#@&7N+dbUboX$$2c930aX5oORN`%KG063~M zp}r|=Sawp8$_o(o^Can$ma?;ifC?miKe7|PGCDpV#;nxz@+$dZ{Bu2aS2|z0BGap` zy7OY0HLrY->h&YLyOQLp*w2s1<1N2eY~ZkfF+fymnnP_;eFd9qpnSzziPff7G*$7m z8UFoTs{rn9=t7wdTaxA9oIVelDuqiBBN6WgeN{izXZk2iNdbVqih4atoP5tEAP#V` zC08kGrXp@R=ZB|1WW^`_my*81-j5!bm&Vmm4o=l*bNmpg{$W3xp7{{>wM zYn@I81EU7Jiamf0y6}!639Dx%(-$BV2~JPhJ+GTOV^36<8{g%Ru=sUed_vTpDzO7D z+-?VV?#@hnr&;CD{=>b+B@aQPg~g~Tvigy^J5|=&Mj?BP#(SwHc6c1xI%dGT*~h~ zoIOxmL&lj1D?=Sv*u+atgkD=QmphLP5$3#~0o)}sKL5pi2cx3F;qhxOSMxL z#3`Ft>dH+M5y96V%c<$jQ!u6R`yP0bJ>pgl*JZKzjD@a`L5;dUqhOrim#fSjG47hQ z*385$95zpBEYKhUMzYy>Mlc{ZEeuCWN&;$P(@JtC3~dqhr-62*nW5^^tirLH_$J13 z?+@d8QBxJK$>DyHBr6Y_YWJ@$>P;(K&3=3}{#I4y4{0h7;TwoDW8QMy?DCERwcY|X zBoX}540q4TUp zEFcR7u~yJ^sMSr^d;oelR@V(q%@qT=n5vAl>$zh)kbB-pOnHC@SFh7bu}eQOnB$fo zc!Y2|ujUf!)jNBo<{Oz0($%;Ukea?14tpvJX_sYN!c9E8xE5_AA7)rzX{ULVQOOrM%T%>s+e&;0_oGHQg9jB|PcFN*bL6a>!G z^EZQVE627ZFx@US-TF(c&V%AnLFz+QNMo}9PZiVsz~218o8)u#{!|%d_JaWARwNuC z&upb8;ITd6e}9_IoQ?;WchEoJf#es+mq8}=ZP93r%58FI*is@)c?^+LE5hKIRs8JIq0^#Oj}!uuTatpX7LyG>C9&V*+EH_@iALVRb39keW?d z`le7YL@jb{uRJ{+8o3YEiyz38enK?Ch|M7yCCYY2~J>Or%`ddyqE z8oxPKU0c)1L5sC)K8-g5Ngz(uGafg4xD$!)`MLZWQ)nqNfZDz z{5BxYUkNwo?^EI_1B16fzzWE(UsO+b<%!#U}d8YK6;atnanL=ju~t#)(r4YrNj z9JWcag1iY8g4SrvQ^=!{qpCDU3pET9kAr&fbN?YbAH&NW@ zYRdN^f2zRzW*g;lZ&_6)^*BMFlmfK@ z`UA5itwIh2j?6v0xzW6+V};26Lo(X3Xmkz>0*frnI z+Emd!Gvs`P)5URoJenROFnxx)!QIMe2ywtmgsH5Rba2ma*n|6N`W6~Gn&K>KDZ|8L zP33M-dNNt5FW(4#PMG?{jqx^hfqzzN!FAa$3_rW{hA6OruuReHr^Zbm=Dvhz+^wCP zl8?VonFo|X&@!$b4xy(qVXxNjgtTVLb>S+UFLMAbet!?(6Hy7^S5t0zeeAZzEl(&8 z_Un+Tyzpvy>B}7MF=j@ zZXrp`Sav30-doD@6A$^#3=~ZNUi}QNj(6dvxm-Ab`o{Y79foy}`9Dfd#ri+;B z4y#-PC8z|Jwl&$(vy)?yaXocg$rSJ%UES;=$@|aLbma8Ntqr-V_4Kzy=(KrQ3lP;q z-Q=AU4tPjykQ~`!dIxcpRn&fW#4(@BYZl;|rsIUGQU2)pe;oU(TnQ0E?ez z;Hq4z{RHq@V)GPiUNG@y_GZQH3!NvtlA9Q6v#b??ENxmOshBTO`0@>xLcI7dGs)%) zTAPNAkyw&n9x226S9bw9JKeX~x}}!k`y@cXWe2H#^S%mp!&gON2ugjw%n4~zF7A^Z zr-n&)WeCtKUc=1}p@HF&H<s zWi`xxm!lc0qR6OKRC8AX@8DT_DvrXtVY>~ci19#q+`lZ5g_hg<`BRnaYvH~5e7pvg z*(AunQC4a(8M;JnE?GQ_TQ+XEs&|CjIc?!!U(yh+)f4+R4IeB*-%)<=%KAfoM)8Qd zl)4|>pnSoJ`U)A79iKo$%y&idfKIv5h%Cyeo~6M?*h2@0adBxv?O?3F5D#M{C#XLP zo#3=b;<6=({kx8kHr;?7c=H|+x4K$oRIU!ZS`FGBoQ%x&erMI7^?v zWi7&Zo+js*%wB#94l!I?+aX86hEWl%hY&IJxmBZn&IYXu6f7p}mMIOoKX+APv@*Tv z2cF*@`zfvQt6XiSO}TUD(-R@c+#wq2?-|A5Doj>fE(KmL71Dg zy-&s?bmKzWmX8sbaS|96FOF}~X&<*seJo82GtK|)>yIh+Ds)h@&;Y_@qKDbr6~6*% zD?VAc0Eqwe<0Y+AB{IOZuQF*VONdBs6vkCoDYbzlp)fvdcp2gh?!+jhRT9=TMRM+$ zK`rqFSE3Ay>KrQJbuj=!c{INjrJd#w#D(D`zb@5q$*u5mD zd9xe`-KD0VOm^$L0DX@CV$vB(A}yKZ*h}^jW@oZ|zL@LFj1KmOdON6n#NXsWXDGT< z#z-3<6^(uY@-}G_uIy^27tpQHK282WakBahy}Lt7UXV>nK^)E{LB zYiilu%5|-xH}(L5p(tvIh%1sz_}^$U+;BINf*KTz!9kd?^|w`M<&VJ%p#c9Bb1Pe~ zTWO!4Gs30^-IG(|b<+zC% zt3COEOIAoP}c=vQ@*edWeNXj zUc7DMCP=4NQnt$FQFAeuRkY>)mb{w43OC1@H?x(22R?OPin9TzenkQ!aDp;mFFg)m z@ka&JU5xlDp!m1VBxw`m{k|5R_!*jSEgsKs{_v#lac9WZSsRlhmft3x^s8*q{^oo( zOa)@ZfNRsy0TgghkFf+@$|Zm3HYV3CkV#KN=xB$_SK;IMb^8km)P9FhK-;aE4}3=5 zL$mg?i58qgX3Ys-@GFBPlVju^)z!KrgBKc~aB^*Z<#7-+)KCH8;@^?|KpKQ0phx3= zz=_gXRsMYRz*4@nii414yAhH!6n_K9woO&8p>lD{hY>nNI|>Ig*Axr#n}*I-q8Cwj zI~S8`+kF@Su2fk4bIH{bZ`#vn^!jlkbcP3lE$iqTY5O6ed{w$~Ndu6um_RN=Ma>>Q z%iyq9H~UtBb0a#gCO#n~+N8JGLAx+WiGpcZqkez$l9mV3qIdcyyUnM`p=&FRa)$%c z2@f@fgwT&|$TkL_g>2Pf!T$V90G${QfH&6_ESgK8n2{>1=xZh|A=7+Cnu_C5K3Y0o z?f>x4Zzvuk{G6dv7BJbX=Tn|LZWr3jEqUBe@E#4DZ`T-e`_2@9Pg?$qB8eG@v$C`-E9354}4c? z(w3(JgIQ%JV3m?rIdWe1RJNnqF(73C*t#MRv}cHliEHV*2PYzO`x2~whVlVMkE_M5 z?&gHUnC7nob?qITy=Oy1{R1ifXMkIWrwt~pPp&`NOe0aCDYYEn1--0>$dS_U_0lgL{N~G^ZilDwGcdP{x1?!(t z{7NH7y};fyzewTS|^gPMCnRa$bYq7N3Di4;$enWA}2PA8&^c7a(Y7^H0K{u&=R^ z1HJf3g{GV5toQK%@}s7QC@z?t8_XE=v#hzPR#_-*T@T~@5cUneycaEM^1(1AWlgW9 z012DSw|7Y+`mlyWay)JY&G{2G z4Bz3fIoC1FqApCbdv@otn!RoDTe{e$T30%MUuQO}h5gb)`*grU70}g$2*!3w8~*gC z3K0hEfMno<-BJ|b0^0iVj(yf{yM!Yx4vJ&)Lq(y;wK5Xa`Lo zTds4WrJUZ$S_)Fwn1RorO0-a>PCJauMp?uHwOWw-WQL$`p*69akW%|h`_uAm~wBFY|IL4ia2o6%CF~6$U;Zj;4=(uYzd;^3WJ*A<#Vx1j7x| zNHNs>B;cWDf&8$=6Tm;i$b&hGY`QK{ehO-SL+@cerlucEcR}un20lVHUQ}&o`G#R_ zn5IMc$bD%QsGd@O|MwW@pVj8K!_)FL8hlm-ZW0qH^HUD7)E)d}TalzWuU;C)PqurA z8t;Upz?NR{89Q!mpqQvd^*>t9hFX$~g6QV$l^*c9*CAF}n0+03Up{+wpS^+45ZB}E zX8)eC)!)47gXqPa{jw$038@Uhgy}X5W3lTLEV>De2F+&OpFplnH}&$CanKUnsvxcw z_XXz}?*&wrVARdAE})(ufWdO*yoA0~s1JI$>mK*4tBt1PZsq1{~pt8q%Vh@Q|Md&CSw*&e?`<|oI|B@mqG;Ob3JaE1zR2AMZ&$B?+$CB z9U(^JfC9%iT%;U?KPR!h3czbj+q=wWHfOt)))p#gBo{OX2Yqc@7QZ}TY&^_*T2AQs(Cq`GsLmz*4zt%ZE zpB{GtP~WyycbbJJXBi!W7uGQPKdLCA6fZ#i0p>anoU{GYXB0VfyCA&^#Qn{&E(d#1 zp^3P^*E-ScgN4&-wLZ4QiqT6w2faU>ZYvzO5zuoA_BKl&`Q@JuvMyKsXC^a?YMVl(*{%??t2iLJ$;M95M^+8A}KO6WgB;sqKLba z-i>=MZ1J>aC2&{6WLAtBeFXr^wAN4g%y&tYyc~qNueOJsg5^8+mRg$%mnKxYUD4<) zt&~+&)(O|EpiyAbUI@SER}1N{0ECY>IZ~hm_tp-Ee~Nx1;Q3QRm;*KxaBF=Dc_d;q znwbeoV?DoW{wuk?PM!ZYSSP1|ig}+-d;k(9HaX7*28|c1ezl!+lm$1-jKP=hXNX?V z*FkuIyaunJF|`C{NV~d55WEa4H!Am);I+pLwP4oN8rxJF2=Qs3>Guf$%GoA2P7tBl z(rS=-FipwGPqfn1B&}=y*xYoL`c*#dg&YKJ;VA6@VyrSmiY|`9_h>W$(=gN zW?45g7%3bN60BSQr^-qtU;5@o?kL@=i?&VdN~|6_Jyw(X!CTND|G#urwWHjuZ1eHnz0PRuQA+s_k`Q;wtcBKaWop8w%uF@fLWMJlH z^)nf{JCRJEUmiVQ@-dr93fH+`GC^o5y3(7y9{TiBkyVQQSrv$40^3+C)W+%nPBvM@ zL$>`*gbP2pM1;FVm}13o)M0)T*5-zU!uN_|oMcYv==rD4Zsll*PC@zif{(F1H@xU& zyXoQVkN3)PPe!ZkN^^fwodc#4tz2sRn9;CHsV3h8M~uQ-OeUlc@W#lS33S+X0o(fo#ZBR+2Q8N{H#O5@NQEOpJMi9K%){pIAo8p`3D< znJ{Kz9Cp`AP9r1cpp(P!JjHm{%sl(M{l2f)_x1fNCF42V_jO;_`+C3Mm+L_I=H{e# zYBC;}H>=dol8}}94Dpv#=dIMOt#nJ2JWff%c5_e&Ns!<(y`0U^DCyMMm=r4uo}b@# zJ5R^cb?)2hxeC+#D6LN=rNxuc=kv>g+3U8ef5D2u`szX%NRHI7jR^9omIILZ4}vii z&Pyh&;hc*U_ZZS5`Z=-BX`9i|GHUX%<*_0B7NhKHF$lzb>A~z@g&%?$A)H>O=aDh_ z(CPFe4*s8?M83qu<|wqm$DLLZ6u+RF^7wQ&G#)q@pLdXT*OCXk0cVd(`#bn7KqYeqZ$A&xnzPAJymXD6Y^y6lkEv2oKY^EXJpkYr|8= zvr-r=oA&jv=$;)}Kh)HS;jenEylJD{8EfM^P#=@;@@8?qqq6e7Ct{=6Kl7a*os$r5 z?ahDqL-X!Qo%BQa%l~JqdC-9ympx{RdbE*s>wDHKUC_q}$sf{C>Z2QB>E8!QfW1f1 z?KDf&Ybo|S)@o@&@B{@-daSqiW9w_6)H=~0k+IKDFmFP1Z^S7-JOcNROo@Lt)kVI@ zK+d|NR8_?LnJ_%nVY;PnZY$DGyNYl3!>d)XErugTs#C`BY&1&DSchKBD;~9G+%{}8 z+`aK~udNluD`~71fSX-%5xCOd>2E;^(K9WPkcEyN?C2hV0!bf>lIJLQ>Dp*um^K(L za(`?KLQl0xp;-k29Ul>S9%3;2hUKeL8l5YtM${!T9v|evliZET zvY~Z_^`K&knQACaaPO;RT3!2cvUUKs9}<7G(MO?9B7BsXLbrpn%fqTr?+#OQRX&(c zl^_0RL!H2hD8>Ju(#g+di`!<_fbCRM=o68VA;s%hY4pb znEvEuthF6~-tIj`qKYm6wMY+%~v%B94#=T9_+`Rpm-!@e|^8d`rC+Wn3UuI{6Iwh`njp{&^bUKIviM7 zbxu9yb9`V^ikjTgPu0u|3{#hbY$|EK87(Sh3}=$nd{KE<=S`oG<>P1iXJ-wM_0Kt) zERTta4OCu^mAdP-o}&7O9<#fyJk?#~&tLhE*BxLIZxp38%#k-ErHN)BMJmNs*D21R zVPS%yu{284!6VAJbI65^mBb~sC-ijz8r({+ZwUmtb2e?NTqSXQL$g_%v)LOx^ zFT2%c#HCYFxzzBuOIr>v$g~v1Q12nkV9>_8-U{L`&Q~}@r7KsCo9s3Ana^59?et(b z^4PV4xv!Lp@IDVqm5axqZIjCJLZ6-H=w3|l`4ql`90$R_@KTmazI*9qSQp^Y+1zKC zLf0?QJf(iX*iIV;wUUN%A1rFg_2>T1H9&gWW;1+C;{fQ4o~0cgtYVJZx6(I~@RJVt zeN>kKZh>?){Y}m#!p~qyIupfJjU-t*!j@8|a{!R^3!1Ljhz)^7I7dd0Ga2z@T{|kx zWmU7pHf*P3251y-kJW57^nEVp`}W)I*cAvjS27op?G6�!#*-4ui-VLVAvaoJI8_ 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