diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 892afd4..92a7382 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,7 @@ jobs: PINS - uses: actions/setup-go@v7 with: - go-version: "1.25" + go-version: "1.26" check-latest: true cache-dependency-path: src/go.sum # The module lives in src/: a bare `go test ./...` at the root finds no @@ -64,7 +64,7 @@ jobs: - uses: actions/checkout@v7 - uses: actions/setup-go@v7 with: - go-version: "1.25" + go-version: "1.26" cache-dependency-path: src/go.sum - uses: golangci/golangci-lint-action@ba0d7d2ec06a0ea1cb5fa41b2e4a3ab91d21278a # v9.3.0 with: @@ -77,9 +77,9 @@ jobs: - uses: actions/checkout@v7 - uses: actions/setup-go@v7 with: - go-version: "1.25" + go-version: "1.26" cache-dependency-path: src/go.sum - # Pinned: govulncheck @latest (v1.4.0) segfaults under the go1.25 toolchain. + # Pinned: govulncheck @latest (v1.4.0) segfaulted under the go1.25 toolchain. - run: go install golang.org/x/vuln/cmd/govulncheck@v1.1.4 - run: | cd src && "$(go env GOPATH)/bin/govulncheck" ./... @@ -90,7 +90,7 @@ jobs: - uses: actions/checkout@v7 - uses: actions/setup-go@v7 with: - go-version: "1.25" + go-version: "1.26" cache-dependency-path: src/go.sum # Build gosec with the runner's Go — the gosec docker action bundles an # older Go that cannot load a `go 1.24` module. @@ -98,10 +98,10 @@ jobs: # user-named files (G304/G306) with conventional perms (G301/G302) by # design, and G104 duplicates errcheck. The high-severity taint rules # (G702/G703) stay on, with #nosec on the few benign sites. - # Pinned, not @latest: gosec v2.30.0 requires go >= 1.26 and fails to - # install on this job's Go 1.25 (GOTOOLCHAIN=local). v2.29.0 is the - # newest release whose go.mod accepts 1.25; bump with the go-version. - - run: go install github.com/securego/gosec/v2/cmd/gosec@v2.29.0 + # Pinned, not @latest, so a new gosec cannot fail a pull request that + # changed nothing it checks. v2.30.0 needs go >= 1.26, which this job now + # runs; move the pin with the go-version. + - run: go install github.com/securego/gosec/v2/cmd/gosec@v2.30.0 - run: | cd src && "$(go env GOPATH)/bin/gosec" -exclude=G104,G204,G301,G302,G304,G306 ./... @@ -111,7 +111,7 @@ jobs: - uses: actions/checkout@v7 - uses: actions/setup-go@v7 with: - go-version: "1.25" + go-version: "1.26" cache-dependency-path: src/go.sum # Run gitleaks directly (the gitleaks-action requires a paid license for # org repos). Scans the working tree and honors .gitleaks.toml. Built from @@ -130,7 +130,7 @@ jobs: - uses: actions/checkout@v7 - uses: actions/setup-go@v7 with: - go-version: "1.25" + go-version: "1.26" cache-dependency-path: src/go.sum # go -C src starts probaci inside src/; it walks up to the git root and # proves the whole repository, as it did from the root. @@ -158,7 +158,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-go@v7 with: - go-version: "1.25" + go-version: "1.26" cache-dependency-path: src/go.sum - run: make cross - run: cd build && sha256sum -c checksums.txt diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 1bafc16..24c760a 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@v7 - uses: actions/setup-go@v7 with: - go-version: "1.25" + go-version: "1.26" cache-dependency-path: src/go.sum # The module lives in src/, which autobuild does not look for: manual mode # builds it explicitly, so the scan never reports clean on zero code. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 97a0ea0..048d127 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,7 +66,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-go@v7 with: - go-version: "1.25" + go-version: "1.26" cache-dependency-path: src/go.sum - uses: sigstore/cosign-installer@756fe2d284c7292c4e9b62c8a28f1e5629c59532 # v4.1.3 # syft powers GoReleaser's SBOM generation. diff --git a/CHANGELOG.md b/CHANGELOG.md index f13e029..e1d1247 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Changed +- Building probaci needs Go 1.26, and CI runs on it. Go 1.25 has ten standard-library + vulnerabilities fixed only in 1.26, which the web UI's `net/http` server reaches; `golang.org/x/net` + moves to v0.60.0 for the same reason, and gosec to v2.30.0. - The release workflow no longer starts on a tag push. Binary releases are on hold, and a release runs only when dispatched by hand on a `v[0-9]*` tag with `-f confirm=release-go`; a test fails if an automatic trigger returns. @@ -27,6 +30,13 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added +- `probaci serve`: a web UI on this machine, as an option beside `run` and `tui`. It lists the + repositories and their languages, starts a run with the stages you pick, streams its output and + stage results as they happen, can cancel it, and keeps every finished run in + `$XDG_STATE_HOME/probaci/runs`. It follows the other Simtabi Go web UIs: a one-time sign-in + token, a `Host` allowlist, same-origin and CSRF checks, a strict Content-Security-Policy, Tabler + embedded with nothing fetched from the network, an SVG favicon on every page, and `--read-only`. + `third-party-notices.md` carries the embedded licenses and ships in the archives. - Tests that fail when `build/` holds anything but OS folders, inputs and checksums, when a container image or docker step returns, and when the docs offer `go install`. The release trigger test now also requires the refusal to be the workflow's first step. diff --git a/README.md b/README.md index 9b4f2fa..1dc9b56 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ probaci init # write a probaci.json for this repo probaci run # run the pipeline on the current directory probaci run ./api ./web # run on several repositories probaci tui # interactive dashboard +probaci serve # web UI in the browser: start runs, watch them ``` Positional arguments are **repository paths**; stage selection is via flags: @@ -138,6 +139,7 @@ all output and logs, and releases are signed with provenance + SBOM. Details in | [Security](docs/security.md) | hardening defaults, the socket-mount caveat | | [Release](docs/release.md) | tag-driven releases, signing, channels | | [probaci tool](docs/tools/probaci.md) | command reference | +| [`serve`](docs/tools/serve.md) | the web UI: start runs, watch them, read earlier ones | ## License diff --git a/docs/tools/probaci.md b/docs/tools/probaci.md index 7c37649..f35c413 100644 --- a/docs/tools/probaci.md +++ b/docs/tools/probaci.md @@ -11,6 +11,7 @@ probaci [command] [flags] [PATH...] | `run [PATH...]` | run the pipeline on one or more repositories (default: `.`) | | `stage [PATH...]` | run a single stage | | `tui [PATH...]` | launch the interactive dashboard | +| `serve [PATH...]` | open the web UI on this machine ([`serve`](serve.md)) | | `doctor [PATH]` | runtime, detected platforms/languages/VCS, config provenance | | `init [PATH]` | write a `probaci.json` detected from the repo | | `platforms [PATH]` | list supported CI platforms and which are detected | diff --git a/docs/tools/serve.md b/docs/tools/serve.md new file mode 100644 index 0000000..28b8d8d --- /dev/null +++ b/docs/tools/serve.md @@ -0,0 +1,90 @@ +# `serve` + +`probaci serve` opens a web UI on this machine: the repositories a run covers, a form to start a run +with the stages you pick, its output as it happens, and every earlier run. It is an option beside +`run` and `tui`, not a replacement; a bare `probaci` still prints help. + +## Starting it + +```sh +probaci serve # the current repository, 127.0.0.1:7844, opens a browser +probaci serve ../api ../web # several repositories, as for run +probaci serve --no-open # print the address only +probaci serve --read-only # look at runs, start none +``` + +It prints an address like this: + +```text +probaci web UI: http://127.0.0.1:7844/?token=… +press Ctrl-C to stop +``` + +The token in the address signs the browser in, once. The browser swaps it for a session cookie and +drops it from the address bar. Without it every page answers 401. + +If port 7844 is taken, `serve` uses the next free port and says which, trying up to twenty. `--port` +pins a port and fails when that port is taken. + +A browser opens only for a person at a terminal: never when `CI` is set, when +`PROBACI_NO_BROWSER=1`, when stdout is not a terminal, or on Linux and the BSDs with neither +`DISPLAY` nor `WAYLAND_DISPLAY`. + +## Flags + +| Flag | What it does | +|---|---| +| `--addr HOST[:PORT]` | The address to listen on (default `127.0.0.1`). A port here pins it, like `--port`. | +| `--port N` | The port to listen on (default 7844). Given, it is pinned. | +| `--allow-remote` | Allow a non-loopback `--addr`. Plain HTTP: prefer `ssh -L 7844:127.0.0.1:7844 `. | +| `--allow-host NAME` | With `--allow-remote`, an extra `Host` header to accept, such as a proxy's name. Repeatable. | +| `--read-only` | Serve no route that starts or cancels a run. | +| `--no-open` | Do not open a browser. | + +The global `--repos`, `-C`, `--config`, `--no-docker`, `--backend`, `--pull`, `--platform` and +`--full-image` apply to every run started from the UI, as they do to `run`. + +## Pages + +- **Overview** lists the repositories with the languages detected in each, says whether containers + can run, and holds the run form: every enabled stage, ticked, and how many repositories run at + once when there is more than one. It also lists the five newest runs. +- **Runs** lists every run, newest first, with the stages it ran and its result. +- **A run** shows each repository's stages with their result, summary, time and output, and the + run's streamed output below. While it runs the page updates as each stage starts and finishes, + and **Cancel run** stops it. **Report (JSON)** downloads the results. +- **Settings** shows the address, the mode, where runs are kept, the configuration files read and + the enabled stages. + +One run goes at a time: starting a second while one is in progress points you to the first. +Every run builds probaci afresh, so it reads the configuration again and writes its own log file, +exactly as `probaci run` does. + +## Where runs are kept + +Each finished run is saved as one JSON file in `$XDG_STATE_HOME/probaci/runs`, else +`~/.local/state/probaci/runs` (`%LocalAppData%\probaci\runs` on Windows), and the Runs page lists +the newest hundred. A run keeps its first 5,000 lines of output; the run's log file has them all. +A run the server stopped before it finished is listed as canceled. + +## Security + +The server is built for one person on one machine, and holds to the same rules as the other +Simtabi web UIs: + +- It listens on loopback unless told otherwise, and answers only to the `Host` it printed, which + stops a DNS-rebinding page reaching it. +- The sign-in token is 32 random bytes, and the session cookie is `HttpOnly` and `SameSite=Strict`. +- Every request that changes something must come from the server's own pages (`Origin`, or + `Sec-Fetch-Site: same-origin`) and carry the session's CSRF token. +- Every response sends a Content-Security-Policy allowing nothing but this server, and nothing is + inline. The page fetches nothing from the network: Tabler's CSS, scripts and icons are embedded, + and their licenses are on the Third-party licenses page and in `third-party-notices.md`. +- Stage output is shown after probaci's redactor has removed the secret values it knows. + +`/healthz` answers `probaci` to a request carrying the token in an `X-Probaci-Token` header, and +401 to anything else. + +--- + +[← Docs index](../../README.md#documentation) diff --git a/src/.goreleaser.yaml b/src/.goreleaser.yaml index 9f5f44e..b459a12 100644 --- a/src/.goreleaser.yaml +++ b/src/.goreleaser.yaml @@ -71,6 +71,7 @@ archives: - LICENSE - README.md - CHANGELOG.md + - third-party-notices.md # Native Linux packages (nfpm operates on the Linux builds only). nfpms: diff --git a/src/assets.go b/src/assets.go index dd07ba1..9098dd6 100644 --- a/src/assets.go +++ b/src/assets.go @@ -36,6 +36,8 @@ var docTopics = map[string]string{ "commands": "docs/tools/probaci.md", "cli": "docs/tools/probaci.md", "tools": "docs/tools/probaci.md", + "serve": "docs/tools/serve.md", + "ui": "docs/tools/serve.md", } // Doc returns the embedded markdown for a topic (default "overview"), and @@ -57,5 +59,5 @@ func Doc(topic string) (string, bool) { // DocTopics returns the canonical topic names (deduped), for help/listing. func DocTopics() []string { - return []string{"overview", "installation", "configuration", "architecture", "security", "release", "commands"} + return []string{"overview", "installation", "configuration", "architecture", "security", "release", "commands", "serve"} } diff --git a/src/embedded/README.md b/src/embedded/README.md index 9b4f2fa..1dc9b56 100644 --- a/src/embedded/README.md +++ b/src/embedded/README.md @@ -71,6 +71,7 @@ probaci init # write a probaci.json for this repo probaci run # run the pipeline on the current directory probaci run ./api ./web # run on several repositories probaci tui # interactive dashboard +probaci serve # web UI in the browser: start runs, watch them ``` Positional arguments are **repository paths**; stage selection is via flags: @@ -138,6 +139,7 @@ all output and logs, and releases are signed with provenance + SBOM. Details in | [Security](docs/security.md) | hardening defaults, the socket-mount caveat | | [Release](docs/release.md) | tag-driven releases, signing, channels | | [probaci tool](docs/tools/probaci.md) | command reference | +| [`serve`](docs/tools/serve.md) | the web UI: start runs, watch them, read earlier ones | ## License diff --git a/src/embedded/docs/tools/probaci.md b/src/embedded/docs/tools/probaci.md index 7c37649..f35c413 100644 --- a/src/embedded/docs/tools/probaci.md +++ b/src/embedded/docs/tools/probaci.md @@ -11,6 +11,7 @@ probaci [command] [flags] [PATH...] | `run [PATH...]` | run the pipeline on one or more repositories (default: `.`) | | `stage [PATH...]` | run a single stage | | `tui [PATH...]` | launch the interactive dashboard | +| `serve [PATH...]` | open the web UI on this machine ([`serve`](serve.md)) | | `doctor [PATH]` | runtime, detected platforms/languages/VCS, config provenance | | `init [PATH]` | write a `probaci.json` detected from the repo | | `platforms [PATH]` | list supported CI platforms and which are detected | diff --git a/src/embedded/docs/tools/serve.md b/src/embedded/docs/tools/serve.md new file mode 100644 index 0000000..28b8d8d --- /dev/null +++ b/src/embedded/docs/tools/serve.md @@ -0,0 +1,90 @@ +# `serve` + +`probaci serve` opens a web UI on this machine: the repositories a run covers, a form to start a run +with the stages you pick, its output as it happens, and every earlier run. It is an option beside +`run` and `tui`, not a replacement; a bare `probaci` still prints help. + +## Starting it + +```sh +probaci serve # the current repository, 127.0.0.1:7844, opens a browser +probaci serve ../api ../web # several repositories, as for run +probaci serve --no-open # print the address only +probaci serve --read-only # look at runs, start none +``` + +It prints an address like this: + +```text +probaci web UI: http://127.0.0.1:7844/?token=… +press Ctrl-C to stop +``` + +The token in the address signs the browser in, once. The browser swaps it for a session cookie and +drops it from the address bar. Without it every page answers 401. + +If port 7844 is taken, `serve` uses the next free port and says which, trying up to twenty. `--port` +pins a port and fails when that port is taken. + +A browser opens only for a person at a terminal: never when `CI` is set, when +`PROBACI_NO_BROWSER=1`, when stdout is not a terminal, or on Linux and the BSDs with neither +`DISPLAY` nor `WAYLAND_DISPLAY`. + +## Flags + +| Flag | What it does | +|---|---| +| `--addr HOST[:PORT]` | The address to listen on (default `127.0.0.1`). A port here pins it, like `--port`. | +| `--port N` | The port to listen on (default 7844). Given, it is pinned. | +| `--allow-remote` | Allow a non-loopback `--addr`. Plain HTTP: prefer `ssh -L 7844:127.0.0.1:7844 `. | +| `--allow-host NAME` | With `--allow-remote`, an extra `Host` header to accept, such as a proxy's name. Repeatable. | +| `--read-only` | Serve no route that starts or cancels a run. | +| `--no-open` | Do not open a browser. | + +The global `--repos`, `-C`, `--config`, `--no-docker`, `--backend`, `--pull`, `--platform` and +`--full-image` apply to every run started from the UI, as they do to `run`. + +## Pages + +- **Overview** lists the repositories with the languages detected in each, says whether containers + can run, and holds the run form: every enabled stage, ticked, and how many repositories run at + once when there is more than one. It also lists the five newest runs. +- **Runs** lists every run, newest first, with the stages it ran and its result. +- **A run** shows each repository's stages with their result, summary, time and output, and the + run's streamed output below. While it runs the page updates as each stage starts and finishes, + and **Cancel run** stops it. **Report (JSON)** downloads the results. +- **Settings** shows the address, the mode, where runs are kept, the configuration files read and + the enabled stages. + +One run goes at a time: starting a second while one is in progress points you to the first. +Every run builds probaci afresh, so it reads the configuration again and writes its own log file, +exactly as `probaci run` does. + +## Where runs are kept + +Each finished run is saved as one JSON file in `$XDG_STATE_HOME/probaci/runs`, else +`~/.local/state/probaci/runs` (`%LocalAppData%\probaci\runs` on Windows), and the Runs page lists +the newest hundred. A run keeps its first 5,000 lines of output; the run's log file has them all. +A run the server stopped before it finished is listed as canceled. + +## Security + +The server is built for one person on one machine, and holds to the same rules as the other +Simtabi web UIs: + +- It listens on loopback unless told otherwise, and answers only to the `Host` it printed, which + stops a DNS-rebinding page reaching it. +- The sign-in token is 32 random bytes, and the session cookie is `HttpOnly` and `SameSite=Strict`. +- Every request that changes something must come from the server's own pages (`Origin`, or + `Sec-Fetch-Site: same-origin`) and carry the session's CSRF token. +- Every response sends a Content-Security-Policy allowing nothing but this server, and nothing is + inline. The page fetches nothing from the network: Tabler's CSS, scripts and icons are embedded, + and their licenses are on the Third-party licenses page and in `third-party-notices.md`. +- Stage output is shown after probaci's redactor has removed the secret values it knows. + +`/healthz` answers `probaci` to a request carrying the token in an `X-Probaci-Token` header, and +401 to anything else. + +--- + +[← Docs index](../../README.md#documentation) diff --git a/src/go.mod b/src/go.mod index 3ccd7ec..ebc7373 100644 --- a/src/go.mod +++ b/src/go.mod @@ -1,6 +1,6 @@ module github.com/simtabi/probaci/src -go 1.25.0 +go 1.26.0 require ( github.com/charmbracelet/bubbles v1.0.0 @@ -47,8 +47,8 @@ require ( github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect github.com/yuin/goldmark v1.7.17 // indirect github.com/yuin/goldmark-emoji v1.0.6 // indirect - golang.org/x/net v0.55.0 // indirect - golang.org/x/sys v0.47.0 // indirect - golang.org/x/term v0.43.0 // indirect - golang.org/x/text v0.39.0 // indirect + golang.org/x/net v0.60.0 // indirect + golang.org/x/sys v0.48.0 // indirect + golang.org/x/term v0.46.0 // indirect + golang.org/x/text v0.42.0 // indirect ) diff --git a/src/go.sum b/src/go.sum index c19c37f..117ae91 100644 --- a/src/go.sum +++ b/src/go.sum @@ -114,13 +114,13 @@ go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= -golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= -golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/net v0.60.0 h1:79p50tfZlm0J9YfoDsSi639qSXNGVwEzOPLCxM2FsYU= +golang.org/x/net v0.60.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= -golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= -golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= -golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= -golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= +golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= +golang.org/x/term v0.46.0 h1:3+OXuTbaKDgwk8jTi3aSLHRlmWqHEUDUtxnbFigO4YE= +golang.org/x/term v0.46.0/go.mod h1:+K02xbkittuwc0Am4abfA3Fc+XRGXkvBXNO88NCXPoc= +golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI= +golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/src/internal/cli/serve.go b/src/internal/cli/serve.go new file mode 100644 index 0000000..3984196 --- /dev/null +++ b/src/internal/cli/serve.go @@ -0,0 +1,321 @@ +package cli + +import ( + "context" + "errors" + "fmt" + "io" + "net" + "os" + "os/exec" + "os/signal" + "path/filepath" + "runtime" + "strconv" + "sync" + "syscall" + "time" + + "github.com/mattn/go-isatty" + "github.com/spf13/cobra" + + "github.com/simtabi/probaci/src/internal/config" + "github.com/simtabi/probaci/src/internal/detect" + "github.com/simtabi/probaci/src/internal/docker" + "github.com/simtabi/probaci/src/internal/paths" + "github.com/simtabi/probaci/src/internal/platform" + "github.com/simtabi/probaci/src/internal/result" + "github.com/simtabi/probaci/src/internal/stage" + "github.com/simtabi/probaci/src/internal/version" + "github.com/simtabi/probaci/src/internal/web" +) + +// Seams for tests: a test must not bind a real port it cannot release, and +// must never open a browser. +var ( + serveListen web.ListenFunc = net.Listen + serveBrowser = openBrowser +) + +type serveOptions struct { + addr string + port int + allowRemote bool + allowHosts []string + readOnly bool + noOpen bool +} + +var serveOpts = serveOptions{addr: "127.0.0.1", port: web.DefaultPort} + +var serveCmd = &cobra.Command{ + Use: "serve [PATH...]", + Aliases: []string{"ui"}, + Short: "Open the web UI on this machine", + Long: `Open the web UI on this machine: the repositories a run covers, a form to +start a run with the stages you pick, its output as it happens, and every +earlier run. + +Listens on 127.0.0.1, port 7844 by default. If that port is taken it takes the +next free one and prints the address it actually bound; --port pins a port and +fails if it is taken. The printed address carries a one-time token that signs +the browser in; without it every page answers 401. + +Positional arguments and --repos name the repositories, as for run. --config, +--no-docker, --backend and --pull apply to every run started from the UI. + +Opens the default browser when run by a person at a terminal: never when CI is +set, when PROBACI_NO_BROWSER=1, when stdout is not a terminal, or on Linux with +neither DISPLAY nor WAYLAND_DISPLAY. --no-open turns it off. + +A non-loopback --addr is refused unless --allow-remote is passed. Prefer an +SSH tunnel: ssh -L 7844:127.0.0.1:7844 . --read-only serves no route +that starts or cancels a run.`, + RunE: func(cmd *cobra.Command, args []string) error { + targets, err := resolveTargets(args) + if err != nil { + return err + } + ctx, stop := signal.NotifyContext(cmd.Context(), os.Interrupt, syscall.SIGTERM) + defer stop() + return serveUI(ctx, cmd.OutOrStdout(), cmd.ErrOrStderr(), serveOpts, cmd.Flags().Changed("port"), targets) + }, +} + +func init() { + f := serveCmd.Flags() + f.StringVar(&serveOpts.addr, "addr", serveOpts.addr, "address to listen on, host or host:port (a port here pins it, like --port)") + f.IntVar(&serveOpts.port, "port", serveOpts.port, "port to listen on; when not given and the default is taken, the next free port is used") + f.BoolVar(&serveOpts.allowRemote, "allow-remote", false, "allow a non-loopback --addr (plain HTTP; prefer an SSH tunnel)") + f.StringArrayVar(&serveOpts.allowHosts, "allow-host", nil, "extra Host header to accept with --allow-remote, e.g. a proxy's name (repeatable)") + f.BoolVar(&serveOpts.readOnly, "read-only", false, "serve no route that starts or cancels a run") + f.BoolVar(&serveOpts.noOpen, "no-open", false, "do not open a browser (also PROBACI_NO_BROWSER=1)") + rootCmd.AddCommand(serveCmd) +} + +// serveUI runs the web UI until ctx is canceled or the UI's Stop button is +// pressed. portChanged says --port was given, which pins the port. +func serveUI(ctx context.Context, out, errOut io.Writer, o serveOptions, portChanged bool, targets []string) error { + host, port, hasPort, err := splitAddr(o.addr) + if err != nil { + return usageErr(fmt.Errorf("--addr %q: %w", o.addr, err)) + } + pinned := hasPort || portChanged + if !hasPort { + port = o.port + } + if port < 0 || port > 65535 { + return usageErr(fmt.Errorf("--port %d: want 0-65535", port)) + } + if !web.IsLoopback(host) && !o.allowRemote { + return usageErr(fmt.Errorf("--addr %s is reachable from other machines; pass --allow-remote to mean it, "+ + "or tunnel instead: ssh -L %d:127.0.0.1:%d ", host, web.DefaultPort, web.DefaultPort)) + } + + ln, err := web.Listen(serveListen, host, port, pinned, web.DefaultPortAttempts) + if err != nil { + return failure(err) + } + bound := ln.Addr().(*net.TCPAddr).Port + + token := web.NewToken() + srv, err := web.New(web.Options{ + Runner: &appRunner{targets: targets}, + Token: token, + AllowedHosts: web.AllowedHosts(host, bound, o.allowHosts), + AllowRemote: o.allowRemote, + ReadOnly: o.readOnly, + Version: version.Short(), + BindAddr: ln.Addr().String(), + HistoryDir: web.DefaultHistoryDir(os.LookupEnv), + }) + if err != nil { + _ = ln.Close() + return failure(err) + } + + url := fmt.Sprintf("http://%s/?token=%s", net.JoinHostPort(displayHost(host), strconv.Itoa(bound)), token) + if bound != port && port != 0 { + _, _ = fmt.Fprintf(out, "port %d is in use; listening on %d instead\n", port, bound) + } + _, _ = fmt.Fprintf(out, "probaci web UI: %s\n", url) + if o.allowRemote { + _, _ = fmt.Fprintln(errOut, "warning: --allow-remote serves plain HTTP; put a TLS proxy in front, or use an SSH tunnel") + } + if o.readOnly { + _, _ = fmt.Fprintln(out, "read-only: runs cannot be started or canceled") + } + _, _ = fmt.Fprintln(out, "press Ctrl-C to stop") + if browserAllowed(os.Getenv, isatty.IsTerminal(os.Stdout.Fd()), runtime.GOOS) && !o.noOpen && !g.jsonOut { + if err := serveBrowser(url); err != nil { + _, _ = fmt.Fprintf(errOut, "could not open a browser (%s); open the address above yourself\n", err) + } + } + if err := srv.Serve(ctx, ln); err != nil { + return failure(err) + } + return nil +} + +// splitAddr accepts "host" or "host:port". +func splitAddr(addr string) (host string, port int, hasPort bool, err error) { + h, p, splitErr := net.SplitHostPort(addr) + if splitErr != nil { + if addr == "" { + return "", 0, false, errors.New("empty address") + } + return addr, 0, false, nil + } + n, err := strconv.Atoi(p) + if err != nil { + return "", 0, false, fmt.Errorf("port %q is not a number", p) + } + return h, n, true, nil +} + +// displayHost is the host to print: a wildcard bind is reachable here as +// 127.0.0.1, and that is one of the Host headers the server accepts. +func displayHost(host string) string { + switch host { + case "", "0.0.0.0", "::": + return "127.0.0.1" + } + return host +} + +// browserAllowed says whether serve may open a browser: a person at a terminal +// on a desktop, and nobody asked it not to. +func browserAllowed(getenv func(string) string, stdoutTTY bool, goos string) bool { + if getenv("CI") != "" || getenv("PROBACI_NO_BROWSER") == "1" || !stdoutTTY { + return false + } + if goos == "linux" || goos == "freebsd" || goos == "openbsd" || goos == "netbsd" { + return getenv("DISPLAY") != "" || getenv("WAYLAND_DISPLAY") != "" + } + return true +} + +// openBrowser opens url with the platform's own opener, so there is no +// dependency to add. +func openBrowser(url string) error { + var cmd *exec.Cmd + switch runtime.GOOS { + case "darwin": + cmd = exec.Command("open", url) + case "windows": + cmd = exec.Command("rundll32", "url.dll,FileProtocolHandler", url) + default: + cmd = exec.Command("xdg-open", url) + } + return cmd.Start() +} + +// appRunner is the web UI's Runner over probaci's own engine: every run builds +// a fresh App, so it reads the configuration again and gets its own run ID and +// log file, exactly as `probaci run` does. +type appRunner struct { + targets []string + + mu sync.Mutex + dockerAt time.Time + docker string +} + +// dockerTTL is how long the container check is trusted; asking the daemon on +// every page load would be slow. +const dockerTTL = 30 * time.Second + +func (a *appRunner) Overview(ctx context.Context) (web.Overview, error) { + layout := paths.Resolve() + base := a.targets[0] + cfg, sources, err := config.Load(config.LoadOptions{ + SystemConfigPath: layout.SystemConfig, + UserConfigPath: layout.Config, + ProjectDir: base, + ExplicitPath: g.config, + }) + if err != nil { + return web.Overview{}, err + } + if g.noDocker { + cfg.Docker.Enabled = config.BoolPtr(false) + } + if g.backend != "" { + cfg.Docker.Backend = config.Backend(g.backend) + } + ov := web.Overview{Stages: cfg.EnabledStages(), Home: layout.Home, Docker: a.dockerStatus(ctx, cfg)} + for _, s := range sources { + ov.Sources = append(ov.Sources, describeSource(s, layout, base)) + } + for _, t := range a.targets { + info := web.RepoInfo{Path: t} + for _, l := range detect.DetectProject(t).Languages { + info.Languages = append(info.Languages, l.Name) + } + ov.Repos = append(ov.Repos, info) + } + return ov, nil +} + +func describeSource(s config.Source, layout paths.Layout, base string) string { + switch s { + case config.SourceUser: + return string(s) + ": " + layout.Config + case config.SourceSystem: + return string(s) + ": " + layout.SystemConfig + case config.SourceProject: + if g.config != "" { + return string(s) + ": " + g.config + } + return string(s) + ": " + filepath.Join(base, "probaci.json") + } + return string(s) +} + +func (a *appRunner) dockerStatus(ctx context.Context, cfg config.Config) string { + if !cfg.Docker.IsEnabled() { + return "disabled; container stages are skipped" + } + a.mu.Lock() + defer a.mu.Unlock() + if a.docker != "" && time.Since(a.dockerAt) < dockerTTL { + return a.docker + } + b, err := docker.New(cfg.Docker, cfg.Security, nil) + if err == nil { + check, cancel := context.WithTimeout(ctx, 5*time.Second) + err = b.Available(check) + cancel() + } + a.docker = "available" + if err != nil { + a.docker = err.Error() + } + a.dockerAt = time.Now() + return a.docker +} + +func (a *appRunner) Run(ctx context.Context, req web.RunRequest, obs stage.Observer) (result.Aggregate, error) { + app, err := newApp(a.targets[0]) + if err != nil { + return result.Aggregate{}, err + } + defer app.Close() + opts := stage.RunOptions{ + Repos: a.targets, + Only: req.Stages, + Jobs: req.Jobs, + Platform: g.platform, + RunOpts: platform.RunOpts{FullImage: g.fullImage, AllowSocketMount: app.Cfg.Docker.SocketMountAllowed()}, + } + app.Logger.Info("run started from the web UI", "run", app.RunID.Short, "repos", len(a.targets), + "jobs", opts.Jobs, "stages", fmt.Sprint(app.Engine.StageList(opts.Only, nil))) + agg := app.Engine.Run(ctx, opts, obs) + for _, repo := range agg.Repos { + for _, r := range repo.Results { + app.Logger.Info("stage finished", "repo", repo.Path, "stage", r.Stage, "status", string(r.Status), "summary", r.Summary) + } + } + app.Logger.Info("run finished", "run", app.RunID.Short, "failed", agg.Failed()) + return agg, nil +} diff --git a/src/internal/web/assets/app.css b/src/internal/web/assets/app.css new file mode 100644 index 0000000..aeba6ce --- /dev/null +++ b/src/internal/web/assets/app.css @@ -0,0 +1,31 @@ +/* Overrides only; everything else is Tabler. */ +.skip-link:focus { position: absolute; z-index: 1080; top: .5rem; left: .5rem; padding: .5rem 1rem; background: var(--tblr-bg-surface); } +.license-text { white-space: pre-wrap; font-size: .8125rem; max-height: 24rem; overflow: auto; } +main:focus { outline: none; } +.log-pane { font-family: var(--tblr-font-monospace); font-size: .8125rem; max-height: 32rem; overflow: auto; padding: .75rem 1rem; white-space: pre-wrap; word-break: break-word; } +.log-line { white-space: pre-wrap; word-break: break-word; } +.log-line time, .log-src { color: var(--tblr-secondary); } + +/* Accessible status colors. Tabler's -lt badges put the base color on a + tint of itself, which measures 2.4-4.4:1 -- below WCAG's 4.5:1 for text this + size. These keep the same hues at >= 5.7:1 in both themes (the values are + icon-sets-sync's, measured there). */ +.badge-ok { color: #1a6b2b; background: #e3f3e6; } +.badge-warn { color: #6e4700; background: #fbefd5; } +.badge-bad { color: #a3191b; background: #fbe4e4; } +.badge-info { color: #0a4d92; background: #e2edf9; } +.badge-muted { color: #474747; background: #ececec; } +:root[data-bs-theme=dark] .badge-ok { color: #8fd8a0; background: #1d3324; } +:root[data-bs-theme=dark] .badge-warn { color: #f2c46e; background: #3a2f16; } +:root[data-bs-theme=dark] .badge-bad { color: #ffa3a3; background: #3d2020; } +:root[data-bs-theme=dark] .badge-info { color: #a6cbf6; background: #1c2a3b; } +:root[data-bs-theme=dark] .badge-muted { color: #d0d0d0; background: #2e2e2e; } + +.alert { --tblr-alert-color: var(--tblr-body-color); } +:root[data-bs-theme=dark] .btn-outline-primary { --tblr-btn-variant: #79aae7; --tblr-btn-variant-fg: #0b1a2b; } +:root[data-bs-theme=dark] .btn-outline-danger { --tblr-btn-variant: #ff8f8f; --tblr-btn-variant-fg: #2b0b0b; } + +/* A link inside running text is told apart by more than its color. */ +.page-body p a, .page-body dd a, .page-body .text-secondary a, .alert a { text-decoration: underline; } + +.license-text:focus-visible, .log-pane:focus-visible { outline: 2px solid var(--tblr-primary); outline-offset: 2px; } diff --git a/src/internal/web/assets/app.js b/src/internal/web/assets/app.js new file mode 100644 index 0000000..abe617f --- /dev/null +++ b/src/internal/web/assets/app.js @@ -0,0 +1,134 @@ +// probaci web UI: the whole of its own JavaScript. Every page works without +// it; this only adds conveniences on top. It never builds HTML from strings: +// every value goes in through textContent. +(function () { + "use strict"; + + var tb = window.tabler || {}; + + // A form with data-confirm asks first, in Tabler's danger modal + // (#confirm-modal in the layout): data-confirm is the body text, + // data-confirm-title and data-confirm-button the heading and the button. + // Without the modal script it falls back to the browser's own confirm. + var modalEl = document.getElementById("confirm-modal"); + var pending = null; + document.addEventListener("submit", function (ev) { + var form = ev.target; + var msg = form.getAttribute && form.getAttribute("data-confirm"); + if (!msg || form.getAttribute("data-confirmed") === "1") { + return; + } + ev.preventDefault(); + if (!modalEl || !tb.Modal) { + if (window.confirm(msg)) { form.setAttribute("data-confirmed", "1"); form.requestSubmit(ev.submitter || undefined); } + return; + } + pending = { form: form, submitter: ev.submitter || null }; + document.getElementById("confirm-modal-title").textContent = form.getAttribute("data-confirm-title") || "Are you sure?"; + document.getElementById("confirm-modal-body").textContent = msg; + document.getElementById("confirm-modal-ok").textContent = form.getAttribute("data-confirm-button") || "Confirm"; + tb.Modal.getOrCreateInstance(modalEl).show(); + }); + if (modalEl) { + document.getElementById("confirm-modal-ok").addEventListener("click", function () { + if (!pending) { return; } + var p = pending; + pending = null; + tb.Modal.getOrCreateInstance(modalEl).hide(); + p.form.setAttribute("data-confirmed", "1"); + if (p.submitter) { p.form.requestSubmit(p.submitter); } else { p.form.requestSubmit(); } + }); + modalEl.addEventListener("hidden.bs.modal", function () { pending = null; }); + } + + if (tb.Tooltip) { + document.querySelectorAll("[data-bs-toggle=tooltip]").forEach(function (n) { tb.Tooltip.getOrCreateInstance(n); }); + } + + var log = document.getElementById("run-log"); + var follow = document.getElementById("log-follow"); + function scrollLog() { + if (log && (!follow || follow.checked)) { log.scrollTop = log.scrollHeight; } + } + scrollLog(); + + // A run in progress streams its output and stage results. + var run = document.getElementById("run"); + if (!run || run.getAttribute("data-live") !== "1" || !window.EventSource) { + return; + } + + function el(tag, cls, text) { + var n = document.createElement(tag); + if (cls) { n.className = cls; } + if (text !== undefined) { n.textContent = text; } + return n; + } + function stageClass(status) { + switch (status) { + case "pass": return "badge badge-ok"; + case "skip": case "pending": return "badge badge-muted"; + case "running": return "badge badge-info"; + default: return "badge badge-bad"; + } + } + function clock(iso) { + var d = new Date(iso); + return isNaN(d) ? "" : d.toLocaleTimeString([], { hour12: false }); + } + function base(p) { + var parts = String(p || "").split(/[\\/]/); + return parts[parts.length - 1]; + } + function row(repo, stage) { + var rows = run.querySelectorAll("tr[data-stage]"); + for (var i = 0; i < rows.length; i++) { + if (rows[i].getAttribute("data-repo") === repo && rows[i].getAttribute("data-stage") === stage) { return rows[i]; } + } + return null; + } + + var status = document.getElementById("run-status"); + var handlers = { + "line": function (e) { + var empty = log.querySelector("[data-role=empty]"); + if (empty) { empty.remove(); } + var li = el("li", "log-line"); + var t = el("time", "", clock(e.time)); + t.setAttribute("datetime", e.time); + li.appendChild(t); + li.appendChild(document.createTextNode(" ")); + li.appendChild(el("span", "log-src", base(e.repo) + " " + e.stage)); + li.appendChild(document.createTextNode(" " + e.text)); + log.appendChild(li); + scrollLog(); + }, + "stage": function (e) { + var tr = row(e.repo, e.stage); + if (!tr) { return; } + var b = tr.querySelector("[data-role=status]"); + b.className = stageClass(e.status); + b.textContent = e.status; + tr.querySelector("[data-role=summary]").textContent = e.summary || ""; + if (e.status !== "pending" && e.status !== "running" && e.duration && e.duration !== "0s") { + tr.querySelector("[data-role=duration]").textContent = e.duration; + } + if (e.status === "running") { status.textContent = "Running: " + base(e.repo) + " " + e.stage; } + }, + "done": function (e) { + status.textContent = "Run " + e.status + (e.error ? ": " + e.error : "") + ". Loading the final results."; + source.close(); + window.setTimeout(function () { window.location.reload(); }, 1000); + } + }; + + var url = run.getAttribute("data-events-url") + "?after=" + encodeURIComponent(run.getAttribute("data-last-id") || "0"); + var source = new EventSource(url); + Object.keys(handlers).forEach(function (type) { + source.addEventListener(type, function (msg) { + var data; + try { data = JSON.parse(msg.data); } catch (err) { return; } + handlers[type](data); + }); + }); +})(); diff --git a/src/internal/web/assets/favicon.svg b/src/internal/web/assets/favicon.svg new file mode 100644 index 0000000..d38e4a0 --- /dev/null +++ b/src/internal/web/assets/favicon.svg @@ -0,0 +1 @@ + diff --git a/src/internal/web/assets/vendor/LICENSES/bootstrap.txt b/src/internal/web/assets/vendor/LICENSES/bootstrap.txt new file mode 100644 index 0000000..fa7c00b --- /dev/null +++ b/src/internal/web/assets/vendor/LICENSES/bootstrap.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2011-2025 The Bootstrap Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/internal/web/assets/vendor/LICENSES/popper.txt b/src/internal/web/assets/vendor/LICENSES/popper.txt new file mode 100644 index 0000000..0370c45 --- /dev/null +++ b/src/internal/web/assets/vendor/LICENSES/popper.txt @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2019 Federico Zivolo + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/internal/web/assets/vendor/LICENSES/tabler-icons-webfont.txt b/src/internal/web/assets/vendor/LICENSES/tabler-icons-webfont.txt new file mode 100644 index 0000000..3e82379 --- /dev/null +++ b/src/internal/web/assets/vendor/LICENSES/tabler-icons-webfont.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2026 Paweł Kuna + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/internal/web/assets/vendor/LICENSES/tabler-icons.txt b/src/internal/web/assets/vendor/LICENSES/tabler-icons.txt new file mode 100644 index 0000000..3e82379 --- /dev/null +++ b/src/internal/web/assets/vendor/LICENSES/tabler-icons.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2026 Paweł Kuna + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/internal/web/assets/vendor/LICENSES/tabler.txt b/src/internal/web/assets/vendor/LICENSES/tabler.txt new file mode 100644 index 0000000..aa69649 --- /dev/null +++ b/src/internal/web/assets/vendor/LICENSES/tabler.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018-2026 The Tabler Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/internal/web/assets/vendor/MANIFEST.sha256 b/src/internal/web/assets/vendor/MANIFEST.sha256 new file mode 100644 index 0000000..bc589e8 --- /dev/null +++ b/src/internal/web/assets/vendor/MANIFEST.sha256 @@ -0,0 +1,13 @@ +4620c84ad5ce8602ff65640ed6b7c8b78ebb9e036584f0ebc1ccc88206a4bb51 LICENSES/bootstrap.txt +bf67e2c9b7974543bb18ced3a0b37f53729aaff953b442dd89a3adaf90fd93e8 LICENSES/popper.txt +b740a1d46122672da62833e97f7e7c8a13fa85cbc7445b584b297cc00dde93db LICENSES/tabler-icons-webfont.txt +b740a1d46122672da62833e97f7e7c8a13fa85cbc7445b584b297cc00dde93db LICENSES/tabler-icons.txt +4f88a82d13be3c5c63a12c5631eae914aa4381b6dc17641bf1ab85f3f8f6c8a5 LICENSES/tabler.txt +e7172f349c1182e6dcb57ed01b7639e0a42402495f1dd458f0a5319707c199f9 TABLER_VERSION +e5531e7c7fe56b940ba75855850d2f5a866abc62ba2950267bd8fa98a67405a9 icons.txt +82d3ef3257424ed8112465549bf5a2b7b3ea566895ff6a96f275853429aa103e tabler-icons.svg +472d0b59eeaa7d92ee2bd44873f7353ca4c519a9cc85fd4fe820b134332c85f4 tabler-icons/tabler-icons.css +5b793beee5851ea40df5f34810f615924bc1d3b992c9d1713709aeac7c3834f9 tabler-icons/tabler-icons.woff2 +0d4cc450c54c8d37dca82daff89e65ed9e520320ee08974b2573466acdff6c89 tabler/tabler-theme.min.js +dcf84d7b4319c29ab33450bfe2a7bbf607458d994ef71023f7509e912cafdbd5 tabler/tabler.min.css +2a3b9ecae44d821b21ba4521da33fca1bdc692454745536418c4e078e8ba6abf tabler/tabler.min.js diff --git a/src/internal/web/assets/vendor/TABLER_VERSION b/src/internal/web/assets/vendor/TABLER_VERSION new file mode 100644 index 0000000..6fbdaf3 --- /dev/null +++ b/src/internal/web/assets/vendor/TABLER_VERSION @@ -0,0 +1,9 @@ +# The vendored Tabler assets the web UI embeds. This is the one place their +# versions are pinned. Change them with `make tabler-update` (newest releases) +# or edit and run `make tabler-vendor`; never by hand-editing vendored files. +# bootstrap and @popperjs/core are bundled inside tabler.min.js; they are +# listed so their licence texts are fetched at the matching versions. +@tabler/core 1.7.1 +@tabler/icons-sprite 3.49.0 +bootstrap 5.3.8 +@popperjs/core 2.11.8 diff --git a/src/internal/web/assets/vendor/icons.txt b/src/internal/web/assets/vendor/icons.txt new file mode 100644 index 0000000..2c55d8e --- /dev/null +++ b/src/internal/web/assets/vendor/icons.txt @@ -0,0 +1,44 @@ +# Tabler icons the web UI uses, by name (without the "tabler-" prefix). The +# vendoring tool cuts exactly these out of @tabler/icons-sprite into +# tabler-icons.svg, and fails if one no longer exists upstream. Add a name +# here, then run `make tabler-vendor`. +adjustments +alert-circle +alert-triangle +arrow-left +box +brand-github +check +circle-check +circle-x +clock +copy +device-desktop +device-floppy +dots-vertical +download +external-link +eye +file-code +file-text +git-branch +git-pull-request +help-circle +history +info-circle +layout-dashboard +license +list-details +lock +moon +packages +player-play +player-stop +power +refresh +search +settings +shield-check +sun +terminal-2 +x diff --git a/src/internal/web/assets/vendor/tabler-icons.svg b/src/internal/web/assets/vendor/tabler-icons.svg new file mode 100644 index 0000000..a199495 --- /dev/null +++ b/src/internal/web/assets/vendor/tabler-icons.svg @@ -0,0 +1 @@ + diff --git a/src/internal/web/assets/vendor/tabler-icons/tabler-icons.css b/src/internal/web/assets/vendor/tabler-icons/tabler-icons.css new file mode 100644 index 0000000..38e77f2 --- /dev/null +++ b/src/internal/web/assets/vendor/tabler-icons/tabler-icons.css @@ -0,0 +1,2 @@ +/* Tabler Icons webfont, cut to the icons in icons.txt by the vendoring tool. */ +@font-face{font-family:"tabler-icons";font-style:normal;font-weight:400;font-display:block;src:url("tabler-icons.woff2") format("woff2")}.ti{font-family:"tabler-icons" !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ti-adjustments:before{content:"\ea03"}.ti-alert-circle:before{content:"\ea05"}.ti-alert-triangle:before{content:"\ea06"}.ti-arrow-left:before{content:"\ea19"}.ti-box:before{content:"\ea45"}.ti-brand-github:before{content:"\ec1c"}.ti-check:before{content:"\ea5e"}.ti-circle-check:before{content:"\ea67"}.ti-circle-x:before{content:"\ea6a"}.ti-clock:before{content:"\ea70"}.ti-copy:before{content:"\ea7a"}.ti-device-desktop:before{content:"\ea89"}.ti-device-floppy:before{content:"\eb62"}.ti-dots-vertical:before{content:"\ea94"}.ti-download:before{content:"\ea96"}.ti-external-link:before{content:"\ea99"}.ti-eye:before{content:"\ea9a"}.ti-file-code:before{content:"\ebd0"}.ti-file-text:before{content:"\eaa2"}.ti-git-branch:before{content:"\eab2"}.ti-git-pull-request:before{content:"\eab6"}.ti-help-circle:before{content:"\f91d"}.ti-history:before{content:"\ebea"}.ti-info-circle:before{content:"\eac5"}.ti-layout-dashboard:before{content:"\f02c"}.ti-license:before{content:"\ebc0"}.ti-list-details:before{content:"\ef40"}.ti-lock:before{content:"\eae2"}.ti-moon:before{content:"\eaf8"}.ti-packages:before{content:"\f2c9"}.ti-player-play:before{content:"\ed46"}.ti-player-stop:before{content:"\ed4a"}.ti-power:before{content:"\eb0d"}.ti-refresh:before{content:"\eb13"}.ti-search:before{content:"\eb1c"}.ti-settings:before{content:"\eb20"}.ti-shield-check:before{content:"\eb22"}.ti-sun:before{content:"\eb30"}.ti-terminal-2:before{content:"\ebef"}.ti-x:before{content:"\eb55"} diff --git a/src/internal/web/assets/vendor/tabler-icons/tabler-icons.woff2 b/src/internal/web/assets/vendor/tabler-icons/tabler-icons.woff2 new file mode 100644 index 0000000..03ce6e9 Binary files /dev/null and b/src/internal/web/assets/vendor/tabler-icons/tabler-icons.woff2 differ diff --git a/src/internal/web/assets/vendor/tabler/tabler-theme.min.js b/src/internal/web/assets/vendor/tabler/tabler-theme.min.js new file mode 100644 index 0000000..3a84b95 --- /dev/null +++ b/src/internal/web/assets/vendor/tabler/tabler-theme.min.js @@ -0,0 +1,8 @@ +/*! +* Tabler v1.7.1 (https://tabler.io) +* Copyright 2018-2026 The Tabler Authors +* Copyright 2018-2026 codecalm.net Paweł Kuna +* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) +*/ +!function(e){"function"==typeof define&&define.amd?define([],e):e()}(function(){var e={theme:"auto","theme-base":"neutral","theme-font":"sans-serif","theme-primary":"blue","theme-radius":"1",layout:"default",navbar:"default","navbar-position":"horizontal","navbar-style":"default","navbar-theme":"default","offcanvas-style":"default",sidebar:"default"},t=new URLSearchParams(window.location.search),a=window.matchMedia("(prefers-color-scheme: dark)"),n=/^[a-z0-9-]{1,32}$/,o={get(e){try{return localStorage.getItem(e)}catch{return null}},set(e,t){try{localStorage.setItem(e,t)}catch{}}};for(const r in e){const m=t.get(r);let d;if(m&&n.test(m))o.set("tabler-"+r,m),d=m;else{const t=o.get("tabler-"+r),a=document.documentElement.getAttribute("data-bs-"+r);d=t??a??e[r]}"theme"===r&&"auto"===d&&(d=a.matches?"dark":"light"),d!==e[r]?document.documentElement.setAttribute("data-bs-"+r,d):document.documentElement.removeAttribute("data-bs-"+r)}a.addEventListener("change",e=>{"auto"===(o.get("tabler-theme")??"auto")&&(e.matches?document.documentElement.setAttribute("data-bs-theme","dark"):document.documentElement.removeAttribute("data-bs-theme"))})}); +//# sourceMappingURL=tabler-theme.min.js.map \ No newline at end of file diff --git a/src/internal/web/assets/vendor/tabler/tabler.min.css b/src/internal/web/assets/vendor/tabler/tabler.min.css new file mode 100644 index 0000000..8756e09 --- /dev/null +++ b/src/internal/web/assets/vendor/tabler/tabler.min.css @@ -0,0 +1,8 @@ +@charset "UTF-8";/*! + * Tabler v1.7.1 (https://tabler.io) + * Copyright 2018-2026 The Tabler Authors + * Copyright 2018-2026 codecalm.net Paweł Kuna + * Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) + */ +:root{--tblr-blue:oklch(54.6% 0.1724 254.2deg);--tblr-azure:oklch(66.26% 0.1358 246.81deg);--tblr-indigo:oklch(55.66% 0.2082 268.35deg);--tblr-purple:oklch(57.83% 0.2186 319.15deg);--tblr-pink:oklch(58.81% 0.201 5.25deg);--tblr-red:oklch(58.29% 0.1941 25.59deg);--tblr-orange:oklch(68.51% 0.1954 44.57deg);--tblr-yellow:oklch(77.02% 0.1658 71.02deg);--tblr-lime:oklch(70.99% 0.1897 131.53deg);--tblr-green:oklch(67.38% 0.1885 145.43deg);--tblr-teal:oklch(64.32% 0.1338 164.7deg);--tblr-cyan:oklch(65.52% 0.1105 212.17deg);--tblr-black:#000;--tblr-white:#fff;--tblr-gray:oklch(43.86% 0 0deg);--tblr-gray-dark:oklch(26.86% 0 0deg);--tblr-gray-100:oklch(97.02% 0 0deg);--tblr-gray-200:oklch(92.19% 0 0deg);--tblr-gray-300:oklch(86.99% 0 0deg);--tblr-gray-400:oklch(71.55% 0 0deg);--tblr-gray-500:oklch(55.55% 0 0deg);--tblr-gray-600:oklch(43.86% 0 0deg);--tblr-gray-700:oklch(37.15% 0 0deg);--tblr-gray-800:oklch(26.86% 0 0deg);--tblr-gray-900:oklch(20.46% 0 0deg);--tblr-primary:oklch(54.6% 0.1724 254.2deg);--tblr-secondary:oklch(55.55% 0 0deg);--tblr-success:oklch(67.38% 0.1885 145.43deg);--tblr-info:oklch(66.26% 0.1358 246.81deg);--tblr-warning:oklch(77.02% 0.1658 71.02deg);--tblr-danger:oklch(58.29% 0.1941 25.59deg);--tblr-light:oklch(98.51% 0 0deg);--tblr-dark:oklch(26.86% 0 0deg);--tblr-muted:oklch(55.55% 0 0deg);--tblr-blue:oklch(54.6% 0.1724 254.2deg);--tblr-azure:oklch(66.26% 0.1358 246.81deg);--tblr-indigo:oklch(55.66% 0.2082 268.35deg);--tblr-purple:oklch(57.83% 0.2186 319.15deg);--tblr-pink:oklch(58.81% 0.201 5.25deg);--tblr-red:oklch(58.29% 0.1941 25.59deg);--tblr-orange:oklch(68.51% 0.1954 44.57deg);--tblr-yellow:oklch(77.02% 0.1658 71.02deg);--tblr-lime:oklch(70.99% 0.1897 131.53deg);--tblr-green:oklch(67.38% 0.1885 145.43deg);--tblr-teal:oklch(64.32% 0.1338 164.7deg);--tblr-cyan:oklch(65.52% 0.1105 212.17deg);--tblr-primary-text-emphasis:light-dark(color-mix(in oklab, var(--tblr-black) 60%, var(--tblr-primary)), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-primary)));--tblr-secondary-text-emphasis:light-dark(color-mix(in oklab, var(--tblr-black) 60%, var(--tblr-secondary)), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-secondary)));--tblr-success-text-emphasis:light-dark(color-mix(in oklab, var(--tblr-black) 60%, var(--tblr-success)), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-success)));--tblr-info-text-emphasis:light-dark(color-mix(in oklab, var(--tblr-black) 60%, var(--tblr-info)), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-info)));--tblr-warning-text-emphasis:light-dark(color-mix(in oklab, var(--tblr-black) 60%, var(--tblr-warning)), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-warning)));--tblr-danger-text-emphasis:light-dark(color-mix(in oklab, var(--tblr-black) 60%, var(--tblr-danger)), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-danger)));--tblr-light-text-emphasis:light-dark(oklch(37.15% 0 0deg), oklch(97.02% 0 0deg));--tblr-dark-text-emphasis:light-dark(oklch(37.15% 0 0deg), oklch(86.99% 0 0deg));--tblr-primary-bg-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 80%, var(--tblr-primary)), color-mix(in oklab, var(--tblr-black) 80%, var(--tblr-primary)));--tblr-secondary-bg-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 80%, var(--tblr-secondary)), color-mix(in oklab, var(--tblr-black) 80%, var(--tblr-secondary)));--tblr-success-bg-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 80%, var(--tblr-success)), color-mix(in oklab, var(--tblr-black) 80%, var(--tblr-success)));--tblr-info-bg-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 80%, var(--tblr-info)), color-mix(in oklab, var(--tblr-black) 80%, var(--tblr-info)));--tblr-warning-bg-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 80%, var(--tblr-warning)), color-mix(in oklab, var(--tblr-black) 80%, var(--tblr-warning)));--tblr-danger-bg-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 80%, var(--tblr-danger)), color-mix(in oklab, var(--tblr-black) 80%, var(--tblr-danger)));--tblr-light-bg-subtle:light-dark(color-mix(in oklab, var(--tblr-gray-100) 50%, var(--tblr-white)), oklch(26.86% 0 0deg));--tblr-dark-bg-subtle:light-dark(oklch(71.55% 0 0deg), color-mix(in oklab, var(--tblr-gray-800) 50%, var(--tblr-black)));--tblr-primary-border-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 60%, var(--tblr-primary)), color-mix(in oklab, var(--tblr-black) 40%, var(--tblr-primary)));--tblr-secondary-border-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 60%, var(--tblr-secondary)), color-mix(in oklab, var(--tblr-black) 40%, var(--tblr-secondary)));--tblr-success-border-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 60%, var(--tblr-success)), color-mix(in oklab, var(--tblr-black) 40%, var(--tblr-success)));--tblr-info-border-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 60%, var(--tblr-info)), color-mix(in oklab, var(--tblr-black) 40%, var(--tblr-info)));--tblr-warning-border-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 60%, var(--tblr-warning)), color-mix(in oklab, var(--tblr-black) 40%, var(--tblr-warning)));--tblr-danger-border-subtle:light-dark(color-mix(in oklab, var(--tblr-white) 60%, var(--tblr-danger)), color-mix(in oklab, var(--tblr-black) 40%, var(--tblr-danger)));--tblr-light-border-subtle:light-dark(oklch(92.19% 0 0deg), oklch(37.15% 0 0deg));--tblr-dark-border-subtle:light-dark(oklch(55.55% 0 0deg), oklch(26.86% 0 0deg));--tblr-font-sans-serif:system-ui,-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;--tblr-font-monospace:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;--tblr-gradient:linear-gradient(180deg, color-mix(in oklab, var(--tblr-white) 15%, transparent), color-mix(in oklab, var(--tblr-white) 0%, transparent));--tblr-body-font-family:var(--tblr-font-sans-serif);--tblr-body-font-size:0.875rem;--tblr-body-font-weight:400;--tblr-body-line-height:1.4285714286;--tblr-body-text-align:start;--tblr-body-color:light-dark(oklch(26.86% 0 0deg), oklch(92.19% 0 0deg));--tblr-body-bg:light-dark(oklch(98.51% 0 0deg), oklch(20.46% 0 0deg));--tblr-emphasis-color:light-dark(oklch(37.15% 0 0deg), #fff);--tblr-secondary-color:light-dark(color-mix(in oklab, var(--tblr-body-color) 75%, transparent), color-mix(in oklab, var(--tblr-body-color) 75%, transparent));--tblr-secondary-bg:light-dark(oklch(92.19% 0 0deg), oklch(26.86% 0 0deg));--tblr-tertiary-color:light-dark(color-mix(in oklab, var(--tblr-body-color) 50%, transparent), color-mix(in oklab, var(--tblr-body-color) 50%, transparent));--tblr-tertiary-bg:light-dark(oklch(97.02% 0 0deg), oklch(23.66% 0 none));--tblr-link-color:light-dark(oklch(54.6% 0.1724 254.2deg), rgb(47.4052909852%, 66.7127738619%, 90.5414538398%));--tblr-link-decoration:none;--tblr-link-hover-color:light-dark(rgb(1.1835786118%, 31.5951621282%, 60.6793151464%), rgb(57.8830881406%, 73.4266319259%, 92.771901261%));--tblr-link-hover-decoration:underline;--tblr-code-color:light-dark(var(--tblr-gray-600), var(--tblr-gray-400));--tblr-highlight-color:light-dark(oklch(26.86% 0 0deg), oklch(92.19% 0 0deg));--tblr-highlight-bg:light-dark(rgb(99.8214975272%, 92.8189925446%, 84.8431161065%), color-mix(in oklab, var(--tblr-black) 60%, var(--tblr-yellow)));--tblr-border-width:1px;--tblr-border-style:solid;--tblr-border-color:light-dark(var(--tblr-gray-200), oklch(from var(--tblr-dark) calc(l + 0.08) c h));--tblr-border-color-translucent:light-dark(color-mix(in oklab, var(--tblr-gray-800) 11.9%, transparent), rgba(72, 110, 149, 0.14));--tblr-border-radius:6px;--tblr-border-radius-sm:4px;--tblr-border-radius-lg:8px;--tblr-border-radius-xl:1rem;--tblr-border-radius-xxl:2rem;--tblr-border-radius-2xl:var(--tblr-border-radius-xxl);--tblr-border-radius-pill:100rem;--tblr-box-shadow:0px 2px 4px -1px color-mix(in oklab, var(--tblr-shadow-color) 15%, transparent),0px 4px 6px -1px color-mix(in oklab, var(--tblr-shadow-color) 20%, transparent);--tblr-box-shadow-sm:0 1px 3px 0 color-mix(in oklab, var(--tblr-shadow-color) 25%, transparent),0 1px 2px 0 color-mix(in oklab, var(--tblr-shadow-color) 15%, transparent);--tblr-box-shadow-lg:0px 4px 6px -2px color-mix(in oklab, var(--tblr-shadow-color) 12.5%, transparent),0px 10px 15px -3px color-mix(in oklab, var(--tblr-shadow-color) 20%, transparent);--tblr-box-shadow-inset:inset 0 1px 2px color-mix(in oklab, var(--tblr-shadow-color) 18.75%, transparent);--tblr-focus-ring-width:2px;--tblr-focus-ring-offset:2px;--tblr-focus-ring-opacity:0.5;--tblr-focus-ring-opacity-dark:0.75;--tblr-focus-ring-color:light-dark(color-mix(in oklab, var(--tblr-primary) calc(var(--tblr-focus-ring-opacity) * 100%), var(--tblr-body-bg)), color-mix(in oklab, var(--tblr-primary) calc(var(--tblr-focus-ring-opacity-dark) * 100%), var(--tblr-body-bg)));--tblr-form-valid-color:light-dark(oklch(67.38% 0.1885 145.43deg), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-green)));--tblr-form-valid-border-color:light-dark(oklch(67.38% 0.1885 145.43deg), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-green)));--tblr-form-invalid-color:light-dark(oklch(58.29% 0.1941 25.59deg), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-red)));--tblr-form-invalid-border-color:light-dark(oklch(58.29% 0.1941 25.59deg), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-red)))}:root,[data-bs-theme=light],[data-theme=light]{--tblr-heading-color:light-dark(var(--tblr-gray-900), var(--tblr-white))}.theme-dark,[data-bs-theme=dark],[data-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light],body[data-theme=dark] [data-theme=light],html[data-bs-navbar-theme=dark] .page>.navbar,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=dark] .page>body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=primary] .page>.navbar,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=primary] .page>body.navbar [data-bs-theme=light]{--tblr-heading-color:inherit}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--tblr-body-font-family);font-size:var(--tblr-body-font-size);font-weight:var(--tblr-body-font-weight);line-height:var(--tblr-body-line-height);color:var(--tblr-body-color);text-align:var(--tblr-body-text-align);background-color:var(--tblr-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}.hr,hr{margin:2rem 0;color:inherit;border:0;border-top:var(--tblr-border-width) solid;opacity:11.9%}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:var(--tblr-spacer);font-weight:var(--tblr-font-weight-semibold);line-height:1.2;color:var(--tblr-heading-color)}.h1,h1{font-size:1.5rem}.h2,h2{font-size:1.25rem}.h3,h3{font-size:1rem}.h4,h4{font-size:.875rem}.h5,h5{font-size:.75rem}.h6,h6{font-size:.625rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-inline-start:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-inline-start:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;color:var(--tblr-highlight-color);background-color:var(--tblr-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:color-mix(in oklab,var(--tblr-link-color) calc(var(--tblr-link-opacity,1) * 100%),transparent);text-decoration:none}a:hover{--tblr-link-color:var(--tblr-link-hover-color);text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--tblr-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.85714285em;color:var(--tblr-light)}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.85714285em;color:var(--tblr-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:0 .25rem;font-size:var(--tblr-font-size-h5);color:var(--tblr-secondary-color);background-color:color-mix(in oklab,currentColor 12%,transparent);border-radius:4px}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:var(--tblr-secondary-color);text-align:start}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:inline-start;width:100%;padding:0;margin-bottom:.5rem;line-height:inherit;font-size:1.5rem}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:.875rem;font-weight:var(--tblr-font-weight-normal)}.display-1{font-weight:300;line-height:1.2;font-size:5rem}.display-2{font-weight:300;line-height:1.2;font-size:4.5rem}.display-3{font-weight:300;line-height:1.2;font-size:4rem}.display-4{font-weight:300;line-height:1.2;font-size:3.5rem}.display-5{font-weight:300;line-height:1.2;font-size:3rem}.display-6{font-weight:300;line-height:1.2;font-size:2rem}.list-unstyled{padding-inline-start:0;list-style:none}.list-inline{padding-inline-start:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-inline-end:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:.875rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:light-dark(var(--tblr-gray-600),var(--tblr-gray-400))}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--tblr-body-bg);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-sm);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--tblr-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--tblr-gutter-x:calc(var(--tblr-page-padding) * 2);--tblr-gutter-y:0;width:100%;padding-inline-end:calc(var(--tblr-gutter-x) * 0.5);padding-inline-start:calc(var(--tblr-gutter-x) * 0.5);margin-inline-end:auto;margin-inline-start:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--tblr-breakpoint-xs:0;--tblr-breakpoint-sm:576px;--tblr-breakpoint-md:768px;--tblr-breakpoint-lg:992px;--tblr-breakpoint-xl:1200px;--tblr-breakpoint-xxl:1400px}.row{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--tblr-gutter-y));margin-inline-end:calc(-.5 * var(--tblr-gutter-x));margin-inline-start:calc(-.5 * var(--tblr-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-inline-end:calc(var(--tblr-gutter-x) * 0.5);padding-inline-start:calc(var(--tblr-gutter-x) * 0.5);margin-top:var(--tblr-gutter-y)}.grid{display:grid;grid-template-rows:repeat(var(--tblr-rows,1),1fr);grid-template-columns:repeat(var(--tblr-columns,12),1fr);gap:var(--tblr-gap,var(--tblr-page-padding))}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width:576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width:768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width:992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width:1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width:1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.col{flex:1 0 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-inline-start:8.33333333%}.offset-2{margin-inline-start:16.66666667%}.offset-3{margin-inline-start:25%}.offset-4{margin-inline-start:33.33333333%}.offset-5{margin-inline-start:41.66666667%}.offset-6{margin-inline-start:50%}.offset-7{margin-inline-start:58.33333333%}.offset-8{margin-inline-start:66.66666667%}.offset-9{margin-inline-start:75%}.offset-10{margin-inline-start:83.33333333%}.offset-11{margin-inline-start:91.66666667%}.g-0,.gx-0{--tblr-gutter-x:0}.g-0,.gy-0{--tblr-gutter-y:0}.g-1,.gx-1{--tblr-gutter-x:0.25rem}.g-1,.gy-1{--tblr-gutter-y:0.25rem}.g-2,.gx-2{--tblr-gutter-x:0.5rem}.g-2,.gy-2{--tblr-gutter-y:0.5rem}.g-3,.gx-3{--tblr-gutter-x:1rem}.g-3,.gy-3{--tblr-gutter-y:1rem}.g-4,.gx-4{--tblr-gutter-x:1.5rem}.g-4,.gy-4{--tblr-gutter-y:1.5rem}.g-5,.gx-5{--tblr-gutter-x:2rem}.g-5,.gy-5{--tblr-gutter-y:2rem}.g-6,.gx-6{--tblr-gutter-x:2.5rem}.g-6,.gy-6{--tblr-gutter-y:2.5rem}@media (min-width:576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-inline-start:0}.offset-sm-1{margin-inline-start:8.33333333%}.offset-sm-2{margin-inline-start:16.66666667%}.offset-sm-3{margin-inline-start:25%}.offset-sm-4{margin-inline-start:33.33333333%}.offset-sm-5{margin-inline-start:41.66666667%}.offset-sm-6{margin-inline-start:50%}.offset-sm-7{margin-inline-start:58.33333333%}.offset-sm-8{margin-inline-start:66.66666667%}.offset-sm-9{margin-inline-start:75%}.offset-sm-10{margin-inline-start:83.33333333%}.offset-sm-11{margin-inline-start:91.66666667%}.g-sm-0,.gx-sm-0{--tblr-gutter-x:0}.g-sm-0,.gy-sm-0{--tblr-gutter-y:0}.g-sm-1,.gx-sm-1{--tblr-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--tblr-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--tblr-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--tblr-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--tblr-gutter-x:1rem}.g-sm-3,.gy-sm-3{--tblr-gutter-y:1rem}.g-sm-4,.gx-sm-4{--tblr-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--tblr-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--tblr-gutter-x:2rem}.g-sm-5,.gy-sm-5{--tblr-gutter-y:2rem}.g-sm-6,.gx-sm-6{--tblr-gutter-x:2.5rem}.g-sm-6,.gy-sm-6{--tblr-gutter-y:2.5rem}}@media (min-width:768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-inline-start:0}.offset-md-1{margin-inline-start:8.33333333%}.offset-md-2{margin-inline-start:16.66666667%}.offset-md-3{margin-inline-start:25%}.offset-md-4{margin-inline-start:33.33333333%}.offset-md-5{margin-inline-start:41.66666667%}.offset-md-6{margin-inline-start:50%}.offset-md-7{margin-inline-start:58.33333333%}.offset-md-8{margin-inline-start:66.66666667%}.offset-md-9{margin-inline-start:75%}.offset-md-10{margin-inline-start:83.33333333%}.offset-md-11{margin-inline-start:91.66666667%}.g-md-0,.gx-md-0{--tblr-gutter-x:0}.g-md-0,.gy-md-0{--tblr-gutter-y:0}.g-md-1,.gx-md-1{--tblr-gutter-x:0.25rem}.g-md-1,.gy-md-1{--tblr-gutter-y:0.25rem}.g-md-2,.gx-md-2{--tblr-gutter-x:0.5rem}.g-md-2,.gy-md-2{--tblr-gutter-y:0.5rem}.g-md-3,.gx-md-3{--tblr-gutter-x:1rem}.g-md-3,.gy-md-3{--tblr-gutter-y:1rem}.g-md-4,.gx-md-4{--tblr-gutter-x:1.5rem}.g-md-4,.gy-md-4{--tblr-gutter-y:1.5rem}.g-md-5,.gx-md-5{--tblr-gutter-x:2rem}.g-md-5,.gy-md-5{--tblr-gutter-y:2rem}.g-md-6,.gx-md-6{--tblr-gutter-x:2.5rem}.g-md-6,.gy-md-6{--tblr-gutter-y:2.5rem}}@media (min-width:992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-inline-start:0}.offset-lg-1{margin-inline-start:8.33333333%}.offset-lg-2{margin-inline-start:16.66666667%}.offset-lg-3{margin-inline-start:25%}.offset-lg-4{margin-inline-start:33.33333333%}.offset-lg-5{margin-inline-start:41.66666667%}.offset-lg-6{margin-inline-start:50%}.offset-lg-7{margin-inline-start:58.33333333%}.offset-lg-8{margin-inline-start:66.66666667%}.offset-lg-9{margin-inline-start:75%}.offset-lg-10{margin-inline-start:83.33333333%}.offset-lg-11{margin-inline-start:91.66666667%}.g-lg-0,.gx-lg-0{--tblr-gutter-x:0}.g-lg-0,.gy-lg-0{--tblr-gutter-y:0}.g-lg-1,.gx-lg-1{--tblr-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--tblr-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--tblr-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--tblr-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--tblr-gutter-x:1rem}.g-lg-3,.gy-lg-3{--tblr-gutter-y:1rem}.g-lg-4,.gx-lg-4{--tblr-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--tblr-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--tblr-gutter-x:2rem}.g-lg-5,.gy-lg-5{--tblr-gutter-y:2rem}.g-lg-6,.gx-lg-6{--tblr-gutter-x:2.5rem}.g-lg-6,.gy-lg-6{--tblr-gutter-y:2.5rem}}@media (min-width:1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-inline-start:0}.offset-xl-1{margin-inline-start:8.33333333%}.offset-xl-2{margin-inline-start:16.66666667%}.offset-xl-3{margin-inline-start:25%}.offset-xl-4{margin-inline-start:33.33333333%}.offset-xl-5{margin-inline-start:41.66666667%}.offset-xl-6{margin-inline-start:50%}.offset-xl-7{margin-inline-start:58.33333333%}.offset-xl-8{margin-inline-start:66.66666667%}.offset-xl-9{margin-inline-start:75%}.offset-xl-10{margin-inline-start:83.33333333%}.offset-xl-11{margin-inline-start:91.66666667%}.g-xl-0,.gx-xl-0{--tblr-gutter-x:0}.g-xl-0,.gy-xl-0{--tblr-gutter-y:0}.g-xl-1,.gx-xl-1{--tblr-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--tblr-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--tblr-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--tblr-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--tblr-gutter-x:1rem}.g-xl-3,.gy-xl-3{--tblr-gutter-y:1rem}.g-xl-4,.gx-xl-4{--tblr-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--tblr-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--tblr-gutter-x:2rem}.g-xl-5,.gy-xl-5{--tblr-gutter-y:2rem}.g-xl-6,.gx-xl-6{--tblr-gutter-x:2.5rem}.g-xl-6,.gy-xl-6{--tblr-gutter-y:2.5rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-inline-start:0}.offset-xxl-1{margin-inline-start:8.33333333%}.offset-xxl-2{margin-inline-start:16.66666667%}.offset-xxl-3{margin-inline-start:25%}.offset-xxl-4{margin-inline-start:33.33333333%}.offset-xxl-5{margin-inline-start:41.66666667%}.offset-xxl-6{margin-inline-start:50%}.offset-xxl-7{margin-inline-start:58.33333333%}.offset-xxl-8{margin-inline-start:66.66666667%}.offset-xxl-9{margin-inline-start:75%}.offset-xxl-10{margin-inline-start:83.33333333%}.offset-xxl-11{margin-inline-start:91.66666667%}.g-xxl-0,.gx-xxl-0{--tblr-gutter-x:0}.g-xxl-0,.gy-xxl-0{--tblr-gutter-y:0}.g-xxl-1,.gx-xxl-1{--tblr-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--tblr-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--tblr-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--tblr-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--tblr-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--tblr-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--tblr-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--tblr-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--tblr-gutter-x:2rem}.g-xxl-5,.gy-xxl-5{--tblr-gutter-y:2rem}.g-xxl-6,.gx-xxl-6{--tblr-gutter-x:2.5rem}.g-xxl-6,.gy-xxl-6{--tblr-gutter-y:2.5rem}}.markdown>table,.prose>table,.table{--tblr-table-color-type:initial;--tblr-table-bg-type:initial;--tblr-table-color-state:initial;--tblr-table-bg-state:initial;--tblr-table-color:inherit;--tblr-table-bg:transparent;--tblr-table-border-color:var(--tblr-border-color-translucent);--tblr-table-accent-bg:transparent;--tblr-table-striped-color:inherit;--tblr-table-striped-bg:var(--tblr-bg-surface-tertiary);--tblr-table-active-color:inherit;--tblr-table-active-bg:var(--tblr-active-bg);--tblr-table-hover-color:inherit;--tblr-table-hover-bg:var(--tblr-hover-bg);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--tblr-table-border-color)}.markdown>table>:not(caption)>*>*,.prose>table>:not(caption)>*>*,.table>:not(caption)>*>*{padding:.75rem .75rem;color:var(--tblr-table-color-state,var(--tblr-table-color-type,var(--tblr-table-color)));background-color:var(--tblr-table-bg);border-bottom-width:var(--tblr-border-width);box-shadow:inset 0 0 0 9999px var(--tblr-table-bg-state,var(--tblr-table-bg-type,var(--tblr-table-accent-bg)))}.markdown>table>tbody,.prose>table>tbody,.table>tbody{vertical-align:inherit}.markdown>table>thead,.prose>table>thead,.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--tblr-border-width) * 2) solid var(--tblr-border-color-translucent)}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered{--tblr-table-border-color:var(--tblr-border-color)}.table-bordered>:not(caption)>*{border-width:var(--tblr-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--tblr-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(2n):not(:is([class^=bg-],[class*=" bg-"],[class^=table-],[class*=" table-"],[class^=text-bg-],[class*=" text-bg-"],[style*=background]))>:not(:is([class^=bg-],[class*=" bg-"],[class^=table-],[class*=" table-"],[class^=text-bg-],[class*=" text-bg-"],[style*=background])){--tblr-table-color-type:var(--tblr-table-striped-color);--tblr-table-bg-type:var(--tblr-table-striped-bg)}.table-striped-columns>:not(caption)>tr:not(:is([class^=bg-],[class*=" bg-"],[class^=table-],[class*=" table-"],[class^=text-bg-],[class*=" text-bg-"],[style*=background]))>:nth-child(2n):not(:is([class^=bg-],[class*=" bg-"],[class^=table-],[class*=" table-"],[class^=text-bg-],[class*=" text-bg-"],[style*=background])){--tblr-table-color-type:var(--tblr-table-striped-color);--tblr-table-bg-type:var(--tblr-table-striped-bg)}.table-active{--tblr-table-color-state:var(--tblr-table-active-color);--tblr-table-bg-state:var(--tblr-table-active-bg)}.table-hover>tbody>tr:hover>*{--tblr-table-color-state:var(--tblr-table-hover-color);--tblr-table-bg-state:var(--tblr-table-hover-bg)}.table-primary{--tblr-table-color:#000;--tblr-table-bg:rgb(82.2997388075%, 88.9509611714%, 97.328289008%);--tblr-table-border-color:rgb(60.9286929999%, 65.9609631921%, 72.299193198%);--tblr-table-striped-bg:rgb(76.8469902589%, 83.0851425661%, 90.9422016317%);--tblr-table-striped-color:#000;--tblr-table-active-bg:rgb(71.4655470803%, 77.296031031%, 84.6396248591%);--tblr-table-active-color:#000;--tblr-table-hover-bg:rgb(74.1471774599%, 80.1808068891%, 87.780265907%);--tblr-table-hover-color:#000;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-secondary{--tblr-table-color:#000;--tblr-table-bg:rgb(88.4096058861%, 88.4096058861%, 88.4096058861%);--tblr-table-border-color:rgb(65.5513774172%, 65.5513774172%, 65.5513774172%);--tblr-table-striped-bg:rgb(82.5774078164%, 82.5774078164%, 82.5774078164%);--tblr-table-striped-color:#000;--tblr-table-active-bg:rgb(76.8214771625%, 76.8214771625%, 76.8214771625%);--tblr-table-active-color:#000;--tblr-table-hover-bg:rgb(79.6897186346%, 79.6897186346%, 79.6897186346%);--tblr-table-hover-color:#000;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-success{--tblr-table-color:#000;--tblr-table-bg:rgb(85.6489966407%, 94.3792411457%, 85.7020295341%);--tblr-table-border-color:rgb(63.4627189936%, 70.0679633817%, 63.5028433247%);--tblr-table-striped-bg:rgb(79.9882445031%, 88.1763025654%, 80.0379838214%);--tblr-table-striped-color:#000;--tblr-table-active-bg:rgb(74.4015177899%, 82.0544795594%, 74.448006603%);--tblr-table-active-color:#000;--tblr-table-hover-bg:rgb(77.1854431385%, 85.1050490827%, 77.2335517129%);--tblr-table-hover-color:#000;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-info{--tblr-table-color:#000;--tblr-table-bg:rgb(85.7945531769%, 92.1391293765%, 98.1861173159%);--tblr-table-border-color:rgb(63.5728460918%, 68.3731098545%, 72.9482203373%);--tblr-table-striped-bg:rgb(80.1247613405%, 86.075311554%, 91.7467550424%);--tblr-table-striped-color:#000;--tblr-table-active-bg:rgb(74.5291131403%, 80.0907900293%, 85.3916000462%);--tblr-table-active-color:#000;--tblr-table-hover-bg:rgb(77.3174841608%, 83.0729407639%, 88.5584413822%);--tblr-table-hover-color:#000;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-warning{--tblr-table-color:#000;--tblr-table-bg:rgb(99.8214975272%, 92.8189925446%, 84.8431161065%);--tblr-table-border-color:rgb(74.1855380272%, 68.8874897637%, 62.8529951911%);--tblr-table-striped-bg:rgb(93.2805709758%, 86.7129522399%, 79.2324126817%);--tblr-table-striped-color:#000;--tblr-table-active-bg:rgb(86.8251798536%, 80.6867603748%, 73.6950801963%);--tblr-table-active-color:#000;--tblr-table-hover-bg:rgb(90.0419699174%, 83.6896758833%, 76.4543918758%);--tblr-table-hover-color:#000;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-danger{--tblr-table-color:#000;--tblr-table-bg:rgb(99.0594214162%, 85.5708427954%, 84.0316175252%);--tblr-table-border-color:rgb(73.6089563572%, 63.4035883189%, 62.2390208119%);--tblr-table-striped-bg:rgb(92.5658231309%, 79.9149443541%, 78.4713117185%);--tblr-table-striped-color:#000;--tblr-table-active-bg:rgb(86.1571413651%, 74.3330078656%, 72.9837178037%);--tblr-table-active-color:#000;--tblr-table-hover-bg:rgb(89.3506556597%, 77.1145461943%, 75.7182442244%);--tblr-table-hover-color:#000;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-light{--tblr-table-color:#000;--tblr-table-bg:oklch(98.51% 0 0deg);--tblr-table-border-color:rgb(72.836712561%, 72.836712561%, 72.836712561%);--tblr-table-striped-bg:rgb(91.6085266752%, 91.6085266752%, 91.6085266752%);--tblr-table-striped-color:#000;--tblr-table-active-bg:rgb(85.2624050159%, 85.2624050159%, 85.2624050159%);--tblr-table-active-color:#000;--tblr-table-hover-bg:rgb(88.424744944%, 88.424744944%, 88.424744944%);--tblr-table-hover-color:#000;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-dark{--tblr-table-color:#fff;--tblr-table-bg:oklch(26.86% 0 0deg);--tblr-table-border-color:rgb(29.6281746978%, 29.6281746978%, 29.6281746978%);--tblr-table-striped-bg:rgb(18.4292869024%, 18.4292869024%, 18.4292869024%);--tblr-table-striped-color:#fff;--tblr-table-active-bg:rgb(22.0659033108%, 22.0659033108%, 22.0659033108%);--tblr-table-active-color:#fff;--tblr-table-hover-bg:rgb(20.2347406432%, 20.2347406432%, 20.2347406432%);--tblr-table-hover-color:#fff;color:var(--tblr-table-color);border-color:var(--tblr-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem;font-size:.875rem;font-weight:var(--tblr-font-weight-medium)}.col-form-label{padding-top:calc(var(--tblr-btn-input-padding-y) + var(--tblr-border-width));padding-bottom:calc(var(--tblr-btn-input-padding-y) + var(--tblr-border-width));margin-bottom:0;font-size:inherit;font-weight:var(--tblr-font-weight-medium);line-height:var(--tblr-btn-input-line-height)}.col-form-label-lg{padding-top:calc(var(--tblr-btn-input-lg-padding-y) + var(--tblr-border-width));padding-bottom:calc(var(--tblr-btn-input-lg-padding-y) + var(--tblr-border-width));font-size:var(--tblr-btn-input-lg-font-size)}.col-form-label-sm{padding-top:calc(var(--tblr-btn-input-sm-padding-y) + var(--tblr-border-width));padding-bottom:calc(var(--tblr-btn-input-sm-padding-y) + var(--tblr-border-width));font-size:var(--tblr-btn-input-sm-font-size)}.form-hint,.form-text{margin-top:.25rem;font-size:.875em;color:var(--tblr-secondary-color)}.form-control,.form-control-plaintext,.form-select{--tblr-control-min-height:calc(var(--tblr-control-line-height) + var(--tblr-control-padding-y) * 2 + var(--tblr-control-border-width) * 2);--tblr-control-padding-y:var(--tblr-btn-input-padding-y);--tblr-control-padding-x:var(--tblr-btn-input-padding-x);--tblr-control-font-size:var(--tblr-btn-input-font-size);--tblr-control-line-height:var(--tblr-btn-input-line-height);--tblr-control-fg:var(--tblr-btn-input-fg);--tblr-control-bg:var(--tblr-btn-input-bg);--tblr-control-border-width:var(--tblr-border-width);--tblr-control-border-color:var(--tblr-border-color);--tblr-control-border-radius:var(--tblr-btn-input-border-radius);--tblr-control-box-shadow:var(--tblr-shadow-input);--tblr-control-focus-fg:var(--tblr-control-fg);--tblr-control-focus-bg:var(--tblr-control-bg);--tblr-control-focus-border-color:color-mix(in oklab, var(--tblr-white) 50%, var(--tblr-primary));--tblr-control-placeholder-color:var(--tblr-tertiary);--tblr-control-disabled-color:var(--tblr-secondary);--tblr-control-disabled-bg:var(--tblr-bg-forms-disabled);--tblr-control-disabled-border-color:var(--tblr-control-border-color);--tblr-control-action-bg:var(--tblr-tertiary-bg);--tblr-control-action-hover-bg:var(--tblr-secondary-bg);--tblr-control-transition:border-color 0.15s ease-in-out,outline-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.form-control{display:block;width:100%;padding:var(--tblr-control-padding-y) var(--tblr-control-padding-x);font-family:var(--tblr-body-font-family);font-size:var(--tblr-control-font-size);font-weight:400;line-height:var(--tblr-control-line-height);color:var(--tblr-control-fg);appearance:none;background-color:var(--tblr-control-bg);background-clip:padding-box;border:var(--tblr-control-border-width) solid var(--tblr-control-border-color);border-radius:var(--tblr-control-border-radius);box-shadow:var(--tblr-control-box-shadow);transition:var(--tblr-control-transition)}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control{outline-color:transparent}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--tblr-control-focus-fg);background-color:var(--tblr-control-focus-bg);border-color:var(--tblr-control-focus-border-color);--tblr-focus-ring-offset:-1px;outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.25rem;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--tblr-control-placeholder-color);opacity:1}.form-control:disabled{color:var(--tblr-control-disabled-color);background-color:var(--tblr-control-disabled-bg);border-color:var(--tblr-control-disabled-border-color);opacity:1}.form-control::file-selector-button{padding:var(--tblr-control-padding-y) var(--tblr-control-padding-x);margin:calc(var(--tblr-control-padding-y) * -1) calc(var(--tblr-control-padding-x) * -1);margin-inline-end:var(--tblr-control-padding-x);color:var(--tblr-body-color);background-color:var(--tblr-control-action-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--tblr-control-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,outline-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-control-action-hover-bg)}.form-control-plaintext{display:block;width:100%;padding:var(--tblr-control-padding-y) 0;margin-bottom:0;line-height:var(--tblr-control-line-height);color:var(--tblr-control-fg);background-color:transparent;border:solid transparent;border-width:var(--tblr-control-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-inline-end:0;padding-inline-start:0}.form-control-sm{min-height:var(--tblr-control-min-height);font-size:var(--tblr-control-font-size);--tblr-control-padding-y:var(--tblr-btn-input-sm-padding-y);--tblr-control-padding-x:var(--tblr-btn-input-sm-padding-x);--tblr-control-font-size:var(--tblr-btn-input-sm-font-size);--tblr-control-line-height:var(--tblr-btn-input-sm-line-height);--tblr-control-border-radius:var(--tblr-btn-input-sm-border-radius)}.form-control-lg{min-height:var(--tblr-control-min-height);font-size:var(--tblr-control-font-size);--tblr-control-padding-y:var(--tblr-btn-input-lg-padding-y);--tblr-control-padding-x:var(--tblr-btn-input-lg-padding-x);--tblr-control-font-size:var(--tblr-btn-input-lg-font-size);--tblr-control-line-height:var(--tblr-btn-input-lg-line-height);--tblr-control-border-radius:var(--tblr-btn-input-lg-border-radius)}textarea.form-control{min-height:var(--tblr-control-min-height)}.form-control-color{width:3rem;height:var(--tblr-control-min-height);padding:var(--tblr-control-padding-y)}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--tblr-control-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--tblr-control-border-radius)}.form-select{--tblr-control-select-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='oklch%2871.55%25 0 0deg%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--tblr-control-select-bg-dark:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='oklch%2892.19%25 0 0deg%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");--tblr-control-select-bg-position:right var(--tblr-control-padding-x) center;--tblr-control-select-bg-size:16px 12px;--tblr-control-select-indicator-padding:calc(var(--tblr-control-padding-x) * 2 + 16px);display:block;width:100%;padding:var(--tblr-control-padding-y) var(--tblr-control-padding-x);padding-inline-end:var(--tblr-control-select-indicator-padding);font-family:var(--tblr-body-font-family);font-size:var(--tblr-control-font-size);font-weight:400;line-height:var(--tblr-control-line-height);color:var(--tblr-control-fg);appearance:none;background-color:var(--tblr-control-bg);background-image:var(--tblr-form-select-bg-img,var(--tblr-control-select-bg)),var(--tblr-form-select-bg-icon,none);background-repeat:no-repeat;background-position:var(--tblr-control-select-bg-position);background-size:var(--tblr-control-select-bg-size);border:var(--tblr-control-border-width) solid var(--tblr-control-border-color);border-radius:var(--tblr-control-border-radius);box-shadow:var(--tblr-control-box-shadow);transition:var(--tblr-control-transition)}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select{outline-color:transparent}.form-select:focus{border-color:var(--tblr-control-focus-border-color);--tblr-focus-ring-offset:-1px;outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-inline-end:var(--tblr-control-padding-x);background-image:none}.form-select:disabled{color:var(--tblr-control-disabled-color);background-color:var(--tblr-control-disabled-bg);border-color:var(--tblr-control-disabled-border-color)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--tblr-control-fg)}.form-select-sm{--tblr-control-padding-y:var(--tblr-btn-input-sm-padding-y);--tblr-control-padding-x:var(--tblr-btn-input-sm-padding-x);--tblr-control-font-size:var(--tblr-btn-input-sm-font-size);--tblr-control-line-height:var(--tblr-btn-input-sm-line-height);--tblr-control-border-radius:var(--tblr-btn-input-sm-border-radius)}.form-select-lg{--tblr-control-padding-y:var(--tblr-btn-input-lg-padding-y);--tblr-control-padding-x:var(--tblr-btn-input-lg-padding-x);--tblr-control-font-size:var(--tblr-btn-input-lg-font-size);--tblr-control-line-height:var(--tblr-btn-input-lg-line-height);--tblr-control-border-radius:var(--tblr-btn-input-lg-border-radius)}.theme-dark .form-select,[data-bs-theme=dark] .form-select,[data-theme=dark] .form-select,body[data-bs-theme=dark] [data-bs-theme=light] .form-select,body[data-theme=dark] [data-theme=light] .form-select,html[data-bs-navbar-theme=dark] .page>.navbar .form-select,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar .form-select,html[data-bs-navbar-theme=primary] .page>.navbar .form-select,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar .form-select{--tblr-control-select-bg:var(--tblr-control-select-bg-dark)}.form-check{--tblr-form-check-min-height:1.25rem;--tblr-form-check-padding-start:2rem;--tblr-form-check-margin-bottom:0.75rem;display:block;min-height:var(--tblr-form-check-min-height);padding-inline-start:var(--tblr-form-check-padding-start);margin-bottom:var(--tblr-form-check-margin-bottom)}.form-check .form-check-input{float:inline-start;margin-inline-start:calc(var(--tblr-form-check-padding-start) * -1)}.form-check-reverse{padding-inline-end:var(--tblr-form-check-padding-start);padding-inline-start:0;text-align:end}.form-check-reverse .form-check-input{float:inline-end;margin-inline-end:calc(var(--tblr-form-check-padding-start) * -1);margin-inline-start:0}.form-check-input{--tblr-form-check-input-width:1.25rem;--tblr-form-check-bg:var(--tblr-bg-forms);--tblr-form-check-border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);--tblr-form-check-border-radius:var(--tblr-border-radius);--tblr-form-check-box-shadow:var(--tblr-shadow-input);--tblr-form-check-icon-color:#fff;--tblr-form-check-focus-border-color:color-mix(in oklab, var(--tblr-white) 50%, var(--tblr-primary));--tblr-form-check-active-filter:brightness(90%);--tblr-form-check-checked-bg:var(--tblr-control-checked-bg);--tblr-form-check-checked-border-color:var(--tblr-control-checked-border-color);--tblr-form-check-indeterminate-bg:var(--tblr-control-checked-bg);--tblr-form-check-indeterminate-border-color:var(--tblr-form-check-indeterminate-bg);--tblr-form-check-disabled-opacity:var(--tblr-control-disabled-opacity);--tblr-form-check-transition:outline-color 0.15s ease-in-out;position:relative;flex-shrink:0;width:var(--tblr-form-check-input-width);height:var(--tblr-form-check-input-width);margin-top:.0892857143rem;vertical-align:top;appearance:none;background-color:var(--tblr-form-check-bg);border:var(--tblr-form-check-border);-webkit-print-color-adjust:exact;print-color-adjust:exact;transition:var(--tblr-form-check-transition)}@media (prefers-reduced-motion:reduce){.form-check-input{transition:none}}.form-check-input{outline-color:transparent}.form-check-input::before{position:absolute;inset:0;pointer-events:none;content:"";background-color:var(--tblr-form-check-icon-color);opacity:0;mask-image:var(--tblr-form-check-icon);mask-repeat:no-repeat;mask-position:center;mask-size:contain}.form-check-input[type=checkbox]{--tblr-form-check-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");border-radius:var(--tblr-form-check-border-radius)}.form-check-input[type=radio]{--tblr-form-check-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='black' cx='8' cy='8' /%3e%3c/svg%3e");border-radius:50%}.form-check-input:active{filter:var(--tblr-form-check-active-filter)}.form-check-input:focus-visible{border-color:var(--tblr-form-check-focus-border-color);outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.form-check-input:checked{background-color:var(--tblr-form-check-checked-bg);border-color:var(--tblr-form-check-checked-border-color)}.form-check-input:checked::before{opacity:1}.form-check-input[type=checkbox]:indeterminate{--tblr-form-check-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");--tblr-form-check-icon-color:#fff;background-color:var(--tblr-form-check-indeterminate-bg);border-color:var(--tblr-form-check-indeterminate-border-color)}.form-check-input[type=checkbox]:indeterminate::before{opacity:1}.form-check-input:disabled{pointer-events:none;filter:none;opacity:var(--tblr-form-check-disabled-opacity)}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.7}.form-switch{--tblr-form-switch-width:2rem;--tblr-form-switch-height:1.25rem;--tblr-form-switch-padding-start:calc(var(--tblr-form-switch-width) + 0.5rem);--tblr-form-switch-border-radius:var(--tblr-form-switch-width);--tblr-form-switch-bg:light-dark(var(--tblr-gray-300), color-mix(in oklab, var(--tblr-white) 25%, transparent));--tblr-form-switch-focus-color:var(--tblr-white);--tblr-form-switch-checked-color:var(--tblr-white);--tblr-form-switch-disabled-bg:var(--tblr-control-disabled-bg);--tblr-form-switch-disabled-color:light-dark(var(--tblr-gray-400), var(--tblr-gray-600));padding-inline-start:var(--tblr-form-switch-padding-start)}.form-switch .form-check-input{--tblr-form-switch-color:var(--tblr-white);--tblr-form-switch-knob-offset:0.125rem;--tblr-form-switch-knob-size:calc(var(--tblr-form-switch-height) - var(--tblr-form-switch-knob-offset) * 2);--tblr-form-switch-knob-inset:calc(var(--tblr-form-switch-knob-offset) - var(--tblr-border-width));width:var(--tblr-form-switch-width);margin-inline-start:calc(var(--tblr-form-switch-padding-start) * -1);border-radius:var(--tblr-form-switch-border-radius);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input::before{inset-block:0;inset-inline:var(--tblr-form-switch-knob-inset) auto;width:var(--tblr-form-switch-knob-size);height:var(--tblr-form-switch-knob-size);margin-block:auto;background-color:var(--tblr-form-switch-color);border-radius:50%;opacity:1;mask-image:none;transition:inset-inline-start .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input::before{transition:none}}.form-switch .form-check-input:not(:checked,:disabled){background-color:var(--tblr-form-switch-bg);border-color:transparent}.form-switch .form-check-input:focus{--tblr-form-switch-color:var(--tblr-form-switch-focus-color)}.form-switch .form-check-input:checked{--tblr-form-switch-color:var(--tblr-form-switch-checked-color)}.form-switch .form-check-input:checked::before{inset-inline-start:calc(100% - var(--tblr-form-switch-knob-size) - var(--tblr-form-switch-knob-inset))}.form-switch.form-check-reverse{padding-inline-end:var(--tblr-form-switch-padding-start);padding-inline-start:0}.form-switch.form-check-reverse .form-check-input{margin-inline-end:calc(var(--tblr-form-switch-padding-start) * -1);margin-inline-start:0}.form-check-inline{display:inline-block;margin-inline-end:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.4}.form-range{--tblr-range-track-width:100%;--tblr-range-track-height:0.25rem;--tblr-range-track-cursor:pointer;--tblr-range-track-bg:var(--tblr-fill-primary);--tblr-range-track-border-radius:1rem;--tblr-range-track-box-shadow:var(--tblr-box-shadow-inset);--tblr-range-thumb-width:1rem;--tblr-range-thumb-height:1rem;--tblr-range-thumb-bg:var(--tblr-primary);--tblr-range-thumb-border:2px var(--tblr-border-style) #fff;--tblr-range-thumb-border-radius:1rem;--tblr-range-thumb-box-shadow:0 0.1rem 0.25rem color-mix(in oklab, var(--tblr-black) 10%, transparent);--tblr-range-thumb-active-bg:color-mix(in oklab, var(--tblr-white) 70%, var(--tblr-primary));--tblr-range-thumb-disabled-bg:var(--tblr-secondary-color);--tblr-range-thumb-transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,outline-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;width:100%;height:calc(var(--tblr-range-thumb-height) + .25rem);padding:0;appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.form-range:focus::-moz-range-thumb{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:var(--tblr-range-thumb-width);height:var(--tblr-range-thumb-height);margin-top:calc((var(--tblr-range-track-height) - var(--tblr-range-thumb-height))/ 2);appearance:none;background-color:var(--tblr-range-thumb-bg);border:var(--tblr-range-thumb-border);border-radius:var(--tblr-range-thumb-border-radius);box-shadow:var(--tblr-range-thumb-box-shadow);-webkit-transition:var(--tblr-range-thumb-transition);transition:var(--tblr-range-thumb-transition)}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb{outline-color:transparent}.form-range::-webkit-slider-thumb:active{background-color:var(--tblr-range-thumb-active-bg)}.form-range::-webkit-slider-runnable-track{width:var(--tblr-range-track-width);height:var(--tblr-range-track-height);color:transparent;cursor:var(--tblr-range-track-cursor);background-color:var(--tblr-range-track-bg);border-color:transparent;border-radius:var(--tblr-range-track-border-radius);box-shadow:var(--tblr-range-track-box-shadow)}.form-range::-moz-range-thumb{width:var(--tblr-range-thumb-width);height:var(--tblr-range-thumb-height);appearance:none;background-color:var(--tblr-range-thumb-bg);border:var(--tblr-range-thumb-border);border-radius:var(--tblr-range-thumb-border-radius);box-shadow:var(--tblr-range-thumb-box-shadow);-moz-transition:var(--tblr-range-thumb-transition);transition:var(--tblr-range-thumb-transition)}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb{outline-color:transparent}.form-range::-moz-range-thumb:active{background-color:var(--tblr-range-thumb-active-bg)}.form-range::-moz-range-track{width:var(--tblr-range-track-width);height:var(--tblr-range-track-height);color:transparent;cursor:var(--tblr-range-track-cursor);background-color:var(--tblr-range-track-bg);border-color:transparent;border-radius:var(--tblr-range-track-border-radius);box-shadow:var(--tblr-range-track-box-shadow)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--tblr-range-thumb-disabled-bg)}.form-range:disabled::-moz-range-thumb{background-color:var(--tblr-range-thumb-disabled-bg)}.form-floating{--tblr-form-floating-height:calc(3.5rem + calc(var(--tblr-border-width) * 2));--tblr-form-floating-line-height:1.25;--tblr-form-floating-padding-x:var(--tblr-btn-input-padding-x);--tblr-form-floating-padding-y:1rem;--tblr-form-floating-input-padding-t:1.625rem;--tblr-form-floating-input-padding-b:0.625rem;--tblr-form-floating-label-height:1.5em;--tblr-form-floating-label-bg:var(--tblr-btn-input-bg);--tblr-form-floating-label-disabled-bg:var(--tblr-bg-forms-disabled);--tblr-form-floating-label-border-radius:var(--tblr-btn-input-border-radius);--tblr-form-floating-label-opacity:0.65;--tblr-form-floating-label-transform:scale(0.85) translateY(-0.5rem) translateX(calc(var(--tblr-dir) * 0.15rem));--tblr-form-floating-label-disabled-color:light-dark(var(--tblr-gray-600), var(--tblr-gray-400));--tblr-form-floating-transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out;position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:var(--tblr-form-floating-height);min-height:var(--tblr-form-floating-height);line-height:var(--tblr-form-floating-line-height)}.form-floating>label{position:absolute;top:0;inset-inline-start:0;z-index:2;max-width:100%;height:100%;padding:var(--tblr-form-floating-padding-y) var(--tblr-form-floating-padding-x);overflow:hidden;color:color-mix(in oklab,var(--tblr-body-color) calc(var(--tblr-form-floating-label-opacity) * 100%),transparent);text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--tblr-border-width) solid transparent;transform-origin:0 0;transition:var(--tblr-form-floating-transition)}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:var(--tblr-form-floating-padding-y) var(--tblr-form-floating-padding-x)}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:var(--tblr-form-floating-input-padding-t);padding-bottom:var(--tblr-form-floating-input-padding-b)}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:var(--tblr-form-floating-input-padding-t);padding-bottom:var(--tblr-form-floating-input-padding-b)}.form-floating>.form-select{padding-top:var(--tblr-form-floating-input-padding-t);padding-bottom:var(--tblr-form-floating-input-padding-b);padding-inline-start:var(--tblr-form-floating-padding-x)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{transform:var(--tblr-form-floating-label-transform)}.form-floating>.form-control:-webkit-autofill~label{transform:var(--tblr-form-floating-label-transform)}.form-floating>textarea:focus~label::after,.form-floating>textarea:not(:placeholder-shown)~label::after{position:absolute;inset:var(--tblr-form-floating-padding-y) calc(var(--tblr-form-floating-padding-x) * 0.5);z-index:-1;height:var(--tblr-form-floating-label-height);content:"";background-color:var(--tblr-form-floating-label-bg);border-radius:var(--tblr-form-floating-label-border-radius)}.form-floating>textarea:disabled~label::after{background-color:var(--tblr-form-floating-label-disabled-bg)}.form-floating>.form-control-plaintext~label{border-width:var(--tblr-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:var(--tblr-form-floating-label-disabled-color)}.input-group{--tblr-input-group-addon-padding-y:var(--tblr-btn-input-padding-y);--tblr-input-group-addon-padding-x:var(--tblr-btn-input-padding-x);--tblr-input-group-addon-font-size:var(--tblr-btn-input-font-size);--tblr-input-group-addon-line-height:var(--tblr-btn-input-line-height);--tblr-input-group-addon-color:var(--tblr-secondary-color);--tblr-input-group-addon-bg:var(--tblr-bg-surface-tertiary);--tblr-input-group-addon-border-color:var(--tblr-border-color);--tblr-input-group-addon-border-radius:var(--tblr-btn-input-border-radius);position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:var(--tblr-input-group-addon-padding-y) var(--tblr-input-group-addon-padding-x);font-size:var(--tblr-input-group-addon-font-size);font-weight:400;line-height:var(--tblr-input-group-addon-line-height);color:var(--tblr-input-group-addon-color);text-align:center;white-space:nowrap;background-color:var(--tblr-input-group-addon-bg);border:var(--tblr-border-width) solid var(--tblr-input-group-addon-border-color);border-radius:var(--tblr-input-group-addon-border-radius)}.input-group-lg{--tblr-input-group-addon-padding-y:var(--tblr-btn-input-lg-padding-y);--tblr-input-group-addon-padding-x:var(--tblr-btn-input-lg-padding-x);--tblr-input-group-addon-font-size:var(--tblr-btn-input-lg-font-size);--tblr-input-group-addon-line-height:var(--tblr-btn-input-lg-line-height);--tblr-input-group-addon-border-radius:var(--tblr-btn-input-lg-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select{--tblr-control-padding-y:var(--tblr-input-group-addon-padding-y);--tblr-control-padding-x:var(--tblr-input-group-addon-padding-x);--tblr-control-font-size:var(--tblr-input-group-addon-font-size);--tblr-control-line-height:var(--tblr-input-group-addon-line-height);--tblr-control-border-radius:var(--tblr-input-group-addon-border-radius);min-height:var(--tblr-control-min-height)}.input-group-lg>.form-select{padding-inline-end:calc(var(--tblr-btn-input-padding-x) + var(--tblr-control-select-indicator-padding))}.input-group-lg>.btn{line-height:1.5rem;min-height:calc(1.5rem + 1.375rem + calc(var(--tblr-border-width) * 2));padding:.6875rem 1.5rem;font-size:1rem;border-radius:var(--tblr-border-radius-lg)}.input-group-sm{--tblr-input-group-addon-padding-y:var(--tblr-btn-input-sm-padding-y);--tblr-input-group-addon-padding-x:var(--tblr-btn-input-sm-padding-x);--tblr-input-group-addon-font-size:var(--tblr-btn-input-sm-font-size);--tblr-input-group-addon-line-height:var(--tblr-btn-input-sm-line-height);--tblr-input-group-addon-border-radius:var(--tblr-btn-input-sm-border-radius)}.input-group-sm>.form-control,.input-group-sm>.form-select{--tblr-control-padding-y:var(--tblr-input-group-addon-padding-y);--tblr-control-padding-x:var(--tblr-input-group-addon-padding-x);--tblr-control-font-size:var(--tblr-input-group-addon-font-size);--tblr-control-line-height:var(--tblr-input-group-addon-line-height);--tblr-control-border-radius:var(--tblr-input-group-addon-border-radius);min-height:var(--tblr-control-min-height)}.input-group-sm>.form-select{padding-inline-end:calc(var(--tblr-btn-input-padding-x) + var(--tblr-control-select-indicator-padding))}.input-group-sm>.btn{line-height:1rem;min-height:calc(1rem + .875rem + calc(var(--tblr-border-width) * 2));padding:.4375rem .5rem;font-size:.75rem;border-radius:var(--tblr-border-radius-sm)}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-inline-start:calc(-1 * var(--tblr-border-width));border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--tblr-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:var(--tblr-spacer-1) var(--tblr-spacer-2);margin-top:.1rem;font-size:.765625rem;color:#fff;background-color:var(--tblr-success);border-radius:var(--tblr-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--tblr-form-valid-border-color);padding-inline-end:2.375rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='oklch%2867.38%25 0.1885 145.43deg%29' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right 1.53125rem center;background-size:1.8125rem 1.8125rem}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--tblr-form-valid-border-color);outline:var(--tblr-focus-ring-width) solid light-dark(color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)));outline-offset:var(--tblr-focus-ring-offset)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-inline-end:2.375rem;background-position:top 1.53125rem right 1.53125rem}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--tblr-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--tblr-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='oklch%2867.38%25 0.1885 145.43deg%29' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");padding-inline-end:calc(var(--tblr-control-select-indicator-padding) + 1.8125rem + var(--tblr-control-padding-x));background-position:var(--tblr-control-select-bg-position),center right var(--tblr-control-select-indicator-padding);background-size:16px 12px,1.8125rem 1.8125rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--tblr-form-valid-border-color);outline:var(--tblr-focus-ring-width) solid light-dark(color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)));outline-offset:var(--tblr-focus-ring-offset)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:5.375rem}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--tblr-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--tblr-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{outline:var(--tblr-focus-ring-width) solid light-dark(color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)));outline-offset:var(--tblr-focus-ring-offset)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--tblr-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-inline-start:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--tblr-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:var(--tblr-spacer-1) var(--tblr-spacer-2);margin-top:.1rem;font-size:.765625rem;color:#fff;background-color:var(--tblr-danger);border-radius:var(--tblr-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--tblr-form-invalid-border-color);padding-inline-end:2.375rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='oklch%2858.29%25 0.1941 25.59deg%29' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right 1.53125rem center;background-size:1.8125rem 1.8125rem}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--tblr-form-invalid-border-color);outline:var(--tblr-focus-ring-width) solid light-dark(color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)));outline-offset:var(--tblr-focus-ring-offset)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-inline-end:2.375rem;background-position:top 1.53125rem right 1.53125rem}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--tblr-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--tblr-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='oklch%2858.29%25 0.1941 25.59deg%29' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");padding-inline-end:calc(var(--tblr-control-select-indicator-padding) + 1.8125rem + var(--tblr-control-padding-x));background-position:var(--tblr-control-select-bg-position),center right var(--tblr-control-select-indicator-padding);background-size:16px 12px,1.8125rem 1.8125rem}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--tblr-form-invalid-border-color);outline:var(--tblr-focus-ring-width) solid light-dark(color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)));outline-offset:var(--tblr-focus-ring-offset)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:5.375rem}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--tblr-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--tblr-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{outline:var(--tblr-focus-ring-width) solid light-dark(color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)));outline-offset:var(--tblr-focus-ring-offset)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--tblr-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-inline-start:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--tblr-btn-padding-x:1rem;--tblr-btn-padding-y:0.5625rem;--tblr-btn-font-family:var(--tblr-body-font-family);--tblr-btn-font-size:0.875rem;--tblr-btn-font-weight:var(--tblr-font-weight-medium);--tblr-btn-line-height:1.25rem;--tblr-btn-color:var(--tblr-body-color);--tblr-btn-bg:transparent;--tblr-btn-border-width:var(--tblr-border-width);--tblr-btn-border-color:transparent;--tblr-btn-border-radius:var(--tblr-border-radius);--tblr-btn-hover-color:var(--tblr-btn-color);--tblr-btn-active-color:var(--tblr-btn-color);--tblr-btn-hover-border-color:transparent;--tblr-btn-box-shadow:var(--tblr-shadow-input);--tblr-btn-disabled-opacity:0.4;--tblr-btn-disabled-color:var(--tblr-btn-color);--tblr-btn-disabled-bg:var(--tblr-btn-bg);--tblr-btn-disabled-border-color:var(--tblr-btn-border-color);--tblr-btn-active-shadow:0 0 0 #000;display:inline-block;padding:var(--tblr-btn-padding-y) var(--tblr-btn-padding-x);font-family:var(--tblr-btn-font-family);font-size:var(--tblr-btn-font-size);font-weight:var(--tblr-btn-font-weight);line-height:var(--tblr-btn-line-height);color:var(--tblr-btn-color);text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;user-select:none;border:var(--tblr-btn-border-width) solid var(--tblr-btn-border-color);border-radius:var(--tblr-btn-border-radius);background-color:var(--tblr-btn-bg);box-shadow:var(--tblr-btn-box-shadow);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,outline-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn{outline-color:transparent}.btn:hover{color:var(--tblr-btn-hover-color);text-decoration:none;background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--tblr-btn-color);background-color:var(--tblr-btn-bg);border-color:var(--tblr-btn-border-color)}.btn:focus-visible{color:var(--tblr-btn-hover-color);background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.btn-check:focus-visible+.btn{border-color:var(--tblr-btn-hover-border-color);outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--tblr-btn-active-color);background-color:var(--tblr-btn-active-bg);border-color:var(--tblr-btn-active-border-color);box-shadow:var(--tblr-btn-active-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--tblr-btn-disabled-color);pointer-events:none;background-color:var(--tblr-btn-disabled-bg);border-color:var(--tblr-btn-disabled-border-color);opacity:var(--tblr-btn-disabled-opacity);box-shadow:none}.btn-link{--tblr-btn-font-weight:400;--tblr-btn-color:var(--tblr-link-color);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-link-hover-color);--tblr-btn-hover-border-color:transparent;--tblr-btn-active-color:var(--tblr-link-hover-color);--tblr-btn-active-border-color:transparent;--tblr-btn-disabled-color:light-dark(var(--tblr-gray-600), var(--tblr-gray-400));--tblr-btn-disabled-border-color:transparent;--tblr-btn-box-shadow:0 0 0 #000;text-decoration:none}.btn-link:focus-visible,.btn-link:hover{text-decoration:underline}.btn-link:focus-visible{color:var(--tblr-btn-color)}.btn-link:hover{color:var(--tblr-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--tblr-btn-padding-y:0.6875rem;--tblr-btn-padding-x:1.5rem;--tblr-btn-font-size:1rem;--tblr-btn-border-radius:var(--tblr-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--tblr-btn-padding-y:0.4375rem;--tblr-btn-padding-x:0.75rem;--tblr-btn-font-size:0.75rem;--tblr-btn-border-radius:var(--tblr-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-inline-start:1px var(--tblr-border-style);margin-inline-start:.306em;margin-inline-end:.1em;transform:rotate(-45deg)}.dropdown-menu{--tblr-dropdown-zindex:1000;--tblr-dropdown-min-width:11rem;--tblr-dropdown-padding-x:0;--tblr-dropdown-padding-y:0.25rem;--tblr-dropdown-spacer:1px;--tblr-dropdown-font-size:0.875rem;--tblr-dropdown-color:var(--tblr-body-color);--tblr-dropdown-bg:var(--tblr-bg-surface);--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-border-radius:var(--tblr-border-radius);--tblr-dropdown-border-width:var(--tblr-border-width);--tblr-dropdown-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-divider-margin-y:var(--tblr-spacer-2);--tblr-dropdown-box-shadow:var(--tblr-shadow-dropdown);--tblr-dropdown-link-color:inherit;--tblr-dropdown-link-hover-color:inherit;--tblr-dropdown-link-hover-bg:var(--tblr-hover-bg);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:var(--tblr-tertiary-color);--tblr-dropdown-item-padding-x:0.75rem;--tblr-dropdown-item-padding-y:0.5rem;--tblr-dropdown-header-color:light-dark(var(--tblr-gray-600), var(--tblr-gray-400));--tblr-dropdown-header-padding-x:0.75rem;--tblr-dropdown-header-padding-y:0.25rem;position:absolute;z-index:var(--tblr-dropdown-zindex);display:none;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;font-size:var(--tblr-dropdown-font-size);color:var(--tblr-dropdown-color);text-align:start;list-style:none;background-color:var(--tblr-dropdown-bg);background-clip:padding-box;border-radius:var(--tblr-dropdown-border-radius);box-shadow:var(--tblr-dropdown-box-shadow)}.dropdown-menu[data-bs-popper],.dropdown-menu[data-tblr-popper]{top:100%;inset-inline-start:0;margin-top:var(--tblr-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper],.dropdown-menu-start[data-tblr-popper]{inset-inline-end:auto;inset-inline-start:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper],.dropdown-menu-end[data-tblr-popper]{inset-inline-end:0;inset-inline-start:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper],.dropdown-menu-sm-start[data-tblr-popper]{inset-inline-end:auto;inset-inline-start:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper],.dropdown-menu-sm-end[data-tblr-popper]{inset-inline-end:0;inset-inline-start:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper],.dropdown-menu-md-start[data-tblr-popper]{inset-inline-end:auto;inset-inline-start:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper],.dropdown-menu-md-end[data-tblr-popper]{inset-inline-end:0;inset-inline-start:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper],.dropdown-menu-lg-start[data-tblr-popper]{inset-inline-end:auto;inset-inline-start:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper],.dropdown-menu-lg-end[data-tblr-popper]{inset-inline-end:0;inset-inline-start:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper],.dropdown-menu-xl-start[data-tblr-popper]{inset-inline-end:auto;inset-inline-start:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper],.dropdown-menu-xl-end[data-tblr-popper]{inset-inline-end:0;inset-inline-start:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper],.dropdown-menu-xxl-start[data-tblr-popper]{inset-inline-end:auto;inset-inline-start:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper],.dropdown-menu-xxl-end[data-tblr-popper]{inset-inline-end:0;inset-inline-start:auto}}.dropup .dropdown-menu[data-bs-popper],.dropup .dropdown-menu[data-tblr-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--tblr-dropdown-spacer)}.dropup .dropdown-toggle:after{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-inline-start:1px var(--tblr-border-style);margin-inline-start:.306em;margin-inline-end:.1em;transform:rotate(135deg)}.dropend .dropdown-menu[data-bs-popper],.dropend .dropdown-menu[data-tblr-popper]{top:0;inset-inline-end:auto;inset-inline-start:100%;margin-top:0;margin-inline-start:var(--tblr-dropdown-spacer)}.dropend .dropdown-toggle:after{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-inline-start:1px var(--tblr-border-style);margin-inline-start:.306em;margin-inline-end:.1em;transform:rotate(-135deg)}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper],.dropstart .dropdown-menu[data-tblr-popper]{top:0;inset-inline-end:100%;inset-inline-start:auto;margin-top:0;margin-inline-end:var(--tblr-dropdown-spacer)}.dropstart .dropdown-toggle:before{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-inline-start:1px var(--tblr-border-style);margin-inline-start:.1em;margin-inline-end:.306em;transform:rotate(45deg)}.dropstart .dropdown-toggle::after{content:none}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--tblr-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--tblr-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--tblr-dropdown-link-color);text-align:inherit;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--tblr-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--tblr-dropdown-link-hover-color);text-decoration:none;background-color:var(--tblr-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--tblr-dropdown-link-active-color);text-decoration:none;background-color:var(--tblr-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--tblr-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--tblr-dropdown-header-padding-y) var(--tblr-dropdown-header-padding-x);margin-bottom:0;font-size:.765625rem;color:var(--tblr-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);color:var(--tblr-dropdown-link-color)}.dropdown-menu-dark{--tblr-dropdown-color:oklch(86.99% 0 0deg);--tblr-dropdown-bg:oklch(26.86% 0 0deg);--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-box-shadow: ;--tblr-dropdown-link-color:oklch(86.99% 0 0deg);--tblr-dropdown-link-hover-color:#fff;--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-link-hover-bg:color-mix(in oklab, var(--tblr-white) 15%, transparent);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:oklch(55.55% 0 0deg);--tblr-dropdown-header-color:oklch(55.55% 0 0deg)}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--tblr-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-inline-start:calc(-1 * var(--tblr-border-width))}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-inline-end:0.75rem;padding-inline-start:0.75rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-inline-start:0}.dropstart .dropdown-toggle-split::before{margin-inline-end:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-inline-end:0.5625rem;padding-inline-start:0.5625rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-inline-end:1.125rem;padding-inline-start:1.125rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px color-mix(in oklab,var(--tblr-black) 12.5%,transparent)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(-1 * var(--tblr-border-width))}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:nth-child(n+3),.btn-group-vertical>:not(.btn-check)+.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--tblr-nav-link-padding-x:0.75rem;--tblr-nav-link-padding-y:0.5rem;--tblr-nav-link-font-size:var(--tblr-body-font-size);--tblr-nav-link-font-weight: ;--tblr-nav-link-color:var(--tblr-secondary-color);--tblr-nav-link-hover-color:var(--tblr-link-hover-color);--tblr-nav-link-disabled-color:var(--tblr-disabled-color);display:flex;flex-wrap:wrap;padding-inline-start:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--tblr-nav-link-padding-y) var(--tblr-nav-link-padding-x);font-size:var(--tblr-nav-link-font-size);font-weight:var(--tblr-nav-link-font-weight);color:var(--tblr-nav-link-color);background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link{outline-color:transparent}.nav-link:focus,.nav-link:hover{color:var(--tblr-nav-link-hover-color);text-decoration:none}.nav-link:focus-visible{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.nav-link.disabled,.nav-link:disabled{color:var(--tblr-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--tblr-nav-tabs-border-width:var(--tblr-border-width);--tblr-nav-tabs-border-color:var(--tblr-border-color);--tblr-nav-tabs-border-radius:var(--tblr-border-radius);--tblr-nav-tabs-link-hover-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);--tblr-nav-tabs-link-active-color:var(--tblr-body-color);--tblr-nav-tabs-link-active-bg:var(--tblr-body-bg);--tblr-nav-tabs-link-active-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);border-bottom:var(--tblr-nav-tabs-border-width) solid var(--tblr-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--tblr-nav-tabs-border-width));border:var(--tblr-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--tblr-nav-tabs-border-radius);border-top-right-radius:var(--tblr-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--tblr-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--tblr-nav-tabs-link-active-color);background-color:var(--tblr-nav-tabs-link-active-bg);border-color:var(--tblr-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--tblr-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--tblr-nav-pills-border-radius:var(--tblr-border-radius);--tblr-nav-pills-link-active-color:var(--tblr-primary);--tblr-nav-pills-link-active-bg:var(--tblr-active-bg)}.nav-pills .nav-link{border-radius:var(--tblr-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--tblr-nav-pills-link-active-color);background-color:var(--tblr-nav-pills-link-active-bg)}.nav-underline{--tblr-nav-underline-gap:1rem;--tblr-nav-underline-border-width:0.125rem;--tblr-nav-underline-link-active-color:var(--tblr-emphasis-color);gap:var(--tblr-nav-underline-gap)}.nav-underline .nav-link{padding-inline-end:0;padding-inline-start:0;border-bottom:var(--tblr-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentColor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--tblr-nav-underline-link-active-color);border-bottom-color:currentColor}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-grow:1;flex-basis:0;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--tblr-navbar-padding-x:0;--tblr-navbar-padding-y:0.25rem;--tblr-navbar-color:var(--tblr-body-color);--tblr-navbar-hover-color:var(--tblr-body-color);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:var(--tblr-body-color);--tblr-navbar-brand-padding-y:0.5rem;--tblr-navbar-brand-margin-end:1rem;--tblr-navbar-brand-font-size:1.25rem;--tblr-navbar-brand-color:var(--tblr-body-color);--tblr-navbar-brand-hover-color:var(--tblr-body-color);--tblr-navbar-nav-link-padding-x:0.75rem;--tblr-navbar-toggler-padding-y:0.25rem;--tblr-navbar-toggler-padding-x:0.75rem;--tblr-navbar-toggler-font-size:1rem;--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='black' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--tblr-navbar-toggler-icon-color:color-mix(in oklab, var(--tblr-body-color) 75%, transparent);--tblr-navbar-toggler-border-color:color-mix(in oklab, var(--tblr-emphasis-color) 15%, transparent);--tblr-navbar-toggler-border-radius:var(--tblr-border-radius);--tblr-navbar-toggler-focus-width:0;--tblr-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--tblr-navbar-padding-y) var(--tblr-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--tblr-navbar-brand-padding-y);padding-bottom:var(--tblr-navbar-brand-padding-y);margin-inline-end:var(--tblr-navbar-brand-margin-end);font-size:var(--tblr-navbar-brand-font-size);color:var(--tblr-navbar-brand-color);white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--tblr-navbar-brand-hover-color);text-decoration:none}.navbar-nav{--tblr-nav-link-padding-x:0;--tblr-nav-link-padding-y:0.5rem;--tblr-nav-link-font-size:var(--tblr-body-font-size);--tblr-nav-link-font-weight: ;--tblr-nav-link-color:var(--tblr-navbar-color);--tblr-nav-link-hover-color:var(--tblr-navbar-hover-color);--tblr-nav-link-disabled-color:var(--tblr-navbar-disabled-color);display:flex;flex-direction:column;padding-inline-start:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--tblr-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--tblr-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--tblr-navbar-active-color)}.navbar-collapse{flex-grow:1;flex-basis:100%;align-items:center}.navbar-toggler{padding:var(--tblr-navbar-toggler-padding-y) var(--tblr-navbar-toggler-padding-x);font-size:var(--tblr-navbar-toggler-font-size);line-height:1;color:var(--tblr-navbar-color);background-color:transparent;border:var(--tblr-border-width) solid var(--tblr-navbar-toggler-border-color);border-radius:var(--tblr-navbar-toggler-border-radius);transition:var(--tblr-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--tblr-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-color:var(--tblr-navbar-toggler-icon-color);mask-image:var(--tblr-navbar-toggler-icon-bg);mask-repeat:no-repeat;mask-position:center;mask-size:100%}.navbar-nav-scroll{max-height:var(--tblr-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-inline-end:var(--tblr-navbar-nav-link-padding-x);padding-inline-start:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-inline-end:var(--tblr-navbar-nav-link-padding-x);padding-inline-start:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-inline-end:var(--tblr-navbar-nav-link-padding-x);padding-inline-start:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-inline-end:var(--tblr-navbar-nav-link-padding-x);padding-inline-start:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-inline-end:var(--tblr-navbar-nav-link-padding-x);padding-inline-start:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-inline-end:var(--tblr-navbar-nav-link-padding-x);padding-inline-start:var(--tblr-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;box-shadow:none;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark],.navbar[data-theme=dark],body[data-bs-theme=dark] .navbar[data-bs-theme=light],body[data-theme=dark] .navbar[data-theme=light],html[data-bs-navbar-theme=dark] .page>.navbar,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=dark] .page>body.navbar .navbar[data-bs-theme=light],html[data-bs-navbar-theme=primary] .page>.navbar,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=primary] .page>body.navbar .navbar[data-bs-theme=light]{--tblr-navbar-color:color-mix(in oklab, var(--tblr-white) 70%, transparent);--tblr-navbar-hover-color:color-mix(in oklab, var(--tblr-white) 75%, transparent);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:#fff;--tblr-navbar-active-bg:var(--tblr-active-bg);--tblr-navbar-brand-color:#fff;--tblr-navbar-brand-hover-color:#fff;--tblr-navbar-toggler-border-color:color-mix(in oklab, var(--tblr-white) 10%, transparent);--tblr-navbar-toggler-icon-color:color-mix(in oklab, var(--tblr-white) 70%, transparent)}.theme-dark .navbar-toggler-icon,[data-bs-theme=dark] .navbar-toggler-icon,[data-theme=dark] .navbar-toggler-icon,body[data-bs-theme=dark] [data-bs-theme=light] .navbar-toggler-icon,body[data-theme=dark] [data-theme=light] .navbar-toggler-icon,html[data-bs-navbar-theme=dark] .page>.navbar .navbar-toggler-icon,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar .navbar-toggler-icon,html[data-bs-navbar-theme=primary] .page>.navbar .navbar-toggler-icon,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar .navbar-toggler-icon{--tblr-navbar-toggler-icon-color:color-mix(in oklab, var(--tblr-white) 70%, transparent)}.card{--tblr-card-spacer-y:1.25rem;--tblr-card-spacer-x:1.25rem;--tblr-card-title-spacer-y:1.25rem;--tblr-card-title-color: ;--tblr-card-subtitle-color: ;--tblr-card-border-width:var(--tblr-border-width);--tblr-card-border-color:var(--tblr-border-color-translucent);--tblr-card-border-radius:var(--tblr-border-radius-lg);--tblr-card-box-shadow:var(--tblr-shadow-card);--tblr-card-inner-border-radius:calc(var(--tblr-border-radius-lg) - (var(--tblr-border-width)));--tblr-card-cap-padding-y:1.25rem;--tblr-card-cap-padding-x:1.25rem;--tblr-card-cap-bg:var(--tblr-bg-surface-tertiary);--tblr-card-cap-color:inherit;--tblr-card-height: ;--tblr-card-color:inherit;--tblr-card-bg:var(--tblr-bg-surface);--tblr-card-img-overlay-padding:1rem;--tblr-card-group-margin:1.5rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--tblr-card-height);color:var(--tblr-body-color);word-wrap:break-word;background-color:var(--tblr-card-bg);background-clip:border-box;border:var(--tblr-card-border-width) solid var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius);box-shadow:var(--tblr-card-box-shadow)}.card>.hr,.card>hr{margin-inline-end:0;margin-inline-start:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--tblr-card-inner-border-radius);border-bottom-left-radius:var(--tblr-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--tblr-card-spacer-y) var(--tblr-card-spacer-x);color:var(--tblr-card-color)}.card-title{margin-bottom:var(--tblr-card-title-spacer-y);color:var(--tblr-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--tblr-card-title-spacer-y));margin-bottom:0;color:var(--tblr-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-inline-start:var(--tblr-card-spacer-x)}.card-header{--tblr-card-header-bg:transparent;padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x);margin-bottom:0;color:var(--tblr-card-cap-color);background-color:var(--tblr-card-header-bg,var(--tblr-card-cap-bg));border-bottom:var(--tblr-card-border-width) solid var(--tblr-card-border-color)}.card-header:first-child{border-radius:var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius) 0 0}.card-footer{padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x);color:var(--tblr-card-cap-color);background-color:var(--tblr-card-footer-bg,var(--tblr-card-cap-bg));border-top:var(--tblr-card-border-width) solid var(--tblr-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius)}.card-header-tabs{margin-inline-end:calc(-.5 * var(--tblr-card-cap-padding-x));margin-bottom:calc(-1 * var(--tblr-card-cap-padding-y));margin-inline-start:calc(-.5 * var(--tblr-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--tblr-card-bg);border-bottom-color:var(--tblr-card-bg)}.card-header-pills{margin-inline-end:calc(-.5 * var(--tblr-card-cap-padding-x));margin-inline-start:calc(-.5 * var(--tblr-card-cap-padding-x))}.card-img-overlay{position:absolute;inset:0;padding:var(--tblr-card-img-overlay-padding);border-radius:var(--tblr-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--tblr-card-inner-border-radius);border-bottom-left-radius:var(--tblr-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--tblr-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0;margin-bottom:0}.card-group>.card+.card{margin-inline-start:0;border-inline-start:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child)>.card-header,.card-group>.card:not(:last-child)>.card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-footer,.card-group>.card:not(:last-child)>.card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child)>.card-header,.card-group>.card:not(:first-child)>.card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-footer,.card-group>.card:not(:first-child)>.card-img-bottom{border-bottom-left-radius:0}}.pagination{--tblr-pagination-padding-x:0.25rem;--tblr-pagination-padding-y:calc(0.25rem + 1px);--tblr-pagination-font-size:0.875rem;--tblr-pagination-color:var(--tblr-body-color);--tblr-pagination-bg:transparent;--tblr-pagination-border-width:1px;--tblr-pagination-border-color:transparent;--tblr-pagination-border-radius:var(--tblr-border-radius);--tblr-pagination-hover-color:var(--tblr-link-hover-color);--tblr-pagination-hover-bg:var(--tblr-hover-bg);--tblr-pagination-hover-border-color:var(--tblr-pagination-border-color);--tblr-pagination-focus-color:var(--tblr-link-hover-color);--tblr-pagination-focus-bg:var(--tblr-secondary-bg);--tblr-pagination-active-color:#fff;--tblr-pagination-active-bg:var(--tblr-primary);--tblr-pagination-active-border-color:var(--tblr-primary);--tblr-pagination-disabled-color:var(--tblr-disabled-color);--tblr-pagination-disabled-bg:transparent;--tblr-pagination-disabled-border-color:var(--tblr-pagination-border-color);display:flex;padding-inline-start:0;list-style:none}.page-link{position:relative;display:block;padding:var(--tblr-pagination-padding-y) var(--tblr-pagination-padding-x);font-size:var(--tblr-pagination-font-size);color:var(--tblr-pagination-color);background-color:var(--tblr-pagination-bg);border:var(--tblr-pagination-border-width) solid var(--tblr-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,outline-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link{outline-color:transparent}.page-link:hover{z-index:2;color:var(--tblr-pagination-hover-color);text-decoration:none;background-color:var(--tblr-pagination-hover-bg);border-color:var(--tblr-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--tblr-pagination-focus-color);background-color:var(--tblr-pagination-focus-bg);outline:0}.page-link:focus-visible{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.active>.page-link,.page-link.active{z-index:3;color:var(--tblr-pagination-active-color);background-color:var(--tblr-pagination-active-bg);border-color:var(--tblr-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--tblr-pagination-disabled-color);pointer-events:none;background-color:var(--tblr-pagination-disabled-bg);border-color:var(--tblr-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-inline-start:calc(-1 * 1px)}.page-item:first-child .page-link{border-top-left-radius:var(--tblr-pagination-border-radius);border-bottom-left-radius:var(--tblr-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--tblr-pagination-border-radius);border-bottom-right-radius:var(--tblr-pagination-border-radius)}.pagination-lg{--tblr-pagination-padding-x:1.5rem;--tblr-pagination-padding-y:0.75rem;--tblr-pagination-font-size:1.09375rem;--tblr-pagination-border-radius:var(--tblr-border-radius-lg)}.pagination-sm{--tblr-pagination-padding-x:0.5rem;--tblr-pagination-padding-y:0.25rem;--tblr-pagination-font-size:0.765625rem;--tblr-pagination-border-radius:var(--tblr-border-radius-sm)}@keyframes progress-bar-stripes{0%{background-position-x:var(--tblr-progress-height)}}.progress,.progress-stacked{--tblr-progress-height:0.5rem;--tblr-progress-font-size:0.65625rem;--tblr-progress-bg:var(--tblr-fill-secondary);--tblr-progress-border-radius:var(--tblr-border-radius);--tblr-progress-box-shadow:var(--tblr-box-shadow-inset);--tblr-progress-bar-bg:var(--tblr-primary);--tblr-progress-bar-transition:width 0.6s ease;display:flex;height:var(--tblr-progress-height);overflow:hidden;font-size:var(--tblr-progress-font-size);background-color:var(--tblr-progress-bg);border-radius:var(--tblr-progress-border-radius);box-shadow:var(--tblr-progress-box-shadow)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--tblr-progress-bar-color,var(--tblr-progress-bar-fg,var(--tblr-primary-fg)));text-align:center;white-space:nowrap;background-color:var(--tblr-progress-bar-bg);transition:var(--tblr-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,color-mix(in oklab,var(--tblr-white) 15%,transparent) 25%,transparent 25%,transparent 50%,color-mix(in oklab,var(--tblr-white) 15%,transparent) 50%,color-mix(in oklab,var(--tblr-white) 15%,transparent) 75%,transparent 75%,transparent);background-size:var(--tblr-progress-height) var(--tblr-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--tblr-list-group-color:var(--tblr-body-color);--tblr-list-group-bg:inherit;--tblr-list-group-border-color:var(--tblr-border-color);--tblr-list-group-border-width:var(--tblr-border-width);--tblr-list-group-border-radius:var(--tblr-border-radius);--tblr-list-group-item-padding-x:1.25rem;--tblr-list-group-item-padding-y:1rem;--tblr-list-group-action-color:inherit;--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-hover-bg);--tblr-list-group-action-active-color:var(--tblr-body-color);--tblr-list-group-action-active-bg:var(--tblr-active-bg);--tblr-list-group-disabled-color:var(--tblr-secondary-color);--tblr-list-group-disabled-bg:inherit;--tblr-list-group-active-color:inherit;--tblr-list-group-active-bg:var(--tblr-active-bg);--tblr-list-group-active-border-color:var(--tblr-border-color);display:flex;flex-direction:column;padding-inline-start:0;margin-bottom:0;border-radius:var(--tblr-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item{position:relative;display:block;padding:var(--tblr-list-group-item-padding-y) var(--tblr-list-group-item-padding-x);color:var(--tblr-list-group-color);background-color:var(--tblr-list-group-bg);border:var(--tblr-list-group-border-width) solid var(--tblr-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--tblr-list-group-disabled-color);pointer-events:none;background-color:var(--tblr-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--tblr-list-group-active-color);background-color:var(--tblr-list-group-active-bg);border-color:var(--tblr-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--tblr-list-group-border-width));border-top-width:var(--tblr-list-group-border-width)}.list-group-item-action{width:100%;color:var(--tblr-list-group-action-color);text-align:inherit}.list-group-item-action:not(.active):focus,.list-group-item-action:not(.active):hover{z-index:1;color:var(--tblr-list-group-action-hover-color);text-decoration:none;background-color:var(--tblr-list-group-action-hover-bg)}.list-group-item-action:not(.active):active{color:var(--tblr-list-group-action-active-color);background-color:var(--tblr-list-group-action-active-bg)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-inline-start-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-inline-start:calc(-1 * var(--tblr-list-group-border-width));border-inline-start-width:var(--tblr-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-inline-start-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-inline-start:calc(-1 * var(--tblr-list-group-border-width));border-inline-start-width:var(--tblr-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-inline-start-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-inline-start:calc(-1 * var(--tblr-list-group-border-width));border-inline-start-width:var(--tblr-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-inline-start-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-inline-start:calc(-1 * var(--tblr-list-group-border-width));border-inline-start-width:var(--tblr-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-inline-start-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-inline-start:calc(-1 * var(--tblr-list-group-border-width));border-inline-start-width:var(--tblr-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--tblr-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--tblr-list-group-border-width);border-inline-start-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-inline-start:calc(-1 * var(--tblr-list-group-border-width));border-inline-start-width:var(--tblr-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--tblr-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--tblr-list-group-variant:var(--tblr-primary);--tblr-list-group-variant-lt:var(--tblr-primary-lt);--tblr-list-group-variant-fg:var(--tblr-primary-fg)}.list-group-item-secondary{--tblr-list-group-variant:var(--tblr-secondary);--tblr-list-group-variant-lt:var(--tblr-secondary-lt);--tblr-list-group-variant-fg:var(--tblr-secondary-fg)}.list-group-item-success{--tblr-list-group-variant:var(--tblr-success);--tblr-list-group-variant-lt:var(--tblr-success-lt);--tblr-list-group-variant-fg:var(--tblr-success-fg)}.list-group-item-info{--tblr-list-group-variant:var(--tblr-info);--tblr-list-group-variant-lt:var(--tblr-info-lt);--tblr-list-group-variant-fg:var(--tblr-info-fg)}.list-group-item-warning{--tblr-list-group-variant:var(--tblr-warning);--tblr-list-group-variant-lt:var(--tblr-warning-lt);--tblr-list-group-variant-fg:var(--tblr-warning-fg)}.list-group-item-danger{--tblr-list-group-variant:var(--tblr-danger);--tblr-list-group-variant-lt:var(--tblr-danger-lt);--tblr-list-group-variant-fg:var(--tblr-danger-fg)}.list-group-item-light{--tblr-list-group-variant:var(--tblr-light);--tblr-list-group-variant-lt:var(--tblr-light-lt);--tblr-list-group-variant-fg:var(--tblr-light-fg)}.list-group-item-dark{--tblr-list-group-variant:var(--tblr-dark);--tblr-list-group-variant-lt:var(--tblr-dark-lt);--tblr-list-group-variant-fg:var(--tblr-dark-fg)}.list-group-item-muted{--tblr-list-group-variant:var(--tblr-muted);--tblr-list-group-variant-lt:var(--tblr-muted-lt);--tblr-list-group-variant-fg:var(--tblr-muted-fg)}.list-group-item-blue{--tblr-list-group-variant:var(--tblr-blue);--tblr-list-group-variant-lt:var(--tblr-blue-lt);--tblr-list-group-variant-fg:var(--tblr-blue-fg)}.list-group-item-azure{--tblr-list-group-variant:var(--tblr-azure);--tblr-list-group-variant-lt:var(--tblr-azure-lt);--tblr-list-group-variant-fg:var(--tblr-azure-fg)}.list-group-item-indigo{--tblr-list-group-variant:var(--tblr-indigo);--tblr-list-group-variant-lt:var(--tblr-indigo-lt);--tblr-list-group-variant-fg:var(--tblr-indigo-fg)}.list-group-item-purple{--tblr-list-group-variant:var(--tblr-purple);--tblr-list-group-variant-lt:var(--tblr-purple-lt);--tblr-list-group-variant-fg:var(--tblr-purple-fg)}.list-group-item-pink{--tblr-list-group-variant:var(--tblr-pink);--tblr-list-group-variant-lt:var(--tblr-pink-lt);--tblr-list-group-variant-fg:var(--tblr-pink-fg)}.list-group-item-red{--tblr-list-group-variant:var(--tblr-red);--tblr-list-group-variant-lt:var(--tblr-red-lt);--tblr-list-group-variant-fg:var(--tblr-red-fg)}.list-group-item-orange{--tblr-list-group-variant:var(--tblr-orange);--tblr-list-group-variant-lt:var(--tblr-orange-lt);--tblr-list-group-variant-fg:var(--tblr-orange-fg)}.list-group-item-yellow{--tblr-list-group-variant:var(--tblr-yellow);--tblr-list-group-variant-lt:var(--tblr-yellow-lt);--tblr-list-group-variant-fg:var(--tblr-yellow-fg)}.list-group-item-lime{--tblr-list-group-variant:var(--tblr-lime);--tblr-list-group-variant-lt:var(--tblr-lime-lt);--tblr-list-group-variant-fg:var(--tblr-lime-fg)}.list-group-item-green{--tblr-list-group-variant:var(--tblr-green);--tblr-list-group-variant-lt:var(--tblr-green-lt);--tblr-list-group-variant-fg:var(--tblr-green-fg)}.list-group-item-teal{--tblr-list-group-variant:var(--tblr-teal);--tblr-list-group-variant-lt:var(--tblr-teal-lt);--tblr-list-group-variant-fg:var(--tblr-teal-fg)}.list-group-item-cyan{--tblr-list-group-variant:var(--tblr-cyan);--tblr-list-group-variant-lt:var(--tblr-cyan-lt);--tblr-list-group-variant-fg:var(--tblr-cyan-fg)}.list-group-item-azure,.list-group-item-blue,.list-group-item-cyan,.list-group-item-danger,.list-group-item-dark,.list-group-item-green,.list-group-item-indigo,.list-group-item-info,.list-group-item-light,.list-group-item-lime,.list-group-item-muted,.list-group-item-orange,.list-group-item-pink,.list-group-item-primary,.list-group-item-purple,.list-group-item-red,.list-group-item-secondary,.list-group-item-success,.list-group-item-teal,.list-group-item-warning,.list-group-item-yellow{--tblr-list-group-color:var(--tblr-list-group-variant);--tblr-list-group-bg:var(--tblr-list-group-variant-lt);--tblr-list-group-border-color:color-mix(in oklab, var(--tblr-list-group-variant) 24%, transparent);--tblr-list-group-action-color:var(--tblr-list-group-variant);--tblr-list-group-action-hover-color:var(--tblr-list-group-variant);--tblr-list-group-action-hover-bg:color-mix(in oklab, var(--tblr-list-group-variant) 16%, transparent);--tblr-list-group-action-active-color:var(--tblr-list-group-variant-fg);--tblr-list-group-action-active-bg:var(--tblr-list-group-variant);--tblr-list-group-active-color:var(--tblr-list-group-variant);--tblr-list-group-active-bg:var(--tblr-list-group-variant-lt);--tblr-list-group-active-border-color:color-mix(in oklab, var(--tblr-list-group-variant) 24%, transparent)}.toast{--tblr-toast-zindex:1090;--tblr-toast-padding-x:0.75rem;--tblr-toast-padding-y:0.5rem;--tblr-toast-spacing:calc(var(--tblr-page-padding) * 2);--tblr-toast-max-width:350px;--tblr-toast-font-size:0.875rem;--tblr-toast-color: ;--tblr-toast-bg:var(--tblr-bg-surface);--tblr-toast-border-width:var(--tblr-border-width);--tblr-toast-border-color:var(--tblr-border-color);--tblr-toast-border-radius:var(--tblr-border-radius);--tblr-toast-box-shadow:var(--tblr-box-shadow);--tblr-toast-header-color:var(--tblr-secondary-color);--tblr-toast-header-bg:color-mix(in oklab, var(--tblr-body-bg) 85%, transparent);--tblr-toast-header-border-color:var(--tblr-border-color);width:var(--tblr-toast-max-width);max-width:100%;font-size:var(--tblr-toast-font-size);color:var(--tblr-toast-color);pointer-events:auto;background-color:var(--tblr-toast-bg);background-clip:padding-box;border:var(--tblr-toast-border-width) solid var(--tblr-toast-border-color);box-shadow:var(--tblr-toast-box-shadow);border-radius:var(--tblr-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--tblr-toast-zindex:1090;position:absolute;z-index:var(--tblr-toast-zindex);width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--tblr-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--tblr-toast-padding-y) var(--tblr-toast-padding-x);color:var(--tblr-toast-header-color);background-color:var(--tblr-toast-header-bg);background-clip:padding-box;border-bottom:var(--tblr-toast-border-width) solid var(--tblr-toast-header-border-color);border-top-left-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));border-top-right-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width))}.toast-header .btn-close{margin-inline-end:calc(-.5 * var(--tblr-toast-padding-x));margin-inline-start:var(--tblr-toast-padding-x)}.toast-body{padding:var(--tblr-toast-padding-x);word-wrap:break-word}.modal{--tblr-modal-zindex:1055;--tblr-modal-width:540px;--tblr-modal-padding:1.5rem;--tblr-modal-margin:0.5rem;--tblr-modal-color:var(--tblr-body-color);--tblr-modal-bg:var(--tblr-bg-surface);--tblr-modal-border-color:transparent;--tblr-modal-border-width:var(--tblr-border-width);--tblr-modal-border-radius:var(--tblr-border-radius-lg);--tblr-modal-box-shadow:var(--tblr-box-shadow-sm);--tblr-modal-inner-border-radius:calc(var(--tblr-border-radius-lg) - (var(--tblr-border-width)));--tblr-modal-header-padding-x:1.5rem;--tblr-modal-header-padding-y:1.5rem;--tblr-modal-header-padding:1.5rem;--tblr-modal-header-border-color:var(--tblr-border-color);--tblr-modal-header-border-width:var(--tblr-border-width);--tblr-modal-title-line-height:1.4285714286;--tblr-modal-footer-gap:0.75rem;--tblr-modal-footer-bg:var(--tblr-bg-surface-tertiary);--tblr-modal-footer-border-color:var(--tblr-border-color);--tblr-modal-footer-border-width:var(--tblr-border-width);position:fixed;inset-inline-start:0;top:0;z-index:var(--tblr-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--tblr-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transform:translate(0,-1rem);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--tblr-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--tblr-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--tblr-modal-color);pointer-events:auto;background-color:var(--tblr-modal-bg);background-clip:padding-box;border:var(--tblr-modal-border-width) solid var(--tblr-modal-border-color);border-radius:var(--tblr-modal-border-radius);box-shadow:var(--tblr-modal-box-shadow);outline:0}.modal-backdrop{--tblr-backdrop-zindex:1050;--tblr-backdrop-bg:light-dark(var(--tblr-gray-800), var(--tblr-black));--tblr-backdrop-opacity:0.32;position:fixed;inset-inline-start:0;top:0;z-index:var(--tblr-backdrop-zindex);width:100vw;height:100vh;background-color:var(--tblr-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--tblr-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--tblr-modal-header-padding);border-bottom:var(--tblr-modal-header-border-width) solid var(--tblr-modal-header-border-color);border-top-left-radius:var(--tblr-modal-inner-border-radius);border-top-right-radius:var(--tblr-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--tblr-modal-header-padding-y) * .5) calc(var(--tblr-modal-header-padding-x) * .5);margin-top:calc(-.5 * var(--tblr-modal-header-padding-y));margin-inline-end:calc(-.5 * var(--tblr-modal-header-padding-x));margin-bottom:calc(-.5 * var(--tblr-modal-header-padding-y));margin-inline-start:auto}.modal-title{margin-bottom:0;line-height:var(--tblr-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--tblr-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--tblr-modal-padding) - var(--tblr-modal-footer-gap) * .5);background-color:var(--tblr-modal-footer-bg);border-top:var(--tblr-modal-footer-border-width) solid var(--tblr-modal-footer-border-color);border-bottom-right-radius:var(--tblr-modal-inner-border-radius);border-bottom-left-radius:var(--tblr-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--tblr-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--tblr-modal-margin:1.75rem;--tblr-modal-box-shadow:var(--tblr-box-shadow)}.modal-dialog{max-width:var(--tblr-modal-width);margin-inline-end:auto;margin-inline-start:auto}.modal-sm{--tblr-modal-width:380px}}.modal-lg{--tblr-modal-width:min(720px, 100% - 2 * var(--tblr-modal-margin))}.modal-xl{--tblr-modal-width:min(1140px, 100% - 2 * var(--tblr-modal-margin))}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--tblr-tooltip-zindex:1080;--tblr-tooltip-max-width:200px;--tblr-tooltip-padding-x:var(--tblr-spacer-2);--tblr-tooltip-padding-y:var(--tblr-spacer-1);--tblr-tooltip-margin: ;--tblr-tooltip-font-size:0.765625rem;--tblr-tooltip-color:var(--tblr-text-inverted);--tblr-tooltip-bg:var(--tblr-bg-surface-inverted);--tblr-tooltip-border-radius:var(--tblr-border-radius);--tblr-tooltip-opacity:0.9;--tblr-tooltip-arrow-width:0.8rem;--tblr-tooltip-arrow-height:0.4rem;z-index:var(--tblr-tooltip-zindex);display:block;margin:var(--tblr-tooltip-margin);font-family:var(--tblr-font-sans-serif);font-style:normal;font-weight:400;line-height:1.4285714286;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--tblr-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--tblr-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--tblr-tooltip-arrow-width);height:var(--tblr-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--tblr-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * .5) 0;border-top-color:var(--tblr-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--tblr-tooltip-arrow-height));width:var(--tblr-tooltip-arrow-height);height:var(--tblr-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * .5) 0;border-right-color:var(--tblr-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--tblr-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height);border-bottom-color:var(--tblr-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--tblr-tooltip-arrow-height));width:var(--tblr-tooltip-arrow-height);height:var(--tblr-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--tblr-tooltip-arrow-width) * .5) 0 calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height);border-left-color:var(--tblr-tooltip-bg)}.tooltip-inner{max-width:var(--tblr-tooltip-max-width);padding:var(--tblr-tooltip-padding-y) var(--tblr-tooltip-padding-x);color:var(--tblr-tooltip-color);text-align:center;background-color:var(--tblr-tooltip-bg);border-radius:var(--tblr-tooltip-border-radius)}.popover{--tblr-popover-zindex:1070;--tblr-popover-max-width:276px;--tblr-popover-font-size:0.765625rem;--tblr-popover-bg:var(--tblr-bg-surface);--tblr-popover-border-width:var(--tblr-border-width);--tblr-popover-border-color:var(--tblr-border-color);--tblr-popover-border-radius:var(--tblr-border-radius-lg);--tblr-popover-inner-border-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));--tblr-popover-box-shadow:var(--tblr-shadow-lg);--tblr-popover-header-padding-x:1rem;--tblr-popover-header-padding-y:0.5rem;--tblr-popover-header-font-size:0.875rem;--tblr-popover-header-color:light-dark(var(--tblr-gray-900), var(--tblr-white));--tblr-popover-header-bg:transparent;--tblr-popover-body-padding-x:0.5rem;--tblr-popover-body-padding-y:0.5rem;--tblr-popover-body-color:inherit;--tblr-popover-arrow-width:1rem;--tblr-popover-arrow-height:0.5rem;--tblr-popover-arrow-border:var(--tblr-popover-border-color);z-index:var(--tblr-popover-zindex);display:block;max-width:var(--tblr-popover-max-width);font-family:var(--tblr-font-sans-serif);font-style:normal;font-weight:400;line-height:1.4285714286;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--tblr-popover-font-size);word-wrap:break-word;background-color:var(--tblr-popover-bg);background-clip:padding-box;border:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-radius:var(--tblr-popover-border-radius);box-shadow:var(--tblr-popover-box-shadow)}.popover .popover-arrow{display:block;width:var(--tblr-popover-arrow-width);height:var(--tblr-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--tblr-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--tblr-popover-border-width);border-top-color:var(--tblr-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height);height:var(--tblr-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--tblr-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--tblr-popover-border-width);border-right-color:var(--tblr-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--tblr-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--tblr-popover-border-width);border-bottom-color:var(--tblr-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;inset-inline-start:50%;display:block;width:var(--tblr-popover-arrow-width);margin-inline-start:calc(-.5 * var(--tblr-popover-arrow-width));content:"";border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height);height:var(--tblr-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--tblr-popover-arrow-width) * .5) 0 calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--tblr-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--tblr-popover-border-width);border-left-color:var(--tblr-popover-bg)}.popover-header{padding:var(--tblr-popover-header-padding-y) var(--tblr-popover-header-padding-x);margin-bottom:0;font-size:var(--tblr-popover-header-font-size);color:var(--tblr-popover-header-color);background-color:var(--tblr-popover-header-bg);border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-top-left-radius:var(--tblr-popover-inner-border-radius);border-top-right-radius:var(--tblr-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--tblr-popover-body-padding-y) var(--tblr-popover-body-padding-x);color:var(--tblr-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:inline-start;width:100%;margin-inline-end:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(calc(var(--tblr-dir) * 100%))}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(calc(var(--tblr-dir) * -100%))}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;filter:var(--tblr-carousel-control-icon-filter);border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{inset-inline-start:0}.carousel-control-next{inset-inline-end:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:1.5rem;height:1.5rem;background-color:currentColor;mask-repeat:no-repeat;mask-position:50%;mask-size:100% 100%}.carousel-control-prev-icon{mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='15 18 9 12 15 6'%3e%3c/polyline%3e%3c/svg%3e")}.carousel-control-next-icon{mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='9 18 15 12 9 6'%3e%3c/polyline%3e%3c/svg%3e")}.carousel-indicators{position:absolute;inset-inline:0;bottom:0;z-index:2;display:flex;justify-content:center;padding:0;margin-inline-end:15%;margin-bottom:1rem;margin-inline-start:15%}.carousel-indicators [data-bs-target],.carousel-indicators [data-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-inline-end:3px;margin-inline-start:3px;text-indent:-999px;cursor:pointer;background-color:var(--tblr-carousel-indicator-active-bg);background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target],.carousel-indicators [data-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;inset-inline:15%;bottom:1.25rem;padding-top:1.25rem;padding-bottom:1.25rem;color:var(--tblr-carousel-caption-color);text-align:center}.carousel-dark{--tblr-carousel-indicator-active-bg:#000;--tblr-carousel-caption-color:#000;--tblr-carousel-control-icon-filter:invert(1) grayscale(100)}:root,[data-bs-theme=light],[data-theme=light]{--tblr-carousel-indicator-active-bg:#fff;--tblr-carousel-caption-color:#fff;--tblr-carousel-control-icon-filter: }.theme-dark,[data-bs-theme=dark],[data-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light],body[data-theme=dark] [data-theme=light],html[data-bs-navbar-theme=dark] .page>.navbar,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=dark] .page>body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=primary] .page>.navbar,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=primary] .page>body.navbar [data-bs-theme=light]{--tblr-carousel-indicator-active-bg:#000;--tblr-carousel-caption-color:#000;--tblr-carousel-control-icon-filter:invert(1) grayscale(100)}.spinner-border,.spinner-grow{display:inline-block;flex-shrink:0;width:var(--tblr-spinner-width);height:var(--tblr-spinner-height);vertical-align:var(--tblr-spinner-vertical-align);border-radius:50%;animation:var(--tblr-spinner-animation-speed) linear infinite var(--tblr-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-0.125em;--tblr-spinner-border-width:2px;--tblr-spinner-animation-speed:0.75s;--tblr-spinner-animation-name:spinner-border;border:var(--tblr-spinner-border-width) solid currentColor;border-right-color:transparent}.spinner-border-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem;--tblr-spinner-border-width:1px}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-0.125em;--tblr-spinner-animation-speed:0.75s;--tblr-spinner-animation-name:spinner-grow;background-color:currentColor;opacity:0}.spinner-grow-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--tblr-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--tblr-offcanvas-zindex:1045;--tblr-offcanvas-width:400px;--tblr-offcanvas-height:30vh;--tblr-offcanvas-padding-x:1.5rem;--tblr-offcanvas-padding-y:1.5rem;--tblr-offcanvas-margin:0.5rem;--tblr-offcanvas-color:var(--tblr-body-color);--tblr-offcanvas-bg:var(--tblr-bg-surface);--tblr-offcanvas-border-width:var(--tblr-border-width);--tblr-offcanvas-border-color:var(--tblr-border-color);--tblr-offcanvas-box-shadow:var(--tblr-box-shadow-sm);--tblr-offcanvas-transition:transform 0.3s ease-in-out;--tblr-offcanvas-title-line-height:1.4285714286}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;inset-inline-start:0;width:var(--tblr-offcanvas-width);border-inline-end:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * -100%))}.offcanvas-sm.offcanvas-end{top:0;inset-inline-end:0;width:var(--tblr-offcanvas-width);border-inline-start:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * 100%))}.offcanvas-sm.offcanvas-top{top:0;inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;--tblr-offcanvas-margin:0px;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;inset-inline-start:0;width:var(--tblr-offcanvas-width);border-inline-end:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * -100%))}.offcanvas-md.offcanvas-end{top:0;inset-inline-end:0;width:var(--tblr-offcanvas-width);border-inline-start:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * 100%))}.offcanvas-md.offcanvas-top{top:0;inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;--tblr-offcanvas-margin:0px;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;inset-inline-start:0;width:var(--tblr-offcanvas-width);border-inline-end:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * -100%))}.offcanvas-lg.offcanvas-end{top:0;inset-inline-end:0;width:var(--tblr-offcanvas-width);border-inline-start:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * 100%))}.offcanvas-lg.offcanvas-top{top:0;inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;--tblr-offcanvas-margin:0px;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;inset-inline-start:0;width:var(--tblr-offcanvas-width);border-inline-end:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * -100%))}.offcanvas-xl.offcanvas-end{top:0;inset-inline-end:0;width:var(--tblr-offcanvas-width);border-inline-start:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * 100%))}.offcanvas-xl.offcanvas-top{top:0;inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;--tblr-offcanvas-margin:0px;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;inset-inline-start:0;width:var(--tblr-offcanvas-width);border-inline-end:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * -100%))}.offcanvas-xxl.offcanvas-end{top:0;inset-inline-end:0;width:var(--tblr-offcanvas-width);border-inline-start:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * 100%))}.offcanvas-xxl.offcanvas-top{top:0;inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;--tblr-offcanvas-margin:0px;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--tblr-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--tblr-offcanvas-color);visibility:hidden;background-color:var(--tblr-offcanvas-bg);background-clip:padding-box;outline:0;box-shadow:var(--tblr-offcanvas-box-shadow);transition:var(--tblr-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;inset-inline-start:0;width:var(--tblr-offcanvas-width);border-inline-end:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * -100%))}.offcanvas.offcanvas-end{top:0;inset-inline-end:0;width:var(--tblr-offcanvas-width);border-inline-start:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateX(calc(var(--tblr-dir) * 100%))}.offcanvas.offcanvas-top{top:0;inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{inset-inline:0;height:var(--tblr-offcanvas-height);max-height:100%;border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;inset-inline-start:0;top:0;z-index:1040;width:100vw;height:100vh;background-color:light-dark(var(--tblr-gray-800),var(--tblr-black))}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.32}.offcanvas-header{display:flex;align-items:center;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--tblr-offcanvas-padding-y) * .5) calc(var(--tblr-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--tblr-offcanvas-padding-y));margin-inline-end:calc(-.5 * var(--tblr-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--tblr-offcanvas-padding-y));margin-inline-start:auto}.offcanvas-title{margin-bottom:0;line-height:var(--tblr-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.2}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@media (prefers-reduced-motion:reduce){.placeholder-glow .placeholder{animation:none}}@keyframes placeholder-glow{50%{opacity:.1}}.placeholder-wave{mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.9) 75%,#000 95%);mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@media (prefers-reduced-motion:reduce){.placeholder-wave{animation:none}}@keyframes placeholder-wave{100%{mask-position:-200% 0%}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:inline-start!important}.float-end{float:inline-end!important}.float-none{float:none!important}.object-fit-contain{object-fit:contain!important}.object-fit-cover{object-fit:cover!important}.object-fit-fill{object-fit:fill!important}.object-fit-scale{object-fit:scale-down!important}.object-fit-none{object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--tblr-box-shadow)!important}.shadow-sm{box-shadow:var(--tblr-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--tblr-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-primary) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-secondary{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-secondary) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-success{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-success) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-info{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-info) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-warning{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-warning) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-danger{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-danger) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-light{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-light) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-dark{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-dark) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-muted{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-muted) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-blue{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-blue) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-azure{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-azure) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-indigo{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-indigo) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-purple{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-purple) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-pink{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-pink) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-red{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-red) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-orange{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-orange) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-yellow{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-yellow) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-lime{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-lime) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-green{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-green) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-teal{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-teal) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.focus-ring-cyan{--tblr-focus-ring-color:color-mix(in oklab, var(--tblr-cyan) calc(var(--tblr-focus-ring-opacity) * 100%), transparent)}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{inset-inline-start:0!important}.start-50{inset-inline-start:50%!important}.start-100{inset-inline-start:100%!important}.end-0{inset-inline-end:0!important}.end-50{inset-inline-end:50%!important}.end-100{inset-inline-end:100%!important}.translate-middle{transform:translate(calc(var(--tblr-dir) * -50%),-50%)!important}.translate-middle-x{transform:translateX(calc(var(--tblr-dir) * -50%))!important}.translate-middle-y{transform:translateY(-50%)!important}.object-contain{object-fit:contain!important}.object-cover{object-fit:cover!important}.object-fill{object-fit:fill!important}.object-scale-down{object-fit:scale-down!important}.object-none{object-fit:none!important}.cursor-auto{cursor:auto!important}.cursor-pointer{cursor:pointer!important}.cursor-move{cursor:move!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-zoom-in{cursor:zoom-in!important}.cursor-zoom-out{cursor:zoom-out!important}.cursor-default{cursor:default!important}.cursor-none{cursor:none!important}.cursor-help{cursor:help!important}.cursor-progress{cursor:progress!important}.cursor-wait{cursor:wait!important}.cursor-text{cursor:text!important}.cursor-v-text{cursor:vertical-text!important}.cursor-grab{cursor:grab!important}.cursor-grabbing{cursor:grabbing!important}.cursor-crosshair{cursor:crosshair!important}.border{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-wide{border:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-0{border:0!important}.border-top{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-top-wide{border-top:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-top-0{border-top:0!important}.border-end{border-inline-end:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-end-wide{border-inline-end:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-end-0{border-inline-end:0!important}.border-bottom{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-bottom-wide{border-bottom:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-start-wide{border-inline-start:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-start-0{border-inline-start:0!important}.border-x{border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important;border-inline-end:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-x-wide{border-inline-start:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important;border-inline-end:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-x-0{border-inline-start:0!important;border-inline-end:0!important}.border-y{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important;border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-y-wide{border-top:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important;border-bottom:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-y-0{border-top:0!important;border-bottom:0!important}.border-black{--tblr-border-opacity:1;border-color:color-mix(in oklab,var(--tblr-black) calc(var(--tblr-border-opacity) * 100%),transparent)!important}.border-primary{--tblr-border-opacity:1}.border-secondary{--tblr-border-opacity:1}.border-success{--tblr-border-opacity:1}.border-info{--tblr-border-opacity:1}.border-warning{--tblr-border-opacity:1}.border-danger{--tblr-border-opacity:1}.border-light{--tblr-border-opacity:1}.border-dark{--tblr-border-opacity:1}.border-muted{--tblr-border-opacity:1}.border-blue{--tblr-border-opacity:1}.border-azure{--tblr-border-opacity:1}.border-indigo{--tblr-border-opacity:1}.border-purple{--tblr-border-opacity:1}.border-pink{--tblr-border-opacity:1}.border-red{--tblr-border-opacity:1}.border-orange{--tblr-border-opacity:1}.border-yellow{--tblr-border-opacity:1}.border-lime{--tblr-border-opacity:1}.border-green{--tblr-border-opacity:1}.border-teal{--tblr-border-opacity:1}.border-cyan{--tblr-border-opacity:1}.border-white{--tblr-border-opacity:1}.border-primary-subtle{border-color:var(--tblr-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--tblr-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--tblr-success-border-subtle)!important}.border-info-subtle{border-color:var(--tblr-info-border-subtle)!important}.border-warning-subtle{border-color:var(--tblr-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--tblr-danger-border-subtle)!important}.border-light-subtle{border-color:var(--tblr-light-border-subtle)!important}.border-dark-subtle{border-color:var(--tblr-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--tblr-border-opacity:0.1}.border-opacity-25{--tblr-border-opacity:0.25}.border-opacity-50{--tblr-border-opacity:0.5}.border-opacity-75{--tblr-border-opacity:0.75}.border-opacity-100{--tblr-border-opacity:1}.w-0{width:0!important}.w-1{width:.25rem!important}.w-2{width:.5rem!important}.w-3{width:1rem!important}.w-4{width:1.5rem!important}.w-5{width:2rem!important}.w-6{width:2.5rem!important}.w-25{width:25%!important}.w-33{width:33.33333%!important}.w-50{width:50%!important}.w-66{width:66.66666%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-0{height:0!important}.h-1{height:.25rem!important}.h-2{height:.5rem!important}.h-3{height:1rem!important}.h-4{height:1.5rem!important}.h-5{height:2rem!important}.h-6{height:2.5rem!important}.h-25{height:25%!important}.h-33{height:33.33333%!important}.h-50{height:50%!important}.h-66{height:66.66666%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.columns-2{columns:2!important}.columns-3{columns:3!important}.columns-4{columns:4!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:2rem!important}.m-6{margin:2.5rem!important}.m-auto{margin:auto!important}.mx-0{margin-inline-end:0!important;margin-inline-start:0!important}.mx-1{margin-inline-end:.25rem!important;margin-inline-start:.25rem!important}.mx-2{margin-inline-end:.5rem!important;margin-inline-start:.5rem!important}.mx-3{margin-inline-end:1rem!important;margin-inline-start:1rem!important}.mx-4{margin-inline-end:1.5rem!important;margin-inline-start:1.5rem!important}.mx-5{margin-inline-end:2rem!important;margin-inline-start:2rem!important}.mx-6{margin-inline-end:2.5rem!important;margin-inline-start:2.5rem!important}.mx-auto{margin-inline-end:auto!important;margin-inline-start:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-6{margin-top:2.5rem!important;margin-bottom:2.5rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:2rem!important}.mt-6{margin-top:2.5rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-inline-end:0!important}.me-1{margin-inline-end:.25rem!important}.me-2{margin-inline-end:.5rem!important}.me-3{margin-inline-end:1rem!important}.me-4{margin-inline-end:1.5rem!important}.me-5{margin-inline-end:2rem!important}.me-6{margin-inline-end:2.5rem!important}.me-auto{margin-inline-end:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:2rem!important}.mb-6{margin-bottom:2.5rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-inline-start:0!important}.ms-1{margin-inline-start:.25rem!important}.ms-2{margin-inline-start:.5rem!important}.ms-3{margin-inline-start:1rem!important}.ms-4{margin-inline-start:1.5rem!important}.ms-5{margin-inline-start:2rem!important}.ms-6{margin-inline-start:2.5rem!important}.ms-auto{margin-inline-start:auto!important}.m-n1{margin:-.25rem!important}.m-n2{margin:-.5rem!important}.m-n3{margin:-1rem!important}.m-n4{margin:-1.5rem!important}.m-n5{margin:-2rem!important}.m-n6{margin:-2.5rem!important}.mx-n1{margin-inline-end:-.25rem!important;margin-inline-start:-.25rem!important}.mx-n2{margin-inline-end:-.5rem!important;margin-inline-start:-.5rem!important}.mx-n3{margin-inline-end:-1rem!important;margin-inline-start:-1rem!important}.mx-n4{margin-inline-end:-1.5rem!important;margin-inline-start:-1.5rem!important}.mx-n5{margin-inline-end:-2rem!important;margin-inline-start:-2rem!important}.mx-n6{margin-inline-end:-2.5rem!important;margin-inline-start:-2.5rem!important}.my-n1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}.my-n2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}.my-n3{margin-top:-1rem!important;margin-bottom:-1rem!important}.my-n4{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}.my-n5{margin-top:-2rem!important;margin-bottom:-2rem!important}.my-n6{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}.mt-n1{margin-top:-.25rem!important}.mt-n2{margin-top:-.5rem!important}.mt-n3{margin-top:-1rem!important}.mt-n4{margin-top:-1.5rem!important}.mt-n5{margin-top:-2rem!important}.mt-n6{margin-top:-2.5rem!important}.me-n1{margin-inline-end:-.25rem!important}.me-n2{margin-inline-end:-.5rem!important}.me-n3{margin-inline-end:-1rem!important}.me-n4{margin-inline-end:-1.5rem!important}.me-n5{margin-inline-end:-2rem!important}.me-n6{margin-inline-end:-2.5rem!important}.mb-n1{margin-bottom:-.25rem!important}.mb-n2{margin-bottom:-.5rem!important}.mb-n3{margin-bottom:-1rem!important}.mb-n4{margin-bottom:-1.5rem!important}.mb-n5{margin-bottom:-2rem!important}.mb-n6{margin-bottom:-2.5rem!important}.ms-n1{margin-inline-start:-.25rem!important}.ms-n2{margin-inline-start:-.5rem!important}.ms-n3{margin-inline-start:-1rem!important}.ms-n4{margin-inline-start:-1.5rem!important}.ms-n5{margin-inline-start:-2rem!important}.ms-n6{margin-inline-start:-2.5rem!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:2rem!important}.p-6{padding:2.5rem!important}.px-0{padding-inline-end:0!important;padding-inline-start:0!important}.px-1{padding-inline-end:0.25rem!important;padding-inline-start:0.25rem!important}.px-2{padding-inline-end:0.5rem!important;padding-inline-start:0.5rem!important}.px-3{padding-inline-end:1rem!important;padding-inline-start:1rem!important}.px-4{padding-inline-end:1.5rem!important;padding-inline-start:1.5rem!important}.px-5{padding-inline-end:2rem!important;padding-inline-start:2rem!important}.px-6{padding-inline-end:2.5rem!important;padding-inline-start:2.5rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-6{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:2rem!important}.pt-6{padding-top:2.5rem!important}.pe-0{padding-inline-end:0!important}.pe-1{padding-inline-end:0.25rem!important}.pe-2{padding-inline-end:0.5rem!important}.pe-3{padding-inline-end:1rem!important}.pe-4{padding-inline-end:1.5rem!important}.pe-5{padding-inline-end:2rem!important}.pe-6{padding-inline-end:2.5rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:2rem!important}.pb-6{padding-bottom:2.5rem!important}.ps-0{padding-inline-start:0!important}.ps-1{padding-inline-start:0.25rem!important}.ps-2{padding-inline-start:0.5rem!important}.ps-3{padding-inline-start:1rem!important}.ps-4{padding-inline-start:1.5rem!important}.ps-5{padding-inline-start:2rem!important}.ps-6{padding-inline-start:2.5rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:2rem!important}.gap-6{gap:2.5rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:2rem!important}.row-gap-6{row-gap:2.5rem!important}.column-gap-0{column-gap:0!important}.column-gap-1{column-gap:.25rem!important}.column-gap-2{column-gap:.5rem!important}.column-gap-3{column-gap:1rem!important}.column-gap-4{column-gap:1.5rem!important}.column-gap-5{column-gap:2rem!important}.column-gap-6{column-gap:2.5rem!important}.bg-gradient{background:linear-gradient(var(--tblr-gradient-direction,to right),var(--tblr-gradient-stops,var(--tblr-gradient-from,transparent),var(--tblr-gradient-to,transparent))) no-repeat!important}.bg-blur{-webkit-backdrop-filter:blur(4px)!important;backdrop-filter:blur(4px)!important}.bg-gradient-to-t{--tblr-gradient-direction:to top!important}.bg-gradient-to-te{--tblr-gradient-direction:to top right!important}.bg-gradient-to-e{--tblr-gradient-direction:to right!important}.bg-gradient-to-be{--tblr-gradient-direction:to bottom right!important}.bg-gradient-to-b{--tblr-gradient-direction:to bottom!important}.bg-gradient-to-bs{--tblr-gradient-direction:to bottom left!important}.bg-gradient-to-s{--tblr-gradient-direction:to left!important}.bg-gradient-to-ts{--tblr-gradient-direction:to top left!important}.table-auto{table-layout:auto!important}.table-fixed{table-layout:fixed!important}.font-sans-serif{font-family:var(--tblr-font-sans-serif)!important}.font-serif{font-family:var(--tblr-font-serif)!important}.font-monospace{font-family:var(--tblr-font-monospace)!important}.font-comic{font-family:var(--tblr-font-comic)!important}.fs-1{font-size:1.5rem!important}.fs-2{font-size:1.25rem!important}.fs-3{font-size:1rem!important}.fs-4{font-size:.875rem!important}.fs-5{font-size:.75rem!important}.fs-6{font-size:.625rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.1428571429!important}.lh-base{line-height:1.4285714286!important}.lh-lg{line-height:1.7142857143!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-black{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-black) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-white{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-white) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-body{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-body-color) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-black-50{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-black) 50%,transparent)!important}.text-white-50{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-white) 50%,transparent)!important}.text-body-secondary{--tblr-text-opacity:1;color:var(--tblr-secondary-color)!important}.text-body-tertiary{--tblr-text-opacity:1;color:var(--tblr-tertiary-color)!important}.text-body-emphasis{--tblr-text-opacity:1;color:var(--tblr-emphasis-color)!important}.text-reset{--tblr-text-opacity:1;color:inherit!important}.text-opacity-25{--tblr-text-opacity:0.25}.text-opacity-50{--tblr-text-opacity:0.5}.text-opacity-75{--tblr-text-opacity:0.75}.text-opacity-100{--tblr-text-opacity:1}.text-primary-emphasis{color:var(--tblr-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--tblr-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--tblr-success-text-emphasis)!important}.text-info-emphasis{color:var(--tblr-info-text-emphasis)!important}.text-warning-emphasis{color:var(--tblr-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--tblr-danger-text-emphasis)!important}.text-light-emphasis{color:var(--tblr-light-text-emphasis)!important}.text-dark-emphasis{color:var(--tblr-dark-text-emphasis)!important}.link-opacity-10{--tblr-link-opacity:0.1}.link-opacity-10-hover:hover{--tblr-link-opacity:0.1}.link-opacity-25{--tblr-link-opacity:0.25}.link-opacity-25-hover:hover{--tblr-link-opacity:0.25}.link-opacity-50{--tblr-link-opacity:0.5}.link-opacity-50-hover:hover{--tblr-link-opacity:0.5}.link-opacity-75{--tblr-link-opacity:0.75}.link-opacity-75-hover:hover{--tblr-link-opacity:0.75}.link-opacity-100{--tblr-link-opacity:1}.link-opacity-100-hover:hover{--tblr-link-opacity:1}.link-offset-1{text-underline-offset:0.125em!important}.link-offset-1-hover:hover{text-underline-offset:0.125em!important}.link-offset-2{text-underline-offset:0.25em!important}.link-offset-2-hover:hover{text-underline-offset:0.25em!important}.link-offset-3{text-underline-offset:0.375em!important}.link-offset-3-hover:hover{text-underline-offset:0.375em!important}.link-underline-primary{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-primary) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-secondary{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-secondary) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-success{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-success) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-info{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-info) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-warning{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-warning) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-danger{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-light{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-light) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-dark{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-dark) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-muted{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-muted) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-blue{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-blue) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-azure{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-azure) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-indigo{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-indigo) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-purple{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-purple) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-pink{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-pink) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-red{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-red) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-orange{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-orange) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-yellow{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-yellow) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-lime{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-lime) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-green{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-green) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-teal{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-teal) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline-cyan{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-cyan) calc(var(--tblr-link-underline-opacity) * 100%),transparent)!important}.link-underline{--tblr-link-underline-opacity:1;text-decoration-color:color-mix(in oklab,var(--tblr-link-color) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-underline-opacity-0{--tblr-link-underline-opacity:0}.link-underline-opacity-0-hover:hover{--tblr-link-underline-opacity:0}.link-underline-opacity-10{--tblr-link-underline-opacity:0.1}.link-underline-opacity-10-hover:hover{--tblr-link-underline-opacity:0.1}.link-underline-opacity-25{--tblr-link-underline-opacity:0.25}.link-underline-opacity-25-hover:hover{--tblr-link-underline-opacity:0.25}.link-underline-opacity-50{--tblr-link-underline-opacity:0.5}.link-underline-opacity-50-hover:hover{--tblr-link-underline-opacity:0.5}.link-underline-opacity-75{--tblr-link-underline-opacity:0.75}.link-underline-opacity-75-hover:hover{--tblr-link-underline-opacity:0.75}.link-underline-opacity-100{--tblr-link-underline-opacity:1}.link-underline-opacity-100-hover:hover{--tblr-link-underline-opacity:1}.bg-black{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-black) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.bg-body{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-body-bg) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.bg-transparent{--tblr-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-secondary-bg) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.bg-body-tertiary{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-tertiary-bg) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.bg-primary{--tblr-bg-opacity:1}.bg-secondary{--tblr-bg-opacity:1}.bg-success{--tblr-bg-opacity:1}.bg-info{--tblr-bg-opacity:1}.bg-warning{--tblr-bg-opacity:1}.bg-danger{--tblr-bg-opacity:1}.bg-light{--tblr-bg-opacity:1}.bg-dark{--tblr-bg-opacity:1}.bg-muted{--tblr-bg-opacity:1}.bg-blue{--tblr-bg-opacity:1}.bg-azure{--tblr-bg-opacity:1}.bg-indigo{--tblr-bg-opacity:1}.bg-purple{--tblr-bg-opacity:1}.bg-pink{--tblr-bg-opacity:1}.bg-red{--tblr-bg-opacity:1}.bg-orange{--tblr-bg-opacity:1}.bg-yellow{--tblr-bg-opacity:1}.bg-lime{--tblr-bg-opacity:1}.bg-green{--tblr-bg-opacity:1}.bg-teal{--tblr-bg-opacity:1}.bg-cyan{--tblr-bg-opacity:1}.bg-white{--tblr-bg-opacity:1}.bg-opacity-10{--tblr-bg-opacity:0.1}.bg-opacity-25{--tblr-bg-opacity:0.25}.bg-opacity-50{--tblr-bg-opacity:0.5}.bg-opacity-75{--tblr-bg-opacity:0.75}.bg-opacity-100{--tblr-bg-opacity:1}.bg-primary-subtle{background-color:var(--tblr-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--tblr-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--tblr-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--tblr-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--tblr-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--tblr-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--tblr-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--tblr-dark-bg-subtle)!important}.user-select-all{-webkit-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--tblr-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--tblr-border-radius-sm)!important}.rounded-2{border-radius:var(--tblr-border-radius)!important}.rounded-3{border-radius:var(--tblr-border-radius-lg)!important}.rounded-4{border-radius:var(--tblr-border-radius-xl)!important}.rounded-5{border-radius:var(--tblr-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--tblr-border-radius-pill)!important}.rounded-top{border-start-start-radius:var(--tblr-border-radius)!important;border-start-end-radius:var(--tblr-border-radius)!important}.rounded-top-0{border-start-start-radius:0!important;border-start-end-radius:0!important}.rounded-top-1{border-start-start-radius:var(--tblr-border-radius-sm)!important;border-start-end-radius:var(--tblr-border-radius-sm)!important}.rounded-top-2{border-start-start-radius:var(--tblr-border-radius)!important;border-start-end-radius:var(--tblr-border-radius)!important}.rounded-top-3{border-start-start-radius:var(--tblr-border-radius-lg)!important;border-start-end-radius:var(--tblr-border-radius-lg)!important}.rounded-top-4{border-start-start-radius:var(--tblr-border-radius-xl)!important;border-start-end-radius:var(--tblr-border-radius-xl)!important}.rounded-top-5{border-start-start-radius:var(--tblr-border-radius-xxl)!important;border-start-end-radius:var(--tblr-border-radius-xxl)!important}.rounded-top-circle{border-start-start-radius:50%!important;border-start-end-radius:50%!important}.rounded-top-pill{border-start-start-radius:var(--tblr-border-radius-pill)!important;border-start-end-radius:var(--tblr-border-radius-pill)!important}.rounded-end{border-end-end-radius:var(--tblr-border-radius)!important;border-start-end-radius:var(--tblr-border-radius)!important}.rounded-end-0{border-end-end-radius:0!important;border-start-end-radius:0!important}.rounded-end-1{border-end-end-radius:var(--tblr-border-radius-sm)!important;border-start-end-radius:var(--tblr-border-radius-sm)!important}.rounded-end-2{border-end-end-radius:var(--tblr-border-radius)!important;border-start-end-radius:var(--tblr-border-radius)!important}.rounded-end-3{border-end-end-radius:var(--tblr-border-radius-lg)!important;border-start-end-radius:var(--tblr-border-radius-lg)!important}.rounded-end-4{border-end-end-radius:var(--tblr-border-radius-xl)!important;border-start-end-radius:var(--tblr-border-radius-xl)!important}.rounded-end-5{border-end-end-radius:var(--tblr-border-radius-xxl)!important;border-start-end-radius:var(--tblr-border-radius-xxl)!important}.rounded-end-circle{border-end-end-radius:50%!important;border-start-end-radius:50%!important}.rounded-end-pill{border-end-end-radius:var(--tblr-border-radius-pill)!important;border-start-end-radius:var(--tblr-border-radius-pill)!important}.rounded-bottom{border-end-end-radius:var(--tblr-border-radius)!important;border-end-start-radius:var(--tblr-border-radius)!important}.rounded-bottom-0{border-end-end-radius:0!important;border-end-start-radius:0!important}.rounded-bottom-1{border-end-end-radius:var(--tblr-border-radius-sm)!important;border-end-start-radius:var(--tblr-border-radius-sm)!important}.rounded-bottom-2{border-end-end-radius:var(--tblr-border-radius)!important;border-end-start-radius:var(--tblr-border-radius)!important}.rounded-bottom-3{border-end-end-radius:var(--tblr-border-radius-lg)!important;border-end-start-radius:var(--tblr-border-radius-lg)!important}.rounded-bottom-4{border-end-end-radius:var(--tblr-border-radius-xl)!important;border-end-start-radius:var(--tblr-border-radius-xl)!important}.rounded-bottom-5{border-end-end-radius:var(--tblr-border-radius-xxl)!important;border-end-start-radius:var(--tblr-border-radius-xxl)!important}.rounded-bottom-circle{border-end-end-radius:50%!important;border-end-start-radius:50%!important}.rounded-bottom-pill{border-end-end-radius:var(--tblr-border-radius-pill)!important;border-end-start-radius:var(--tblr-border-radius-pill)!important}.rounded-start{border-start-start-radius:var(--tblr-border-radius)!important;border-end-start-radius:var(--tblr-border-radius)!important}.rounded-start-0{border-start-start-radius:0!important;border-end-start-radius:0!important}.rounded-start-1{border-start-start-radius:var(--tblr-border-radius-sm)!important;border-end-start-radius:var(--tblr-border-radius-sm)!important}.rounded-start-2{border-start-start-radius:var(--tblr-border-radius)!important;border-end-start-radius:var(--tblr-border-radius)!important}.rounded-start-3{border-start-start-radius:var(--tblr-border-radius-lg)!important;border-end-start-radius:var(--tblr-border-radius-lg)!important}.rounded-start-4{border-start-start-radius:var(--tblr-border-radius-xl)!important;border-end-start-radius:var(--tblr-border-radius-xl)!important}.rounded-start-5{border-start-start-radius:var(--tblr-border-radius-xxl)!important;border-end-start-radius:var(--tblr-border-radius-xxl)!important}.rounded-start-circle{border-start-start-radius:50%!important;border-end-start-radius:50%!important}.rounded-start-pill{border-start-start-radius:var(--tblr-border-radius-pill)!important;border-end-start-radius:var(--tblr-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:inline-start!important}.float-sm-end{float:inline-end!important}.float-sm-none{float:none!important}.object-fit-sm-contain{object-fit:contain!important}.object-fit-sm-cover{object-fit:cover!important}.object-fit-sm-fill{object-fit:fill!important}.object-fit-sm-scale{object-fit:scale-down!important}.object-fit-sm-none{object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.columns-sm-2{columns:2!important}.columns-sm-3{columns:3!important}.columns-sm-4{columns:4!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:2rem!important}.m-sm-6{margin:2.5rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-inline-end:0!important;margin-inline-start:0!important}.mx-sm-1{margin-inline-end:.25rem!important;margin-inline-start:.25rem!important}.mx-sm-2{margin-inline-end:.5rem!important;margin-inline-start:.5rem!important}.mx-sm-3{margin-inline-end:1rem!important;margin-inline-start:1rem!important}.mx-sm-4{margin-inline-end:1.5rem!important;margin-inline-start:1.5rem!important}.mx-sm-5{margin-inline-end:2rem!important;margin-inline-start:2rem!important}.mx-sm-6{margin-inline-end:2.5rem!important;margin-inline-start:2.5rem!important}.mx-sm-auto{margin-inline-end:auto!important;margin-inline-start:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-sm-6{margin-top:2.5rem!important;margin-bottom:2.5rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:2rem!important}.mt-sm-6{margin-top:2.5rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-inline-end:0!important}.me-sm-1{margin-inline-end:.25rem!important}.me-sm-2{margin-inline-end:.5rem!important}.me-sm-3{margin-inline-end:1rem!important}.me-sm-4{margin-inline-end:1.5rem!important}.me-sm-5{margin-inline-end:2rem!important}.me-sm-6{margin-inline-end:2.5rem!important}.me-sm-auto{margin-inline-end:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:2rem!important}.mb-sm-6{margin-bottom:2.5rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-inline-start:0!important}.ms-sm-1{margin-inline-start:.25rem!important}.ms-sm-2{margin-inline-start:.5rem!important}.ms-sm-3{margin-inline-start:1rem!important}.ms-sm-4{margin-inline-start:1.5rem!important}.ms-sm-5{margin-inline-start:2rem!important}.ms-sm-6{margin-inline-start:2.5rem!important}.ms-sm-auto{margin-inline-start:auto!important}.m-sm-n1{margin:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.m-sm-n3{margin:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.m-sm-n5{margin:-2rem!important}.m-sm-n6{margin:-2.5rem!important}.mx-sm-n1{margin-inline-end:-.25rem!important;margin-inline-start:-.25rem!important}.mx-sm-n2{margin-inline-end:-.5rem!important;margin-inline-start:-.5rem!important}.mx-sm-n3{margin-inline-end:-1rem!important;margin-inline-start:-1rem!important}.mx-sm-n4{margin-inline-end:-1.5rem!important;margin-inline-start:-1.5rem!important}.mx-sm-n5{margin-inline-end:-2rem!important;margin-inline-start:-2rem!important}.mx-sm-n6{margin-inline-end:-2.5rem!important;margin-inline-start:-2.5rem!important}.my-sm-n1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}.my-sm-n2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}.my-sm-n3{margin-top:-1rem!important;margin-bottom:-1rem!important}.my-sm-n4{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}.my-sm-n5{margin-top:-2rem!important;margin-bottom:-2rem!important}.my-sm-n6{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}.mt-sm-n1{margin-top:-.25rem!important}.mt-sm-n2{margin-top:-.5rem!important}.mt-sm-n3{margin-top:-1rem!important}.mt-sm-n4{margin-top:-1.5rem!important}.mt-sm-n5{margin-top:-2rem!important}.mt-sm-n6{margin-top:-2.5rem!important}.me-sm-n1{margin-inline-end:-.25rem!important}.me-sm-n2{margin-inline-end:-.5rem!important}.me-sm-n3{margin-inline-end:-1rem!important}.me-sm-n4{margin-inline-end:-1.5rem!important}.me-sm-n5{margin-inline-end:-2rem!important}.me-sm-n6{margin-inline-end:-2.5rem!important}.mb-sm-n1{margin-bottom:-.25rem!important}.mb-sm-n2{margin-bottom:-.5rem!important}.mb-sm-n3{margin-bottom:-1rem!important}.mb-sm-n4{margin-bottom:-1.5rem!important}.mb-sm-n5{margin-bottom:-2rem!important}.mb-sm-n6{margin-bottom:-2.5rem!important}.ms-sm-n1{margin-inline-start:-.25rem!important}.ms-sm-n2{margin-inline-start:-.5rem!important}.ms-sm-n3{margin-inline-start:-1rem!important}.ms-sm-n4{margin-inline-start:-1.5rem!important}.ms-sm-n5{margin-inline-start:-2rem!important}.ms-sm-n6{margin-inline-start:-2.5rem!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:2rem!important}.p-sm-6{padding:2.5rem!important}.px-sm-0{padding-inline-end:0!important;padding-inline-start:0!important}.px-sm-1{padding-inline-end:0.25rem!important;padding-inline-start:0.25rem!important}.px-sm-2{padding-inline-end:0.5rem!important;padding-inline-start:0.5rem!important}.px-sm-3{padding-inline-end:1rem!important;padding-inline-start:1rem!important}.px-sm-4{padding-inline-end:1.5rem!important;padding-inline-start:1.5rem!important}.px-sm-5{padding-inline-end:2rem!important;padding-inline-start:2rem!important}.px-sm-6{padding-inline-end:2.5rem!important;padding-inline-start:2.5rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-sm-6{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:2rem!important}.pt-sm-6{padding-top:2.5rem!important}.pe-sm-0{padding-inline-end:0!important}.pe-sm-1{padding-inline-end:0.25rem!important}.pe-sm-2{padding-inline-end:0.5rem!important}.pe-sm-3{padding-inline-end:1rem!important}.pe-sm-4{padding-inline-end:1.5rem!important}.pe-sm-5{padding-inline-end:2rem!important}.pe-sm-6{padding-inline-end:2.5rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:2rem!important}.pb-sm-6{padding-bottom:2.5rem!important}.ps-sm-0{padding-inline-start:0!important}.ps-sm-1{padding-inline-start:0.25rem!important}.ps-sm-2{padding-inline-start:0.5rem!important}.ps-sm-3{padding-inline-start:1rem!important}.ps-sm-4{padding-inline-start:1.5rem!important}.ps-sm-5{padding-inline-start:2rem!important}.ps-sm-6{padding-inline-start:2.5rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:2rem!important}.gap-sm-6{gap:2.5rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:2rem!important}.row-gap-sm-6{row-gap:2.5rem!important}.column-gap-sm-0{column-gap:0!important}.column-gap-sm-1{column-gap:.25rem!important}.column-gap-sm-2{column-gap:.5rem!important}.column-gap-sm-3{column-gap:1rem!important}.column-gap-sm-4{column-gap:1.5rem!important}.column-gap-sm-5{column-gap:2rem!important}.column-gap-sm-6{column-gap:2.5rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:inline-start!important}.float-md-end{float:inline-end!important}.float-md-none{float:none!important}.object-fit-md-contain{object-fit:contain!important}.object-fit-md-cover{object-fit:cover!important}.object-fit-md-fill{object-fit:fill!important}.object-fit-md-scale{object-fit:scale-down!important}.object-fit-md-none{object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.columns-md-2{columns:2!important}.columns-md-3{columns:3!important}.columns-md-4{columns:4!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:2rem!important}.m-md-6{margin:2.5rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-inline-end:0!important;margin-inline-start:0!important}.mx-md-1{margin-inline-end:.25rem!important;margin-inline-start:.25rem!important}.mx-md-2{margin-inline-end:.5rem!important;margin-inline-start:.5rem!important}.mx-md-3{margin-inline-end:1rem!important;margin-inline-start:1rem!important}.mx-md-4{margin-inline-end:1.5rem!important;margin-inline-start:1.5rem!important}.mx-md-5{margin-inline-end:2rem!important;margin-inline-start:2rem!important}.mx-md-6{margin-inline-end:2.5rem!important;margin-inline-start:2.5rem!important}.mx-md-auto{margin-inline-end:auto!important;margin-inline-start:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-md-6{margin-top:2.5rem!important;margin-bottom:2.5rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:2rem!important}.mt-md-6{margin-top:2.5rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-inline-end:0!important}.me-md-1{margin-inline-end:.25rem!important}.me-md-2{margin-inline-end:.5rem!important}.me-md-3{margin-inline-end:1rem!important}.me-md-4{margin-inline-end:1.5rem!important}.me-md-5{margin-inline-end:2rem!important}.me-md-6{margin-inline-end:2.5rem!important}.me-md-auto{margin-inline-end:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:2rem!important}.mb-md-6{margin-bottom:2.5rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-inline-start:0!important}.ms-md-1{margin-inline-start:.25rem!important}.ms-md-2{margin-inline-start:.5rem!important}.ms-md-3{margin-inline-start:1rem!important}.ms-md-4{margin-inline-start:1.5rem!important}.ms-md-5{margin-inline-start:2rem!important}.ms-md-6{margin-inline-start:2.5rem!important}.ms-md-auto{margin-inline-start:auto!important}.m-md-n1{margin:-.25rem!important}.m-md-n2{margin:-.5rem!important}.m-md-n3{margin:-1rem!important}.m-md-n4{margin:-1.5rem!important}.m-md-n5{margin:-2rem!important}.m-md-n6{margin:-2.5rem!important}.mx-md-n1{margin-inline-end:-.25rem!important;margin-inline-start:-.25rem!important}.mx-md-n2{margin-inline-end:-.5rem!important;margin-inline-start:-.5rem!important}.mx-md-n3{margin-inline-end:-1rem!important;margin-inline-start:-1rem!important}.mx-md-n4{margin-inline-end:-1.5rem!important;margin-inline-start:-1.5rem!important}.mx-md-n5{margin-inline-end:-2rem!important;margin-inline-start:-2rem!important}.mx-md-n6{margin-inline-end:-2.5rem!important;margin-inline-start:-2.5rem!important}.my-md-n1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}.my-md-n2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}.my-md-n3{margin-top:-1rem!important;margin-bottom:-1rem!important}.my-md-n4{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}.my-md-n5{margin-top:-2rem!important;margin-bottom:-2rem!important}.my-md-n6{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}.mt-md-n1{margin-top:-.25rem!important}.mt-md-n2{margin-top:-.5rem!important}.mt-md-n3{margin-top:-1rem!important}.mt-md-n4{margin-top:-1.5rem!important}.mt-md-n5{margin-top:-2rem!important}.mt-md-n6{margin-top:-2.5rem!important}.me-md-n1{margin-inline-end:-.25rem!important}.me-md-n2{margin-inline-end:-.5rem!important}.me-md-n3{margin-inline-end:-1rem!important}.me-md-n4{margin-inline-end:-1.5rem!important}.me-md-n5{margin-inline-end:-2rem!important}.me-md-n6{margin-inline-end:-2.5rem!important}.mb-md-n1{margin-bottom:-.25rem!important}.mb-md-n2{margin-bottom:-.5rem!important}.mb-md-n3{margin-bottom:-1rem!important}.mb-md-n4{margin-bottom:-1.5rem!important}.mb-md-n5{margin-bottom:-2rem!important}.mb-md-n6{margin-bottom:-2.5rem!important}.ms-md-n1{margin-inline-start:-.25rem!important}.ms-md-n2{margin-inline-start:-.5rem!important}.ms-md-n3{margin-inline-start:-1rem!important}.ms-md-n4{margin-inline-start:-1.5rem!important}.ms-md-n5{margin-inline-start:-2rem!important}.ms-md-n6{margin-inline-start:-2.5rem!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:2rem!important}.p-md-6{padding:2.5rem!important}.px-md-0{padding-inline-end:0!important;padding-inline-start:0!important}.px-md-1{padding-inline-end:0.25rem!important;padding-inline-start:0.25rem!important}.px-md-2{padding-inline-end:0.5rem!important;padding-inline-start:0.5rem!important}.px-md-3{padding-inline-end:1rem!important;padding-inline-start:1rem!important}.px-md-4{padding-inline-end:1.5rem!important;padding-inline-start:1.5rem!important}.px-md-5{padding-inline-end:2rem!important;padding-inline-start:2rem!important}.px-md-6{padding-inline-end:2.5rem!important;padding-inline-start:2.5rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-md-6{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:2rem!important}.pt-md-6{padding-top:2.5rem!important}.pe-md-0{padding-inline-end:0!important}.pe-md-1{padding-inline-end:0.25rem!important}.pe-md-2{padding-inline-end:0.5rem!important}.pe-md-3{padding-inline-end:1rem!important}.pe-md-4{padding-inline-end:1.5rem!important}.pe-md-5{padding-inline-end:2rem!important}.pe-md-6{padding-inline-end:2.5rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:2rem!important}.pb-md-6{padding-bottom:2.5rem!important}.ps-md-0{padding-inline-start:0!important}.ps-md-1{padding-inline-start:0.25rem!important}.ps-md-2{padding-inline-start:0.5rem!important}.ps-md-3{padding-inline-start:1rem!important}.ps-md-4{padding-inline-start:1.5rem!important}.ps-md-5{padding-inline-start:2rem!important}.ps-md-6{padding-inline-start:2.5rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:2rem!important}.gap-md-6{gap:2.5rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:2rem!important}.row-gap-md-6{row-gap:2.5rem!important}.column-gap-md-0{column-gap:0!important}.column-gap-md-1{column-gap:.25rem!important}.column-gap-md-2{column-gap:.5rem!important}.column-gap-md-3{column-gap:1rem!important}.column-gap-md-4{column-gap:1.5rem!important}.column-gap-md-5{column-gap:2rem!important}.column-gap-md-6{column-gap:2.5rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:inline-start!important}.float-lg-end{float:inline-end!important}.float-lg-none{float:none!important}.object-fit-lg-contain{object-fit:contain!important}.object-fit-lg-cover{object-fit:cover!important}.object-fit-lg-fill{object-fit:fill!important}.object-fit-lg-scale{object-fit:scale-down!important}.object-fit-lg-none{object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.columns-lg-2{columns:2!important}.columns-lg-3{columns:3!important}.columns-lg-4{columns:4!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:2rem!important}.m-lg-6{margin:2.5rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-inline-end:0!important;margin-inline-start:0!important}.mx-lg-1{margin-inline-end:.25rem!important;margin-inline-start:.25rem!important}.mx-lg-2{margin-inline-end:.5rem!important;margin-inline-start:.5rem!important}.mx-lg-3{margin-inline-end:1rem!important;margin-inline-start:1rem!important}.mx-lg-4{margin-inline-end:1.5rem!important;margin-inline-start:1.5rem!important}.mx-lg-5{margin-inline-end:2rem!important;margin-inline-start:2rem!important}.mx-lg-6{margin-inline-end:2.5rem!important;margin-inline-start:2.5rem!important}.mx-lg-auto{margin-inline-end:auto!important;margin-inline-start:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-lg-6{margin-top:2.5rem!important;margin-bottom:2.5rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:2rem!important}.mt-lg-6{margin-top:2.5rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-inline-end:0!important}.me-lg-1{margin-inline-end:.25rem!important}.me-lg-2{margin-inline-end:.5rem!important}.me-lg-3{margin-inline-end:1rem!important}.me-lg-4{margin-inline-end:1.5rem!important}.me-lg-5{margin-inline-end:2rem!important}.me-lg-6{margin-inline-end:2.5rem!important}.me-lg-auto{margin-inline-end:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:2rem!important}.mb-lg-6{margin-bottom:2.5rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-inline-start:0!important}.ms-lg-1{margin-inline-start:.25rem!important}.ms-lg-2{margin-inline-start:.5rem!important}.ms-lg-3{margin-inline-start:1rem!important}.ms-lg-4{margin-inline-start:1.5rem!important}.ms-lg-5{margin-inline-start:2rem!important}.ms-lg-6{margin-inline-start:2.5rem!important}.ms-lg-auto{margin-inline-start:auto!important}.m-lg-n1{margin:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.m-lg-n3{margin:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.m-lg-n5{margin:-2rem!important}.m-lg-n6{margin:-2.5rem!important}.mx-lg-n1{margin-inline-end:-.25rem!important;margin-inline-start:-.25rem!important}.mx-lg-n2{margin-inline-end:-.5rem!important;margin-inline-start:-.5rem!important}.mx-lg-n3{margin-inline-end:-1rem!important;margin-inline-start:-1rem!important}.mx-lg-n4{margin-inline-end:-1.5rem!important;margin-inline-start:-1.5rem!important}.mx-lg-n5{margin-inline-end:-2rem!important;margin-inline-start:-2rem!important}.mx-lg-n6{margin-inline-end:-2.5rem!important;margin-inline-start:-2.5rem!important}.my-lg-n1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}.my-lg-n2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}.my-lg-n3{margin-top:-1rem!important;margin-bottom:-1rem!important}.my-lg-n4{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}.my-lg-n5{margin-top:-2rem!important;margin-bottom:-2rem!important}.my-lg-n6{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}.mt-lg-n1{margin-top:-.25rem!important}.mt-lg-n2{margin-top:-.5rem!important}.mt-lg-n3{margin-top:-1rem!important}.mt-lg-n4{margin-top:-1.5rem!important}.mt-lg-n5{margin-top:-2rem!important}.mt-lg-n6{margin-top:-2.5rem!important}.me-lg-n1{margin-inline-end:-.25rem!important}.me-lg-n2{margin-inline-end:-.5rem!important}.me-lg-n3{margin-inline-end:-1rem!important}.me-lg-n4{margin-inline-end:-1.5rem!important}.me-lg-n5{margin-inline-end:-2rem!important}.me-lg-n6{margin-inline-end:-2.5rem!important}.mb-lg-n1{margin-bottom:-.25rem!important}.mb-lg-n2{margin-bottom:-.5rem!important}.mb-lg-n3{margin-bottom:-1rem!important}.mb-lg-n4{margin-bottom:-1.5rem!important}.mb-lg-n5{margin-bottom:-2rem!important}.mb-lg-n6{margin-bottom:-2.5rem!important}.ms-lg-n1{margin-inline-start:-.25rem!important}.ms-lg-n2{margin-inline-start:-.5rem!important}.ms-lg-n3{margin-inline-start:-1rem!important}.ms-lg-n4{margin-inline-start:-1.5rem!important}.ms-lg-n5{margin-inline-start:-2rem!important}.ms-lg-n6{margin-inline-start:-2.5rem!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:2rem!important}.p-lg-6{padding:2.5rem!important}.px-lg-0{padding-inline-end:0!important;padding-inline-start:0!important}.px-lg-1{padding-inline-end:0.25rem!important;padding-inline-start:0.25rem!important}.px-lg-2{padding-inline-end:0.5rem!important;padding-inline-start:0.5rem!important}.px-lg-3{padding-inline-end:1rem!important;padding-inline-start:1rem!important}.px-lg-4{padding-inline-end:1.5rem!important;padding-inline-start:1.5rem!important}.px-lg-5{padding-inline-end:2rem!important;padding-inline-start:2rem!important}.px-lg-6{padding-inline-end:2.5rem!important;padding-inline-start:2.5rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-lg-6{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:2rem!important}.pt-lg-6{padding-top:2.5rem!important}.pe-lg-0{padding-inline-end:0!important}.pe-lg-1{padding-inline-end:0.25rem!important}.pe-lg-2{padding-inline-end:0.5rem!important}.pe-lg-3{padding-inline-end:1rem!important}.pe-lg-4{padding-inline-end:1.5rem!important}.pe-lg-5{padding-inline-end:2rem!important}.pe-lg-6{padding-inline-end:2.5rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:2rem!important}.pb-lg-6{padding-bottom:2.5rem!important}.ps-lg-0{padding-inline-start:0!important}.ps-lg-1{padding-inline-start:0.25rem!important}.ps-lg-2{padding-inline-start:0.5rem!important}.ps-lg-3{padding-inline-start:1rem!important}.ps-lg-4{padding-inline-start:1.5rem!important}.ps-lg-5{padding-inline-start:2rem!important}.ps-lg-6{padding-inline-start:2.5rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:2rem!important}.gap-lg-6{gap:2.5rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:2rem!important}.row-gap-lg-6{row-gap:2.5rem!important}.column-gap-lg-0{column-gap:0!important}.column-gap-lg-1{column-gap:.25rem!important}.column-gap-lg-2{column-gap:.5rem!important}.column-gap-lg-3{column-gap:1rem!important}.column-gap-lg-4{column-gap:1.5rem!important}.column-gap-lg-5{column-gap:2rem!important}.column-gap-lg-6{column-gap:2.5rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:inline-start!important}.float-xl-end{float:inline-end!important}.float-xl-none{float:none!important}.object-fit-xl-contain{object-fit:contain!important}.object-fit-xl-cover{object-fit:cover!important}.object-fit-xl-fill{object-fit:fill!important}.object-fit-xl-scale{object-fit:scale-down!important}.object-fit-xl-none{object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.columns-xl-2{columns:2!important}.columns-xl-3{columns:3!important}.columns-xl-4{columns:4!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:2rem!important}.m-xl-6{margin:2.5rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-inline-end:0!important;margin-inline-start:0!important}.mx-xl-1{margin-inline-end:.25rem!important;margin-inline-start:.25rem!important}.mx-xl-2{margin-inline-end:.5rem!important;margin-inline-start:.5rem!important}.mx-xl-3{margin-inline-end:1rem!important;margin-inline-start:1rem!important}.mx-xl-4{margin-inline-end:1.5rem!important;margin-inline-start:1.5rem!important}.mx-xl-5{margin-inline-end:2rem!important;margin-inline-start:2rem!important}.mx-xl-6{margin-inline-end:2.5rem!important;margin-inline-start:2.5rem!important}.mx-xl-auto{margin-inline-end:auto!important;margin-inline-start:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-xl-6{margin-top:2.5rem!important;margin-bottom:2.5rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:2rem!important}.mt-xl-6{margin-top:2.5rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-inline-end:0!important}.me-xl-1{margin-inline-end:.25rem!important}.me-xl-2{margin-inline-end:.5rem!important}.me-xl-3{margin-inline-end:1rem!important}.me-xl-4{margin-inline-end:1.5rem!important}.me-xl-5{margin-inline-end:2rem!important}.me-xl-6{margin-inline-end:2.5rem!important}.me-xl-auto{margin-inline-end:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:2rem!important}.mb-xl-6{margin-bottom:2.5rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-inline-start:0!important}.ms-xl-1{margin-inline-start:.25rem!important}.ms-xl-2{margin-inline-start:.5rem!important}.ms-xl-3{margin-inline-start:1rem!important}.ms-xl-4{margin-inline-start:1.5rem!important}.ms-xl-5{margin-inline-start:2rem!important}.ms-xl-6{margin-inline-start:2.5rem!important}.ms-xl-auto{margin-inline-start:auto!important}.m-xl-n1{margin:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.m-xl-n3{margin:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.m-xl-n5{margin:-2rem!important}.m-xl-n6{margin:-2.5rem!important}.mx-xl-n1{margin-inline-end:-.25rem!important;margin-inline-start:-.25rem!important}.mx-xl-n2{margin-inline-end:-.5rem!important;margin-inline-start:-.5rem!important}.mx-xl-n3{margin-inline-end:-1rem!important;margin-inline-start:-1rem!important}.mx-xl-n4{margin-inline-end:-1.5rem!important;margin-inline-start:-1.5rem!important}.mx-xl-n5{margin-inline-end:-2rem!important;margin-inline-start:-2rem!important}.mx-xl-n6{margin-inline-end:-2.5rem!important;margin-inline-start:-2.5rem!important}.my-xl-n1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}.my-xl-n2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}.my-xl-n3{margin-top:-1rem!important;margin-bottom:-1rem!important}.my-xl-n4{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}.my-xl-n5{margin-top:-2rem!important;margin-bottom:-2rem!important}.my-xl-n6{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}.mt-xl-n1{margin-top:-.25rem!important}.mt-xl-n2{margin-top:-.5rem!important}.mt-xl-n3{margin-top:-1rem!important}.mt-xl-n4{margin-top:-1.5rem!important}.mt-xl-n5{margin-top:-2rem!important}.mt-xl-n6{margin-top:-2.5rem!important}.me-xl-n1{margin-inline-end:-.25rem!important}.me-xl-n2{margin-inline-end:-.5rem!important}.me-xl-n3{margin-inline-end:-1rem!important}.me-xl-n4{margin-inline-end:-1.5rem!important}.me-xl-n5{margin-inline-end:-2rem!important}.me-xl-n6{margin-inline-end:-2.5rem!important}.mb-xl-n1{margin-bottom:-.25rem!important}.mb-xl-n2{margin-bottom:-.5rem!important}.mb-xl-n3{margin-bottom:-1rem!important}.mb-xl-n4{margin-bottom:-1.5rem!important}.mb-xl-n5{margin-bottom:-2rem!important}.mb-xl-n6{margin-bottom:-2.5rem!important}.ms-xl-n1{margin-inline-start:-.25rem!important}.ms-xl-n2{margin-inline-start:-.5rem!important}.ms-xl-n3{margin-inline-start:-1rem!important}.ms-xl-n4{margin-inline-start:-1.5rem!important}.ms-xl-n5{margin-inline-start:-2rem!important}.ms-xl-n6{margin-inline-start:-2.5rem!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:2rem!important}.p-xl-6{padding:2.5rem!important}.px-xl-0{padding-inline-end:0!important;padding-inline-start:0!important}.px-xl-1{padding-inline-end:0.25rem!important;padding-inline-start:0.25rem!important}.px-xl-2{padding-inline-end:0.5rem!important;padding-inline-start:0.5rem!important}.px-xl-3{padding-inline-end:1rem!important;padding-inline-start:1rem!important}.px-xl-4{padding-inline-end:1.5rem!important;padding-inline-start:1.5rem!important}.px-xl-5{padding-inline-end:2rem!important;padding-inline-start:2rem!important}.px-xl-6{padding-inline-end:2.5rem!important;padding-inline-start:2.5rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-xl-6{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:2rem!important}.pt-xl-6{padding-top:2.5rem!important}.pe-xl-0{padding-inline-end:0!important}.pe-xl-1{padding-inline-end:0.25rem!important}.pe-xl-2{padding-inline-end:0.5rem!important}.pe-xl-3{padding-inline-end:1rem!important}.pe-xl-4{padding-inline-end:1.5rem!important}.pe-xl-5{padding-inline-end:2rem!important}.pe-xl-6{padding-inline-end:2.5rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:2rem!important}.pb-xl-6{padding-bottom:2.5rem!important}.ps-xl-0{padding-inline-start:0!important}.ps-xl-1{padding-inline-start:0.25rem!important}.ps-xl-2{padding-inline-start:0.5rem!important}.ps-xl-3{padding-inline-start:1rem!important}.ps-xl-4{padding-inline-start:1.5rem!important}.ps-xl-5{padding-inline-start:2rem!important}.ps-xl-6{padding-inline-start:2.5rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:2rem!important}.gap-xl-6{gap:2.5rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:2rem!important}.row-gap-xl-6{row-gap:2.5rem!important}.column-gap-xl-0{column-gap:0!important}.column-gap-xl-1{column-gap:.25rem!important}.column-gap-xl-2{column-gap:.5rem!important}.column-gap-xl-3{column-gap:1rem!important}.column-gap-xl-4{column-gap:1.5rem!important}.column-gap-xl-5{column-gap:2rem!important}.column-gap-xl-6{column-gap:2.5rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:inline-start!important}.float-xxl-end{float:inline-end!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{object-fit:contain!important}.object-fit-xxl-cover{object-fit:cover!important}.object-fit-xxl-fill{object-fit:fill!important}.object-fit-xxl-scale{object-fit:scale-down!important}.object-fit-xxl-none{object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.columns-xxl-2{columns:2!important}.columns-xxl-3{columns:3!important}.columns-xxl-4{columns:4!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:2rem!important}.m-xxl-6{margin:2.5rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-inline-end:0!important;margin-inline-start:0!important}.mx-xxl-1{margin-inline-end:.25rem!important;margin-inline-start:.25rem!important}.mx-xxl-2{margin-inline-end:.5rem!important;margin-inline-start:.5rem!important}.mx-xxl-3{margin-inline-end:1rem!important;margin-inline-start:1rem!important}.mx-xxl-4{margin-inline-end:1.5rem!important;margin-inline-start:1.5rem!important}.mx-xxl-5{margin-inline-end:2rem!important;margin-inline-start:2rem!important}.mx-xxl-6{margin-inline-end:2.5rem!important;margin-inline-start:2.5rem!important}.mx-xxl-auto{margin-inline-end:auto!important;margin-inline-start:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-xxl-6{margin-top:2.5rem!important;margin-bottom:2.5rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:2rem!important}.mt-xxl-6{margin-top:2.5rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-inline-end:0!important}.me-xxl-1{margin-inline-end:.25rem!important}.me-xxl-2{margin-inline-end:.5rem!important}.me-xxl-3{margin-inline-end:1rem!important}.me-xxl-4{margin-inline-end:1.5rem!important}.me-xxl-5{margin-inline-end:2rem!important}.me-xxl-6{margin-inline-end:2.5rem!important}.me-xxl-auto{margin-inline-end:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:2rem!important}.mb-xxl-6{margin-bottom:2.5rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-inline-start:0!important}.ms-xxl-1{margin-inline-start:.25rem!important}.ms-xxl-2{margin-inline-start:.5rem!important}.ms-xxl-3{margin-inline-start:1rem!important}.ms-xxl-4{margin-inline-start:1.5rem!important}.ms-xxl-5{margin-inline-start:2rem!important}.ms-xxl-6{margin-inline-start:2.5rem!important}.ms-xxl-auto{margin-inline-start:auto!important}.m-xxl-n1{margin:-.25rem!important}.m-xxl-n2{margin:-.5rem!important}.m-xxl-n3{margin:-1rem!important}.m-xxl-n4{margin:-1.5rem!important}.m-xxl-n5{margin:-2rem!important}.m-xxl-n6{margin:-2.5rem!important}.mx-xxl-n1{margin-inline-end:-.25rem!important;margin-inline-start:-.25rem!important}.mx-xxl-n2{margin-inline-end:-.5rem!important;margin-inline-start:-.5rem!important}.mx-xxl-n3{margin-inline-end:-1rem!important;margin-inline-start:-1rem!important}.mx-xxl-n4{margin-inline-end:-1.5rem!important;margin-inline-start:-1.5rem!important}.mx-xxl-n5{margin-inline-end:-2rem!important;margin-inline-start:-2rem!important}.mx-xxl-n6{margin-inline-end:-2.5rem!important;margin-inline-start:-2.5rem!important}.my-xxl-n1{margin-top:-.25rem!important;margin-bottom:-.25rem!important}.my-xxl-n2{margin-top:-.5rem!important;margin-bottom:-.5rem!important}.my-xxl-n3{margin-top:-1rem!important;margin-bottom:-1rem!important}.my-xxl-n4{margin-top:-1.5rem!important;margin-bottom:-1.5rem!important}.my-xxl-n5{margin-top:-2rem!important;margin-bottom:-2rem!important}.my-xxl-n6{margin-top:-2.5rem!important;margin-bottom:-2.5rem!important}.mt-xxl-n1{margin-top:-.25rem!important}.mt-xxl-n2{margin-top:-.5rem!important}.mt-xxl-n3{margin-top:-1rem!important}.mt-xxl-n4{margin-top:-1.5rem!important}.mt-xxl-n5{margin-top:-2rem!important}.mt-xxl-n6{margin-top:-2.5rem!important}.me-xxl-n1{margin-inline-end:-.25rem!important}.me-xxl-n2{margin-inline-end:-.5rem!important}.me-xxl-n3{margin-inline-end:-1rem!important}.me-xxl-n4{margin-inline-end:-1.5rem!important}.me-xxl-n5{margin-inline-end:-2rem!important}.me-xxl-n6{margin-inline-end:-2.5rem!important}.mb-xxl-n1{margin-bottom:-.25rem!important}.mb-xxl-n2{margin-bottom:-.5rem!important}.mb-xxl-n3{margin-bottom:-1rem!important}.mb-xxl-n4{margin-bottom:-1.5rem!important}.mb-xxl-n5{margin-bottom:-2rem!important}.mb-xxl-n6{margin-bottom:-2.5rem!important}.ms-xxl-n1{margin-inline-start:-.25rem!important}.ms-xxl-n2{margin-inline-start:-.5rem!important}.ms-xxl-n3{margin-inline-start:-1rem!important}.ms-xxl-n4{margin-inline-start:-1.5rem!important}.ms-xxl-n5{margin-inline-start:-2rem!important}.ms-xxl-n6{margin-inline-start:-2.5rem!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:2rem!important}.p-xxl-6{padding:2.5rem!important}.px-xxl-0{padding-inline-end:0!important;padding-inline-start:0!important}.px-xxl-1{padding-inline-end:0.25rem!important;padding-inline-start:0.25rem!important}.px-xxl-2{padding-inline-end:0.5rem!important;padding-inline-start:0.5rem!important}.px-xxl-3{padding-inline-end:1rem!important;padding-inline-start:1rem!important}.px-xxl-4{padding-inline-end:1.5rem!important;padding-inline-start:1.5rem!important}.px-xxl-5{padding-inline-end:2rem!important;padding-inline-start:2rem!important}.px-xxl-6{padding-inline-end:2.5rem!important;padding-inline-start:2.5rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-xxl-6{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:2rem!important}.pt-xxl-6{padding-top:2.5rem!important}.pe-xxl-0{padding-inline-end:0!important}.pe-xxl-1{padding-inline-end:0.25rem!important}.pe-xxl-2{padding-inline-end:0.5rem!important}.pe-xxl-3{padding-inline-end:1rem!important}.pe-xxl-4{padding-inline-end:1.5rem!important}.pe-xxl-5{padding-inline-end:2rem!important}.pe-xxl-6{padding-inline-end:2.5rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:2rem!important}.pb-xxl-6{padding-bottom:2.5rem!important}.ps-xxl-0{padding-inline-start:0!important}.ps-xxl-1{padding-inline-start:0.25rem!important}.ps-xxl-2{padding-inline-start:0.5rem!important}.ps-xxl-3{padding-inline-start:1rem!important}.ps-xxl-4{padding-inline-start:1.5rem!important}.ps-xxl-5{padding-inline-start:2rem!important}.ps-xxl-6{padding-inline-start:2.5rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:2rem!important}.gap-xxl-6{gap:2.5rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:2rem!important}.row-gap-xxl-6{row-gap:2.5rem!important}.column-gap-xxl-0{column-gap:0!important}.column-gap-xxl-1{column-gap:.25rem!important}.column-gap-xxl-2{column-gap:.5rem!important}.column-gap-xxl-3{column-gap:1rem!important}.column-gap-xxl-4{column-gap:1.5rem!important}.column-gap-xxl-5{column-gap:2rem!important}.column-gap-xxl-6{column-gap:2.5rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}:host,:root{--tblr-dir:1;--tblr-font-monospace:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;--tblr-font-sans-serif:system-ui,-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;--tblr-font-serif:Georgia,Times New Roman,times,serif;--tblr-font-comic:Comic Sans MS,Comic Sans,Chalkboard SE,Comic Neue,sans-serif,cursive;--tblr-gray-50:oklch(98.51% 0 0deg);--tblr-gray-100:oklch(97.02% 0 0deg);--tblr-gray-200:oklch(92.19% 0 0deg);--tblr-gray-300:oklch(86.99% 0 0deg);--tblr-gray-400:oklch(71.55% 0 0deg);--tblr-gray-500:oklch(55.55% 0 0deg);--tblr-gray-600:oklch(43.86% 0 0deg);--tblr-gray-700:oklch(37.15% 0 0deg);--tblr-gray-800:oklch(26.86% 0 0deg);--tblr-gray-900:oklch(20.46% 0 0deg);--tblr-gray-950:oklch(14.48% 0 0deg);--tblr-white:#fff;--tblr-white-lt:color-mix(in oklab, var(--tblr-white) 10%, transparent);--tblr-black:#000;--tblr-gray:oklch(43.86% 0 0deg);--tblr-gray-dark:oklch(26.86% 0 0deg);--tblr-black-lt:color-mix(in oklab, var(--tblr-black) 10%, transparent);--tblr-gray-lt:color-mix(in oklab, var(--tblr-gray) 10%, transparent);--tblr-gray-dark-lt:color-mix(in oklab, var(--tblr-gray-dark) 10%, transparent);--tblr-dark:oklch(26.86% 0 0deg);--tblr-light:oklch(98.51% 0 0deg);--tblr-brand:oklch(54.6% 0.1724 254.2deg);--tblr-primary:oklch(54.6% 0.1724 254.2deg);--tblr-primary-fg:var(--tblr-light);--tblr-primary-darken:oklch(from var(--tblr-primary) calc(l - 0.06) c h);--tblr-primary-lt:color-mix(in oklab, var(--tblr-primary) 10%, transparent);--tblr-primary-200:color-mix(in oklab, var(--tblr-primary) 20%, transparent);--tblr-secondary:oklch(55.55% 0 0deg);--tblr-secondary-fg:var(--tblr-light);--tblr-secondary-darken:oklch(from var(--tblr-secondary) calc(l - 0.06) c h);--tblr-secondary-lt:color-mix(in oklab, var(--tblr-secondary) 10%, transparent);--tblr-secondary-200:color-mix(in oklab, var(--tblr-secondary) 20%, transparent);--tblr-success:oklch(67.38% 0.1885 145.43deg);--tblr-success-fg:var(--tblr-light);--tblr-success-darken:oklch(from var(--tblr-success) calc(l - 0.06) c h);--tblr-success-lt:color-mix(in oklab, var(--tblr-success) 10%, transparent);--tblr-success-200:color-mix(in oklab, var(--tblr-success) 20%, transparent);--tblr-info:oklch(66.26% 0.1358 246.81deg);--tblr-info-fg:var(--tblr-light);--tblr-info-darken:oklch(from var(--tblr-info) calc(l - 0.06) c h);--tblr-info-lt:color-mix(in oklab, var(--tblr-info) 10%, transparent);--tblr-info-200:color-mix(in oklab, var(--tblr-info) 20%, transparent);--tblr-warning:oklch(77.02% 0.1658 71.02deg);--tblr-warning-fg:var(--tblr-light);--tblr-warning-darken:oklch(from var(--tblr-warning) calc(l - 0.06) c h);--tblr-warning-lt:color-mix(in oklab, var(--tblr-warning) 10%, transparent);--tblr-warning-200:color-mix(in oklab, var(--tblr-warning) 20%, transparent);--tblr-danger:oklch(58.29% 0.1941 25.59deg);--tblr-danger-fg:var(--tblr-light);--tblr-danger-darken:oklch(from var(--tblr-danger) calc(l - 0.06) c h);--tblr-danger-lt:color-mix(in oklab, var(--tblr-danger) 10%, transparent);--tblr-danger-200:color-mix(in oklab, var(--tblr-danger) 20%, transparent);--tblr-light:oklch(98.51% 0 0deg);--tblr-light-fg:var(--tblr-dark);--tblr-light-darken:oklch(from var(--tblr-light) calc(l - 0.06) c h);--tblr-light-lt:color-mix(in oklab, var(--tblr-light) 10%, transparent);--tblr-light-200:color-mix(in oklab, var(--tblr-light) 20%, transparent);--tblr-dark:oklch(26.86% 0 0deg);--tblr-dark-fg:var(--tblr-light);--tblr-dark-darken:oklch(from var(--tblr-dark) calc(l - 0.06) c h);--tblr-dark-lt:color-mix(in oklab, var(--tblr-dark) 10%, transparent);--tblr-dark-200:color-mix(in oklab, var(--tblr-dark) 20%, transparent);--tblr-muted:oklch(55.55% 0 0deg);--tblr-muted-fg:var(--tblr-light);--tblr-muted-darken:oklch(from var(--tblr-muted) calc(l - 0.06) c h);--tblr-muted-lt:color-mix(in oklab, var(--tblr-muted) 10%, transparent);--tblr-muted-200:color-mix(in oklab, var(--tblr-muted) 20%, transparent);--tblr-blue:oklch(54.6% 0.1724 254.2deg);--tblr-blue-fg:var(--tblr-light);--tblr-blue-darken:oklch(from var(--tblr-blue) calc(l - 0.06) c h);--tblr-blue-lt:color-mix(in oklab, var(--tblr-blue) 10%, transparent);--tblr-blue-200:color-mix(in oklab, var(--tblr-blue) 20%, transparent);--tblr-azure:oklch(66.26% 0.1358 246.81deg);--tblr-azure-fg:var(--tblr-light);--tblr-azure-darken:oklch(from var(--tblr-azure) calc(l - 0.06) c h);--tblr-azure-lt:color-mix(in oklab, var(--tblr-azure) 10%, transparent);--tblr-azure-200:color-mix(in oklab, var(--tblr-azure) 20%, transparent);--tblr-indigo:oklch(55.66% 0.2082 268.35deg);--tblr-indigo-fg:var(--tblr-light);--tblr-indigo-darken:oklch(from var(--tblr-indigo) calc(l - 0.06) c h);--tblr-indigo-lt:color-mix(in oklab, var(--tblr-indigo) 10%, transparent);--tblr-indigo-200:color-mix(in oklab, var(--tblr-indigo) 20%, transparent);--tblr-purple:oklch(57.83% 0.2186 319.15deg);--tblr-purple-fg:var(--tblr-light);--tblr-purple-darken:oklch(from var(--tblr-purple) calc(l - 0.06) c h);--tblr-purple-lt:color-mix(in oklab, var(--tblr-purple) 10%, transparent);--tblr-purple-200:color-mix(in oklab, var(--tblr-purple) 20%, transparent);--tblr-pink:oklch(58.81% 0.201 5.25deg);--tblr-pink-fg:var(--tblr-light);--tblr-pink-darken:oklch(from var(--tblr-pink) calc(l - 0.06) c h);--tblr-pink-lt:color-mix(in oklab, var(--tblr-pink) 10%, transparent);--tblr-pink-200:color-mix(in oklab, var(--tblr-pink) 20%, transparent);--tblr-red:oklch(58.29% 0.1941 25.59deg);--tblr-red-fg:var(--tblr-light);--tblr-red-darken:oklch(from var(--tblr-red) calc(l - 0.06) c h);--tblr-red-lt:color-mix(in oklab, var(--tblr-red) 10%, transparent);--tblr-red-200:color-mix(in oklab, var(--tblr-red) 20%, transparent);--tblr-orange:oklch(68.51% 0.1954 44.57deg);--tblr-orange-fg:var(--tblr-light);--tblr-orange-darken:oklch(from var(--tblr-orange) calc(l - 0.06) c h);--tblr-orange-lt:color-mix(in oklab, var(--tblr-orange) 10%, transparent);--tblr-orange-200:color-mix(in oklab, var(--tblr-orange) 20%, transparent);--tblr-yellow:oklch(77.02% 0.1658 71.02deg);--tblr-yellow-fg:var(--tblr-light);--tblr-yellow-darken:oklch(from var(--tblr-yellow) calc(l - 0.06) c h);--tblr-yellow-lt:color-mix(in oklab, var(--tblr-yellow) 10%, transparent);--tblr-yellow-200:color-mix(in oklab, var(--tblr-yellow) 20%, transparent);--tblr-lime:oklch(70.99% 0.1897 131.53deg);--tblr-lime-fg:var(--tblr-light);--tblr-lime-darken:oklch(from var(--tblr-lime) calc(l - 0.06) c h);--tblr-lime-lt:color-mix(in oklab, var(--tblr-lime) 10%, transparent);--tblr-lime-200:color-mix(in oklab, var(--tblr-lime) 20%, transparent);--tblr-green:oklch(67.38% 0.1885 145.43deg);--tblr-green-fg:var(--tblr-light);--tblr-green-darken:oklch(from var(--tblr-green) calc(l - 0.06) c h);--tblr-green-lt:color-mix(in oklab, var(--tblr-green) 10%, transparent);--tblr-green-200:color-mix(in oklab, var(--tblr-green) 20%, transparent);--tblr-teal:oklch(64.32% 0.1338 164.7deg);--tblr-teal-fg:var(--tblr-light);--tblr-teal-darken:oklch(from var(--tblr-teal) calc(l - 0.06) c h);--tblr-teal-lt:color-mix(in oklab, var(--tblr-teal) 10%, transparent);--tblr-teal-200:color-mix(in oklab, var(--tblr-teal) 20%, transparent);--tblr-cyan:oklch(65.52% 0.1105 212.17deg);--tblr-cyan-fg:var(--tblr-light);--tblr-cyan-darken:oklch(from var(--tblr-cyan) calc(l - 0.06) c h);--tblr-cyan-lt:color-mix(in oklab, var(--tblr-cyan) 10%, transparent);--tblr-cyan-200:color-mix(in oklab, var(--tblr-cyan) 20%, transparent);--tblr-x:#000;--tblr-x-fg:var(--tblr-light);--tblr-x-darken:oklch(from var(--tblr-x) calc(l - 0.06) c h);--tblr-x-lt:color-mix(in oklab, var(--tblr-x) 10%, transparent);--tblr-x-200:color-mix(in oklab, var(--tblr-x) 20%, transparent);--tblr-facebook:#0866ff;--tblr-facebook-fg:var(--tblr-light);--tblr-facebook-darken:oklch(from var(--tblr-facebook) calc(l - 0.06) c h);--tblr-facebook-lt:color-mix(in oklab, var(--tblr-facebook) 10%, transparent);--tblr-facebook-200:color-mix(in oklab, var(--tblr-facebook) 20%, transparent);--tblr-twitter:#1da1f2;--tblr-twitter-fg:var(--tblr-light);--tblr-twitter-darken:oklch(from var(--tblr-twitter) calc(l - 0.06) c h);--tblr-twitter-lt:color-mix(in oklab, var(--tblr-twitter) 10%, transparent);--tblr-twitter-200:color-mix(in oklab, var(--tblr-twitter) 20%, transparent);--tblr-linkedin:#0a66c2;--tblr-linkedin-fg:var(--tblr-light);--tblr-linkedin-darken:oklch(from var(--tblr-linkedin) calc(l - 0.06) c h);--tblr-linkedin-lt:color-mix(in oklab, var(--tblr-linkedin) 10%, transparent);--tblr-linkedin-200:color-mix(in oklab, var(--tblr-linkedin) 20%, transparent);--tblr-google:#4285f4;--tblr-google-fg:var(--tblr-light);--tblr-google-darken:oklch(from var(--tblr-google) calc(l - 0.06) c h);--tblr-google-lt:color-mix(in oklab, var(--tblr-google) 10%, transparent);--tblr-google-200:color-mix(in oklab, var(--tblr-google) 20%, transparent);--tblr-youtube:#f00;--tblr-youtube-fg:var(--tblr-light);--tblr-youtube-darken:oklch(from var(--tblr-youtube) calc(l - 0.06) c h);--tblr-youtube-lt:color-mix(in oklab, var(--tblr-youtube) 10%, transparent);--tblr-youtube-200:color-mix(in oklab, var(--tblr-youtube) 20%, transparent);--tblr-vimeo:#1ab7ea;--tblr-vimeo-fg:var(--tblr-light);--tblr-vimeo-darken:oklch(from var(--tblr-vimeo) calc(l - 0.06) c h);--tblr-vimeo-lt:color-mix(in oklab, var(--tblr-vimeo) 10%, transparent);--tblr-vimeo-200:color-mix(in oklab, var(--tblr-vimeo) 20%, transparent);--tblr-dribbble:#ea4c89;--tblr-dribbble-fg:var(--tblr-light);--tblr-dribbble-darken:oklch(from var(--tblr-dribbble) calc(l - 0.06) c h);--tblr-dribbble-lt:color-mix(in oklab, var(--tblr-dribbble) 10%, transparent);--tblr-dribbble-200:color-mix(in oklab, var(--tblr-dribbble) 20%, transparent);--tblr-github:#181717;--tblr-github-fg:var(--tblr-light);--tblr-github-darken:oklch(from var(--tblr-github) calc(l - 0.06) c h);--tblr-github-lt:color-mix(in oklab, var(--tblr-github) 10%, transparent);--tblr-github-200:color-mix(in oklab, var(--tblr-github) 20%, transparent);--tblr-instagram:#ff0069;--tblr-instagram-fg:var(--tblr-light);--tblr-instagram-darken:oklch(from var(--tblr-instagram) calc(l - 0.06) c h);--tblr-instagram-lt:color-mix(in oklab, var(--tblr-instagram) 10%, transparent);--tblr-instagram-200:color-mix(in oklab, var(--tblr-instagram) 20%, transparent);--tblr-pinterest:#bd081c;--tblr-pinterest-fg:var(--tblr-light);--tblr-pinterest-darken:oklch(from var(--tblr-pinterest) calc(l - 0.06) c h);--tblr-pinterest-lt:color-mix(in oklab, var(--tblr-pinterest) 10%, transparent);--tblr-pinterest-200:color-mix(in oklab, var(--tblr-pinterest) 20%, transparent);--tblr-vk:#07f;--tblr-vk-fg:var(--tblr-light);--tblr-vk-darken:oklch(from var(--tblr-vk) calc(l - 0.06) c h);--tblr-vk-lt:color-mix(in oklab, var(--tblr-vk) 10%, transparent);--tblr-vk-200:color-mix(in oklab, var(--tblr-vk) 20%, transparent);--tblr-rss:#ffa500;--tblr-rss-fg:var(--tblr-dark);--tblr-rss-darken:oklch(from var(--tblr-rss) calc(l - 0.06) c h);--tblr-rss-lt:color-mix(in oklab, var(--tblr-rss) 10%, transparent);--tblr-rss-200:color-mix(in oklab, var(--tblr-rss) 20%, transparent);--tblr-flickr:#0063dc;--tblr-flickr-fg:var(--tblr-light);--tblr-flickr-darken:oklch(from var(--tblr-flickr) calc(l - 0.06) c h);--tblr-flickr-lt:color-mix(in oklab, var(--tblr-flickr) 10%, transparent);--tblr-flickr-200:color-mix(in oklab, var(--tblr-flickr) 20%, transparent);--tblr-bitbucket:#0052cc;--tblr-bitbucket-fg:var(--tblr-light);--tblr-bitbucket-darken:oklch(from var(--tblr-bitbucket) calc(l - 0.06) c h);--tblr-bitbucket-lt:color-mix(in oklab, var(--tblr-bitbucket) 10%, transparent);--tblr-bitbucket-200:color-mix(in oklab, var(--tblr-bitbucket) 20%, transparent);--tblr-tabler:#066fd1;--tblr-tabler-fg:var(--tblr-light);--tblr-tabler-darken:oklch(from var(--tblr-tabler) calc(l - 0.06) c h);--tblr-tabler-lt:color-mix(in oklab, var(--tblr-tabler) 10%, transparent);--tblr-tabler-200:color-mix(in oklab, var(--tblr-tabler) 20%, transparent);--tblr-gray-50-fg:var(--tblr-gray-50);--tblr-gray-100-fg:var(--tblr-gray-100);--tblr-gray-200-fg:var(--tblr-gray-200);--tblr-gray-300-fg:var(--tblr-gray-300);--tblr-gray-400-fg:var(--tblr-gray-400);--tblr-gray-500-fg:var(--tblr-gray-500);--tblr-gray-600-fg:var(--tblr-gray-600);--tblr-gray-700-fg:var(--tblr-gray-700);--tblr-gray-800-fg:var(--tblr-gray-800);--tblr-gray-900-fg:var(--tblr-gray-900);--tblr-gray-950-fg:var(--tblr-gray-950);--tblr-spacer-0:0;--tblr-spacer-1:0.25rem;--tblr-spacer-2:0.5rem;--tblr-spacer-3:1rem;--tblr-spacer-4:1.5rem;--tblr-spacer-5:2rem;--tblr-spacer-6:2.5rem;--tblr-icon-size:1.25rem;--tblr-font-weight-light:300;--tblr-font-weight-normal:400;--tblr-font-weight-medium:500;--tblr-font-weight-semibold:600;--tblr-font-weight-bold:700;--tblr-font-weight-headings:var(--tblr-font-weight-semibold);--tblr-font-size-h1:1.5rem;--tblr-font-size-h2:1.25rem;--tblr-font-size-h3:1rem;--tblr-font-size-h4:0.875rem;--tblr-font-size-h5:0.75rem;--tblr-font-size-h6:0.625rem;--tblr-line-height-h1:2rem;--tblr-line-height-h2:1.75rem;--tblr-line-height-h3:1.5rem;--tblr-line-height-h4:1.25rem;--tblr-line-height-h5:1rem;--tblr-line-height-h6:1rem;--tblr-line-height-base:1.4285714286;--tblr-line-height-sm:1.1428571429;--tblr-line-height-lg:1.7142857143;--tblr-line-height-xl:2;--tblr-shadow-color:light-dark(rgba(18, 18, 23, 0.4), #000);--tblr-shadow:0px 2px 4px -1px color-mix(in oklab, var(--tblr-shadow-color) 15%, transparent),0px 4px 6px -1px color-mix(in oklab, var(--tblr-shadow-color) 20%, transparent);--tblr-shadow-xs:0 1px 2px 0 color-mix(in oklab, var(--tblr-shadow-color) 12.5%, transparent);--tblr-shadow-sm:0 1px 3px 0 color-mix(in oklab, var(--tblr-shadow-color) 25%, transparent),0 1px 2px 0 color-mix(in oklab, var(--tblr-shadow-color) 15%, transparent);--tblr-shadow-md:0px 2px 4px -1px color-mix(in oklab, var(--tblr-shadow-color) 15%, transparent),0px 4px 6px -1px color-mix(in oklab, var(--tblr-shadow-color) 20%, transparent);--tblr-shadow-lg:0px 4px 6px -2px color-mix(in oklab, var(--tblr-shadow-color) 12.5%, transparent),0px 10px 15px -3px color-mix(in oklab, var(--tblr-shadow-color) 20%, transparent);--tblr-shadow-xl:0px 10px 10px -5px color-mix(in oklab, var(--tblr-shadow-color) 10%, transparent),0px 20px 25px -5px color-mix(in oklab, var(--tblr-shadow-color) 25%, transparent);--tblr-shadow-2xl:0px 25px 50px -12px color-mix(in oklab, var(--tblr-shadow-color) 62.5%, transparent);--tblr-shadow-overlay:0px 2px 4px 0px color-mix(in oklab, var(--tblr-shadow-color) 10%, transparent),0px 5px 8px 0px color-mix(in oklab, var(--tblr-shadow-color) 10%, transparent),0px 10px 18px 0px color-mix(in oklab, var(--tblr-shadow-color) 7.5%, transparent),0px 24px 48px 0px color-mix(in oklab, var(--tblr-shadow-color) 7.5%, transparent),0px 0px 0px 1px color-mix(in oklab, var(--tblr-shadow-color) 25%, transparent);--tblr-shadow-border:0px 0px 0px 1px color-mix(in oklab, var(--tblr-shadow-color) 25%, transparent);--tblr-shadow-transparent:0 0 0 0 transparent;--tblr-shadow-input:0 1px 2px 0 color-mix(in oklab, var(--tblr-shadow-color) 12.5%, transparent);--tblr-shadow-card:0 1px 2px 0 color-mix(in oklab, var(--tblr-shadow-color) 12.5%, transparent);--tblr-shadow-card-hover:0px 4px 6px -2px color-mix(in oklab, var(--tblr-shadow-color) 12.5%, transparent),0px 10px 15px -3px color-mix(in oklab, var(--tblr-shadow-color) 20%, transparent);--tblr-shadow-dropdown:0px 2px 4px 0px color-mix(in oklab, var(--tblr-shadow-color) 10%, transparent),0px 5px 8px 0px color-mix(in oklab, var(--tblr-shadow-color) 10%, transparent),0px 10px 18px 0px color-mix(in oklab, var(--tblr-shadow-color) 7.5%, transparent),0px 24px 48px 0px color-mix(in oklab, var(--tblr-shadow-color) 7.5%, transparent),0px 0px 0px 1px color-mix(in oklab, var(--tblr-shadow-color) 25%, transparent);--tblr-border-radius-scale:1;--tblr-border-radius-0:calc(0 * var(--tblr-border-radius-scale, 1));--tblr-border-radius-xs:calc(2px * var(--tblr-border-radius-scale, 1));--tblr-border-radius-sm:calc(4px * var(--tblr-border-radius-scale, 1));--tblr-border-radius-md:calc(6px * var(--tblr-border-radius-scale, 1));--tblr-border-radius-lg:calc(8px * var(--tblr-border-radius-scale, 1));--tblr-border-radius-xl:calc(1rem * var(--tblr-border-radius-scale, 1));--tblr-border-radius-xxl:calc(2rem * var(--tblr-border-radius-scale, 1));--tblr-border-radius-pill:calc(100rem * var(--tblr-border-radius-scale, 1));--tblr-border-radius:var(--tblr-border-radius-md);--tblr-btn-input-fg:var(--tblr-body-color);--tblr-btn-input-bg:var(--tblr-bg-forms);--tblr-btn-input-padding-y:0.5625rem;--tblr-btn-input-padding-x:1rem;--tblr-btn-input-font-size:0.875rem;--tblr-btn-input-line-height:1.25rem;--tblr-btn-input-border-radius:var(--tblr-border-radius);--tblr-btn-input-min-height:calc(var(--tblr-btn-input-line-height) + var(--tblr-btn-input-padding-y) * 2 + var(--tblr-border-width) * 2);--tblr-btn-input-sm-padding-y:0.4375rem;--tblr-btn-input-sm-padding-x:0.5rem;--tblr-btn-input-sm-font-size:0.75rem;--tblr-btn-input-sm-line-height:1rem;--tblr-btn-input-sm-border-radius:var(--tblr-border-radius-sm);--tblr-btn-input-sm-min-height:calc(var(--tblr-btn-input-sm-line-height) + var(--tblr-btn-input-sm-padding-y) * 2 + var(--tblr-border-width) * 2);--tblr-btn-input-lg-padding-y:0.6875rem;--tblr-btn-input-lg-padding-x:1.5rem;--tblr-btn-input-lg-font-size:1rem;--tblr-btn-input-lg-line-height:1.5rem;--tblr-btn-input-lg-border-radius:var(--tblr-border-radius-lg);--tblr-btn-input-lg-min-height:calc(var(--tblr-btn-input-lg-line-height) + var(--tblr-btn-input-lg-padding-y) * 2 + var(--tblr-border-width) * 2);--tblr-btn-input-xl-padding-y:0.6875rem;--tblr-btn-input-xl-padding-x:1.75rem;--tblr-btn-input-xl-font-size:1.25rem;--tblr-btn-input-xl-line-height:2rem;--tblr-btn-input-xl-border-radius:var(--tblr-border-radius);--tblr-btn-input-xl-min-height:calc(var(--tblr-btn-input-xl-line-height) + var(--tblr-btn-input-xl-padding-y) * 2 + var(--tblr-border-width) * 2);--tblr-control-checked-bg:var(--tblr-primary);--tblr-control-checked-border-color:var(--tblr-border-color-translucent);--tblr-control-disabled-bg:var(--tblr-bg-forms-disabled);--tblr-control-disabled-opacity:0.5;--tblr-backdrop-opacity:0.32;--tblr-backdrop-bg:light-dark(var(--tblr-gray-800), var(--tblr-black));--tblr-backdrop-bg-dark:color-mix(in oklab, var(--tblr-dark) calc(var(--tblr-backdrop-opacity) * 100%), transparent);--tblr-backdrop-bg-light:color-mix(in oklab, var(--tblr-light) calc(var(--tblr-backdrop-opacity) * 100%), transparent);--tblr-backdrop-blur:4px;--tblr-backdrop-filter:blur(var(--tblr-backdrop-blur))}[dir=ltr]{--tblr-dir:1}[dir=rtl]{--tblr-dir:-1}:host,:root{height:100%}:host,:root,[data-bs-theme=light],[data-theme=light]{color-scheme:light;--tblr-spacer:var(--tblr-spacer-2);--tblr-bg-surface:light-dark(var(--tblr-bg-surface-primary), var(--tblr-gray-800));--tblr-bg-surface-primary:var(--tblr-white);--tblr-bg-surface-secondary:light-dark(var(--tblr-gray-50), var(--tblr-gray-900));--tblr-bg-surface-tertiary:light-dark(color-mix(in oklab, var(--tblr-body-color) 2.5%, transparent), color-mix(in oklab, var(--tblr-body-color) 4%, transparent));--tblr-bg-surface-dark:var(--tblr-gray-900);--tblr-bg-surface-inverted:light-dark(var(--tblr-gray-900), var(--tblr-gray-100));--tblr-bg-forms:light-dark(var(--tblr-bg-surface), var(--tblr-gray-900));--tblr-bg-forms-disabled:light-dark(var(--tblr-bg-surface-secondary), color-mix(in oklab, var(--tblr-body-color) 4%, transparent));--tblr-text-inverted:light-dark(var(--tblr-gray-100), var(--tblr-gray-800));--tblr-body-color:light-dark(var(--tblr-gray-700), var(--tblr-gray-200));--tblr-body-bg:light-dark(var(--tblr-bg-surface-secondary), var(--tblr-gray-900));--tblr-link-color:light-dark(var(--tblr-primary), color-mix(in oklab, var(--tblr-white) 40%, var(--tblr-primary)));--tblr-link-hover-color:light-dark(color-mix(in oklab, var(--tblr-black) 20%, var(--tblr-link-color)), color-mix(in oklab, var(--tblr-white) 20%, var(--tblr-link-color)));--tblr-secondary:light-dark(var(--tblr-gray-500), var(--tblr-gray-400));--tblr-muted:light-dark(var(--tblr-gray-500), var(--tblr-gray-400));--tblr-tertiary:light-dark(var(--tblr-gray-500), var(--tblr-gray-400));--tblr-border-color:light-dark(var(--tblr-gray-200), var(--tblr-gray-700));--tblr-border-color-translucent:light-dark(color-mix(in oklab, var(--tblr-gray-800) 11.9%, transparent), var(--tblr-dark-mode-border-color-translucent));--tblr-border-dark-color:light-dark(var(--tblr-gray-300), var(--tblr-dark-mode-border-dark-color));--tblr-border-dark-color-translucent:color-mix(in oklab, var(--tblr-gray-800) 20.7%, transparent);--tblr-border-light-color:light-dark(var(--tblr-gray-200), var(--tblr-dark-mode-border-light-color));--tblr-border-light-color-translucent:color-mix(in oklab, var(--tblr-gray-800) 4.7%, transparent);--tblr-border-active-color:light-dark(var(--tblr-gray-400), var(--tblr-dark-mode-border-active-color));--tblr-border-active-color-translucent:color-mix(in oklab, var(--tblr-gray-800) 44.8%, transparent);--tblr-icon-color:var(--tblr-gray-400);--tblr-fill-primary:color-mix(in oklab, var(--tblr-body-color) 16%, transparent);--tblr-fill-secondary:color-mix(in oklab, var(--tblr-body-color) 8%, transparent);--tblr-fill-tertiary:light-dark(color-mix(in oklab, var(--tblr-body-color) 4%, transparent), color-mix(in oklab, var(--tblr-body-color) 6%, transparent));--tblr-fill-quaternary:color-mix(in oklab, var(--tblr-body-color) 2%, transparent);--tblr-fill:var(--tblr-fill-primary);--tblr-active-bg:light-dark(color-mix(in oklab, var(--tblr-primary) 4%, transparent), color-mix(in oklab, var(--tblr-primary) 12%, transparent));--tblr-hover-bg:var(--tblr-fill-tertiary);--tblr-disabled-bg:var(--tblr-bg-surface-secondary);--tblr-disabled-color:color-mix(in oklab, var(--tblr-body-color) 40%, transparent);--tblr-code-color:light-dark(var(--tblr-gray-600), var(--tblr-gray-400));--tblr-code-bg:var(--tblr-fill-tertiary);--tblr-dark-mode-border-color:oklch(from var(--tblr-dark) calc(l + 0.08) c h);--tblr-dark-mode-border-color-translucent:rgba(72, 110, 149, 0.14);--tblr-dark-mode-border-active-color:oklch(from var(--tblr-dark) calc(l + 0.12) c h);--tblr-dark-mode-border-dark-color:oklch(from var(--tblr-dark) calc(l + 0.04) c h);--tblr-dark-mode-border-light-color:oklch(from var(--tblr-dark) calc(l + 0.06) c h);--tblr-page-padding:var(--tblr-spacer-3);--tblr-page-padding-y:var(--tblr-spacer-4);--tblr-sidebar-width:16rem;--tblr-sidebar-folded-width:4rem}@media (max-width:991.98px){:host,:root,[data-bs-theme=light],[data-theme=light]{--tblr-page-padding:var(--tblr-spacer-2)}}@keyframes pulse{0%{transform:scale(1)}14%{transform:scale(1.25)}28%{transform:scale(1)}42%{transform:scale(1.25)}70%{transform:scale(1)}}@keyframes tada{0%{transform:scale3d(1,1,1)}10%,5%{transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-5deg)}15%,25%,35%,45%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,5deg)}20%,30%,40%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-5deg)}50%{transform:scale3d(1,1,1)}}@keyframes rotate-360{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes blink{0%{opacity:0}50%{opacity:1}100%{opacity:0}}@keyframes shake{0%{transform:scaleX(1)}20%{transform:scale3d(.9,.9,.9) rotate(-5deg)}50%,70%,90%{transform:scale3d(1.25,1.25,1.25) rotate(5deg)}60%,80%{transform:scale3d(1.25,1.25,1.25) rotate(-5deg)}100%{transform:scaleX(1)}}body{position:relative;height:100%;min-height:100%;padding:0;font-feature-settings:"liga" 0,"cv03","cv04","cv11";letter-spacing:0;touch-action:manipulation;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media print{body{background:0 0}}*{scrollbar-color:color-mix(in oklab,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent) transparent}::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){::-webkit-scrollbar{-webkit-transition:none;transition:none}}::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem color-mix(in oklab,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent)}::-webkit-scrollbar-track{background:0 0}:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem color-mix(in oklab,var(--tblr-scrollbar-color,var(--tblr-body-color)) 40%,transparent)}::-webkit-scrollbar-corner{background:0 0}.layout-fluid .container,.layout-fluid [class*=" container-"],.layout-fluid [class^=container-],html[data-bs-layout=fluid] .container,html[data-bs-layout=fluid] [class*=" container-"],html[data-bs-layout=fluid] [class^=container-]{max-width:100%}.layout-boxed,html[data-bs-layout=boxed] body{--tblr-theme-boxed-border-radius:0;--tblr-theme-boxed-width:1320px}@media (min-width:768px){.layout-boxed,html[data-bs-layout=boxed] body{padding:1rem;background:oklch(26.86% 0 0deg) linear-gradient(to right,rgba(255,255,255,.1),transparent) fixed;--tblr-theme-boxed-border-radius:6px}}.layout-boxed .page,html[data-bs-layout=boxed] body .page{contain:layout;max-width:var(--tblr-theme-boxed-width);margin:0 auto;color:var(--tblr-body-color);border-radius:var(--tblr-theme-boxed-border-radius)}@media (min-width:768px){.layout-boxed .page,html[data-bs-layout=boxed] body .page{background:var(--tblr-body-bg);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}}.layout-boxed .page>.navbar:first-child,.layout-boxed .page>.navbar:not(.navbar-vertical):first-of-type,html[data-bs-layout=boxed] body .page>.navbar:first-child,html[data-bs-layout=boxed] body .page>.navbar:not(.navbar-vertical):first-of-type{border-start-start-radius:var(--tblr-theme-boxed-border-radius);border-start-end-radius:var(--tblr-theme-boxed-border-radius)}.navbar{--tblr-navbar-bg:var(--tblr-bg-surface);--tblr-navbar-border-width:var(--tblr-border-width);--tblr-navbar-active-border-color:var(--tblr-primary);--tblr-navbar-active-bg:var(--tblr-active-bg);--tblr-navbar-border-color:var(--tblr-border-color);--tblr-navbar-hover-color:var(--tblr-body-color);align-items:stretch;min-height:3.5rem;color:var(--tblr-navbar-color);background:var(--tblr-navbar-bg);box-shadow:inset 0 calc(-1 * var(--tblr-navbar-border-width)) 0 0 var(--tblr-navbar-border-color)}@media print{.navbar{display:none}}.navbar-collapse .navbar{flex-grow:1}.navbar.collapsing{min-height:0}.navbar .dropdown-menu{position:absolute;z-index:1030}.navbar .navbar-nav{--tblr-nav-link-icon-margin-end:0.5rem;min-height:3rem}.navbar .navbar-nav .nav-section-title{display:none}.navbar .navbar-nav .nav-link{position:relative;justify-content:center;min-width:2.5rem;min-height:2.5rem;border-radius:var(--tblr-border-radius)}.navbar .navbar-nav .nav-link .badge{margin-inline-start:.5rem}.navbar .navbar-nav .nav-link .badge:empty{position:absolute;inset-inline-end:0.5rem;top:.5rem;margin-inline-start:0;transform:translate(calc(var(--tblr-dir) * 50%),-50%)}.navbar-vertical[class*=navbar-expand] .navbar-nav{--tblr-nav-link-icon-color:color-mix(in oklab, var(--tblr-navbar-color) 70%, transparent);--tblr-nav-link-icon-width:1.5rem;--tblr-nav-link-icon-height:1.25rem;--tblr-sidebar-inset:0.5rem;--tblr-sidebar-nav-padding-y:0.75rem;--tblr-sidebar-nav-padding-x:0.75rem;--tblr-sidebar-nav-indent:1.5rem;--tblr-sidebar-section-title-font-size:0.75rem;--tblr-sidebar-section-title-margin-top:1rem;padding-inline:var(--tblr-sidebar-inset);margin-inline-start:0;margin-inline-end:0}.navbar-vertical[class*=navbar-expand] .navbar-nav .nav-link{justify-content:start;padding:var(--tblr-sidebar-nav-padding-y) var(--tblr-sidebar-nav-padding-x)}.navbar-vertical[class*=navbar-expand] .navbar-nav .nav-link .badge:not(:empty){margin-inline-start:auto}.navbar-vertical[class*=navbar-expand] .navbar-nav .nav-link-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navbar-vertical[class*=navbar-expand] .navbar-nav .nav-item.active>.nav-link{--tblr-nav-link-icon-color:currentColor;font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-vertical[class*=navbar-expand] .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:0 0}.navbar-vertical[class*=navbar-expand] .navbar-nav .nav-section-title{display:block;padding:.25rem var(--tblr-sidebar-nav-padding-x);margin-top:var(--tblr-sidebar-section-title-margin-top);font-size:var(--tblr-sidebar-section-title-font-size);font-weight:var(--tblr-font-weight-medium);color:color-mix(in oklab,var(--tblr-navbar-color) 70%,transparent);text-transform:uppercase;letter-spacing:.04em}.navbar-vertical[class*=navbar-expand] .navbar-nav .nav-section-title:first-child{margin-top:0}.navbar-vertical[class*=navbar-expand] .navbar-side{flex-grow:0;flex-direction:column;align-items:stretch;justify-content:start;padding-bottom:.25rem;margin-top:auto}.navbar-vertical[class*=navbar-expand] .navbar-side .navbar-nav{flex-grow:0}.navbar-vertical[class*=navbar-expand] .navbar-collapse{flex-direction:column}.navbar-vertical[class*=navbar-expand] .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-vertical[class*=navbar-expand] .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical[class*=navbar-expand] .navbar-collapse .dropdown-menu{position:static;z-index:auto;min-width:0;padding:0;margin:0;color:inherit;background:0 0;border:none;box-shadow:none}.navbar-vertical[class*=navbar-expand] .navbar-collapse .dropdown-menu .dropdown-item{display:flex;width:auto;min-width:0;padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end));color:inherit;border-radius:var(--tblr-border-radius)}.navbar-vertical[class*=navbar-expand] .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-disabled-color);pointer-events:none;background-color:transparent}.navbar-vertical[class*=navbar-expand] .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical[class*=navbar-expand] .navbar-collapse .dropdown-menu .dropdown-item:active{font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-vertical[class*=navbar-expand] .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + var(--tblr-sidebar-nav-indent))}.navbar-vertical[class*=navbar-expand] .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + 2 * var(--tblr-sidebar-nav-indent))}.navbar-vertical[class*=navbar-expand] .navbar-collapse .dropdown-toggle::after{margin-inline-start:auto}.navbar-vertical[class*=navbar-expand] .navbar-collapse .nav-item.active::after{content:none}@media (max-width:575.98px){.navbar-expand-sm .navbar-nav{--tblr-nav-link-icon-color:color-mix(in oklab, var(--tblr-navbar-color) 70%, transparent);--tblr-nav-link-icon-width:1.5rem;--tblr-nav-link-icon-height:1.25rem;--tblr-sidebar-inset:0.5rem;--tblr-sidebar-nav-padding-y:0.75rem;--tblr-sidebar-nav-padding-x:0.75rem;--tblr-sidebar-nav-indent:1.5rem;--tblr-sidebar-section-title-font-size:0.75rem;--tblr-sidebar-section-title-margin-top:1rem;padding-inline:var(--tblr-sidebar-inset);margin-inline-start:0;margin-inline-end:0}.navbar-expand-sm .navbar-nav .nav-link{justify-content:start;padding:var(--tblr-sidebar-nav-padding-y) var(--tblr-sidebar-nav-padding-x)}.navbar-expand-sm .navbar-nav .nav-link .badge:not(:empty){margin-inline-start:auto}.navbar-expand-sm .navbar-nav .nav-link-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navbar-expand-sm .navbar-nav .nav-item.active>.nav-link{--tblr-nav-link-icon-color:currentColor;font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-sm .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:0 0}.navbar-expand-sm .navbar-nav .nav-section-title{display:block;padding:.25rem var(--tblr-sidebar-nav-padding-x);margin-top:var(--tblr-sidebar-section-title-margin-top);font-size:var(--tblr-sidebar-section-title-font-size);font-weight:var(--tblr-font-weight-medium);color:color-mix(in oklab,var(--tblr-navbar-color) 70%,transparent);text-transform:uppercase;letter-spacing:.04em}.navbar-expand-sm .navbar-nav .nav-section-title:first-child{margin-top:0}.navbar-expand-sm .navbar-side{flex-grow:0;flex-direction:column;align-items:stretch;justify-content:start;padding-bottom:.25rem;margin-top:auto}.navbar-expand-sm .navbar-side .navbar-nav{flex-grow:0}.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-expand-sm .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-sm .navbar-collapse .dropdown-menu{position:static;z-index:auto;min-width:0;padding:0;margin:0;color:inherit;background:0 0;border:none;box-shadow:none}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{display:flex;width:auto;min-width:0;padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end));color:inherit;border-radius:var(--tblr-border-radius)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-disabled-color);pointer-events:none;background-color:transparent}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + var(--tblr-sidebar-nav-indent))}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + 2 * var(--tblr-sidebar-nav-indent))}.navbar-expand-sm .navbar-collapse .dropdown-toggle::after{margin-inline-start:auto}.navbar-expand-sm .navbar-collapse .nav-item.active::after{content:none}.navbar-expand-sm.navbar-vertical .navbar-brand{margin-inline:auto}.navbar-expand-sm.navbar-vertical .navbar-side{margin-top:.5rem}.navbar-expand-sm .navbar-footer .nav-link-title{display:none}.navbar-expand-sm .navbar-footer .dropup .dropdown-menu{inset-inline-start:auto;inset-inline-end:0;top:100%;bottom:auto}}@media (min-width:576px){.navbar-expand-sm .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-sm .nav-item.active{position:relative}.navbar-expand-sm .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-sm .nav-item.active::after{position:absolute;inset-inline-start:0;inset-inline-end:0;bottom:-.25rem;content:"";border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-sm.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical.navbar-end,.navbar-expand-sm.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical~.navbar,.navbar-expand-sm.navbar-vertical~.page-wrapper,.navbar-expand-sm.navbar-vertical~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}.navbar-expand-sm.navbar-vertical.navbar-end~.navbar,.navbar-expand-sm.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-sm.navbar-vertical.navbar-end~[class*=navbar-expand]:not(.navbar-vertical),.navbar-expand-sm.navbar-vertical.navbar-right~.navbar,.navbar-expand-sm.navbar-vertical.navbar-right~.page-wrapper,.navbar-expand-sm.navbar-vertical.navbar-right~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:0;margin-inline-end:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}}@media (min-width:576px) and (max-width:767.98px){.navbar-expand-sm:not(.navbar-vertical) .navbar-nav .nav-link-icon{display:none}}@media (max-width:767.98px){.navbar-expand-md .navbar-nav{--tblr-nav-link-icon-color:color-mix(in oklab, var(--tblr-navbar-color) 70%, transparent);--tblr-nav-link-icon-width:1.5rem;--tblr-nav-link-icon-height:1.25rem;--tblr-sidebar-inset:0.5rem;--tblr-sidebar-nav-padding-y:0.75rem;--tblr-sidebar-nav-padding-x:0.75rem;--tblr-sidebar-nav-indent:1.5rem;--tblr-sidebar-section-title-font-size:0.75rem;--tblr-sidebar-section-title-margin-top:1rem;padding-inline:var(--tblr-sidebar-inset);margin-inline-start:0;margin-inline-end:0}.navbar-expand-md .navbar-nav .nav-link{justify-content:start;padding:var(--tblr-sidebar-nav-padding-y) var(--tblr-sidebar-nav-padding-x)}.navbar-expand-md .navbar-nav .nav-link .badge:not(:empty){margin-inline-start:auto}.navbar-expand-md .navbar-nav .nav-link-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navbar-expand-md .navbar-nav .nav-item.active>.nav-link{--tblr-nav-link-icon-color:currentColor;font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-md .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:0 0}.navbar-expand-md .navbar-nav .nav-section-title{display:block;padding:.25rem var(--tblr-sidebar-nav-padding-x);margin-top:var(--tblr-sidebar-section-title-margin-top);font-size:var(--tblr-sidebar-section-title-font-size);font-weight:var(--tblr-font-weight-medium);color:color-mix(in oklab,var(--tblr-navbar-color) 70%,transparent);text-transform:uppercase;letter-spacing:.04em}.navbar-expand-md .navbar-nav .nav-section-title:first-child{margin-top:0}.navbar-expand-md .navbar-side{flex-grow:0;flex-direction:column;align-items:stretch;justify-content:start;padding-bottom:.25rem;margin-top:auto}.navbar-expand-md .navbar-side .navbar-nav{flex-grow:0}.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-expand-md .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-md .navbar-collapse .dropdown-menu{position:static;z-index:auto;min-width:0;padding:0;margin:0;color:inherit;background:0 0;border:none;box-shadow:none}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{display:flex;width:auto;min-width:0;padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end));color:inherit;border-radius:var(--tblr-border-radius)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-disabled-color);pointer-events:none;background-color:transparent}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + var(--tblr-sidebar-nav-indent))}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + 2 * var(--tblr-sidebar-nav-indent))}.navbar-expand-md .navbar-collapse .dropdown-toggle::after{margin-inline-start:auto}.navbar-expand-md .navbar-collapse .nav-item.active::after{content:none}.navbar-expand-md.navbar-vertical .navbar-brand{margin-inline:auto}.navbar-expand-md.navbar-vertical .navbar-side{margin-top:.5rem}.navbar-expand-md .navbar-footer .nav-link-title{display:none}.navbar-expand-md .navbar-footer .dropup .dropdown-menu{inset-inline-start:auto;inset-inline-end:0;top:100%;bottom:auto}}@media (min-width:768px){.navbar-expand-md .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-md .nav-item.active{position:relative}.navbar-expand-md .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-md .nav-item.active::after{position:absolute;inset-inline-start:0;inset-inline-end:0;bottom:-.25rem;content:"";border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-md.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical.navbar-end,.navbar-expand-md.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical~.navbar,.navbar-expand-md.navbar-vertical~.page-wrapper,.navbar-expand-md.navbar-vertical~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}.navbar-expand-md.navbar-vertical.navbar-end~.navbar,.navbar-expand-md.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-md.navbar-vertical.navbar-end~[class*=navbar-expand]:not(.navbar-vertical),.navbar-expand-md.navbar-vertical.navbar-right~.navbar,.navbar-expand-md.navbar-vertical.navbar-right~.page-wrapper,.navbar-expand-md.navbar-vertical.navbar-right~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:0;margin-inline-end:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}}@media (min-width:768px) and (max-width:991.98px){.navbar-expand-md:not(.navbar-vertical) .navbar-nav .nav-link-icon{display:none}}@media (max-width:991.98px){.navbar-expand-lg .navbar-nav{--tblr-nav-link-icon-color:color-mix(in oklab, var(--tblr-navbar-color) 70%, transparent);--tblr-nav-link-icon-width:1.5rem;--tblr-nav-link-icon-height:1.25rem;--tblr-sidebar-inset:0.5rem;--tblr-sidebar-nav-padding-y:0.75rem;--tblr-sidebar-nav-padding-x:0.75rem;--tblr-sidebar-nav-indent:1.5rem;--tblr-sidebar-section-title-font-size:0.75rem;--tblr-sidebar-section-title-margin-top:1rem;padding-inline:var(--tblr-sidebar-inset);margin-inline-start:0;margin-inline-end:0}.navbar-expand-lg .navbar-nav .nav-link{justify-content:start;padding:var(--tblr-sidebar-nav-padding-y) var(--tblr-sidebar-nav-padding-x)}.navbar-expand-lg .navbar-nav .nav-link .badge:not(:empty){margin-inline-start:auto}.navbar-expand-lg .navbar-nav .nav-link-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navbar-expand-lg .navbar-nav .nav-item.active>.nav-link{--tblr-nav-link-icon-color:currentColor;font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-lg .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:0 0}.navbar-expand-lg .navbar-nav .nav-section-title{display:block;padding:.25rem var(--tblr-sidebar-nav-padding-x);margin-top:var(--tblr-sidebar-section-title-margin-top);font-size:var(--tblr-sidebar-section-title-font-size);font-weight:var(--tblr-font-weight-medium);color:color-mix(in oklab,var(--tblr-navbar-color) 70%,transparent);text-transform:uppercase;letter-spacing:.04em}.navbar-expand-lg .navbar-nav .nav-section-title:first-child{margin-top:0}.navbar-expand-lg .navbar-side{flex-grow:0;flex-direction:column;align-items:stretch;justify-content:start;padding-bottom:.25rem;margin-top:auto}.navbar-expand-lg .navbar-side .navbar-nav{flex-grow:0}.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-expand-lg .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-lg .navbar-collapse .dropdown-menu{position:static;z-index:auto;min-width:0;padding:0;margin:0;color:inherit;background:0 0;border:none;box-shadow:none}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{display:flex;width:auto;min-width:0;padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end));color:inherit;border-radius:var(--tblr-border-radius)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-disabled-color);pointer-events:none;background-color:transparent}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + var(--tblr-sidebar-nav-indent))}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + 2 * var(--tblr-sidebar-nav-indent))}.navbar-expand-lg .navbar-collapse .dropdown-toggle::after{margin-inline-start:auto}.navbar-expand-lg .navbar-collapse .nav-item.active::after{content:none}.navbar-expand-lg.navbar-vertical .navbar-brand{margin-inline:auto}.navbar-expand-lg.navbar-vertical .navbar-side{margin-top:.5rem}.navbar-expand-lg .navbar-footer .nav-link-title{display:none}.navbar-expand-lg .navbar-footer .dropup .dropdown-menu{inset-inline-start:auto;inset-inline-end:0;top:100%;bottom:auto}}@media (min-width:992px){.navbar-expand-lg .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-lg .nav-item.active{position:relative}.navbar-expand-lg .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-lg .nav-item.active::after{position:absolute;inset-inline-start:0;inset-inline-end:0;bottom:-.25rem;content:"";border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-lg.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical.navbar-end,.navbar-expand-lg.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical~.navbar,.navbar-expand-lg.navbar-vertical~.page-wrapper,.navbar-expand-lg.navbar-vertical~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}.navbar-expand-lg.navbar-vertical.navbar-end~.navbar,.navbar-expand-lg.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-lg.navbar-vertical.navbar-end~[class*=navbar-expand]:not(.navbar-vertical),.navbar-expand-lg.navbar-vertical.navbar-right~.navbar,.navbar-expand-lg.navbar-vertical.navbar-right~.page-wrapper,.navbar-expand-lg.navbar-vertical.navbar-right~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:0;margin-inline-end:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}}@media (min-width:992px) and (max-width:1199.98px){.navbar-expand-lg:not(.navbar-vertical) .navbar-nav .nav-link-icon{display:none}}@media (max-width:1199.98px){.navbar-expand-xl .navbar-nav{--tblr-nav-link-icon-color:color-mix(in oklab, var(--tblr-navbar-color) 70%, transparent);--tblr-nav-link-icon-width:1.5rem;--tblr-nav-link-icon-height:1.25rem;--tblr-sidebar-inset:0.5rem;--tblr-sidebar-nav-padding-y:0.75rem;--tblr-sidebar-nav-padding-x:0.75rem;--tblr-sidebar-nav-indent:1.5rem;--tblr-sidebar-section-title-font-size:0.75rem;--tblr-sidebar-section-title-margin-top:1rem;padding-inline:var(--tblr-sidebar-inset);margin-inline-start:0;margin-inline-end:0}.navbar-expand-xl .navbar-nav .nav-link{justify-content:start;padding:var(--tblr-sidebar-nav-padding-y) var(--tblr-sidebar-nav-padding-x)}.navbar-expand-xl .navbar-nav .nav-link .badge:not(:empty){margin-inline-start:auto}.navbar-expand-xl .navbar-nav .nav-link-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navbar-expand-xl .navbar-nav .nav-item.active>.nav-link{--tblr-nav-link-icon-color:currentColor;font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-xl .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:0 0}.navbar-expand-xl .navbar-nav .nav-section-title{display:block;padding:.25rem var(--tblr-sidebar-nav-padding-x);margin-top:var(--tblr-sidebar-section-title-margin-top);font-size:var(--tblr-sidebar-section-title-font-size);font-weight:var(--tblr-font-weight-medium);color:color-mix(in oklab,var(--tblr-navbar-color) 70%,transparent);text-transform:uppercase;letter-spacing:.04em}.navbar-expand-xl .navbar-nav .nav-section-title:first-child{margin-top:0}.navbar-expand-xl .navbar-side{flex-grow:0;flex-direction:column;align-items:stretch;justify-content:start;padding-bottom:.25rem;margin-top:auto}.navbar-expand-xl .navbar-side .navbar-nav{flex-grow:0}.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-expand-xl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xl .navbar-collapse .dropdown-menu{position:static;z-index:auto;min-width:0;padding:0;margin:0;color:inherit;background:0 0;border:none;box-shadow:none}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{display:flex;width:auto;min-width:0;padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end));color:inherit;border-radius:var(--tblr-border-radius)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-disabled-color);pointer-events:none;background-color:transparent}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + var(--tblr-sidebar-nav-indent))}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + 2 * var(--tblr-sidebar-nav-indent))}.navbar-expand-xl .navbar-collapse .dropdown-toggle::after{margin-inline-start:auto}.navbar-expand-xl .navbar-collapse .nav-item.active::after{content:none}.navbar-expand-xl.navbar-vertical .navbar-brand{margin-inline:auto}.navbar-expand-xl.navbar-vertical .navbar-side{margin-top:.5rem}.navbar-expand-xl .navbar-footer .nav-link-title{display:none}.navbar-expand-xl .navbar-footer .dropup .dropdown-menu{inset-inline-start:auto;inset-inline-end:0;top:100%;bottom:auto}}@media (min-width:1200px){.navbar-expand-xl .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-xl .nav-item.active{position:relative}.navbar-expand-xl .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-xl .nav-item.active::after{position:absolute;inset-inline-start:0;inset-inline-end:0;bottom:-.25rem;content:"";border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-xl.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical.navbar-end,.navbar-expand-xl.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical~.navbar,.navbar-expand-xl.navbar-vertical~.page-wrapper,.navbar-expand-xl.navbar-vertical~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}.navbar-expand-xl.navbar-vertical.navbar-end~.navbar,.navbar-expand-xl.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-xl.navbar-vertical.navbar-end~[class*=navbar-expand]:not(.navbar-vertical),.navbar-expand-xl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xl.navbar-vertical.navbar-right~.page-wrapper,.navbar-expand-xl.navbar-vertical.navbar-right~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:0;margin-inline-end:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}}@media (min-width:1200px) and (max-width:1399.98px){.navbar-expand-xl:not(.navbar-vertical) .navbar-nav .nav-link-icon{display:none}}@media (max-width:1399.98px){.navbar-expand-xxl .navbar-nav{--tblr-nav-link-icon-color:color-mix(in oklab, var(--tblr-navbar-color) 70%, transparent);--tblr-nav-link-icon-width:1.5rem;--tblr-nav-link-icon-height:1.25rem;--tblr-sidebar-inset:0.5rem;--tblr-sidebar-nav-padding-y:0.75rem;--tblr-sidebar-nav-padding-x:0.75rem;--tblr-sidebar-nav-indent:1.5rem;--tblr-sidebar-section-title-font-size:0.75rem;--tblr-sidebar-section-title-margin-top:1rem;padding-inline:var(--tblr-sidebar-inset);margin-inline-start:0;margin-inline-end:0}.navbar-expand-xxl .navbar-nav .nav-link{justify-content:start;padding:var(--tblr-sidebar-nav-padding-y) var(--tblr-sidebar-nav-padding-x)}.navbar-expand-xxl .navbar-nav .nav-link .badge:not(:empty){margin-inline-start:auto}.navbar-expand-xxl .navbar-nav .nav-link-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.navbar-expand-xxl .navbar-nav .nav-item.active>.nav-link{--tblr-nav-link-icon-color:currentColor;font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-xxl .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:0 0}.navbar-expand-xxl .navbar-nav .nav-section-title{display:block;padding:.25rem var(--tblr-sidebar-nav-padding-x);margin-top:var(--tblr-sidebar-section-title-margin-top);font-size:var(--tblr-sidebar-section-title-font-size);font-weight:var(--tblr-font-weight-medium);color:color-mix(in oklab,var(--tblr-navbar-color) 70%,transparent);text-transform:uppercase;letter-spacing:.04em}.navbar-expand-xxl .navbar-nav .nav-section-title:first-child{margin-top:0}.navbar-expand-xxl .navbar-side{flex-grow:0;flex-direction:column;align-items:stretch;justify-content:start;padding-bottom:.25rem;margin-top:auto}.navbar-expand-xxl .navbar-side .navbar-nav{flex-grow:0}.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-expand-xxl .navbar-collapse [class^=container]{flex-direction:column;align-items:stretch;padding:0}.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xxl .navbar-collapse .dropdown-menu{position:static;z-index:auto;min-width:0;padding:0;margin:0;color:inherit;background:0 0;border:none;box-shadow:none}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{display:flex;width:auto;min-width:0;padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end));color:inherit;border-radius:var(--tblr-border-radius)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.disabled{color:var(--tblr-disabled-color);pointer-events:none;background-color:transparent}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{font-weight:var(--tblr-font-weight-medium);background:var(--tblr-navbar-active-bg)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + var(--tblr-sidebar-nav-indent))}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:calc(var(--tblr-sidebar-nav-padding-x) + var(--tblr-nav-link-icon-width) + var(--tblr-nav-link-icon-margin-end) + 2 * var(--tblr-sidebar-nav-indent))}.navbar-expand-xxl .navbar-collapse .dropdown-toggle::after{margin-inline-start:auto}.navbar-expand-xxl .navbar-collapse .nav-item.active::after{content:none}.navbar-expand-xxl.navbar-vertical .navbar-brand{margin-inline:auto}.navbar-expand-xxl.navbar-vertical .navbar-side{margin-top:.5rem}.navbar-expand-xxl .navbar-footer .nav-link-title{display:none}.navbar-expand-xxl .navbar-footer .dropup .dropdown-menu{inset-inline-start:auto;inset-inline-end:0;top:100%;bottom:auto}}@media (min-width:1400px){.navbar-expand-xxl .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-xxl .nav-item.active{position:relative}.navbar-expand-xxl .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-xxl .nav-item.active::after{position:absolute;inset-inline-start:0;inset-inline-end:0;bottom:-.25rem;content:"";border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand-xxl.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical.navbar-end,.navbar-expand-xxl.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical~.navbar,.navbar-expand-xxl.navbar-vertical~.page-wrapper,.navbar-expand-xxl.navbar-vertical~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}.navbar-expand-xxl.navbar-vertical.navbar-end~.navbar,.navbar-expand-xxl.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-xxl.navbar-vertical.navbar-end~[class*=navbar-expand]:not(.navbar-vertical),.navbar-expand-xxl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xxl.navbar-vertical.navbar-right~.page-wrapper,.navbar-expand-xxl.navbar-vertical.navbar-right~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:0;margin-inline-end:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}}.navbar-expand .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand .nav-item.active{position:relative}.navbar-expand .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand .nav-item.active::after{position:absolute;inset-inline-start:0;inset-inline-end:0;bottom:-.25rem;content:"";border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px}.navbar-expand.navbar-vertical{box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical.navbar-end,.navbar-expand.navbar-vertical.navbar-right{box-shadow:inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical~.navbar,.navbar-expand.navbar-vertical~.page-wrapper,.navbar-expand.navbar-vertical~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}.navbar-expand.navbar-vertical.navbar-end~.navbar,.navbar-expand.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand.navbar-vertical.navbar-end~[class*=navbar-expand]:not(.navbar-vertical),.navbar-expand.navbar-vertical.navbar-right~.navbar,.navbar-expand.navbar-vertical.navbar-right~.page-wrapper,.navbar-expand.navbar-vertical.navbar-right~[class*=navbar-expand]:not(.navbar-vertical){margin-inline-start:0;margin-inline-end:calc(var(--tblr-sidebar-width) + var(--tblr-sidebar-gap,0px))}.navbar-brand{display:inline-flex;gap:.5rem;align-items:center;margin:0;font-weight:var(--tblr-font-weight-semibold);line-height:1}.navbar-brand-image{width:auto;height:2rem}.navbar-brand-gray{--tblr-navbar-logo-color:var(--tblr-tertiary);opacity:.5}.navbar-toggler{position:relative;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:0}.navbar-toggler-icon{position:relative;flex-shrink:0;width:1.25em;height:2px;background:currentColor;mask-image:none;border-radius:var(--tblr-border-radius-pill);transition:top .2s .2s,bottom .2s .2s,transform .2s,opacity 0s .2s}@media (prefers-reduced-motion:reduce){.navbar-toggler-icon{transition:none}}.navbar-toggler-icon::after,.navbar-toggler-icon::before{position:absolute;inset-inline-start:0;display:block;width:inherit;height:inherit;content:"";background:inherit;border-radius:inherit;transition:inherit}@media (prefers-reduced-motion:reduce){.navbar-toggler-icon::after,.navbar-toggler-icon::before{transition:none}}.navbar-toggler-icon::before{top:-.45em}.navbar-toggler-icon::after{bottom:-.45em}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transform:rotate(45deg);transition:top .3s,bottom .3s,transform .3s .3s,opacity 0s .3s}@media (prefers-reduced-motion:reduce){.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transition:none}}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon::before{top:0;transform:rotate(-90deg)}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon::after{bottom:0;opacity:0}.navbar-transparent{--tblr-navbar-border-color:transparent!important;background:0 0!important}.navbar-nav{--tblr-nav-link-hover-bg:var(--tblr-hover-bg);--tblr-nav-link-icon-color:color-mix(in oklab, var(--tblr-nav-link-color) 50%, transparent);--tblr-nav-link-hover-icon-color:color-mix(in oklab, var(--tblr-nav-link-color) 80%, transparent);align-items:stretch;padding:0;margin:0}.navbar-nav .nav-item{display:flex;flex-direction:column;justify-content:center}.navbar-side{display:flex;flex-direction:row;align-items:center;justify-content:space-around;margin:0}html[data-bs-navbar=sticky] .page>.navbar:not(.navbar-vertical){position:sticky;top:0;z-index:1020}html[data-bs-navbar-theme=primary] .page>.navbar{--tblr-navbar-bg:var(--tblr-primary);--tblr-navbar-border-color:transparent}html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar{--tblr-navbar-bg:var(--tblr-primary);--tblr-navbar-border-color:transparent}html[data-bs-sidebar^=folded]{--tblr-sidebar-width:var(--tblr-sidebar-folded-width)}html[data-bs-sidebar^=folded] .navbar-vertical .dropdown-menu.show:not([data-bs-popper]):not([data-tblr-popper]){display:none}.navbar-vertical:is(.navbar-folded,.navbar-folded-hover){--tblr-sidebar-width:var(--tblr-sidebar-folded-width)}.navbar-vertical:is(.navbar-folded,.navbar-folded-hover)~.navbar,.navbar-vertical:is(.navbar-folded,.navbar-folded-hover)~.page,.navbar-vertical:is(.navbar-folded,.navbar-folded-hover)~.page-wrapper,.navbar-vertical:is(.navbar-folded,.navbar-folded-hover)~[class*=navbar-expand]:not(.navbar-vertical){--tblr-sidebar-width:var(--tblr-sidebar-folded-width)}html:not([data-bs-navbar-position=vertical]):not([data-bs-navbar-position=combined]) .page:has(> [class*=navbar-expand]:not(.navbar-vertical))>.navbar-vertical{display:none}html:not([data-bs-navbar-position=vertical]):not([data-bs-navbar-position=combined]) .page:has(> [class*=navbar-expand]:not(.navbar-vertical))>.navbar,html:not([data-bs-navbar-position=vertical]):not([data-bs-navbar-position=combined]) .page:has(> [class*=navbar-expand]:not(.navbar-vertical))>.page-wrapper,html:not([data-bs-navbar-position=vertical]):not([data-bs-navbar-position=combined]) .page:has(> [class*=navbar-expand]:not(.navbar-vertical))>[class*=navbar-expand]:not(.navbar-vertical){--tblr-sidebar-width:0px;--tblr-sidebar-gap:var(--tblr-navbar-margin, 0px)}html[data-bs-navbar-position=vertical] .page:has(> .navbar-vertical)>[class*=navbar-expand]:not(.navbar-vertical){display:none}@media (min-width:576px){.navbar-vertical.navbar-expand-sm{position:fixed;inset-inline-start:0;top:0;bottom:0;z-index:1030;align-items:start;width:var(--tblr-sidebar-width);padding:0;transition:transform .3s}}@media (min-width:576px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-sm{transition:none}}@media (min-width:576px){.navbar-vertical.navbar-expand-sm.navbar-end,.navbar-vertical.navbar-expand-sm.navbar-right{inset-inline-start:auto;inset-inline-end:0}.navbar-vertical.navbar-expand-sm .navbar-brand{--tblr-sidebar-brand-padding-x:1rem;justify-content:space-between;padding:.75rem var(--tblr-sidebar-brand-padding-x);margin-inline-end:0}.navbar-vertical.navbar-expand-sm [data-bs-toggle=sidebar-folded]{opacity:0;transition:opacity .3s}}@media (min-width:576px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-sm [data-bs-toggle=sidebar-folded]{transition:none}}@media (min-width:576px){.navbar-vertical.navbar-expand-sm:has(:focus-visible) [data-bs-toggle=sidebar-folded],.navbar-vertical.navbar-expand-sm:hover [data-bs-toggle=sidebar-folded]{opacity:1}.navbar-vertical.navbar-expand-sm .navbar-collapse{align-items:stretch;min-height:0;overflow-y:auto}.navbar-vertical.navbar-expand-sm .navbar-nav{flex-grow:1;flex-direction:column;min-height:auto}.navbar-vertical.navbar-expand-sm .navbar-footer{order:1;padding-block:0.5rem;margin-top:auto;border-top:var(--tblr-navbar-border-width) var(--tblr-border-style) var(--tblr-navbar-border-color)}.navbar-vertical.navbar-expand-sm .navbar-footer .navbar-nav{--tblr-sidebar-nav-padding-y:0.5rem;--tblr-sidebar-nav-padding-x:0.5rem;flex-grow:0}.navbar-vertical.navbar-expand-sm .navbar-footer .nav-link .avatar{flex-shrink:0;margin-inline-end:var(--tblr-nav-link-icon-margin-end)}.navbar-vertical.navbar-expand-sm>[class^=container]{flex-direction:column;align-items:stretch;justify-content:start;height:100%;padding:0}.navbar-vertical.navbar-expand-sm~.page{padding-inline-start:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-sm~.page [class^=container]{padding-inline-start:1.5rem;padding-inline-end:1.5rem}.navbar-vertical.navbar-expand-sm.navbar-end~.page,.navbar-vertical.navbar-expand-sm.navbar-right~.page{padding-inline-start:0;padding-inline-end:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))){overflow:visible}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [class^=container]{min-width:0}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-brand{overflow:hidden}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [data-bs-toggle=sidebar-folded]{display:none}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-link{--tblr-nav-link-icon-margin-end:0}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .nav-link-title{width:0;overflow:hidden;white-space:nowrap;opacity:0}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse{overflow:visible}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title{position:relative;overflow:hidden;text-indent:-9999px;white-space:nowrap}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title::before{position:absolute;inset-inline-start:calc(50% - 0.625rem);top:calc(50% - var(--tblr-sidebar-section-title-margin-top)/ 2);width:1.25rem;height:var(--tblr-border-width);content:"";background:color-mix(in oklab,var(--tblr-navbar-color) 20%,transparent)}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title:first-child::before{content:none}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-link.dropdown-toggle::after{display:none}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu-columns{flex-direction:row}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu{position:absolute;inset-inline-start:100%;top:0;z-index:1030;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;color:var(--tblr-dropdown-color);background-color:var(--tblr-dropdown-bg);background-clip:padding-box;box-shadow:var(--tblr-dropdown-box-shadow);border-radius:var(--tblr-dropdown-border-radius)}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-item{padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);color:var(--tblr-dropdown-link-color);border-radius:0}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-sm:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-item>.dropdown-menu{inset-inline-start:calc(100% + var(--tblr-sidebar-inset) + 0.25rem)}.navbar-vertical.navbar-expand-sm.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-sm{transition:transform .3s,width .3s}}@media (min-width:576px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-sm.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-sm{transition:none}}@media (min-width:576px){.navbar-vertical.navbar-expand-sm.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-sm .nav-link-title{transition:opacity .3s}}@media (min-width:576px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-sm.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-sm .nav-link-title{transition:none}}@media (min-width:576px){.navbar-vertical.navbar-expand-sm.navbar-folded-hover:has(:focus-visible),.navbar-vertical.navbar-expand-sm.navbar-folded-hover:hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-sm:has(:focus-visible),:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-sm:hover{width:16rem;box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color),var(--tblr-shadow-lg)}}@media (min-width:768px){.navbar-vertical.navbar-expand-md{position:fixed;inset-inline-start:0;top:0;bottom:0;z-index:1030;align-items:start;width:var(--tblr-sidebar-width);padding:0;transition:transform .3s}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-md{transition:none}}@media (min-width:768px){.navbar-vertical.navbar-expand-md.navbar-end,.navbar-vertical.navbar-expand-md.navbar-right{inset-inline-start:auto;inset-inline-end:0}.navbar-vertical.navbar-expand-md .navbar-brand{--tblr-sidebar-brand-padding-x:1rem;justify-content:space-between;padding:.75rem var(--tblr-sidebar-brand-padding-x);margin-inline-end:0}.navbar-vertical.navbar-expand-md [data-bs-toggle=sidebar-folded]{opacity:0;transition:opacity .3s}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-md [data-bs-toggle=sidebar-folded]{transition:none}}@media (min-width:768px){.navbar-vertical.navbar-expand-md:has(:focus-visible) [data-bs-toggle=sidebar-folded],.navbar-vertical.navbar-expand-md:hover [data-bs-toggle=sidebar-folded]{opacity:1}.navbar-vertical.navbar-expand-md .navbar-collapse{align-items:stretch;min-height:0;overflow-y:auto}.navbar-vertical.navbar-expand-md .navbar-nav{flex-grow:1;flex-direction:column;min-height:auto}.navbar-vertical.navbar-expand-md .navbar-footer{order:1;padding-block:0.5rem;margin-top:auto;border-top:var(--tblr-navbar-border-width) var(--tblr-border-style) var(--tblr-navbar-border-color)}.navbar-vertical.navbar-expand-md .navbar-footer .navbar-nav{--tblr-sidebar-nav-padding-y:0.5rem;--tblr-sidebar-nav-padding-x:0.5rem;flex-grow:0}.navbar-vertical.navbar-expand-md .navbar-footer .nav-link .avatar{flex-shrink:0;margin-inline-end:var(--tblr-nav-link-icon-margin-end)}.navbar-vertical.navbar-expand-md>[class^=container]{flex-direction:column;align-items:stretch;justify-content:start;height:100%;padding:0}.navbar-vertical.navbar-expand-md~.page{padding-inline-start:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-md~.page [class^=container]{padding-inline-start:1.5rem;padding-inline-end:1.5rem}.navbar-vertical.navbar-expand-md.navbar-end~.page,.navbar-vertical.navbar-expand-md.navbar-right~.page{padding-inline-start:0;padding-inline-end:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))){overflow:visible}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [class^=container]{min-width:0}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-brand{overflow:hidden}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [data-bs-toggle=sidebar-folded]{display:none}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-link{--tblr-nav-link-icon-margin-end:0}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .nav-link-title{width:0;overflow:hidden;white-space:nowrap;opacity:0}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse{overflow:visible}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title{position:relative;overflow:hidden;text-indent:-9999px;white-space:nowrap}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title::before{position:absolute;inset-inline-start:calc(50% - 0.625rem);top:calc(50% - var(--tblr-sidebar-section-title-margin-top)/ 2);width:1.25rem;height:var(--tblr-border-width);content:"";background:color-mix(in oklab,var(--tblr-navbar-color) 20%,transparent)}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title:first-child::before{content:none}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-link.dropdown-toggle::after{display:none}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu-columns{flex-direction:row}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu{position:absolute;inset-inline-start:100%;top:0;z-index:1030;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;color:var(--tblr-dropdown-color);background-color:var(--tblr-dropdown-bg);background-clip:padding-box;box-shadow:var(--tblr-dropdown-box-shadow);border-radius:var(--tblr-dropdown-border-radius)}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-item{padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);color:var(--tblr-dropdown-link-color);border-radius:0}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-md:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-item>.dropdown-menu{inset-inline-start:calc(100% + var(--tblr-sidebar-inset) + 0.25rem)}.navbar-vertical.navbar-expand-md.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-md{transition:transform .3s,width .3s}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-md.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-md{transition:none}}@media (min-width:768px){.navbar-vertical.navbar-expand-md.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-md .nav-link-title{transition:opacity .3s}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-md.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-md .nav-link-title{transition:none}}@media (min-width:768px){.navbar-vertical.navbar-expand-md.navbar-folded-hover:has(:focus-visible),.navbar-vertical.navbar-expand-md.navbar-folded-hover:hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-md:has(:focus-visible),:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-md:hover{width:16rem;box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color),var(--tblr-shadow-lg)}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg{position:fixed;inset-inline-start:0;top:0;bottom:0;z-index:1030;align-items:start;width:var(--tblr-sidebar-width);padding:0;transition:transform .3s}}@media (min-width:992px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-lg{transition:none}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg.navbar-end,.navbar-vertical.navbar-expand-lg.navbar-right{inset-inline-start:auto;inset-inline-end:0}.navbar-vertical.navbar-expand-lg .navbar-brand{--tblr-sidebar-brand-padding-x:1rem;justify-content:space-between;padding:.75rem var(--tblr-sidebar-brand-padding-x);margin-inline-end:0}.navbar-vertical.navbar-expand-lg [data-bs-toggle=sidebar-folded]{opacity:0;transition:opacity .3s}}@media (min-width:992px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-lg [data-bs-toggle=sidebar-folded]{transition:none}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg:has(:focus-visible) [data-bs-toggle=sidebar-folded],.navbar-vertical.navbar-expand-lg:hover [data-bs-toggle=sidebar-folded]{opacity:1}.navbar-vertical.navbar-expand-lg .navbar-collapse{align-items:stretch;min-height:0;overflow-y:auto}.navbar-vertical.navbar-expand-lg .navbar-nav{flex-grow:1;flex-direction:column;min-height:auto}.navbar-vertical.navbar-expand-lg .navbar-footer{order:1;padding-block:0.5rem;margin-top:auto;border-top:var(--tblr-navbar-border-width) var(--tblr-border-style) var(--tblr-navbar-border-color)}.navbar-vertical.navbar-expand-lg .navbar-footer .navbar-nav{--tblr-sidebar-nav-padding-y:0.5rem;--tblr-sidebar-nav-padding-x:0.5rem;flex-grow:0}.navbar-vertical.navbar-expand-lg .navbar-footer .nav-link .avatar{flex-shrink:0;margin-inline-end:var(--tblr-nav-link-icon-margin-end)}.navbar-vertical.navbar-expand-lg>[class^=container]{flex-direction:column;align-items:stretch;justify-content:start;height:100%;padding:0}.navbar-vertical.navbar-expand-lg~.page{padding-inline-start:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-lg~.page [class^=container]{padding-inline-start:1.5rem;padding-inline-end:1.5rem}.navbar-vertical.navbar-expand-lg.navbar-end~.page,.navbar-vertical.navbar-expand-lg.navbar-right~.page{padding-inline-start:0;padding-inline-end:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))){overflow:visible}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [class^=container]{min-width:0}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-brand{overflow:hidden}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [data-bs-toggle=sidebar-folded]{display:none}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-link{--tblr-nav-link-icon-margin-end:0}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .nav-link-title{width:0;overflow:hidden;white-space:nowrap;opacity:0}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse{overflow:visible}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title{position:relative;overflow:hidden;text-indent:-9999px;white-space:nowrap}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title::before{position:absolute;inset-inline-start:calc(50% - 0.625rem);top:calc(50% - var(--tblr-sidebar-section-title-margin-top)/ 2);width:1.25rem;height:var(--tblr-border-width);content:"";background:color-mix(in oklab,var(--tblr-navbar-color) 20%,transparent)}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title:first-child::before{content:none}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-link.dropdown-toggle::after{display:none}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu-columns{flex-direction:row}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu{position:absolute;inset-inline-start:100%;top:0;z-index:1030;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;color:var(--tblr-dropdown-color);background-color:var(--tblr-dropdown-bg);background-clip:padding-box;box-shadow:var(--tblr-dropdown-box-shadow);border-radius:var(--tblr-dropdown-border-radius)}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-item{padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);color:var(--tblr-dropdown-link-color);border-radius:0}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-lg:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-item>.dropdown-menu{inset-inline-start:calc(100% + var(--tblr-sidebar-inset) + 0.25rem)}.navbar-vertical.navbar-expand-lg.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-lg{transition:transform .3s,width .3s}}@media (min-width:992px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-lg.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-lg{transition:none}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-lg .nav-link-title{transition:opacity .3s}}@media (min-width:992px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-lg.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-lg .nav-link-title{transition:none}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg.navbar-folded-hover:has(:focus-visible),.navbar-vertical.navbar-expand-lg.navbar-folded-hover:hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-lg:has(:focus-visible),:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-lg:hover{width:16rem;box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color),var(--tblr-shadow-lg)}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl{position:fixed;inset-inline-start:0;top:0;bottom:0;z-index:1030;align-items:start;width:var(--tblr-sidebar-width);padding:0;transition:transform .3s}}@media (min-width:1200px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xl{transition:none}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl.navbar-end,.navbar-vertical.navbar-expand-xl.navbar-right{inset-inline-start:auto;inset-inline-end:0}.navbar-vertical.navbar-expand-xl .navbar-brand{--tblr-sidebar-brand-padding-x:1rem;justify-content:space-between;padding:.75rem var(--tblr-sidebar-brand-padding-x);margin-inline-end:0}.navbar-vertical.navbar-expand-xl [data-bs-toggle=sidebar-folded]{opacity:0;transition:opacity .3s}}@media (min-width:1200px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xl [data-bs-toggle=sidebar-folded]{transition:none}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl:has(:focus-visible) [data-bs-toggle=sidebar-folded],.navbar-vertical.navbar-expand-xl:hover [data-bs-toggle=sidebar-folded]{opacity:1}.navbar-vertical.navbar-expand-xl .navbar-collapse{align-items:stretch;min-height:0;overflow-y:auto}.navbar-vertical.navbar-expand-xl .navbar-nav{flex-grow:1;flex-direction:column;min-height:auto}.navbar-vertical.navbar-expand-xl .navbar-footer{order:1;padding-block:0.5rem;margin-top:auto;border-top:var(--tblr-navbar-border-width) var(--tblr-border-style) var(--tblr-navbar-border-color)}.navbar-vertical.navbar-expand-xl .navbar-footer .navbar-nav{--tblr-sidebar-nav-padding-y:0.5rem;--tblr-sidebar-nav-padding-x:0.5rem;flex-grow:0}.navbar-vertical.navbar-expand-xl .navbar-footer .nav-link .avatar{flex-shrink:0;margin-inline-end:var(--tblr-nav-link-icon-margin-end)}.navbar-vertical.navbar-expand-xl>[class^=container]{flex-direction:column;align-items:stretch;justify-content:start;height:100%;padding:0}.navbar-vertical.navbar-expand-xl~.page{padding-inline-start:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-xl~.page [class^=container]{padding-inline-start:1.5rem;padding-inline-end:1.5rem}.navbar-vertical.navbar-expand-xl.navbar-end~.page,.navbar-vertical.navbar-expand-xl.navbar-right~.page{padding-inline-start:0;padding-inline-end:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))){overflow:visible}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [class^=container]{min-width:0}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-brand{overflow:hidden}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [data-bs-toggle=sidebar-folded]{display:none}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-link{--tblr-nav-link-icon-margin-end:0}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .nav-link-title{width:0;overflow:hidden;white-space:nowrap;opacity:0}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse{overflow:visible}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title{position:relative;overflow:hidden;text-indent:-9999px;white-space:nowrap}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title::before{position:absolute;inset-inline-start:calc(50% - 0.625rem);top:calc(50% - var(--tblr-sidebar-section-title-margin-top)/ 2);width:1.25rem;height:var(--tblr-border-width);content:"";background:color-mix(in oklab,var(--tblr-navbar-color) 20%,transparent)}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title:first-child::before{content:none}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-link.dropdown-toggle::after{display:none}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu-columns{flex-direction:row}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu{position:absolute;inset-inline-start:100%;top:0;z-index:1030;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;color:var(--tblr-dropdown-color);background-color:var(--tblr-dropdown-bg);background-clip:padding-box;box-shadow:var(--tblr-dropdown-box-shadow);border-radius:var(--tblr-dropdown-border-radius)}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-item{padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);color:var(--tblr-dropdown-link-color);border-radius:0}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-xl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-item>.dropdown-menu{inset-inline-start:calc(100% + var(--tblr-sidebar-inset) + 0.25rem)}.navbar-vertical.navbar-expand-xl.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xl{transition:transform .3s,width .3s}}@media (min-width:1200px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xl.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xl{transition:none}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xl .nav-link-title{transition:opacity .3s}}@media (min-width:1200px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xl.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xl .nav-link-title{transition:none}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl.navbar-folded-hover:has(:focus-visible),.navbar-vertical.navbar-expand-xl.navbar-folded-hover:hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xl:has(:focus-visible),:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xl:hover{width:16rem;box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color),var(--tblr-shadow-lg)}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl{position:fixed;inset-inline-start:0;top:0;bottom:0;z-index:1030;align-items:start;width:var(--tblr-sidebar-width);padding:0;transition:transform .3s}}@media (min-width:1400px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xxl{transition:none}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl.navbar-end,.navbar-vertical.navbar-expand-xxl.navbar-right{inset-inline-start:auto;inset-inline-end:0}.navbar-vertical.navbar-expand-xxl .navbar-brand{--tblr-sidebar-brand-padding-x:1rem;justify-content:space-between;padding:.75rem var(--tblr-sidebar-brand-padding-x);margin-inline-end:0}.navbar-vertical.navbar-expand-xxl [data-bs-toggle=sidebar-folded]{opacity:0;transition:opacity .3s}}@media (min-width:1400px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xxl [data-bs-toggle=sidebar-folded]{transition:none}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl:has(:focus-visible) [data-bs-toggle=sidebar-folded],.navbar-vertical.navbar-expand-xxl:hover [data-bs-toggle=sidebar-folded]{opacity:1}.navbar-vertical.navbar-expand-xxl .navbar-collapse{align-items:stretch;min-height:0;overflow-y:auto}.navbar-vertical.navbar-expand-xxl .navbar-nav{flex-grow:1;flex-direction:column;min-height:auto}.navbar-vertical.navbar-expand-xxl .navbar-footer{order:1;padding-block:0.5rem;margin-top:auto;border-top:var(--tblr-navbar-border-width) var(--tblr-border-style) var(--tblr-navbar-border-color)}.navbar-vertical.navbar-expand-xxl .navbar-footer .navbar-nav{--tblr-sidebar-nav-padding-y:0.5rem;--tblr-sidebar-nav-padding-x:0.5rem;flex-grow:0}.navbar-vertical.navbar-expand-xxl .navbar-footer .nav-link .avatar{flex-shrink:0;margin-inline-end:var(--tblr-nav-link-icon-margin-end)}.navbar-vertical.navbar-expand-xxl>[class^=container]{flex-direction:column;align-items:stretch;justify-content:start;height:100%;padding:0}.navbar-vertical.navbar-expand-xxl~.page{padding-inline-start:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-xxl~.page [class^=container]{padding-inline-start:1.5rem;padding-inline-end:1.5rem}.navbar-vertical.navbar-expand-xxl.navbar-end~.page,.navbar-vertical.navbar-expand-xxl.navbar-right~.page{padding-inline-start:0;padding-inline-end:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))){overflow:visible}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [class^=container]{min-width:0}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-brand{overflow:hidden}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [data-bs-toggle=sidebar-folded]{display:none}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-link{--tblr-nav-link-icon-margin-end:0}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .nav-link-title{width:0;overflow:hidden;white-space:nowrap;opacity:0}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse{overflow:visible}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title{position:relative;overflow:hidden;text-indent:-9999px;white-space:nowrap}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title::before{position:absolute;inset-inline-start:calc(50% - 0.625rem);top:calc(50% - var(--tblr-sidebar-section-title-margin-top)/ 2);width:1.25rem;height:var(--tblr-border-width);content:"";background:color-mix(in oklab,var(--tblr-navbar-color) 20%,transparent)}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title:first-child::before{content:none}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-link.dropdown-toggle::after{display:none}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu-columns{flex-direction:row}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu{position:absolute;inset-inline-start:100%;top:0;z-index:1030;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;color:var(--tblr-dropdown-color);background-color:var(--tblr-dropdown-bg);background-clip:padding-box;box-shadow:var(--tblr-dropdown-box-shadow);border-radius:var(--tblr-dropdown-border-radius)}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-item{padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);color:var(--tblr-dropdown-link-color);border-radius:0}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand-xxl:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-item>.dropdown-menu{inset-inline-start:calc(100% + var(--tblr-sidebar-inset) + 0.25rem)}.navbar-vertical.navbar-expand-xxl.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xxl{transition:transform .3s,width .3s}}@media (min-width:1400px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xxl.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xxl{transition:none}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xxl .nav-link-title{transition:opacity .3s}}@media (min-width:1400px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xxl.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xxl .nav-link-title{transition:none}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl.navbar-folded-hover:has(:focus-visible),.navbar-vertical.navbar-expand-xxl.navbar-folded-hover:hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xxl:has(:focus-visible),:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand-xxl:hover{width:16rem;box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color),var(--tblr-shadow-lg)}}.navbar-vertical.navbar-expand{position:fixed;inset-inline-start:0;top:0;bottom:0;z-index:1030;align-items:start;width:var(--tblr-sidebar-width);padding:0;transition:transform .3s}@media (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand{transition:none}}.navbar-vertical.navbar-expand.navbar-end,.navbar-vertical.navbar-expand.navbar-right{inset-inline-start:auto;inset-inline-end:0}.navbar-vertical.navbar-expand .navbar-brand{--tblr-sidebar-brand-padding-x:1rem;justify-content:space-between;padding:.75rem var(--tblr-sidebar-brand-padding-x);margin-inline-end:0}.navbar-vertical.navbar-expand [data-bs-toggle=sidebar-folded]{opacity:0;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand [data-bs-toggle=sidebar-folded]{transition:none}}.navbar-vertical.navbar-expand:has(:focus-visible) [data-bs-toggle=sidebar-folded],.navbar-vertical.navbar-expand:hover [data-bs-toggle=sidebar-folded]{opacity:1}.navbar-vertical.navbar-expand .navbar-collapse{align-items:stretch;min-height:0;overflow-y:auto}.navbar-vertical.navbar-expand .navbar-nav{flex-grow:1;flex-direction:column;min-height:auto}.navbar-vertical.navbar-expand .navbar-footer{order:1;padding-block:0.5rem;margin-top:auto;border-top:var(--tblr-navbar-border-width) var(--tblr-border-style) var(--tblr-navbar-border-color)}.navbar-vertical.navbar-expand .navbar-footer .navbar-nav{--tblr-sidebar-nav-padding-y:0.5rem;--tblr-sidebar-nav-padding-x:0.5rem;flex-grow:0}.navbar-vertical.navbar-expand .navbar-footer .nav-link .avatar{flex-shrink:0;margin-inline-end:var(--tblr-nav-link-icon-margin-end)}.navbar-vertical.navbar-expand>[class^=container]{flex-direction:column;align-items:stretch;justify-content:start;height:100%;padding:0}.navbar-vertical.navbar-expand~.page{padding-inline-start:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand~.page [class^=container]{padding-inline-start:1.5rem;padding-inline-end:1.5rem}.navbar-vertical.navbar-expand.navbar-end~.page,.navbar-vertical.navbar-expand.navbar-right~.page{padding-inline-start:0;padding-inline-end:var(--tblr-sidebar-width)}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))){overflow:visible}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [class^=container]{min-width:0}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-brand{overflow:hidden}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) [data-bs-toggle=sidebar-folded]{display:none}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-link{--tblr-nav-link-icon-margin-end:0}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-nav .nav-item.active>.nav-link.dropdown-toggle{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .nav-link-title{width:0;overflow:hidden;white-space:nowrap;opacity:0}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse{overflow:visible}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title{position:relative;overflow:hidden;text-indent:-9999px;white-space:nowrap}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title::before{position:absolute;inset-inline-start:calc(50% - 0.625rem);top:calc(50% - var(--tblr-sidebar-section-title-margin-top)/ 2);width:1.25rem;height:var(--tblr-border-width);content:"";background:color-mix(in oklab,var(--tblr-navbar-color) 20%,transparent)}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-section-title:first-child::before{content:none}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-link.dropdown-toggle::after{display:none}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu-columns{flex-direction:row}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu{position:absolute;inset-inline-start:100%;top:0;z-index:1030;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);margin:0;color:var(--tblr-dropdown-color);background-color:var(--tblr-dropdown-bg);background-clip:padding-box;box-shadow:var(--tblr-dropdown-box-shadow);border-radius:var(--tblr-dropdown-border-radius)}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-item{padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);color:var(--tblr-dropdown-link-color);border-radius:0}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-inline-start:var(--tblr-dropdown-item-padding-x)}.navbar-vertical.navbar-expand:is(.navbar-folded,.navbar-folded-hover:not(:hover):not(:has(:focus-visible)),[data-bs-sidebar=folded] *,[data-bs-sidebar=folded-hover] :not(:hover):not(:has(:focus-visible))) .navbar-collapse .nav-item>.dropdown-menu{inset-inline-start:calc(100% + var(--tblr-sidebar-inset) + 0.25rem)}.navbar-vertical.navbar-expand.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand{transition:transform .3s,width .3s}@media (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand.navbar-folded-hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand{transition:none}}.navbar-vertical.navbar-expand.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand .nav-link-title{transition:opacity .3s}@media (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand.navbar-folded-hover .nav-link-title,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand .nav-link-title{transition:none}}.navbar-vertical.navbar-expand.navbar-folded-hover:has(:focus-visible),.navbar-vertical.navbar-expand.navbar-folded-hover:hover,:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand:has(:focus-visible),:where([data-bs-sidebar=folded-hover]) .navbar-vertical.navbar-expand:hover{width:16rem;box-shadow:inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color),var(--tblr-shadow-lg)}@media print{.navbar-vertical~.page{padding-inline-start:0;padding-inline-end:0}}.navbar-overlap::after{position:absolute;inset-inline-start:0;inset-inline-end:0;top:100%;z-index:-1;height:9rem;content:"";background:inherit;box-shadow:inherit}.navbar-floating,html[data-bs-navbar-style=floating] .page>.navbar,html[data-bs-navbar-style=floating] .page>[class*=navbar-expand] .navbar{margin:var(--tblr-navbar-margin,0);outline:var(--tblr-navbar-outline-width,0) solid var(--tblr-navbar-border-color);outline-offset:calc(-1 * var(--tblr-navbar-outline-width,0px));border-radius:var(--tblr-navbar-border-radius,0)}html[data-bs-navbar-style=floating] .page>[class*=navbar-expand] .navbar{margin-top:0}@media (min-width:576px){.navbar-floating.navbar-expand-sm,html[data-bs-navbar-style=floating] .page>.navbar-expand-sm{--tblr-navbar-margin:0.5rem;--tblr-navbar-border-radius:var(--tblr-border-radius-lg);--tblr-navbar-outline-width:var(--tblr-navbar-border-width)}}@media (min-width:768px){.navbar-floating.navbar-expand-md,html[data-bs-navbar-style=floating] .page>.navbar-expand-md{--tblr-navbar-margin:0.5rem;--tblr-navbar-border-radius:var(--tblr-border-radius-lg);--tblr-navbar-outline-width:var(--tblr-navbar-border-width)}}@media (min-width:992px){.navbar-floating.navbar-expand-lg,html[data-bs-navbar-style=floating] .page>.navbar-expand-lg{--tblr-navbar-margin:0.5rem;--tblr-navbar-border-radius:var(--tblr-border-radius-lg);--tblr-navbar-outline-width:var(--tblr-navbar-border-width)}}@media (min-width:1200px){.navbar-floating.navbar-expand-xl,html[data-bs-navbar-style=floating] .page>.navbar-expand-xl{--tblr-navbar-margin:0.5rem;--tblr-navbar-border-radius:var(--tblr-border-radius-lg);--tblr-navbar-outline-width:var(--tblr-navbar-border-width)}}@media (min-width:1400px){.navbar-floating.navbar-expand-xxl,html[data-bs-navbar-style=floating] .page>.navbar-expand-xxl{--tblr-navbar-margin:0.5rem;--tblr-navbar-border-radius:var(--tblr-border-radius-lg);--tblr-navbar-outline-width:var(--tblr-navbar-border-width)}}.navbar-floating.navbar-expand,html[data-bs-navbar-style=floating] .page>.navbar-expand{--tblr-navbar-margin:0.5rem;--tblr-navbar-border-radius:var(--tblr-border-radius-lg);--tblr-navbar-outline-width:var(--tblr-navbar-border-width)}.navbar-vertical~.navbar-floating{--tblr-sidebar-gap:var(--tblr-navbar-margin, 0px)}.navbar-floating.navbar-vertical~:is(.navbar,.page-wrapper),html[data-bs-navbar-style=floating] .page>.navbar-vertical~:is(.navbar,.page-wrapper){--tblr-sidebar-gap:calc(2 * 0.5rem)}.skip-link{outline-color:transparent;transition:outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.skip-link{transition:none}}.skip-link{position:fixed;inset-inline-start:0;top:0;z-index:1080;padding:.5rem 1rem;color:var(--tblr-primary-fg,#fff);text-decoration:none;background:var(--tblr-primary)}.skip-link:focus-visible{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.page{position:relative;display:flex;flex-direction:column;min-height:100%}.page-center{justify-content:center}.page-wrapper{display:flex;flex:1;flex-direction:column}@media print{.page-wrapper{margin:0!important}}.page-wrapper-full .page-body:first-child{margin:0;border-top:0}.page-body{display:flex;flex:1;flex-direction:column;margin-top:var(--tblr-page-padding-y);margin-bottom:var(--tblr-page-padding-y)}.page-body-card{flex:1;padding:var(--tblr-page-padding) 0;margin-bottom:0;background:var(--tblr-bg-surface);border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.page-body~.page-body-card{margin-top:0}.page-cover-overlay{position:relative}.page-cover-overlay::after{position:absolute;inset-inline-start:0;inset-inline-end:0;top:0;bottom:0;content:"";background-image:linear-gradient(180deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.6) 100%)}.page-header{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:center;max-width:100%;min-height:2.25rem}.page-wrapper .page-header{margin:var(--tblr-page-padding-y) 0 0}.page-header-border{padding:var(--tblr-page-padding-y) 0;margin:0!important;background-color:var(--tblr-bg-surface);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.page-pretitle{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary)}.page-title{display:flex;align-items:center;margin:0;font-size:var(--tblr-font-size-h2);font-weight:var(--tblr-font-weight-headings);line-height:var(--tblr-line-height-h2);color:inherit}.page-title svg{width:1.5rem;height:1.5rem;margin-inline-end:.25rem}.page-title-lg{font-size:1.5rem;line-height:2rem}.page-subtitle{margin-top:.25rem;color:var(--tblr-secondary)}.page-section-title{margin:1rem 0 0;font-size:1.25rem;font-weight:var(--tblr-font-weight-headings);line-height:1.75rem}.page-section-description{margin:.25rem 0 0;color:var(--tblr-secondary)}.page-cover{--tblr-page-cover-blur:20px;--tblr-page-cover-padding:1rem;position:relative;min-height:6rem;padding:var(--tblr-page-cover-padding) 0;overflow:hidden;background:no-repeat center/cover}@media (min-width:768px){.page-cover{min-height:12rem}}@media (min-width:992px){.page-cover{min-height:15rem}}.page-cover-img{position:absolute;inset-inline-start:calc(-2 * var(--tblr-page-cover-blur,0));inset-inline-end:calc(-2 * var(--tblr-page-cover-blur,0));top:calc(-2 * var(--tblr-page-cover-blur,0));bottom:calc(-2 * var(--tblr-page-cover-blur,0));z-index:-1;pointer-events:none;object-fit:cover;filter:blur(var(--tblr-page-cover-blur));background-position:center;background-size:cover}.page-tabs{position:relative;margin-top:.5rem}.page-header-tabs .nav-bordered{border:0}.page-header-tabs+.page-body-card{margin-top:0}.footer{padding:2rem 0;margin-top:auto;color:var(--tblr-secondary-color);background-color:var(--tblr-bg-surface);border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}@media print{.footer{display:none}}.footer-transparent{background-color:transparent;border-top:0}:root:not(.theme-dark):not([data-bs-theme=dark],[data-theme=dark]) .hide-theme-light{display:none!important}:root:not(.theme-dark):not([data-bs-theme=dark],[data-theme=dark]) .img-dark{display:none!important}:root.theme-dark .hide-theme-dark,:root[data-bs-theme=dark] .hide-theme-dark,:root[data-theme=dark] .hide-theme-dark,body[data-bs-theme=dark] [data-bs-theme=light]:root .hide-theme-dark,body[data-theme=dark] [data-theme=light]:root .hide-theme-dark,html[data-bs-navbar-theme=dark] .page>.navbar:root .hide-theme-dark,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar:root .hide-theme-dark,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light]:root .hide-theme-dark,html[data-bs-navbar-theme=dark] .page>body.navbar [data-bs-theme=light]:root .hide-theme-dark,html[data-bs-navbar-theme=primary] .page>.navbar:root .hide-theme-dark,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar:root .hide-theme-dark,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light]:root .hide-theme-dark,html[data-bs-navbar-theme=primary] .page>body.navbar [data-bs-theme=light]:root .hide-theme-dark{display:none!important}:root.theme-dark .img-light,:root[data-bs-theme=dark] .img-light,:root[data-theme=dark] .img-light,body[data-bs-theme=dark] [data-bs-theme=light]:root .img-light,body[data-theme=dark] [data-theme=light]:root .img-light,html[data-bs-navbar-theme=dark] .page>.navbar:root .img-light,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar:root .img-light,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light]:root .img-light,html[data-bs-navbar-theme=dark] .page>body.navbar [data-bs-theme=light]:root .img-light,html[data-bs-navbar-theme=primary] .page>.navbar:root .img-light,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar:root .img-light,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light]:root .img-light,html[data-bs-navbar-theme=primary] .page>body.navbar [data-bs-theme=light]:root .img-light{display:none!important}.theme-dark,[data-bs-theme=dark],[data-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light],body[data-theme=dark] [data-theme=light],html[data-bs-navbar-theme=dark] .page>.navbar,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=dark] .page>body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=primary] .page>.navbar,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=primary] .page>body.navbar [data-bs-theme=light]{color-scheme:dark;--tblr-btn-color:oklch(from var(--tblr-dark) calc(l - 0.02) c h)}.theme-dark .navbar-brand-autodark .navbar-brand-image,[data-bs-theme=dark] .navbar-brand-autodark .navbar-brand-image,[data-theme=dark] .navbar-brand-autodark .navbar-brand-image,html[data-bs-navbar-theme=dark] .page>.navbar .navbar-brand-autodark .navbar-brand-image,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar .navbar-brand-autodark .navbar-brand-image,html[data-bs-navbar-theme=primary] .page>.navbar .navbar-brand-autodark .navbar-brand-image,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar .navbar-brand-autodark .navbar-brand-image{filter:brightness(0) invert(1)}@media print{:root,[data-bs-theme=dark],[data-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light],body[data-theme=dark] [data-theme=light],html[data-bs-navbar-theme=dark] .page>.navbar,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=dark] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=dark] .page>body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=primary] .page>.navbar,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] .navbar,html[data-bs-navbar-theme=primary] .page>[class*=navbar-expand] body.navbar [data-bs-theme=light],html[data-bs-navbar-theme=primary] .page>body.navbar [data-bs-theme=light]{color-scheme:light!important}}@media (forced-colors:active){:focus-visible{outline:2px solid Highlight;outline-offset:2px}.btn-close{forced-color-adjust:none}}@media (prefers-reduced-motion:reduce){.badge-blink,.btn-animate-icon-pulse .icon,.btn-animate-icon-shake .icon,.btn-animate-icon-tada .icon,.card-gradient-animated,.icon-pulse,.icon-rotate,.icon-tada,.otp-slot-active:not(.otp-slot-filled)::after,.status-dot-animated::before,.status-indicator-animated .status-indicator-circle,.wave-1,.wave-2,.wave-3{animation:none!important}.dropzone .dz-preview.dz-error .dz-error-mark,.dropzone .dz-preview.dz-success .dz-success-mark,.dropzone .dz-preview:not(.dz-processing) .dz-progress{animation:none!important}.dropzone .dz-preview.dz-success .dz-success-mark{opacity:1}.dropzone .dz-preview .dz-details,.dropzone .dz-preview .dz-error-message,.dropzone .dz-preview .dz-progress,.dropzone .dz-preview .dz-upload{transition:none!important}.animated-dots::after,.btn-loading::after,.loader::after,.progress-bar-indeterminate::before{animation-duration:3s!important}}.accordion{--tblr-accordion-color:var(--tblr-body-color);--tblr-accordion-border-color:var(--tblr-border-color);--tblr-accordion-border-radius:var(--tblr-border-radius);--tblr-accordion-inner-border-radius:calc(var(--tblr-border-radius) - (var(--tblr-border-width)));--tblr-accordion-padding-x:1.25rem;--tblr-accordion-gap:0;--tblr-accordion-active-color:inherit;--tblr-accordion-btn-color:var(--tblr-accordion-color);--tblr-accordion-btn-bg:transparent;--tblr-accordion-btn-toggle-width:1.25rem;--tblr-accordion-btn-padding-x:var(--tblr-accordion-padding-x);--tblr-accordion-btn-padding-y:1rem;--tblr-accordion-btn-font-weight:var(--tblr-font-weight-medium);--tblr-accordion-btn-line-height:1.25rem;--tblr-accordion-body-padding-x:var(--tblr-accordion-padding-x);--tblr-accordion-body-padding-y:1rem;--tblr-accordion-btn-gap:0.75rem;--tblr-accordion-header-gap:1rem;display:flex;flex-direction:column;gap:var(--tblr-accordion-gap)}.accordion-button{position:relative;display:flex;gap:var(--tblr-accordion-btn-gap);align-items:center;width:100%;padding:var(--tblr-accordion-btn-padding-y) var(--tblr-accordion-btn-padding-x);font-size:inherit;font-weight:var(--tblr-accordion-btn-font-weight);line-height:var(--tblr-accordion-btn-line-height);color:inherit;text-align:inherit;background-color:var(--tblr-accordion-btn-bg);border:0;outline-color:transparent;transition:transform .3s,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button{overflow-anchor:none}.accordion-button:not(.collapsed){color:var(--tblr-accordion-active-color);border-bottom-color:transparent;box-shadow:none}.accordion-button:hover{z-index:2}.accordion-button:focus-visible{z-index:3;outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset);outline-offset:-1px}.accordion-header{position:relative;display:flex;gap:var(--tblr-accordion-header-gap);align-items:center;width:100%;margin:0;color:var(--tblr-accordion-btn-color);text-align:start;background-color:transparent;border:0}.accordion-button-icon{color:var(--tblr-secondary)}.accordion-button-toggle{display:flex;width:var(--tblr-accordion-btn-toggle-width);height:var(--tblr-accordion-btn-toggle-width);margin-inline-start:auto;margin-inline-end:0;line-height:1;color:var(--tblr-secondary);transition:.3s transform}.accordion-button:not(.collapsed) .accordion-button-toggle{color:var(--tblr-accordion-active-color);transform:rotate(-180deg)}.accordion-button:not(.collapsed) .accordion-button-toggle-plus{transform:rotate(45deg)}.accordion-item{color:var(--tblr-accordion-color);border:var(--tblr-border-width) solid var(--tblr-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--tblr-accordion-border-radius);border-top-right-radius:var(--tblr-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header{border-top-left-radius:var(--tblr-accordion-inner-border-radius);border-top-right-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--tblr-accordion-border-radius);border-bottom-left-radius:var(--tblr-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header:has(> .accordion-button.collapsed){border-bottom-right-radius:var(--tblr-accordion-inner-border-radius);border-bottom-left-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--tblr-accordion-border-radius);border-bottom-left-radius:var(--tblr-accordion-border-radius)}.accordion-body{padding:0 var(--tblr-accordion-body-padding-x) var(--tblr-accordion-body-padding-y);color:var(--tblr-secondary)}.accordion-flush>.accordion-item{border-inline-start:0;border-inline-end:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button{border-radius:0}.accordion-tabs{--tblr-accordion-gap:0.75rem}.accordion-tabs>.accordion-item{border:var(--tblr-border-width) solid var(--tblr-accordion-border-color);border-radius:var(--tblr-accordion-border-radius)}.accordion-inverted .accordion-button-toggle{order:-1;margin-inline-start:0}.alert{--tblr-alert-variant-color:var(--tblr-body-color);--tblr-alert-color:var(--tblr-alert-variant-color);--tblr-alert-bg:color-mix(in oklab, var(--tblr-alert-variant-color) 16%, var(--tblr-bg-surface));--tblr-alert-padding-x:1rem;--tblr-alert-padding-y:0.75rem;--tblr-alert-margin-bottom:1rem;--tblr-alert-border-color:color-mix(in oklab, var(--tblr-alert-variant-color) 20%, var(--tblr-bg-surface));--tblr-alert-border:var(--tblr-border-width) solid var(--tblr-alert-border-color);--tblr-alert-border-radius:var(--tblr-border-radius);--tblr-alert-link-color:inherit;--tblr-alert-heading-font-weight:var(--tblr-font-weight-medium);--tblr-alert-heading-margin-bottom:0.25rem;--tblr-alert-icon-size:1.25rem;--tblr-alert-padding-inline-end:3rem;--tblr-alert-gap:1rem;position:relative;padding:var(--tblr-alert-padding-y) var(--tblr-alert-padding-x);margin-bottom:var(--tblr-alert-margin-bottom);color:var(--tblr-alert-color);background-color:color-mix(in oklab,var(--tblr-alert-bg),var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-alert-border-color);border-radius:var(--tblr-alert-border-radius)}.alert:has(> .alert-icon){padding-inline-start:calc(var(--tblr-alert-padding-x) + var(--tblr-alert-icon-size) + var(--tblr-alert-gap))}.alert-heading{margin-bottom:var(--tblr-alert-heading-margin-bottom);font-weight:var(--tblr-alert-heading-font-weight);color:inherit}.alert-description{color:var(--tblr-secondary)}.alert-icon{width:var(--tblr-alert-icon-size)!important;height:var(--tblr-alert-icon-size)!important;margin-inline-end:var(--tblr-alert-gap);color:var(--tblr-alert-color)}.alert>.alert-icon{position:absolute;inset-inline-start:var(--tblr-alert-padding-x);top:var(--tblr-alert-padding-y);margin-inline-end:0}.alert-action,.alert-link{margin-inline-start:.25rem;white-space:nowrap}.alert-action{color:var(--tblr-alert-color);text-decoration:underline}.alert-action:hover{text-decoration:none}.alert-list{margin:0}.alert>.alert-heading+div:has(+ .alert-action),.alert>.alert-heading+div:has(+ .alert-link){display:inline}.alert-link{font-weight:var(--tblr-font-weight-semibold);color:var(--tblr-alert-link-color)}.alert-link:hover{color:var(--tblr-alert-link-color)}.alert-dismissible{padding-inline-end:var(--tblr-alert-padding-inline-end)}.alert-dismissible .btn-close{position:absolute;inset-inline-end:calc(var(--tblr-alert-padding-x)/ 2 - 1px);top:calc(var(--tblr-alert-padding-y)/ 2 - 1px);z-index:1;padding:calc(var(--tblr-alert-padding-y) * 1.25) var(--tblr-alert-padding-x)}.alert-important{--tblr-alert-color:var(--tblr-white);background-color:var(--tblr-alert-variant-color)}.alert-important .alert-description{color:inherit}.alert-minor{background:0 0;border-color:var(--tblr-border-color)}.alert-primary{--tblr-alert-variant-color:var(--tblr-primary)}.alert-secondary{--tblr-alert-variant-color:var(--tblr-secondary)}.alert-success{--tblr-alert-variant-color:var(--tblr-success)}.alert-info{--tblr-alert-variant-color:var(--tblr-info)}.alert-warning{--tblr-alert-variant-color:var(--tblr-warning)}.alert-danger{--tblr-alert-variant-color:var(--tblr-danger)}.alert-light{--tblr-alert-variant-color:var(--tblr-light)}.alert-dark{--tblr-alert-variant-color:var(--tblr-dark)}.alert-muted{--tblr-alert-variant-color:var(--tblr-muted)}.alert-blue{--tblr-alert-variant-color:var(--tblr-blue)}.alert-azure{--tblr-alert-variant-color:var(--tblr-azure)}.alert-indigo{--tblr-alert-variant-color:var(--tblr-indigo)}.alert-purple{--tblr-alert-variant-color:var(--tblr-purple)}.alert-pink{--tblr-alert-variant-color:var(--tblr-pink)}.alert-red{--tblr-alert-variant-color:var(--tblr-red)}.alert-orange{--tblr-alert-variant-color:var(--tblr-orange)}.alert-yellow{--tblr-alert-variant-color:var(--tblr-yellow)}.alert-lime{--tblr-alert-variant-color:var(--tblr-lime)}.alert-green{--tblr-alert-variant-color:var(--tblr-green)}.alert-teal{--tblr-alert-variant-color:var(--tblr-teal)}.alert-cyan{--tblr-alert-variant-color:var(--tblr-cyan)}.avatar{--tblr-avatar-size:var(--tblr-avatar-list-size, 2.5rem);--tblr-avatar-status-size:0.75rem;--tblr-avatar-bg:var(--tblr-fill-tertiary);--tblr-avatar-box-shadow-color:var(--tblr-border-color-translucent);--tblr-avatar-box-shadow:inset 0 0 0 1px var(--tblr-avatar-box-shadow-color);--tblr-avatar-font-size:0.875rem;--tblr-avatar-icon-size:1.5rem;--tblr-avatar-brand-size:1.25rem;--tblr-avatar-border-radius:var(--tblr-border-radius-pill);position:relative;display:inline-flex;align-items:center;justify-content:center;width:var(--tblr-avatar-size);height:var(--tblr-avatar-size);font-size:var(--tblr-avatar-font-size);font-weight:var(--tblr-font-weight-medium);line-height:1;color:var(--tblr-secondary);text-align:center;text-transform:uppercase;vertical-align:bottom;-webkit-user-select:none;user-select:none;background:var(--tblr-avatar-bg) no-repeat center/cover;box-shadow:var(--tblr-avatar-box-shadow);transition:color .3s,background-color .3s,box-shadow .3s;border-radius:var(--tblr-avatar-border-radius)}.avatar .icon{width:var(--tblr-avatar-icon-size);height:var(--tblr-avatar-icon-size)}.avatar .badge{position:absolute;inset-inline-end:0;bottom:0;border-radius:var(--tblr-border-radius-pill);box-shadow:0 0 0 calc(var(--tblr-avatar-status-size)/ 4) var(--tblr-bg-surface)}a.avatar{cursor:pointer}a.avatar:hover{color:var(--tblr-primary);--tblr-avatar-box-shadow-color:var(--tblr-primary)}.avatar-rounded{border-radius:var(--tblr-border-radius-pill)}.avatar-square{border-radius:var(--tblr-border-radius)}.avatar-xxs{--tblr-avatar-size:1rem;--tblr-avatar-status-size:0.25rem;--tblr-avatar-font-size:0.5rem;--tblr-avatar-icon-size:0.5rem;--tblr-avatar-brand-size:0.5rem}.avatar-xxs .badge:empty{width:.25rem;height:.25rem}.avatar-xs{--tblr-avatar-size:1.25rem;--tblr-avatar-status-size:0.375rem;--tblr-avatar-font-size:0.625rem;--tblr-avatar-icon-size:0.75rem;--tblr-avatar-brand-size:0.75rem}.avatar-xs .badge:empty{width:.375rem;height:.375rem}.avatar-xs.avatar-square{border-radius:2px}.avatar-sm{--tblr-avatar-size:2rem;--tblr-avatar-status-size:0.5rem;--tblr-avatar-font-size:0.75rem;--tblr-avatar-icon-size:1.5rem;--tblr-avatar-brand-size:1rem}.avatar-sm .badge:empty{width:.5rem;height:.5rem}.avatar-md{--tblr-avatar-size:2.5rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-font-size:0.875rem;--tblr-avatar-icon-size:1.5rem;--tblr-avatar-brand-size:1.25rem}.avatar-md .badge:empty{width:.75rem;height:.75rem}.avatar-lg{--tblr-avatar-size:3rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-font-size:1.25rem;--tblr-avatar-icon-size:2rem;--tblr-avatar-brand-size:1.25rem}.avatar-lg .badge:empty{width:.75rem;height:.75rem}.avatar-xl{--tblr-avatar-size:5rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:2rem;--tblr-avatar-icon-size:3rem;--tblr-avatar-brand-size:1.25rem}.avatar-xl .badge:empty{width:1rem;height:1rem}.avatar-2xl{--tblr-avatar-size:7rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:3rem;--tblr-avatar-icon-size:5rem;--tblr-avatar-brand-size:2rem}.avatar-2xl .badge:empty{width:1rem;height:1rem}.avatar-list{--tblr-avatar-list-size:2.5rem;--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.avatar-list a.avatar:hover{z-index:1}.avatar-list-stacked{display:block;--tblr-list-gap:0}.avatar-list-stacked .avatar{box-shadow:var(--tblr-avatar-box-shadow),0 0 0 2px var(--tblr-card-bg,var(--tblr-bg-surface))}.avatar-list-stacked .avatar:not(:first-child){margin-inline-start:calc(-.5 * var(--tblr-avatar-size))!important}.avatar-list-xxs{--tblr-avatar-list-size:1rem}.avatar-list-xs{--tblr-avatar-list-size:1.25rem}.avatar-list-sm{--tblr-avatar-list-size:2rem}.avatar-list-md{--tblr-avatar-list-size:2.5rem}.avatar-list-lg{--tblr-avatar-list-size:3rem}.avatar-list-xl{--tblr-avatar-list-size:5rem}.avatar-list-2xl{--tblr-avatar-list-size:7rem}.avatar-upload{--tblr-avatar-upload-icon-size:1.5rem;--tblr-avatar-upload-text-margin-top:0.25rem;flex-direction:column;background:var(--tblr-bg-forms);border:var(--tblr-border-width) dashed var(--tblr-border-color);box-shadow:none;transition:color .3s,background-color .3s}@media (prefers-reduced-motion:reduce){.avatar-upload{transition:none}}.avatar-upload svg{width:var(--tblr-avatar-upload-icon-size);height:var(--tblr-avatar-upload-icon-size);stroke-width:1}.avatar-upload:hover{color:var(--tblr-primary);text-decoration:none;border-color:var(--tblr-primary)}.avatar-upload-text{margin-top:var(--tblr-avatar-upload-text-margin-top);font-size:.625rem;line-height:1}.avatar-cover{--tblr-avatar-cover-ring-width:0.25rem;margin-top:calc(-.5 * var(--tblr-avatar-size));box-shadow:0 0 0 var(--tblr-avatar-cover-ring-width) var(--tblr-card-bg,var(--tblr-body-bg))}.avatar-brand{--tblr-avatar-brand-offset:-2px;position:absolute;inset-inline-end:var(--tblr-avatar-brand-offset);bottom:var(--tblr-avatar-brand-offset);z-index:1;width:var(--tblr-avatar-brand-size);height:var(--tblr-avatar-brand-size);background:var(--tblr-bg-surface);border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.badge{--tblr-badge-padding-x:0.5em;--tblr-badge-padding-y:0.25em;--tblr-badge-font-size:0.85714285em;--tblr-badge-font-weight:var(--tblr-font-weight-medium);--tblr-badge-color:var(--tblr-secondary);--tblr-badge-border-radius:var(--tblr-border-radius);--tblr-badge-icon-size:1em;--tblr-badge-line-height:1;--tblr-badge-gap:0.25rem;display:inline-flex;gap:var(--tblr-badge-gap);align-items:center;justify-content:center;min-width:calc(1em + var(--tblr-badge-padding-y) * 2 + 2px);padding:var(--tblr-badge-padding-y) var(--tblr-badge-padding-x);overflow:hidden;font-size:var(--tblr-badge-font-size);font-weight:var(--tblr-badge-font-weight);line-height:var(--tblr-badge-line-height);color:var(--tblr-badge-color);text-align:center;letter-spacing:.04em;white-space:nowrap;vertical-align:bottom;-webkit-user-select:none;user-select:none;background:var(--tblr-fill-tertiary);border:var(--tblr-border-width) var(--tblr-border-style) transparent;border-radius:var(--tblr-badge-border-radius)}a.badge{background:var(--tblr-fill-secondary)}.badge .icon{width:1em;height:1em;font-size:var(--tblr-badge-icon-size);stroke-width:2}.badge-dot,.badge:empty{display:inline-block;width:.5rem;min-width:0;height:.5rem;min-height:auto;padding:0;vertical-align:baseline;border-radius:var(--tblr-border-radius-pill)}.badge-outline{background-color:transparent;border:var(--tblr-border-width) var(--tblr-border-style) currentColor}.badge-pill{border-radius:var(--tblr-border-radius-pill)}.badge-list,.badges-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.badge-notification{position:absolute!important;inset-inline-end:0!important;top:0!important;z-index:1;transform:translate(calc(var(--tblr-dir) * 50%),-50%)}.badge-blink{animation:blink 2s infinite}.badge-sm{--tblr-badge-font-size:0.71428571em;--tblr-badge-icon-size:1em;--tblr-badge-padding-y:2px;--tblr-badge-padding-x:0.25rem}.badge-lg{--tblr-badge-font-size:1em;--tblr-badge-icon-size:1em;--tblr-badge-padding-y:0.25rem;--tblr-badge-padding-x:0.5rem}.badge-icononly{--tblr-badge-padding-x:0}.breadcrumb{--tblr-breadcrumb-padding-x:0;--tblr-breadcrumb-padding-y:0;--tblr-breadcrumb-margin-bottom:1rem;--tblr-breadcrumb-font-size: ;--tblr-breadcrumb-bg: ;--tblr-breadcrumb-border-radius: ;--tblr-breadcrumb-divider-color:var(--tblr-secondary-color);--tblr-breadcrumb-item-padding-x:0.5rem;--tblr-breadcrumb-item-active-color:inherit;--tblr-breadcrumb-item-active-font-weight:var(--tblr-font-weight-semibold);--tblr-breadcrumb-item-disabled-color:var(--tblr-disabled-color);--tblr-breadcrumb-link-color:var(--tblr-link-color);display:flex;flex-wrap:wrap;padding:0;margin:0;list-style:none;background:0 0;background-color:var(--tblr-breadcrumb-bg);font-size:var(--tblr-breadcrumb-font-size);border-radius:var(--tblr-breadcrumb-border-radius)}.breadcrumb a{color:var(--tblr-breadcrumb-link-color)}.breadcrumb a:hover{text-decoration:underline}.breadcrumb .dropdown-item{color:var(--tblr-dropdown-link-color)}.breadcrumb .dropdown-item:focus,.breadcrumb .dropdown-item:hover{color:var(--tblr-dropdown-link-hover-color);text-decoration:none}.breadcrumb .dropdown-item.active,.breadcrumb .dropdown-item:active{color:var(--tblr-dropdown-link-active-color)}.breadcrumb .dropdown-item.disabled,.breadcrumb .dropdown-item:disabled{color:var(--tblr-dropdown-link-disabled-color)}.breadcrumb-muted{--tblr-breadcrumb-link-color:var(--tblr-secondary)}.breadcrumb-item.active{font-weight:var(--tblr-breadcrumb-item-active-font-weight);color:var(--tblr-breadcrumb-item-active-color)}.breadcrumb-item.active a{color:inherit;pointer-events:none}.breadcrumb-item.disabled{color:var(--tblr-breadcrumb-item-disabled-color)}.breadcrumb-item.disabled::before{color:inherit}.breadcrumb-item.disabled a{color:inherit;pointer-events:none}.breadcrumb-item+.breadcrumb-item{padding-inline-start:var(--tblr-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:inline-start;padding-inline-end:var(--tblr-breadcrumb-item-padding-x);color:var(--tblr-breadcrumb-divider-color);content:var(--tblr-breadcrumb-divider, "/")}.breadcrumb-dots{--tblr-breadcrumb-divider:'·'}.breadcrumb-arrows{--tblr-breadcrumb-divider:'›'}.breadcrumb-bullets{--tblr-breadcrumb-divider:'•'}.btn{--tblr-btn-icon-size:1.25rem;--tblr-btn-icon-color:inherit;--tblr-btn-bg:var(--tblr-bg-surface);--tblr-btn-color:var(--tblr-body-color);--tblr-btn-border-color:var(--tblr-border-color);--tblr-btn-hover-bg:light-dark(color-mix(in oklab, var(--tblr-body-color) 6%, var(--tblr-bg-surface)), color-mix(in oklab, var(--tblr-body-color) 8%, var(--tblr-bg-surface)));--tblr-btn-hover-border-color:var(--tblr-border-active-color);--tblr-btn-active-color:var(--tblr-primary);--tblr-btn-active-bg:light-dark(color-mix(in oklab, var(--tblr-primary) 4%, var(--tblr-bg-surface)), color-mix(in oklab, var(--tblr-primary) 12%, var(--tblr-bg-surface)));--tblr-btn-active-border-color:var(--tblr-primary);position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:calc(var(--tblr-btn-line-height) * 1 + var(--tblr-btn-padding-y) * 2 + var(--tblr-btn-border-width) * 2);min-height:calc(var(--tblr-btn-line-height) * 1 + var(--tblr-btn-padding-y) * 2 + var(--tblr-btn-border-width) * 2);white-space:nowrap;box-shadow:var(--tblr-btn-box-shadow);border-radius:var(--tblr-btn-border-radius)}.btn .icon{width:var(--tblr-btn-icon-size);min-width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);margin:0 calc(var(--tblr-btn-padding-x)/ 2) 0 calc(var(--tblr-btn-padding-x)/ -4);font-size:var(--tblr-btn-icon-size);color:var(--tblr-btn-icon-color);vertical-align:bottom}.btn .avatar{width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);margin:0 calc(var(--tblr-btn-padding-x)/ 2) 0 calc(var(--tblr-btn-padding-x)/ -4)}.btn .icon-end,.btn .icon-right{margin:0 calc(var(--tblr-btn-padding-x)/ -4) 0 calc(var(--tblr-btn-padding-x)/ 2)}.btn .badge{top:auto}.btn-check+.btn:hover{color:var(--tblr-btn-hover-color);background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color)}.btn-link{--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;color:oklch(from var(--tblr-primary) calc(l + .05) c h);background-color:transparent;border-color:transparent;box-shadow:none}.btn-link .icon{color:inherit}.btn-link:hover{color:var(--tblr-link-hover-color);border-color:transparent}.btn-ghost{--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-box-shadow:none;--tblr-btn-hover-bg:var(--tblr-hover-bg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-color:var(--tblr-body-color)}.btn-ghost-primary,.btn-outline-primary,.btn-primary{--tblr-btn-variant:var(--tblr-primary);--tblr-btn-variant-fg:var(--tblr-primary-fg);--tblr-btn-variant-darken:var(--tblr-primary-darken)}.btn-ghost-secondary,.btn-outline-secondary,.btn-secondary{--tblr-btn-variant:var(--tblr-secondary);--tblr-btn-variant-fg:var(--tblr-secondary-fg);--tblr-btn-variant-darken:var(--tblr-secondary-darken)}.btn-ghost-success,.btn-outline-success,.btn-success{--tblr-btn-variant:var(--tblr-success);--tblr-btn-variant-fg:var(--tblr-success-fg);--tblr-btn-variant-darken:var(--tblr-success-darken)}.btn-ghost-info,.btn-info,.btn-outline-info{--tblr-btn-variant:var(--tblr-info);--tblr-btn-variant-fg:var(--tblr-info-fg);--tblr-btn-variant-darken:var(--tblr-info-darken)}.btn-ghost-warning,.btn-outline-warning,.btn-warning{--tblr-btn-variant:var(--tblr-warning);--tblr-btn-variant-fg:var(--tblr-warning-fg);--tblr-btn-variant-darken:var(--tblr-warning-darken)}.btn-danger,.btn-ghost-danger,.btn-outline-danger{--tblr-btn-variant:var(--tblr-danger);--tblr-btn-variant-fg:var(--tblr-danger-fg);--tblr-btn-variant-darken:var(--tblr-danger-darken)}.btn-ghost-light,.btn-light,.btn-outline-light{--tblr-btn-variant:var(--tblr-light);--tblr-btn-variant-fg:var(--tblr-light-fg);--tblr-btn-variant-darken:var(--tblr-light-darken)}.btn-dark,.btn-ghost-dark,.btn-outline-dark{--tblr-btn-variant:var(--tblr-dark);--tblr-btn-variant-fg:var(--tblr-dark-fg);--tblr-btn-variant-darken:var(--tblr-dark-darken)}.btn-ghost-muted,.btn-muted,.btn-outline-muted{--tblr-btn-variant:var(--tblr-muted);--tblr-btn-variant-fg:var(--tblr-muted-fg);--tblr-btn-variant-darken:var(--tblr-muted-darken)}.btn-blue,.btn-ghost-blue,.btn-outline-blue{--tblr-btn-variant:var(--tblr-blue);--tblr-btn-variant-fg:var(--tblr-blue-fg);--tblr-btn-variant-darken:var(--tblr-blue-darken)}.btn-azure,.btn-ghost-azure,.btn-outline-azure{--tblr-btn-variant:var(--tblr-azure);--tblr-btn-variant-fg:var(--tblr-azure-fg);--tblr-btn-variant-darken:var(--tblr-azure-darken)}.btn-ghost-indigo,.btn-indigo,.btn-outline-indigo{--tblr-btn-variant:var(--tblr-indigo);--tblr-btn-variant-fg:var(--tblr-indigo-fg);--tblr-btn-variant-darken:var(--tblr-indigo-darken)}.btn-ghost-purple,.btn-outline-purple,.btn-purple{--tblr-btn-variant:var(--tblr-purple);--tblr-btn-variant-fg:var(--tblr-purple-fg);--tblr-btn-variant-darken:var(--tblr-purple-darken)}.btn-ghost-pink,.btn-outline-pink,.btn-pink{--tblr-btn-variant:var(--tblr-pink);--tblr-btn-variant-fg:var(--tblr-pink-fg);--tblr-btn-variant-darken:var(--tblr-pink-darken)}.btn-ghost-red,.btn-outline-red,.btn-red{--tblr-btn-variant:var(--tblr-red);--tblr-btn-variant-fg:var(--tblr-red-fg);--tblr-btn-variant-darken:var(--tblr-red-darken)}.btn-ghost-orange,.btn-orange,.btn-outline-orange{--tblr-btn-variant:var(--tblr-orange);--tblr-btn-variant-fg:var(--tblr-orange-fg);--tblr-btn-variant-darken:var(--tblr-orange-darken)}.btn-ghost-yellow,.btn-outline-yellow,.btn-yellow{--tblr-btn-variant:var(--tblr-yellow);--tblr-btn-variant-fg:var(--tblr-yellow-fg);--tblr-btn-variant-darken:var(--tblr-yellow-darken)}.btn-ghost-lime,.btn-lime,.btn-outline-lime{--tblr-btn-variant:var(--tblr-lime);--tblr-btn-variant-fg:var(--tblr-lime-fg);--tblr-btn-variant-darken:var(--tblr-lime-darken)}.btn-ghost-green,.btn-green,.btn-outline-green{--tblr-btn-variant:var(--tblr-green);--tblr-btn-variant-fg:var(--tblr-green-fg);--tblr-btn-variant-darken:var(--tblr-green-darken)}.btn-ghost-teal,.btn-outline-teal,.btn-teal{--tblr-btn-variant:var(--tblr-teal);--tblr-btn-variant-fg:var(--tblr-teal-fg);--tblr-btn-variant-darken:var(--tblr-teal-darken)}.btn-cyan,.btn-ghost-cyan,.btn-outline-cyan{--tblr-btn-variant:var(--tblr-cyan);--tblr-btn-variant-fg:var(--tblr-cyan-fg);--tblr-btn-variant-darken:var(--tblr-cyan-darken)}.btn-ghost-x,.btn-outline-x,.btn-x{--tblr-btn-variant:var(--tblr-x);--tblr-btn-variant-fg:var(--tblr-x-fg);--tblr-btn-variant-darken:var(--tblr-x-darken)}.btn-facebook,.btn-ghost-facebook,.btn-outline-facebook{--tblr-btn-variant:var(--tblr-facebook);--tblr-btn-variant-fg:var(--tblr-facebook-fg);--tblr-btn-variant-darken:var(--tblr-facebook-darken)}.btn-ghost-twitter,.btn-outline-twitter,.btn-twitter{--tblr-btn-variant:var(--tblr-twitter);--tblr-btn-variant-fg:var(--tblr-twitter-fg);--tblr-btn-variant-darken:var(--tblr-twitter-darken)}.btn-ghost-linkedin,.btn-linkedin,.btn-outline-linkedin{--tblr-btn-variant:var(--tblr-linkedin);--tblr-btn-variant-fg:var(--tblr-linkedin-fg);--tblr-btn-variant-darken:var(--tblr-linkedin-darken)}.btn-ghost-google,.btn-google,.btn-outline-google{--tblr-btn-variant:var(--tblr-google);--tblr-btn-variant-fg:var(--tblr-google-fg);--tblr-btn-variant-darken:var(--tblr-google-darken)}.btn-ghost-youtube,.btn-outline-youtube,.btn-youtube{--tblr-btn-variant:var(--tblr-youtube);--tblr-btn-variant-fg:var(--tblr-youtube-fg);--tblr-btn-variant-darken:var(--tblr-youtube-darken)}.btn-ghost-vimeo,.btn-outline-vimeo,.btn-vimeo{--tblr-btn-variant:var(--tblr-vimeo);--tblr-btn-variant-fg:var(--tblr-vimeo-fg);--tblr-btn-variant-darken:var(--tblr-vimeo-darken)}.btn-dribbble,.btn-ghost-dribbble,.btn-outline-dribbble{--tblr-btn-variant:var(--tblr-dribbble);--tblr-btn-variant-fg:var(--tblr-dribbble-fg);--tblr-btn-variant-darken:var(--tblr-dribbble-darken)}.btn-ghost-github,.btn-github,.btn-outline-github{--tblr-btn-variant:var(--tblr-github);--tblr-btn-variant-fg:var(--tblr-github-fg);--tblr-btn-variant-darken:var(--tblr-github-darken)}.btn-ghost-instagram,.btn-instagram,.btn-outline-instagram{--tblr-btn-variant:var(--tblr-instagram);--tblr-btn-variant-fg:var(--tblr-instagram-fg);--tblr-btn-variant-darken:var(--tblr-instagram-darken)}.btn-ghost-pinterest,.btn-outline-pinterest,.btn-pinterest{--tblr-btn-variant:var(--tblr-pinterest);--tblr-btn-variant-fg:var(--tblr-pinterest-fg);--tblr-btn-variant-darken:var(--tblr-pinterest-darken)}.btn-ghost-vk,.btn-outline-vk,.btn-vk{--tblr-btn-variant:var(--tblr-vk);--tblr-btn-variant-fg:var(--tblr-vk-fg);--tblr-btn-variant-darken:var(--tblr-vk-darken)}.btn-ghost-rss,.btn-outline-rss,.btn-rss{--tblr-btn-variant:var(--tblr-rss);--tblr-btn-variant-fg:var(--tblr-rss-fg);--tblr-btn-variant-darken:var(--tblr-rss-darken)}.btn-flickr,.btn-ghost-flickr,.btn-outline-flickr{--tblr-btn-variant:var(--tblr-flickr);--tblr-btn-variant-fg:var(--tblr-flickr-fg);--tblr-btn-variant-darken:var(--tblr-flickr-darken)}.btn-bitbucket,.btn-ghost-bitbucket,.btn-outline-bitbucket{--tblr-btn-variant:var(--tblr-bitbucket);--tblr-btn-variant-fg:var(--tblr-bitbucket-fg);--tblr-btn-variant-darken:var(--tblr-bitbucket-darken)}.btn-ghost-tabler,.btn-outline-tabler,.btn-tabler{--tblr-btn-variant:var(--tblr-tabler);--tblr-btn-variant-fg:var(--tblr-tabler-fg);--tblr-btn-variant-darken:var(--tblr-tabler-darken)}.btn-azure,.btn-bitbucket,.btn-blue,.btn-cyan,.btn-danger,.btn-dark,.btn-dribbble,.btn-facebook,.btn-flickr,.btn-github,.btn-google,.btn-green,.btn-indigo,.btn-info,.btn-instagram,.btn-light,.btn-lime,.btn-linkedin,.btn-muted,.btn-orange,.btn-pink,.btn-pinterest,.btn-primary,.btn-purple,.btn-red,.btn-rss,.btn-secondary,.btn-success,.btn-tabler,.btn-teal,.btn-twitter,.btn-vimeo,.btn-vk,.btn-warning,.btn-x,.btn-yellow,.btn-youtube{--tblr-btn-border-color:color-mix(in oklab, var(--tblr-btn-variant), var(--tblr-black) 10%);--tblr-btn-hover-border-color:color-mix(in oklab, var(--tblr-btn-variant), var(--tblr-black) 10%);--tblr-btn-active-border-color:color-mix(in oklab, var(--tblr-btn-variant), var(--tblr-black) 10%);--tblr-btn-color:var(--tblr-btn-variant-fg, #fff);--tblr-btn-bg:var(--tblr-btn-variant);--tblr-btn-hover-color:var(--tblr-btn-variant-fg);--tblr-btn-hover-bg:var(--tblr-btn-variant-darken);--tblr-btn-active-color:var(--tblr-btn-variant-fg);--tblr-btn-active-bg:var(--tblr-btn-variant-darken);--tblr-btn-disabled-bg:var(--tblr-btn-variant);--tblr-btn-disabled-color:var(--tblr-btn-variant-fg);--tblr-btn-box-shadow:inset 0 1px 0 0 color-mix(in oklab, var(--tblr-btn-variant), var(--tblr-white) 30%),inset 0 -1px 0 0 color-mix(in oklab, var(--tblr-btn-variant), var(--tblr-black) 4%),var(--tblr-shadow-input);--tblr-btn-gradient:linear-gradient(180deg, color-mix(in oklab, var(--tblr-white) 12%, transparent), transparent);background-image:var(--tblr-btn-gradient)}.btn-dark{--tblr-btn-border-color:var(--tblr-dark-mode-border-color);--tblr-btn-hover-border-color:var(--tblr-dark-mode-border-active-color);--tblr-btn-active-border-color:var(--tblr-dark-mode-border-active-color)}.btn-outline-azure,.btn-outline-bitbucket,.btn-outline-blue,.btn-outline-cyan,.btn-outline-danger,.btn-outline-dark,.btn-outline-dribbble,.btn-outline-facebook,.btn-outline-flickr,.btn-outline-github,.btn-outline-google,.btn-outline-green,.btn-outline-indigo,.btn-outline-info,.btn-outline-instagram,.btn-outline-light,.btn-outline-lime,.btn-outline-linkedin,.btn-outline-muted,.btn-outline-orange,.btn-outline-pink,.btn-outline-pinterest,.btn-outline-primary,.btn-outline-purple,.btn-outline-red,.btn-outline-rss,.btn-outline-secondary,.btn-outline-success,.btn-outline-tabler,.btn-outline-teal,.btn-outline-twitter,.btn-outline-vimeo,.btn-outline-vk,.btn-outline-warning,.btn-outline-x,.btn-outline-yellow,.btn-outline-youtube,.btn-outline.btn-azure,.btn-outline.btn-bitbucket,.btn-outline.btn-blue,.btn-outline.btn-cyan,.btn-outline.btn-danger,.btn-outline.btn-dark,.btn-outline.btn-dribbble,.btn-outline.btn-facebook,.btn-outline.btn-flickr,.btn-outline.btn-github,.btn-outline.btn-google,.btn-outline.btn-green,.btn-outline.btn-indigo,.btn-outline.btn-info,.btn-outline.btn-instagram,.btn-outline.btn-light,.btn-outline.btn-lime,.btn-outline.btn-linkedin,.btn-outline.btn-muted,.btn-outline.btn-orange,.btn-outline.btn-pink,.btn-outline.btn-pinterest,.btn-outline.btn-primary,.btn-outline.btn-purple,.btn-outline.btn-red,.btn-outline.btn-rss,.btn-outline.btn-secondary,.btn-outline.btn-success,.btn-outline.btn-tabler,.btn-outline.btn-teal,.btn-outline.btn-twitter,.btn-outline.btn-vimeo,.btn-outline.btn-vk,.btn-outline.btn-warning,.btn-outline.btn-x,.btn-outline.btn-yellow,.btn-outline.btn-youtube{--tblr-btn-color:var(--tblr-btn-variant);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-btn-variant);--tblr-btn-hover-color:var(--tblr-btn-variant-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-btn-variant);--tblr-btn-active-color:var(--tblr-btn-variant-fg);--tblr-btn-active-bg:var(--tblr-btn-variant);--tblr-btn-active-border-color:var(--tblr-btn-variant);--tblr-btn-disabled-color:var(--tblr-btn-variant);--tblr-btn-disabled-border-color:var(--tblr-btn-variant);--tblr-btn-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-azure,.btn-ghost-bitbucket,.btn-ghost-blue,.btn-ghost-cyan,.btn-ghost-danger,.btn-ghost-dark,.btn-ghost-dribbble,.btn-ghost-facebook,.btn-ghost-flickr,.btn-ghost-github,.btn-ghost-google,.btn-ghost-green,.btn-ghost-indigo,.btn-ghost-info,.btn-ghost-instagram,.btn-ghost-light,.btn-ghost-lime,.btn-ghost-linkedin,.btn-ghost-muted,.btn-ghost-orange,.btn-ghost-pink,.btn-ghost-pinterest,.btn-ghost-primary,.btn-ghost-purple,.btn-ghost-red,.btn-ghost-rss,.btn-ghost-secondary,.btn-ghost-success,.btn-ghost-tabler,.btn-ghost-teal,.btn-ghost-twitter,.btn-ghost-vimeo,.btn-ghost-vk,.btn-ghost-warning,.btn-ghost-x,.btn-ghost-yellow,.btn-ghost-youtube,.btn-ghost.btn-azure,.btn-ghost.btn-bitbucket,.btn-ghost.btn-blue,.btn-ghost.btn-cyan,.btn-ghost.btn-danger,.btn-ghost.btn-dark,.btn-ghost.btn-dribbble,.btn-ghost.btn-facebook,.btn-ghost.btn-flickr,.btn-ghost.btn-github,.btn-ghost.btn-google,.btn-ghost.btn-green,.btn-ghost.btn-indigo,.btn-ghost.btn-info,.btn-ghost.btn-instagram,.btn-ghost.btn-light,.btn-ghost.btn-lime,.btn-ghost.btn-linkedin,.btn-ghost.btn-muted,.btn-ghost.btn-orange,.btn-ghost.btn-pink,.btn-ghost.btn-pinterest,.btn-ghost.btn-primary,.btn-ghost.btn-purple,.btn-ghost.btn-red,.btn-ghost.btn-rss,.btn-ghost.btn-secondary,.btn-ghost.btn-success,.btn-ghost.btn-tabler,.btn-ghost.btn-teal,.btn-ghost.btn-twitter,.btn-ghost.btn-vimeo,.btn-ghost.btn-vk,.btn-ghost.btn-warning,.btn-ghost.btn-x,.btn-ghost.btn-yellow,.btn-ghost.btn-youtube{--tblr-btn-color:var(--tblr-btn-variant);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-btn-variant-fg);--tblr-btn-hover-bg:var(--tblr-btn-variant);--tblr-btn-hover-border-color:var(--tblr-btn-variant);--tblr-btn-active-color:var(--tblr-btn-variant-fg);--tblr-btn-active-bg:var(--tblr-btn-variant);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px color-mix(in oklab, var(--tblr-black) 12.5%, transparent);--tblr-btn-disabled-color:var(--tblr-btn-variant);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-gradient:none;--tblr-btn-box-shadow:none}.btn-group-sm>.btn,.btn-sm{--tblr-btn-line-height:1rem;--tblr-btn-icon-size:1rem}.btn-group-lg>.btn,.btn-lg{--tblr-btn-line-height:1.5rem;--tblr-btn-icon-size:1.5rem}.btn-group-xl>.btn,.btn-xl{--tblr-btn-line-height:2rem;--tblr-btn-icon-size:1.75rem;--tblr-btn-padding-y:0.6875rem;--tblr-btn-padding-x:1.75rem;--tblr-btn-font-size:1.25rem;--tblr-btn-border-radius:var(--tblr-border-radius-lg)}.btn-pill{padding-inline-start:1.5em;padding-inline-end:1.5em;border-radius:var(--tblr-border-radius-pill)}.btn-pill[class*=btn-icon]{--tblr-btn-pill-icon-padding-y:0.375rem;--tblr-btn-pill-icon-padding-x:15px;padding:var(--tblr-btn-pill-icon-padding-y) var(--tblr-btn-pill-icon-padding-x)}.btn-square{border-radius:0}.btn-action,.btn-icon{outline-color:transparent;transition:outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn-action,.btn-icon{transition:none}}.btn-action,.btn-icon{min-width:calc(var(--tblr-btn-line-height) + var(--tblr-btn-padding-y) * 2 + var(--tblr-btn-border-width) * 2);padding-inline-start:0;padding-inline-end:0}.btn-action .icon,.btn-icon .icon{margin:calc(-1 * var(--tblr-btn-padding-x))}.btn-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.btn-list-center{justify-content:center}.btn-floating{--tblr-btn-floating-offset:1rem;position:fixed;inset-inline-end:var(--tblr-btn-floating-offset);bottom:var(--tblr-btn-floating-offset);z-index:1030;box-shadow:var(--tblr-shadow-dropdown)}@media print{.btn-floating{display:none}}.btn-loading{position:relative;color:transparent!important;text-shadow:none!important;pointer-events:none}.btn-loading>*{opacity:0}.btn-loading::after{position:absolute;inset-inline-start:calc(50% - var(--tblr-btn-icon-size)/ 2);top:calc(50% - var(--tblr-btn-icon-size)/ 2);display:inline-block;width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);color:var(--tblr-btn-color);vertical-align:text-bottom;content:"";border:2px var(--tblr-border-style) currentColor;border-inline-end-color:transparent;animation:spinner-border .75s linear infinite;border-radius:var(--tblr-border-radius-pill)}.btn-action{--tblr-border-color:transparent;--tblr-btn-bg:transparent;--tblr-btn-disabled-color:var(--tblr-secondary);color:var(--tblr-secondary);border-radius:var(--tblr-border-radius);background:0 0;box-shadow:none}.btn-action::after{content:none}.btn-action:focus:not(:focus-visible){outline:0;box-shadow:none}.btn-action:focus-visible{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:calc(var(--tblr-focus-ring-width) * -1);box-shadow:none}.btn-action.show,.btn-action:hover{color:var(--tblr-body-color);background:var(--tblr-hover-bg);border-color:transparent}.btn-action.show{color:var(--tblr-primary);background:var(--tblr-active-bg)}@media print{.btn-action{display:none}}.btn-actions{display:flex}@media print{.btn-actions{display:none}}.btn-animate-icon .icon{transition:transform .3s ease}.btn-animate-icon:focus-visible .icon,.btn-animate-icon:hover .icon{transform:translateX(calc(var(--tblr-dir) * 4px))}.btn-animate-icon.btn-animate-icon-rotate:focus-visible .icon,.btn-animate-icon.btn-animate-icon-rotate:hover .icon{transform:rotate(90deg)}.btn-animate-icon.btn-animate-icon-move-start:focus-visible .icon,.btn-animate-icon.btn-animate-icon-move-start:hover .icon{transform:translateX(calc(var(--tblr-dir) * -4px))}.btn-animate-icon.btn-animate-icon-pulse:focus-visible .icon,.btn-animate-icon.btn-animate-icon-pulse:hover .icon{transform:none;animation:pulse .9s}.btn-animate-icon.btn-animate-icon-shake:focus-visible .icon,.btn-animate-icon.btn-animate-icon-shake:hover .icon{transform:none;animation:shake .9s}.btn-animate-icon.btn-animate-icon-tada:focus-visible .icon,.btn-animate-icon.btn-animate-icon-tada:hover .icon{transform:none;animation:tada .9s}.btn-group,.btn-group-vertical{box-shadow:var(--tblr-shadow-input)}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group>.btn-check:checked+.btn,.btn-group>.btn.active,.btn-group>.btn:active{z-index:5}.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.calendar{--tblr-calendar-padding-y:0.5rem;--tblr-calendar-date-padding:0.2rem;--tblr-calendar-date-size:1.4rem;display:block;font-size:.765625rem;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.calendar-nav{display:flex;align-items:center}.calendar-title{flex:1;text-align:center}.calendar-body,.calendar-header{display:flex;flex-wrap:wrap;justify-content:start;padding:var(--tblr-calendar-padding-y) 0}.calendar-header{color:var(--tblr-secondary)}.calendar-date{flex:0 0 14.2857142857%;max-width:14.2857142857%;padding:var(--tblr-calendar-date-padding);text-align:center;border:0}.calendar-date.next-month,.calendar-date.prev-month{opacity:.25}.calendar-date .date-item{position:relative;display:inline-block;width:var(--tblr-calendar-date-size);height:var(--tblr-calendar-date-size);line-height:var(--tblr-calendar-date-size);color:var(--tblr-secondary-color);text-align:center;text-decoration:none;white-space:nowrap;vertical-align:middle;cursor:pointer;background:0 0;border:var(--tblr-border-width) var(--tblr-border-style) transparent;border-radius:var(--tblr-border-radius-pill);outline:0;outline-color:transparent;transition:background .3s,border .3s,box-shadow .32s,color .3s,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.calendar-date .date-item{transition:none}}.calendar-date .date-item:hover{color:var(--tblr-primary);text-decoration:none;background:var(--tblr-bg-surface);border-color:var(--tblr-border-color)}.calendar-date .date-item:focus-visible{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.calendar-date .date-today{color:var(--tblr-primary);border-color:var(--tblr-border-color)}.calendar-range{position:relative}.calendar-range::before{position:absolute;inset-inline-start:0;inset-inline-end:0;top:50%;height:var(--tblr-calendar-date-size);content:"";background:color-mix(in oklab,var(--tblr-primary) 10%,transparent);transform:translateY(-50%)}.calendar-range.range-end .date-item,.calendar-range.range-start .date-item{color:#fff;background:var(--tblr-primary);border-color:var(--tblr-primary)}.calendar-range.range-start::before{inset-inline-start:50%}.calendar-range.range-end::before{inset-inline-end:50%}[data-vc=calendar]{--tblr-calendar-padding:0;--tblr-calendar-color:var(--tblr-body-color);--tblr-calendar-font-size:0.765625rem;--tblr-calendar-header-font-weight:500;--tblr-calendar-weekday-color:var(--tblr-secondary);--tblr-calendar-week-number-color:var(--tblr-secondary);--tblr-calendar-week-number-border-color:var(--tblr-border-color);--tblr-calendar-day-hover-bg:var(--tblr-hover-bg);--tblr-calendar-day-selected-bg:var(--tblr-primary);--tblr-calendar-day-selected-color:var(--tblr-primary-fg);--tblr-calendar-day-today-bg:color-mix(in oklab, var(--tblr-body-color) 6%, transparent);--tblr-calendar-day-today-color:var(--tblr-primary);--tblr-calendar-day-disabled-color:var(--tblr-disabled-color);--tblr-calendar-day-size:2rem;--tblr-calendar-day-font-size:0.765625rem;--tblr-calendar-border-radius:var(--tblr-border-radius);position:relative;box-sizing:border-box;display:flex;flex-direction:column;width:fit-content;padding:var(--tblr-calendar-padding);font-family:inherit;font-size:var(--tblr-calendar-font-size);color:var(--tblr-calendar-color)}[data-vc=calendar] button{font-family:inherit;outline-color:transparent;transition:outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){[data-vc=calendar] button{transition:none}}[data-vc=calendar] button:focus-visible{position:relative;z-index:1;outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}[data-vc-arrow]{position:relative;display:block;width:2rem;height:2rem;color:var(--tblr-calendar-color);pointer-events:auto;cursor:pointer;background-color:transparent;border:0;border-radius:var(--tblr-calendar-border-radius)}[data-vc-arrow]::before{position:absolute;inset:0.25rem;content:"";background-color:currentColor;mask-image:url("data:image/svg+xml,");mask-repeat:no-repeat;mask-position:center;mask-size:1rem}[data-vc-arrow]:hover{background-color:var(--tblr-calendar-day-hover-bg)}[data-vc-arrow=prev]::before{transform:rotate(90deg)}[data-vc-arrow=next]::before{transform:rotate(-90deg)}[data-vc=controls]{position:absolute;top:0;right:0;left:0;z-index:20;display:flex;align-items:center;justify-content:space-between;padding-block-start:var(--tblr-calendar-padding);padding-inline:var(--tblr-calendar-padding);pointer-events:none}[data-vc=grid]{display:flex;flex-grow:1;flex-wrap:wrap;gap:1.75rem}[data-vc=column]{display:flex;flex-grow:1;flex-direction:column;min-width:240px}[data-vc=header]{position:relative;display:flex;align-items:center;margin-bottom:.75rem}[data-vc-header=content]{display:inline-flex;flex-grow:1;align-items:center;justify-content:center;white-space:pre-wrap}[data-vc=month],[data-vc=year]{padding:.25rem .5rem;margin-inline:-0.125rem;font-size:var(--tblr-font-size-base, 1rem);font-weight:var(--tblr-calendar-header-font-weight);color:var(--tblr-calendar-color);background-color:transparent;border:0;border-radius:var(--tblr-calendar-border-radius)}[data-vc=month]:disabled,[data-vc=year]:disabled{color:var(--tblr-calendar-day-disabled-color);pointer-events:none}[data-vc=month]:hover:not(:disabled),[data-vc=year]:hover:not(:disabled){background-color:var(--tblr-calendar-day-hover-bg)}[data-vc=wrapper]{display:flex;flex-grow:1}[data-vc=content]{display:flex;flex-grow:1;flex-direction:column}[data-vc=months],[data-vc=years]{display:flex;flex-grow:1;flex-direction:column;row-gap:1rem}[data-vc-months=row],[data-vc-years=row]{display:grid;grid-template-columns:repeat(var(--tblr-calendar-columns,4),minmax(0,1fr));column-gap:.25rem;align-items:center}[data-vc=years]{--tblr-calendar-columns:5}[data-vc-months=cell],[data-vc-years=cell]{display:flex}[data-vc-months-month],[data-vc-years-year]{display:flex;align-items:center;justify-content:center;width:100%;height:2.5rem;padding:.25rem;font-size:var(--tblr-calendar-day-font-size);font-weight:var(--tblr-calendar-header-font-weight);line-height:1rem;color:var(--tblr-calendar-weekday-color);text-align:center;word-break:break-all;cursor:pointer;background-color:transparent;border:0;border-radius:var(--tblr-calendar-border-radius)}[data-vc-months-month]:disabled,[data-vc-years-year]:disabled{color:var(--tblr-calendar-day-disabled-color);pointer-events:none}[data-vc-months-month]:hover:not(:disabled),[data-vc-years-year]:hover:not(:disabled){background-color:var(--tblr-calendar-day-hover-bg)}[data-vc-months-month][data-vc-months-month-selected],[data-vc-months-month][data-vc-years-year-selected],[data-vc-years-year][data-vc-months-month-selected],[data-vc-years-year][data-vc-years-year-selected]{color:var(--tblr-calendar-day-selected-color);background-color:var(--tblr-calendar-day-selected-bg)}[data-vc-months-month][data-vc-months-month-selected]:hover,[data-vc-months-month][data-vc-years-year-selected]:hover,[data-vc-years-year][data-vc-months-month-selected]:hover,[data-vc-years-year][data-vc-years-year-selected]:hover{color:var(--tblr-calendar-day-selected-color);background-color:var(--tblr-calendar-day-selected-bg)}[data-vc=week]{display:grid;grid-template-columns:repeat(7,1fr);justify-items:center;margin-bottom:.5rem}[data-vc-week-day]{display:flex;align-items:center;justify-content:center;width:100%;min-width:var(--tblr-calendar-day-size);padding:0;margin:0;font-size:var(--tblr-calendar-day-font-size);font-weight:var(--tblr-calendar-header-font-weight);line-height:1rem;color:var(--tblr-calendar-weekday-color);background-color:transparent;border:0}button[data-vc-week-day]{cursor:pointer}[data-vc-week=numbers]{display:flex;flex-direction:column;padding-inline-end:0.5rem;margin-inline-end:.5rem;border-inline-end:var(--tblr-border-width) solid var(--tblr-calendar-week-number-border-color)}[data-vc-week-numbers=title]{display:flex;align-items:center;justify-content:center;margin-bottom:.5rem;font-size:var(--tblr-calendar-day-font-size);font-weight:var(--tblr-calendar-header-font-weight);line-height:1rem;color:var(--tblr-calendar-week-number-color)}[data-vc-week-numbers=content]{display:grid;grid-auto-rows:calc(var(--tblr-calendar-day-size) + 0.25rem);align-items:center;justify-items:center}[data-vc-week-number]{display:flex;align-items:center;justify-content:center;width:100%;min-width:var(--tblr-calendar-day-size);font-size:var(--tblr-calendar-day-font-size);font-weight:400;line-height:1rem;color:var(--tblr-calendar-week-number-color)}[data-vc=dates]{pointer-events:none}[data-vc-dates=row]{display:grid;grid-template-columns:repeat(7,1fr);align-items:center;justify-items:center;width:100%}[data-vc-date]{position:relative;display:flex;align-items:center;justify-content:center;width:100%;padding-top:.125rem;padding-bottom:.125rem;pointer-events:auto}[data-vc-date]:not(:has([data-vc-date-btn])),[data-vc-date][data-vc-date-disabled],[data-vc-date][data-vc-date-disabled] [data-vc-date-btn]{pointer-events:none}[data-vc-date-btn]{--tblr-calendar-day-bg:transparent;--tblr-calendar-day-bg-opacity:100%;display:flex;align-items:center;justify-content:center;width:100%;min-width:var(--tblr-calendar-day-size);height:100%;min-height:var(--tblr-calendar-day-size);padding:0;font-size:var(--tblr-calendar-day-font-size);font-weight:400;line-height:1rem;color:var(--tblr-calendar-color);cursor:pointer;background-color:color-mix(in oklab,var(--tblr-calendar-day-bg) var(--tblr-calendar-day-bg-opacity),transparent);border:0;border-radius:var(--tblr-calendar-border-radius);outline-color:transparent;transition:color .3s,background-color .3s,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){[data-vc-date-btn]{transition:none}}[data-vc-date-btn]:hover{--tblr-calendar-day-bg:var(--tblr-calendar-day-hover-bg)}[data-vc-date-today] [data-vc-date-btn]{font-weight:700;--tblr-calendar-day-bg:var(--tblr-calendar-day-today-bg);color:var(--tblr-calendar-day-today-color)}[data-vc-date-month=next] [data-vc-date-btn],[data-vc-date-month=prev] [data-vc-date-btn]{--tblr-calendar-day-bg-opacity:50%;color:var(--tblr-calendar-weekday-color)}[data-vc-date-disabled] [data-vc-date-btn]{color:var(--tblr-calendar-day-disabled-color)}[data-vc-date-hover] [data-vc-date-btn]{--tblr-calendar-day-bg:var(--tblr-calendar-day-hover-bg);border-radius:0}[data-vc-date-hover=first] [data-vc-date-btn]{border-start-start-radius:var(--tblr-calendar-border-radius);border-end-start-radius:var(--tblr-calendar-border-radius)}[data-vc-date-hover=last] [data-vc-date-btn]{border-start-end-radius:var(--tblr-calendar-border-radius);border-end-end-radius:var(--tblr-calendar-border-radius)}[data-vc-date-hover=first-and-last] [data-vc-date-btn]{border-radius:var(--tblr-calendar-border-radius)}[data-vc-date-selected] [data-vc-date-btn]{--tblr-calendar-day-bg:var(--tblr-calendar-day-selected-bg);color:var(--tblr-calendar-day-selected-color)}[data-vc-date-selected=middle] [data-vc-date-btn]{--tblr-calendar-day-bg-opacity:10%;color:var(--tblr-calendar-color);border-radius:0}[data-vc-date-selected=first] [data-vc-date-btn]{border-start-start-radius:var(--tblr-calendar-border-radius);border-start-end-radius:0;border-end-start-radius:var(--tblr-calendar-border-radius);border-end-end-radius:0}[data-vc-date-selected=last] [data-vc-date-btn]{border-start-start-radius:0;border-start-end-radius:var(--tblr-calendar-border-radius);border-end-start-radius:0;border-end-end-radius:var(--tblr-calendar-border-radius)}[data-vc-date-selected=first-and-last] [data-vc-date-btn]{border-radius:var(--tblr-calendar-border-radius)}[data-vc=calendar][data-vc-input]{--tblr-datepicker-padding:1rem;--tblr-datepicker-bg:var(--tblr-bg-surface);--tblr-datepicker-border-radius:var(--tblr-border-radius);--tblr-datepicker-box-shadow:var(--tblr-shadow-dropdown);--tblr-datepicker-min-width:280px;--tblr-datepicker-zindex:1000;--tblr-calendar-padding:var(--tblr-datepicker-padding);position:absolute;z-index:var(--tblr-datepicker-zindex);min-width:var(--tblr-datepicker-min-width);background-color:var(--tblr-datepicker-bg);box-shadow:var(--tblr-datepicker-box-shadow);border-radius:var(--tblr-datepicker-border-radius)}[data-vc=calendar][data-vc-input][data-vc-calendar-hidden]{pointer-events:none;opacity:0}[data-vc-position=bottom]{margin-block-start:0.25rem}[data-vc-position=top]{margin-block-end:-0.25rem}.carousel-indicators-vertical{--tblr-carousel-indicators-vertical-margin-inline-end:1rem;inset-inline-start:auto;top:0;flex-direction:column;margin-block:0;margin-inline:0 var(--tblr-carousel-indicators-vertical-margin-inline-end)}.carousel-indicators-vertical [data-bs-target],.carousel-indicators-vertical [data-target]{width:3px;height:30px;margin:3px 0 3px;border:0;border-inline-start:10px var(--tblr-border-style) transparent;border-inline-end:10px var(--tblr-border-style) transparent}.carousel-indicators-dot [data-bs-target],.carousel-indicators-dot [data-target]{width:.5rem;height:.5rem;margin:0;border:10px var(--tblr-border-style) transparent;border-radius:var(--tblr-border-radius-pill)}.carousel-indicators-thumb [data-bs-target],.carousel-indicators-thumb [data-target]{width:2rem;height:auto;margin:0 3px;background:no-repeat center/cover;border:0;box-shadow:0px 2px 4px -1px color-mix(in oklab,var(--tblr-shadow-color) 15%,transparent),0px 4px 6px -1px color-mix(in oklab,var(--tblr-shadow-color) 20%,transparent);opacity:.75;border-radius:var(--tblr-border-radius)}@media (min-width:992px){.carousel-indicators-thumb [data-bs-target],.carousel-indicators-thumb [data-target]{width:4rem}}.carousel-indicators-thumb [data-bs-target]::before,.carousel-indicators-thumb [data-target]::before{display:block;padding-top:var(--tblr-aspect-ratio,100%);content:""}.carousel-indicators-thumb.carousel-indicators-vertical [data-bs-target],.carousel-indicators-thumb.carousel-indicators-vertical [data-target]{margin:3px 0}.carousel-caption-background{position:absolute;inset-inline-start:0;inset-inline-end:0;bottom:0;height:90%;background:oklch(26.86% 0 0deg);background:linear-gradient(0deg,color-mix(in oklab,var(--tblr-dark) 90%,transparent),color-mix(in oklab,var(--tblr-dark) 0%,transparent))}@property --tblr-card-gradient-direction{syntax:"";inherits:true;initial-value:180deg}@keyframes gradient-animation{0%{--tblr-card-gradient-direction:180deg}100%{--tblr-card-gradient-direction:540deg}}.card{transition:transform .3s ease-out,opacity .3s ease-out,box-shadow .3s ease-out}@media (prefers-reduced-motion:reduce){.card{transition:none}}@media print{.card{border:none;box-shadow:none;break-inside:avoid}}a.card{color:inherit}a.card:hover{text-decoration:none;box-shadow:var(--tblr-shadow-card-hover)}.card .card{box-shadow:none}.card-borderless,.card-borderless .card-footer,.card-borderless .card-header{border-color:transparent}.card-dashed{border:var(--tblr-border-width) dashed var(--tblr-border-color)}.card-transparent{background:0 0;border:var(--tblr-border-width) dashed var(--tblr-border-color);box-shadow:none}.card-stamp{--tblr-stamp-size:7rem;position:absolute;inset-inline-end:0;top:0;width:calc(var(--tblr-stamp-size) * 1);height:calc(var(--tblr-stamp-size) * 1);max-height:100%;overflow:hidden;pointer-events:none;border-start-end-radius:6px;opacity:.2}.card-stamp-lg{--tblr-stamp-size:13rem}.card-stamp-icon{position:relative;inset-inline-end:calc(var(--tblr-stamp-size) * -0.25);top:calc(var(--tblr-stamp-size) * -.25);display:flex;align-items:center;justify-content:center;width:calc(var(--tblr-stamp-size) * 1);height:calc(var(--tblr-stamp-size) * 1);font-size:calc(var(--tblr-stamp-size) * .75);color:var(--tblr-card-bg,var(--tblr-bg-surface));background:var(--tblr-secondary);transform:rotate(10deg);border-radius:var(--tblr-border-radius-pill)}.card-stamp-icon .icon{width:calc(var(--tblr-stamp-size) * .75);height:calc(var(--tblr-stamp-size) * .75);stroke-width:2}.card-img,.card-img-start{border-top-left-radius:calc(var(--tblr-border-radius-lg) - (var(--tblr-border-width)));border-bottom-left-radius:calc(var(--tblr-border-radius-lg) - (var(--tblr-border-width)))}.card-img,.card-img-end{border-top-right-radius:calc(var(--tblr-border-radius-lg) - (var(--tblr-border-width)));border-bottom-right-radius:calc(var(--tblr-border-radius-lg) - (var(--tblr-border-width)))}.card-img-overlay{display:flex;flex-direction:column;justify-content:end}.card-img-overlay-dark{background-image:linear-gradient(180deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.6) 100%)}.card-inactive{pointer-events:none;box-shadow:none}.card-inactive .card-body{opacity:.64}.card-active{--tblr-card-border-color:var(--tblr-primary);--tblr-card-bg:var(--tblr-active-bg)}.card-btn{display:flex;flex:1;align-items:center;justify-content:center;padding:1.25rem 1.25rem;font-weight:var(--tblr-font-weight-medium);color:inherit;text-align:center;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);transition:background .3s}@media (prefers-reduced-motion:reduce){.card-btn{transition:none}}.card-btn:hover{text-decoration:none;background:var(--tblr-active-bg)}.card-btn+.card-btn{border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-stacked{--tblr-card-stacked-offset:0.25rem;position:relative}.card-stacked::after{position:absolute;inset-inline-start:var(--tblr-card-stacked-offset);inset-inline-end:var(--tblr-card-stacked-offset);top:calc(-1 * var(--tblr-card-stacked-offset));height:var(--tblr-card-stacked-offset);content:"";background:var(--tblr-card-bg,var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-cover{position:relative;padding:1.25rem 1.25rem;background:#666 no-repeat center/cover}.card-cover::before{position:absolute;inset-inline-start:0;inset-inline-end:0;top:0;bottom:0;content:"";background:color-mix(in oklab,var(--tblr-dark) 48%,transparent)}.card-cover:first-child,.card-cover:first-child::before{border-radius:6px 6px 0 0}.card-cover-blurred::before{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.card-actions{--tblr-card-actions-gutter:0.5rem;padding-inline-start:var(--tblr-card-actions-gutter);margin-block:calc(-1 * var(--tblr-card-actions-gutter));margin-inline:auto calc(-1 * var(--tblr-card-actions-gutter))}.card-actions a{text-decoration:none}.card-header{display:flex;align-items:center;color:inherit;background-color:var(--tblr-card-header-bg,var(--tblr-card-cap-bg))}.card-header:first-child{border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-header-light{background:var(--tblr-bg-surface-tertiary);border-bottom-color:transparent}.card-header-tabs{flex:1;padding:calc(var(--tblr-card-cap-padding-y) * .5) calc(var(--tblr-card-cap-padding-x) * .5) 0;margin:calc(var(--tblr-card-cap-padding-y) * -1) calc(var(--tblr-card-cap-padding-x) * -1);background:var(--tblr-bg-surface-tertiary);border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-header-pills{--tblr-card-header-pills-margin:0.5rem;flex:1;margin-top:calc(-1 * var(--tblr-card-header-pills-margin));margin-bottom:calc(-1 * var(--tblr-card-header-pills-margin))}.card-rotate-left,.card-rotate-start{transform:rotate(-1.5deg)}.card-rotate-end,.card-rotate-right{transform:rotate(1.5deg)}.card-link{color:inherit}.card-link:hover{color:inherit;text-decoration:none;box-shadow:0 1px 6px 0 rgba(0,0,0,.08)}.card-link-rotate:hover{opacity:1;transform:rotate(1.5deg)}.card-link-pop:hover{opacity:1;transform:translateY(-2px)}.card-footer{margin-top:auto}.card-footer:last-child{border-radius:0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius)}.card-footer-transparent{padding-top:0;background:0 0;border-color:transparent}.card-footer-borderless{border-top:none}.card-progress{--tblr-card-progress-height:0.25rem;height:var(--tblr-card-progress-height)}.card-progress:last-child{border-radius:0 0 2px 2px}.card-progress:first-child{border-radius:2px 2px 0 0}.card>.card-progress{--tblr-card-progress-offset:calc(-1 * var(--tblr-card-border-width));position:absolute;inset:var(--tblr-card-progress-offset);width:auto;height:auto;pointer-events:none;border-radius:var(--tblr-card-border-radius)}.card>.card-progress:last-child{mask-image:linear-gradient(to top,#000 var(--tblr-card-progress-height),transparent var(--tblr-card-progress-height))}.card>.card-progress:first-child{mask-image:linear-gradient(to bottom,#000 var(--tblr-card-progress-height),transparent var(--tblr-card-progress-height))}.card-meta{color:var(--tblr-secondary)}.card-title{--tblr-card-title-margin-bottom:1rem;--tblr-card-title-line-height:1.5rem;display:block;margin:0 0 var(--tblr-card-title-margin-bottom);font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:var(--tblr-card-title-line-height);color:var(--tblr-heading-color)}a.card-title:hover{color:inherit}.card-header .card-title{margin:0}.card-subtitle{--tblr-card-subtitle-margin-start:0.25rem;margin-bottom:1.25rem;font-weight:400;color:var(--tblr-secondary)}.card-header .card-subtitle{margin:0}.card-title .card-subtitle{margin-block:0;margin-inline:var(--tblr-card-subtitle-margin-start) 0;font-size:.875rem}.card-body{--tblr-card-body-padding-sm:1rem;--tblr-card-body-padding-md:2.5rem;--tblr-card-body-padding-lg:2rem;--tblr-card-body-padding-lg-up:4rem;position:relative}.card-body>:last-child{margin-bottom:0}.card-sm>.card-body{padding:var(--tblr-card-body-padding-sm)}@media (min-width:768px){.card-md>.card-body{padding:var(--tblr-card-body-padding-md)}}@media (min-width:768px){.card-lg>.card-body{padding:var(--tblr-card-body-padding-lg)}}@media (min-width:992px){.card-lg>.card-body{padding:var(--tblr-card-body-padding-lg-up)}}@media print{.card-body{padding:0}}.card-body+.card-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-body-scrollable{overflow:auto}.card-body-scrollable:focus-visible{--tblr-focus-ring-offset:-2px;outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.card-options{--tblr-card-options-top:1.5rem;--tblr-card-options-inset:0.75rem;display:flex;margin-inline-start:auto}.card-options-link{--tblr-card-options-link-min-width:1rem;--tblr-card-options-link-margin-start:0.25rem;display:inline-block;min-width:var(--tblr-card-options-link-min-width);margin-inline-start:var(--tblr-card-options-link-margin-start);color:var(--tblr-secondary)}.card-status-bottom,.card-status-start,.card-status-top{--tblr-card-status-size:3px;--tblr-card-status-offset:calc(-1 * var(--tblr-card-border-width));position:absolute;inset:var(--tblr-card-status-offset);pointer-events:none;border-radius:var(--tblr-card-border-radius)}.card-status-top{mask-image:linear-gradient(to bottom,#000 var(--tblr-card-status-size),transparent var(--tblr-card-status-size))}.card-status-start{mask-image:linear-gradient(to right,#000 var(--tblr-card-status-size),transparent var(--tblr-card-status-size))}[dir=rtl] .card-status-start{mask-image:linear-gradient(to left,#000 var(--tblr-card-status-size),transparent var(--tblr-card-status-size))}.card-status-bottom{mask-image:linear-gradient(to top,#000 var(--tblr-card-status-size),transparent var(--tblr-card-status-size))}.card-table{--tblr-card-table-top-radius:0;--tblr-card-table-bottom-radius:0;margin-bottom:0!important}.card-table tr td:first-child,.card-table tr th:first-child{padding-inline-start:1.25rem;border-inline-start:0}.card-table tr td:last-child,.card-table tr th:last-child{padding-inline-end:1.25rem;border-inline-end:0}.card-table tbody:first-child tr:first-child>:first-child,.card-table tfoot:first-child tr:first-child>:first-child,.card-table thead:first-child tr:first-child>:first-child{border-start-start-radius:var(--tblr-card-table-top-radius)}.card-table tbody:first-child tr:first-child>:last-child,.card-table tfoot:first-child tr:first-child>:last-child,.card-table thead:first-child tr:first-child>:last-child{border-start-end-radius:var(--tblr-card-table-top-radius)}.card-table tbody:last-child tr:last-child>:last-child,.card-table tfoot:last-child tr:last-child>:last-child,.card-table thead:last-child tr:last-child>:last-child{border-end-end-radius:var(--tblr-card-table-bottom-radius)}.card-table tbody:last-child tr:last-child>:first-child,.card-table tfoot:last-child tr:last-child>:first-child,.card-table thead:last-child tr:last-child>:first-child{border-end-start-radius:var(--tblr-card-table-bottom-radius)}.card-table tbody tr:first-child,.card-table tfoot tr:first-child,.card-table thead tr:first-child{border-top:0}.card-table tbody tr:first-child td,.card-table tbody tr:first-child th,.card-table tfoot tr:first-child td,.card-table tfoot tr:first-child th,.card-table thead tr:first-child td,.card-table thead tr:first-child th{border-top:0}.card-table tbody tr:last-child td{border-bottom:0}.card-table tfoot tr:last-child{border-bottom:0}.card-body+.card-table{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-table-border-color)}.card>.card-table:first-child,.card>.table-responsive:first-child>.card-table{--tblr-card-table-top-radius:var(--tblr-card-border-radius)}.card>.card-table:last-child,.card>.table-responsive:last-child>.card-table{--tblr-card-table-bottom-radius:calc(var(--tblr-card-border-radius) - var(--tblr-card-border-width))}.card-code{padding:0;overflow:hidden}.card-code:first-child{border-top-left-radius:var(--tblr-card-border-radius);border-top-right-radius:var(--tblr-card-border-radius)}.card-code:last-child{border-bottom-right-radius:var(--tblr-card-border-radius);border-bottom-left-radius:var(--tblr-card-border-radius)}.card-code .highlight{margin:0;border:0}.card-code pre{margin:0!important;border:0!important;border-radius:0}.card-chart{--tblr-card-avatar-height:3.5rem;position:relative;z-index:1;height:var(--tblr-card-avatar-height)}.card-avatar{--tblr-card-avatar-ring-width:0.25rem;margin-inline-start:auto;margin-inline-end:auto;margin-top:calc(-1 * var(--tblr-avatar-size) * .5);box-shadow:0 0 0 var(--tblr-card-avatar-ring-width) var(--tblr-card-bg,var(--tblr-bg-surface))}.card-body+.card-list-group{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-list-group .list-group-item{padding-inline-start:1.25rem;padding-inline-end:1.25rem;border-inline-start:0;border-inline-end:0;border-radius:0}.card-list-group .list-group-item:last-child{border-bottom:0}.card-list-group .list-group-item:first-child{border-top:0}.card-tabs .nav-tabs{position:relative;z-index:1;border-bottom:0}.card-tabs .nav-tabs .nav-link{background:var(--tblr-bg-surface-tertiary);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.card-tabs .nav-tabs .nav-link.active,.card-tabs .nav-tabs .nav-link:active,.card-tabs .nav-tabs .nav-link:hover{color:var(--tblr-body-color);border-color:var(--tblr-border-color-translucent)}.card-tabs .nav-tabs .nav-link.active{color:var(--tblr-heading-color,var(--tblr-emphasis-color));background:var(--tblr-card-bg,var(--tblr-bg-surface));border-bottom-color:transparent}.card-tabs .nav-tabs .nav-item:not(:first-child) .nav-link{border-start-start-radius:0}.card-tabs .nav-tabs .nav-item:not(:last-child) .nav-link{border-start-end-radius:0}.card-tabs .nav-tabs .nav-item+.nav-item{margin-inline-start:calc(-1 * var(--tblr-border-width))}.card-tabs .nav-tabs-bottom{margin-bottom:0}.card-tabs .nav-tabs-bottom .nav-link{margin-bottom:0}.card-tabs .nav-tabs-bottom .nav-link.active{border-top-color:transparent}.card-tabs .nav-tabs-bottom .nav-item{margin-top:calc(-1 * var(--tblr-border-width));margin-bottom:0}.card-tabs .nav-tabs-bottom .nav-item .nav-link{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:0 0 var(--tblr-border-radius-lg) var(--tblr-border-radius-lg)}.card-tabs .nav-tabs-bottom .nav-item:not(:first-child) .nav-link{border-end-start-radius:0}.card-tabs .nav-tabs-bottom .nav-item:not(:last-child) .nav-link{border-end-end-radius:0}.card-tabs .card{border-end-start-radius:0}.card-tabs .nav-tabs+.tab-content .card{border-start-start-radius:0!important;border-end-start-radius:var(--tblr-card-border-radius)}.card-tabs .tab-content:has(+ .nav-tabs) .card{border-start-start-radius:var(--tblr-card-border-radius);border-end-start-radius:0!important}.card-note{--tblr-card-bg:color-mix(in oklab, var(--tblr-yellow) 12%, var(--tblr-bg-surface));--tblr-card-border-color:color-mix(in oklab, var(--tblr-yellow) 20%, var(--tblr-bg-surface))}.card-gradient{--tblr-card-gradient-direction:180deg;--tblr-card-gradient-opacity:86%;--tblr-card-gradient:var(--tblr-primary),var(--tblr-primary);background:radial-gradient(ellipse at center,var(--tblr-card-bg) 0%,color-mix(in oklab,var(--tblr-card-bg) 0%,transparent) 80%) border-box,linear-gradient(var(--tblr-card-gradient-direction),color-mix(in oklab,var(--tblr-card-bg) var(--tblr-card-gradient-opacity),transparent) 0%,var(--tblr-card-bg) 40%) border-box,linear-gradient(calc(270deg + var(--tblr-card-gradient-direction)),var(--tblr-card-gradient)) border-box}.card-gradient-blue{--tblr-card-gradient:var(--tblr-blue),var(--tblr-blue)}.card-gradient-azure{--tblr-card-gradient:var(--tblr-azure),var(--tblr-azure)}.card-gradient-indigo{--tblr-card-gradient:var(--tblr-indigo),var(--tblr-indigo)}.card-gradient-purple{--tblr-card-gradient:var(--tblr-purple),var(--tblr-purple)}.card-gradient-pink{--tblr-card-gradient:var(--tblr-pink),var(--tblr-pink)}.card-gradient-red{--tblr-card-gradient:var(--tblr-red),var(--tblr-red)}.card-gradient-orange{--tblr-card-gradient:var(--tblr-orange),var(--tblr-orange)}.card-gradient-yellow{--tblr-card-gradient:var(--tblr-yellow),var(--tblr-yellow)}.card-gradient-lime{--tblr-card-gradient:var(--tblr-lime),var(--tblr-lime)}.card-gradient-green{--tblr-card-gradient:var(--tblr-green),var(--tblr-green)}.card-gradient-teal{--tblr-card-gradient:var(--tblr-teal),var(--tblr-teal)}.card-gradient-cyan{--tblr-card-gradient:var(--tblr-cyan),var(--tblr-cyan)}.card-gradient-black{--tblr-card-gradient:var(--tblr-black),var(--tblr-black)}.card-gradient-white{--tblr-card-gradient:var(--tblr-white),var(--tblr-white)}.card-gradient-gray{--tblr-card-gradient:var(--tblr-gray),var(--tblr-gray)}.card-gradient-gray-dark{--tblr-card-gradient:var(--tblr-gray-dark),var(--tblr-gray-dark)}.card-gradient-primary{--tblr-card-gradient:var(--tblr-primary),var(--tblr-primary)}.card-gradient-secondary{--tblr-card-gradient:var(--tblr-secondary),var(--tblr-secondary)}.card-gradient-success{--tblr-card-gradient:var(--tblr-success),var(--tblr-success)}.card-gradient-info{--tblr-card-gradient:var(--tblr-info),var(--tblr-info)}.card-gradient-warning{--tblr-card-gradient:var(--tblr-warning),var(--tblr-warning)}.card-gradient-danger{--tblr-card-gradient:var(--tblr-danger),var(--tblr-danger)}.card-gradient-light{--tblr-card-gradient:var(--tblr-light),var(--tblr-light)}.card-gradient-dark{--tblr-card-gradient:var(--tblr-dark),var(--tblr-dark)}.card-gradient-muted{--tblr-card-gradient:var(--tblr-muted),var(--tblr-muted)}.card-gradient-rainbow{--tblr-card-gradient:#78c5d6,#459ba8,#79c267,#c5d647,#f5d63d,#f08b33,#e868a2,#be61a5}.card-gradient-sun{--tblr-card-gradient:#fd1d1d,#fcb045}.card-gradient-snow{--tblr-card-gradient:#333,#e9ecef}.card-gradient-ocean{--tblr-card-gradient:#1cb5e0,#000851}.card-gradient-mellow{--tblr-card-gradient:#f8ff00,#3ad59f}.card-gradient-disco{--tblr-card-gradient:#fc466b,#3f5efb}.card-gradient-psychedelic{--tblr-card-gradient:#fcc5e4,#fda34b,#ff7882,#c8699e,#7046aa,#0c1db8,#020f75}.card-gradient-love{--tblr-card-gradient:#f235e6,#bc0707}.card-gradient-gold{--tblr-card-gradient:#9d4100,#bf7122,#f59f00,#ffd700}.card-gradient-animated{animation:gradient-animation 15s linear infinite}.card-gradient-bottom{--tblr-card-gradient-direction:0deg}.card-gradient-end{--tblr-card-gradient-direction:270deg}.card-gradient-start{--tblr-card-gradient-direction:90deg}.btn-close{outline-color:transparent;transition:outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn-close{transition:none}}.btn-close{--tblr-btn-close-color:currentColor;--tblr-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='oklch%2826.86%25 0 0deg%29'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e");--tblr-btn-close-opacity:0.4;--tblr-btn-close-hover-opacity:0.75;--tblr-btn-close-focus-opacity:1;--tblr-btn-close-disabled-opacity:0.25;--tblr-btn-close-size:1em;position:relative;display:block;width:var(--tblr-btn-close-size);height:var(--tblr-btn-close-size);padding:.875em .875em;color:var(--tblr-btn-close-color);cursor:pointer;background-color:var(--tblr-btn-close-color);border:0;opacity:var(--tblr-btn-close-opacity);mask:var(--tblr-btn-close-bg) no-repeat center/calc(var(--tblr-btn-close-size) * 0.75);border-radius:var(--tblr-border-radius)}.btn-close::before{position:absolute;top:50%;left:50%;width:max(100%,24px);height:max(100%,24px);content:"";transform:translate(-50%,-50%)}.btn-close:hover{color:var(--tblr-btn-close-color);text-decoration:none;background-color:var(--tblr-btn-close-color);opacity:var(--tblr-btn-close-hover-opacity)}.btn-close:focus{outline:0;opacity:var(--tblr-btn-close-focus-opacity)}.btn-close:focus-visible{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;user-select:none;opacity:var(--tblr-btn-close-disabled-opacity)}@media print{.btn-close{display:none}}.dropdown-menu{--tblr-dropdown-item-gap:0.5rem;--tblr-dropdown-item-icon-size:1.25rem;--tblr-dropdown-item-icon-color:var(--tblr-tertiary);--tblr-dropdown-header-padding-bottom:0.25rem;--tblr-dropdown-menu-columns-gap:0.25rem;--tblr-dropdown-arrow-offset:0.25rem;--tblr-dropdown-arrow-inset:0.75rem;--tblr-dropdown-dropend-offset:0.25rem;--tblr-dropdown-menu-card-min-width:20rem;-webkit-user-select:none;user-select:none;background-clip:border-box}.dropdown-menu.card{display:none;min-width:25rem;padding:0}.dropdown-menu.card.show{display:flex}@media print{.dropdown-menu{display:none}}.dropdown-item{display:flex;gap:var(--tblr-dropdown-item-gap,.5rem);align-items:center;min-width:11rem;margin:0;line-height:1.4285714286}.dropdown-item-icon{width:var(--tblr-dropdown-item-icon-size)!important;height:var(--tblr-dropdown-item-icon-size)!important;color:var(--tblr-dropdown-item-icon-color);text-align:center}.dropdown-item-indicator{display:inline-flex;align-items:center;height:var(--tblr-dropdown-item-icon-size);line-height:1;vertical-align:bottom}.dropdown-header{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);padding-bottom:var(--tblr-dropdown-header-padding-bottom);pointer-events:none}.dropdown-menu-scrollable{height:auto;max-height:13rem;overflow-x:hidden;overscroll-behavior:contain}.dropdown-menu-column{min-width:11rem}.dropdown-menu-column .dropdown-item{min-width:0}.dropdown-menu-columns{display:flex;gap:var(--tblr-dropdown-menu-columns-gap)}.dropdown-menu-arrow::before{position:absolute;inset-inline-start:var(--tblr-dropdown-arrow-inset);top:calc(-1 * var(--tblr-dropdown-arrow-offset));z-index:-1;display:block;width:14px;height:14px;clip-path:inset(0 5px 5px 0);content:"";background:inherit;border:1px solid var(--tblr-dropdown-border-color);border-width:1px 0 0 1px;transform:rotate(45deg);transform-origin:center}.dropdown-menu-arrow.dropdown-menu-end::before{inset-inline-start:auto;inset-inline-end:var(--tblr-dropdown-arrow-inset)}.dropend>.dropdown-menu{margin-inline-start:calc(-1 * var(--tblr-dropdown-dropend-offset));margin-top:calc(-.25rem - 1px)}.dropend .dropdown-toggle::after{margin-inline-start:auto}.dropdown-menu-card{min-width:var(--tblr-dropdown-menu-card-min-width);padding:0}.dropdown-menu-card>.card{margin:0;border:0;box-shadow:none}.datagrid{--tblr-datagrid-padding:1.5rem;--tblr-datagrid-item-width:15rem;--tblr-datagrid-title-margin-bottom:0.25rem;--tblr-datagrid-title-width:10rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--tblr-datagrid-item-width),1fr));grid-gap:var(--tblr-datagrid-padding)}.datagrid-title{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);margin-bottom:var(--tblr-datagrid-title-margin-bottom)}.datagrid-content{margin:0}.datagrid-horizontal{--tblr-datagrid-title-margin-bottom:0;grid-template-columns:minmax(0,1fr)}.datagrid-horizontal .datagrid-item{display:grid;grid-template-columns:var(--tblr-datagrid-title-width) 1fr;gap:1rem;align-items:baseline}.datagrid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.datagrid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.datagrid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.datagrid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.empty{--tblr-empty-padding:1rem;--tblr-empty-padding-md:3rem;--tblr-empty-icon-size:3rem;--tblr-empty-icon-margin-bottom:1rem;--tblr-empty-img-margin-bottom:2rem;--tblr-empty-header-margin-bottom:1rem;--tblr-empty-header-font-size:4rem;--tblr-empty-title-margin-bottom:0.5rem;--tblr-empty-action-margin-top:1.5rem;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:var(--tblr-empty-padding);text-align:center}@media (min-width:768px){.empty{padding:var(--tblr-empty-padding-md)}}.empty-icon{width:var(--tblr-empty-icon-size);height:var(--tblr-empty-icon-size);margin:0 0 var(--tblr-empty-icon-margin-bottom);line-height:1;color:var(--tblr-secondary)}.empty-icon svg{width:100%;height:100%}.empty-img{margin:0 0 var(--tblr-empty-img-margin-bottom);line-height:1}.empty-header{margin:0 0 var(--tblr-empty-header-margin-bottom);font-size:var(--tblr-empty-header-font-size);font-weight:var(--tblr-font-weight-light);line-height:1;color:var(--tblr-secondary)}.empty-title{font-size:1.25rem;font-weight:var(--tblr-font-weight-semibold);line-height:1.75rem}.empty-subtitle,.empty-title{margin:0 0 var(--tblr-empty-title-margin-bottom)}.empty-action{margin-top:var(--tblr-empty-action-margin-top)}.empty-bordered{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.row>*{min-width:0}.col-separator{border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.container-slim{--tblr-gutter-x:calc(var(--tblr-page-padding) * 2);--tblr-gutter-y:0;width:100%;padding-inline-end:calc(var(--tblr-gutter-x) * 0.5);padding-inline-start:calc(var(--tblr-gutter-x) * 0.5);margin-inline-end:auto;margin-inline-start:auto;max-width:16rem}.container-tight{--tblr-gutter-x:calc(var(--tblr-page-padding) * 2);--tblr-gutter-y:0;width:100%;padding-inline-end:calc(var(--tblr-gutter-x) * 0.5);padding-inline-start:calc(var(--tblr-gutter-x) * 0.5);margin-inline-end:auto;margin-inline-start:auto;max-width:32rem}.container-narrow{--tblr-gutter-x:calc(var(--tblr-page-padding) * 2);--tblr-gutter-y:0;width:100%;padding-inline-end:calc(var(--tblr-gutter-x) * 0.5);padding-inline-start:calc(var(--tblr-gutter-x) * 0.5);margin-inline-end:auto;margin-inline-start:auto;max-width:61.875rem}.row-0{--tblr-grid-row-gutter:0;margin-inline-start:calc(-1 * var(--tblr-grid-row-gutter));margin-inline-end:calc(-1 * var(--tblr-grid-row-gutter))}.row-0>.col,.row-0>[class*=col-]{padding-inline-start:var(--tblr-grid-row-gutter);padding-inline-end:var(--tblr-grid-row-gutter)}.row-0 .card{margin-bottom:calc(2 * var(--tblr-grid-row-gutter))}.row-sm{--tblr-grid-row-gutter:0.375rem;margin-inline-start:calc(-1 * var(--tblr-grid-row-gutter));margin-inline-end:calc(-1 * var(--tblr-grid-row-gutter))}.row-sm>.col,.row-sm>[class*=col-]{padding-inline-start:var(--tblr-grid-row-gutter);padding-inline-end:var(--tblr-grid-row-gutter)}.row-sm .card{margin-bottom:calc(2 * var(--tblr-grid-row-gutter))}.row-md{--tblr-grid-row-gutter:1.5rem;margin-inline-start:calc(-1 * var(--tblr-grid-row-gutter));margin-inline-end:calc(-1 * var(--tblr-grid-row-gutter))}.row-md>.col,.row-md>[class*=col-]{padding-inline-start:var(--tblr-grid-row-gutter);padding-inline-end:var(--tblr-grid-row-gutter)}.row-md .card{margin-bottom:calc(2 * var(--tblr-grid-row-gutter))}.row-lg{--tblr-grid-row-gutter:3rem;margin-inline-start:calc(-1 * var(--tblr-grid-row-gutter));margin-inline-end:calc(-1 * var(--tblr-grid-row-gutter))}.row-lg>.col,.row-lg>[class*=col-]{padding-inline-start:var(--tblr-grid-row-gutter);padding-inline-end:var(--tblr-grid-row-gutter)}.row-lg .card{margin-bottom:calc(2 * var(--tblr-grid-row-gutter))}.row-deck>.col,.row-deck>[class*=col-]{display:flex;align-items:stretch}.row-deck>.col .card,.row-deck>[class*=col-] .card{flex:1 1 auto}.row-cards{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:var(--tblr-page-padding);min-width:0}.row-cards .row-cards{flex:1}.space-y{display:flex;flex-direction:column;gap:1rem}.space-x{display:flex;gap:1rem}.space-y-0{display:flex;flex-direction:column;gap:0}.space-x-0{display:flex;gap:0}.space-y-1{display:flex;flex-direction:column;gap:.25rem}.space-x-1{display:flex;gap:.25rem}.space-y-2{display:flex;flex-direction:column;gap:.5rem}.space-x-2{display:flex;gap:.5rem}.space-y-3{display:flex;flex-direction:column;gap:1rem}.space-x-3{display:flex;gap:1rem}.space-y-4{display:flex;flex-direction:column;gap:1.5rem}.space-x-4{display:flex;gap:1.5rem}.space-y-5{display:flex;flex-direction:column;gap:2rem}.space-x-5{display:flex;gap:2rem}.space-y-6{display:flex;flex-direction:column;gap:2.5rem}.space-x-6{display:flex;gap:2.5rem}.divide-y>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y>:not(template):not(:first-child){padding-top:1rem!important}.divide-y>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x>:not(template)~:not(template){border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x>:not(template):not(:first-child){padding-inline-start:1rem!important}.divide-x>:not(template):not(:last-child){padding-inline-end:1rem!important}.divide-y-0>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-0>:not(template):not(:first-child){padding-top:0!important}.divide-y-0>:not(template):not(:last-child){padding-bottom:0!important}.divide-x-0>:not(template)~:not(template){border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-0>:not(template):not(:first-child){padding-inline-start:0!important}.divide-x-0>:not(template):not(:last-child){padding-inline-end:0!important}.divide-y-1>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-1>:not(template):not(:first-child){padding-top:.25rem!important}.divide-y-1>:not(template):not(:last-child){padding-bottom:.25rem!important}.divide-x-1>:not(template)~:not(template){border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-1>:not(template):not(:first-child){padding-inline-start:0.25rem!important}.divide-x-1>:not(template):not(:last-child){padding-inline-end:0.25rem!important}.divide-y-2>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-2>:not(template):not(:first-child){padding-top:.5rem!important}.divide-y-2>:not(template):not(:last-child){padding-bottom:.5rem!important}.divide-x-2>:not(template)~:not(template){border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-2>:not(template):not(:first-child){padding-inline-start:0.5rem!important}.divide-x-2>:not(template):not(:last-child){padding-inline-end:0.5rem!important}.divide-y-3>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-3>:not(template):not(:first-child){padding-top:1rem!important}.divide-y-3>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x-3>:not(template)~:not(template){border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-3>:not(template):not(:first-child){padding-inline-start:1rem!important}.divide-x-3>:not(template):not(:last-child){padding-inline-end:1rem!important}.divide-y-4>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-4>:not(template):not(:first-child){padding-top:1.5rem!important}.divide-y-4>:not(template):not(:last-child){padding-bottom:1.5rem!important}.divide-x-4>:not(template)~:not(template){border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-4>:not(template):not(:first-child){padding-inline-start:1.5rem!important}.divide-x-4>:not(template):not(:last-child){padding-inline-end:1.5rem!important}.divide-y-5>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-5>:not(template):not(:first-child){padding-top:2rem!important}.divide-y-5>:not(template):not(:last-child){padding-bottom:2rem!important}.divide-x-5>:not(template)~:not(template){border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-5>:not(template):not(:first-child){padding-inline-start:2rem!important}.divide-x-5>:not(template):not(:last-child){padding-inline-end:2rem!important}.divide-y-6>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-6>:not(template):not(:first-child){padding-top:2.5rem!important}.divide-y-6>:not(template):not(:last-child){padding-bottom:2.5rem!important}.divide-x-6>:not(template)~:not(template){border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-6>:not(template):not(:first-child){padding-inline-start:2.5rem!important}.divide-x-6>:not(template):not(:last-child){padding-inline-end:2.5rem!important}.divide-y-fill{display:flex;flex-direction:column;height:100%}.divide-y-fill>:not(template){display:flex;flex:1;flex-direction:column;justify-content:center}.hover-gallery{--tblr-hover-gallery-aspect-ratio:1;--tblr-hover-gallery-indicator-size:2px;--tblr-hover-gallery-indicator-gap:0.25rem;--tblr-hover-gallery-indicator-padding:0.5rem;--tblr-hover-gallery-indicator-color:#fff;--tblr-hover-gallery-indicator-scrim-height:40%;--tblr-hover-gallery-indicator-scrim-bg:linear-gradient(to top, rgba(0, 0, 0, 0.32), rgba(0, 0, 0, 0.2) 20%, rgba(0, 0, 0, 0.1) 45%, rgba(0, 0, 0, 0.03) 75%, transparent);--tblr-hover-gallery-indicator-inactive-opacity:0.5;position:relative;display:flex;aspect-ratio:var(--tblr-hover-gallery-aspect-ratio);overflow:hidden}.hover-gallery-item{flex:1}.hover-gallery-item img{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;object-fit:cover;opacity:0}.hover-gallery-item:first-child img,.hover-gallery-item:hover img{opacity:1}.hover-gallery-item:hover img{z-index:1}.hover-gallery-indicators{gap:var(--tblr-hover-gallery-indicator-gap);padding:var(--tblr-hover-gallery-indicator-padding)}.hover-gallery-indicators::after{position:absolute;inset:auto 0 0;z-index:1;height:var(--tblr-hover-gallery-indicator-scrim-height);pointer-events:none;content:"";background:var(--tblr-hover-gallery-indicator-scrim-bg)}.hover-gallery-indicators .hover-gallery-item{display:flex;align-items:flex-end;padding-inline:calc(var(--tblr-hover-gallery-indicator-gap) * 0.5);margin-inline:calc(var(--tblr-hover-gallery-indicator-gap) * -0.5)}.hover-gallery-indicators .hover-gallery-item::after{position:relative;z-index:2;flex:1;height:var(--tblr-hover-gallery-indicator-size);content:"";background:var(--tblr-hover-gallery-indicator-color);opacity:var(--tblr-hover-gallery-indicator-inactive-opacity);border-radius:var(--tblr-hover-gallery-indicator-size)}.hover-gallery-indicators .hover-gallery-item:hover::after{opacity:1}.hover-gallery-indicators:not(:hover) .hover-gallery-item:first-child::after{opacity:1}@media (hover:none){.hover-gallery{gap:0;padding:0;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.hover-gallery::after{display:none}.hover-gallery .hover-gallery-item{flex:0 0 100%;padding:0;margin:0;scroll-snap-align:start}.hover-gallery .hover-gallery-item img{position:static;opacity:1}.hover-gallery .hover-gallery-item::after{display:none}}.icon{--tblr-icon-size:1.25rem;display:inline-block;width:var(--tblr-icon-size);height:var(--tblr-icon-size);font-size:var(--tblr-icon-size);vertical-align:bottom;transform-origin:center;stroke-width:1.5}.icon:hover{text-decoration:none}.icon-inline{--tblr-icon-size:1rem;--tblr-icon-inline-vertical-align:-0.2rem;vertical-align:var(--tblr-icon-inline-vertical-align)}.icon-filled{fill:currentColor}.icon-sm{--tblr-icon-size:1rem;stroke-width:1.5}.icon-md{--tblr-icon-size:2.5rem;stroke-width:1}.icon-lg{--tblr-icon-size:3.5rem;stroke-width:1}.icon-pulse{transition:all .15s ease 0s;animation:pulse 2s ease infinite;animation-fill-mode:both}.icon-tada{transition:all .15s ease 0s;animation:tada 3s ease infinite;animation-fill-mode:both}.icon-rotate{transition:all .15s ease 0s;animation:rotate-360 3s linear infinite;animation-fill-mode:both}.img-responsive{--tblr-img-responsive-ratio:75%;padding-top:var(--tblr-img-responsive-ratio);background:no-repeat center/cover}.img-responsive-grid{padding-top:calc(var(--tblr-img-responsive-ratio) - var(--tblr-gutter-y)/ 2)}.img-responsive-1x1{--tblr-img-responsive-ratio:100%}.img-responsive-2x1{--tblr-img-responsive-ratio:50%}.img-responsive-1x2{--tblr-img-responsive-ratio:200%}.img-responsive-3x1{--tblr-img-responsive-ratio:33.3333333333%}.img-responsive-1x3{--tblr-img-responsive-ratio:300%}.img-responsive-4x1{--tblr-img-responsive-ratio:25%}.img-responsive-1x4{--tblr-img-responsive-ratio:400%}.img-responsive-4x3{--tblr-img-responsive-ratio:75%}.img-responsive-3x4{--tblr-img-responsive-ratio:133.3333333333%}.img-responsive-16x9{--tblr-img-responsive-ratio:56.25%}.img-responsive-9x16{--tblr-img-responsive-ratio:177.7777777778%}.img-responsive-21x9{--tblr-img-responsive-ratio:42.8571428571%}.img-responsive-9x21{--tblr-img-responsive-ratio:233.3333333333%}.img-bg{background:no-repeat center/cover}.img-labeled{position:relative;display:inline-block;max-width:100%;vertical-align:middle}.img-label{--tblr-img-label-offset:0.375rem;--tblr-img-label-padding-y:0.25rem;--tblr-img-label-padding-x:0.375rem;--tblr-img-label-gap:0.25rem;--tblr-img-label-font-size:0.75rem;--tblr-img-label-font-weight:var(--tblr-font-weight-medium);--tblr-img-label-color:#fff;--tblr-img-label-bg:rgba(0, 0, 0, 0.6);--tblr-img-label-border-radius:var(--tblr-border-radius-sm);--tblr-img-label-backdrop-filter:blur(4px);--tblr-img-label-icon-size:0.75rem;position:absolute;inset-block-end:var(--tblr-img-label-offset);inset-inline-end:var(--tblr-img-label-offset);z-index:1;display:inline-flex;gap:var(--tblr-img-label-gap);align-items:center;max-width:calc(100% - 2 * var(--tblr-img-label-offset));padding:var(--tblr-img-label-padding-y) var(--tblr-img-label-padding-x);font-size:var(--tblr-img-label-font-size);font-weight:var(--tblr-img-label-font-weight);line-height:1;color:var(--tblr-img-label-color);white-space:nowrap;pointer-events:none;background:var(--tblr-img-label-bg);-webkit-backdrop-filter:var(--tblr-img-label-backdrop-filter);backdrop-filter:var(--tblr-img-label-backdrop-filter);border-radius:var(--tblr-img-label-border-radius)}.img-label .icon{--tblr-icon-size:var(--tblr-img-label-icon-size)}.img-label-icon{--tblr-img-label-padding-x:var(--tblr-img-label-padding-y)}.img-label-top-end,.img-label-top-start{inset-block:var(--tblr-img-label-offset) auto}.img-label-bottom-start,.img-label-top-start{inset-inline:var(--tblr-img-label-offset) auto}textarea[cols]{height:auto}.col-form-label,.form-label{--tblr-form-label-required-gap:0.25rem;display:block;font-weight:var(--tblr-font-weight-medium)}.col-form-label.required::after,.form-label.required::after{margin-inline-start:var(--tblr-form-label-required-gap);color:oklch(58.29% .1941 25.59deg);content:"*"}.form-label-description{float:inline-end;font-weight:var(--tblr-font-weight-normal);color:var(--tblr-secondary)}.form-select:-moz-focusring{color:var(--tblr-body-color)}.form-control:-webkit-autofill{color:var(--tblr-body-color);box-shadow:0 0 0 1000px var(--tblr-bg-surface-secondary) inset;-webkit-text-fill-color:var(--tblr-body-color)}.form-control.disabled,.form-control:disabled{color:var(--tblr-control-disabled-color);-webkit-user-select:none;user-select:none}.form-control[size]{width:auto}.form-control-light{background-color:var(--tblr-bg-surface-secondary);border-color:transparent}.form-control-dark{color:#fff;background-color:color-mix(in oklab,var(--tblr-black) 10%,transparent);border-color:transparent}.form-control-dark:focus{background-color:color-mix(in oklab,var(--tblr-black) 10%,transparent);border-color:color-mix(in oklab,var(--tblr-white) 24%,transparent);box-shadow:none}.form-control-dark::placeholder{color:color-mix(in oklab,var(--tblr-white) 60%,transparent)}.form-control-rounded{border-radius:var(--tblr-border-radius-pill)}.form-control-flush{padding:0;line-height:inherit;resize:none;background:0 0!important;border-color:transparent!important;box-shadow:none!important}.form-footer{--tblr-form-footer-margin-top:2rem;margin-top:var(--tblr-form-footer-margin-top)}.form-fieldset{--tblr-form-fieldset-padding:1rem;--tblr-form-fieldset-margin-bottom:1rem;padding:var(--tblr-form-fieldset-padding);margin-bottom:var(--tblr-form-fieldset-margin-bottom);background:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius)}fieldset:empty{display:none}.form-help{--tblr-form-help-size:1.125rem;--tblr-form-help-font-size:0.75rem;display:inline-flex;align-items:center;justify-content:center;width:var(--tblr-form-help-size);height:var(--tblr-form-help-size);padding:0;font-size:var(--tblr-form-help-font-size);font-weight:var(--tblr-font-weight-semibold);color:var(--tblr-secondary);text-align:center;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--tblr-bg-surface-tertiary);border:0;border-radius:var(--tblr-border-radius-pill);transition:background-color .3s,color .3s}@media (prefers-reduced-motion:reduce){.form-help{transition:none}}.form-help:hover,.form-help[aria-describedby]{color:#fff;background:var(--tblr-primary)}.input-group{box-shadow:var(--tblr-shadow-input);border-radius:var(--tblr-input-group-addon-border-radius)}.input-group .btn,.input-group .form-control,.input-group .form-select{box-shadow:none}.input-group-link{font-size:.75rem}.input-group-flat{outline-color:transparent;transition:outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.input-group-flat{transition:none}}.input-group-flat:focus-within{--tblr-focus-ring-offset:-1px;outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset);border-radius:var(--tblr-input-group-addon-border-radius)}.input-group-flat:focus-within .form-control,.input-group-flat:focus-within .input-group-text{border-color:color-mix(in oklab,var(--tblr-white) 50%,var(--tblr-primary))!important}.input-group-flat .form-control:focus{border-color:var(--tblr-control-border-color);outline:0;box-shadow:none}.input-group-flat .form-control:not(:last-child){border-inline-end:0}.input-group-flat .form-control:not(:first-child){border-inline-start:0}.input-group-flat .input-group-text{z-index:10;background:var(--tblr-btn-input-bg);transition:border-color .15s ease-in-out,outline-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.input-group-flat .input-group-text{transition:none}}.input-group-flat .input-group-text:first-child{padding-inline-end:0;border-inline-end:0}.input-group-flat .input-group-text:last-child{padding-inline-start:0;border-inline-start:0}.input-group-flat:has(.form-control.is-valid) .input-group-text,.was-validated .input-group-flat:has(.form-control:valid) .input-group-text{border-color:var(--tblr-form-valid-border-color)}.input-group-flat:has(.form-control.is-valid):focus-within,.was-validated .input-group-flat:has(.form-control:valid):focus-within{outline-color:light-dark(color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)))}.input-group-flat:has(.form-control.is-valid):focus-within .form-control,.input-group-flat:has(.form-control.is-valid):focus-within .input-group-text,.was-validated .input-group-flat:has(.form-control:valid):focus-within .form-control,.was-validated .input-group-flat:has(.form-control:valid):focus-within .input-group-text{border-color:var(--tblr-form-valid-border-color)!important}.input-group-flat:has(.form-control.is-invalid) .input-group-text,.was-validated .input-group-flat:has(.form-control:invalid) .input-group-text{border-color:var(--tblr-form-invalid-border-color)}.input-group-flat:has(.form-control.is-invalid):focus-within,.was-validated .input-group-flat:has(.form-control:invalid):focus-within{outline-color:light-dark(color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)))}.input-group-flat:has(.form-control.is-invalid):focus-within .form-control,.input-group-flat:has(.form-control.is-invalid):focus-within .input-group-text,.was-validated .input-group-flat:has(.form-control:invalid):focus-within .form-control,.was-validated .input-group-flat:has(.form-control:invalid):focus-within .input-group-text{border-color:var(--tblr-form-invalid-border-color)!important}.form-file-button{margin-inline-start:0;border-inline-start:0}.form-control,.form-select{--tblr-form-control-mobile-font-size:1rem}@media (max-width:575.98px){.form-control,.form-select{font-size:var(--tblr-form-control-mobile-font-size)}}.input-icon{--tblr-input-icon-padding-end:2.5rem;--tblr-input-icon-padding-start:2.5rem;--tblr-input-icon-addon-height:var(--tblr-btn-input-min-height);position:relative}.input-icon .form-control:not(:last-child),.input-icon .form-select:not(:last-child){padding-inline-end:var(--tblr-input-icon-padding-end)}.input-icon .form-control:not(:first-child),.input-icon .form-select:not(:first-child){padding-inline-start:var(--tblr-input-icon-padding-start)}.input-icon:has(> .form-control-sm,> .form-select-sm){--tblr-input-icon-addon-height:var(--tblr-btn-input-sm-min-height)}.input-icon:has(> .form-control-lg,> .form-select-lg){--tblr-input-icon-addon-height:var(--tblr-btn-input-lg-min-height)}.input-icon-addon{--tblr-input-icon-addon-width:2.5rem;position:absolute;inset-inline-start:0;top:0;bottom:0;z-index:10;display:flex;align-items:center;justify-content:center;min-width:var(--tblr-input-icon-addon-width);height:var(--tblr-input-icon-addon-height,var(--tblr-btn-input-min-height));font-size:1.2em;color:var(--tblr-icon-color);pointer-events:none}.input-icon-addon:last-child{inset-inline-start:auto;inset-inline-end:0}.form-colorinput{--tblr-form-colorinput-size:1.5rem;position:relative;display:inline-block;margin:0;line-height:1;cursor:pointer}.form-colorinput-input{position:absolute;z-index:-1;opacity:0}.form-colorinput-color{outline-color:transparent;transition:outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-colorinput-color{transition:none}}.form-colorinput-color{display:block;width:var(--tblr-form-colorinput-size);height:var(--tblr-form-colorinput-size);color:#fff;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:var(--tblr-border-radius);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.form-colorinput-color::before{position:absolute;inset-inline-start:0;top:0;width:100%;height:100%;content:"";background:no-repeat center center/1.25rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");opacity:0;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.form-colorinput-color::before{transition:none}}.form-colorinput-input:checked~.form-colorinput-color::before{opacity:1}.form-colorinput-input:focus~.form-colorinput-color{border-color:var(--tblr-primary);outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.form-colorinput-light .form-colorinput-color::before{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='oklch%2826.86%25 0 0deg%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-imagecheck{--tblr-form-imagecheck-radius:var(--tblr-border-radius);--tblr-form-imagecheck-check-offset:0.25rem;--tblr-form-imagecheck-caption-padding:0.25rem;position:relative;margin:0;cursor:pointer}.form-imagecheck-input{position:absolute;z-index:-1;opacity:0}.form-imagecheck-figure{outline-color:transparent;transition:outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-imagecheck-figure{transition:none}}.form-imagecheck-figure{position:relative;display:block;margin:0;-webkit-user-select:none;user-select:none;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-form-imagecheck-radius)}.form-imagecheck-input:focus~.form-imagecheck-figure{border-color:var(--tblr-primary);outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.form-imagecheck-input:checked~.form-imagecheck-figure{border-color:var(--tblr-primary)}.form-imagecheck-figure::before{position:absolute;inset-inline-start:var(--tblr-form-imagecheck-check-offset);top:var(--tblr-form-imagecheck-check-offset);z-index:1;display:block;width:1.25rem;height:1.25rem;color:#fff;pointer-events:none;content:"";-webkit-user-select:none;user-select:none;background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);transition:opacity .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-figure::before{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure::before{background-color:var(--tblr-primary);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");background-repeat:repeat;background-position:center;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-imagecheck-input[type=radio]~.form-imagecheck-figure::before{border-radius:50%}.form-imagecheck-input[type=radio]:checked~.form-imagecheck-figure::before{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23fff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-imagecheck-image{display:block;max-width:100%;opacity:.64;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-image{transition:none}}.form-imagecheck-image:first-child{border-start-start-radius:calc(var(--tblr-form-imagecheck-radius) - 1px);border-start-end-radius:calc(var(--tblr-form-imagecheck-radius) - 1px)}.form-imagecheck-image:last-child{border-end-start-radius:calc(var(--tblr-form-imagecheck-radius) - 1px);border-end-end-radius:calc(var(--tblr-form-imagecheck-radius) - 1px)}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck:hover .form-imagecheck-image{opacity:1}.form-imagecheck-image .avatar{border-radius:inherit}.form-imagecheck-caption{padding:var(--tblr-form-imagecheck-caption-padding);font-size:.765625rem;color:var(--tblr-secondary);text-align:center;transition:color .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-caption{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck:hover .form-imagecheck-caption{color:var(--tblr-body-color)}.form-selectgroup{--tblr-form-selectgroup-gap:0.5rem;--tblr-form-selectgroup-icon-margin-x:-0.25rem;display:inline-flex;flex-wrap:wrap;gap:var(--tblr-form-selectgroup-gap);margin:0}.form-selectgroup .form-selectgroup-item{margin:0}.form-selectgroup-vertical{flex-direction:column}.form-selectgroup-item{position:relative;display:block}.form-selectgroup-input{position:absolute;inset-inline-start:0;top:0;z-index:-1;opacity:0}.form-selectgroup-label{position:relative;display:block;min-width:var(--tblr-btn-input-min-height);padding:var(--tblr-btn-input-padding-y) var(--tblr-btn-input-padding-x);margin:0;font-size:var(--tblr-btn-input-font-size);line-height:var(--tblr-btn-input-line-height);color:var(--tblr-secondary);text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);box-shadow:var(--tblr-shadow-input);border-radius:var(--tblr-border-radius);outline-color:transparent;transition:border-color .3s,background .3s,color .3s,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-selectgroup-label{transition:none}}.form-selectgroup-label>.icon:only-child{margin:0 var(--tblr-form-selectgroup-icon-margin-x)}.form-selectgroup-label:hover{color:var(--tblr-body-color)}.form-selectgroup-check{display:inline-block;width:1.25rem;height:1.25rem;vertical-align:middle;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);box-shadow:var(--tblr-shadow-input)}.form-selectgroup-input[type=checkbox]+.form-selectgroup-label .form-selectgroup-check{border-radius:var(--tblr-border-radius)}.form-selectgroup-input[type=radio]+.form-selectgroup-label .form-selectgroup-check{border-radius:50%}.form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-check{background-color:var(--tblr-primary);background-repeat:repeat;background-position:center;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-selectgroup-input[type=checkbox]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e")}.form-selectgroup-input[type=radio]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23fff' cx='8' cy='8' /%3e%3c/svg%3e")}.form-selectgroup-check-floated{position:absolute;inset-inline-end:var(--tblr-btn-input-padding-y);top:var(--tblr-btn-input-padding-y)}.form-selectgroup-input:checked+.form-selectgroup-label{z-index:1;color:var(--tblr-primary);background:var(--tblr-active-bg);border-color:var(--tblr-primary)}.form-selectgroup-input:focus+.form-selectgroup-label{z-index:2;color:var(--tblr-primary);border-color:var(--tblr-primary);outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.form-selectgroup-boxes .form-selectgroup-label{padding:1.25rem 1.25rem;color:inherit;text-align:start}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label{color:inherit}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-title{color:var(--tblr-primary)}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-label-content{opacity:1}.form-selectgroup-pills{flex-wrap:wrap;align-items:start}.form-selectgroup-pills .form-selectgroup-item{flex-grow:0}.form-selectgroup-pills .form-selectgroup-label{border-radius:var(--tblr-border-radius-pill)}.form-control-color::-webkit-color-swatch{border:none}.form-control[type=search]{appearance:textfield}label.form-check{width:fit-content}label.form-check.form-check-reverse{margin-inline-start:auto}.form-check{-webkit-user-select:none;user-select:none}.form-check.form-check-highlight .form-check-input:not(:checked)~.form-check-label{color:var(--tblr-secondary)}.form-check .form-check-label-off{color:var(--tblr-secondary)}.form-check .form-check-input:checked~.form-check-label-off{display:none}.form-check .form-check-input:not(:checked)~.form-check-label-on{display:none}.form-check-input{margin-top:calc((1.25rem - var(--tblr-form-check-input-width))/ 2);background-size:var(--tblr-form-check-input-width);box-shadow:var(--tblr-form-check-box-shadow)}.form-check-label{--tblr-form-check-label-required-gap:0.25rem;display:block;width:fit-content}.form-check-reverse .form-check-label{margin-inline-start:auto}.form-check-label.required::after{margin-inline-start:var(--tblr-form-check-label-required-gap);color:oklch(58.29% .1941 25.59deg);content:"*"}.form-check-description{--tblr-form-check-description-margin-top:0.25rem;display:block;margin-top:var(--tblr-form-check-description-margin-top);font-size:.75rem;color:var(--tblr-secondary)}.form-check-single{margin:0}.form-check-single .form-check-input{margin:0}.form-switch .form-check-input{height:var(--tblr-form-switch-height);margin-top:calc((1.25rem - var(--tblr-form-switch-height))/ 2);transition:background-color .3s,background-position .3s,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:disabled:not(:checked){--tblr-form-switch-color:var(--tblr-form-switch-disabled-color);background-color:var(--tblr-form-switch-disabled-bg)}.form-switch-lg{--tblr-form-switch-lg-padding-start:3.5rem;--tblr-form-switch-lg-min-height:1.5rem;--tblr-form-switch-lg-height:1.5rem;--tblr-form-switch-lg-width:2.75rem;--tblr-form-switch-lg-bg-size:1.5rem;--tblr-form-switch-lg-input-offset:-3.5rem;--tblr-form-switch-lg-label-padding-top:0.125rem;min-height:var(--tblr-form-switch-lg-min-height);padding-inline-start:var(--tblr-form-switch-lg-padding-start)}.form-switch-lg .form-check-input{--tblr-form-switch-knob-offset:0.1875rem;--tblr-form-switch-knob-size:calc(var(--tblr-form-switch-lg-height) - var(--tblr-form-switch-knob-offset) * 2);width:var(--tblr-form-switch-lg-width);height:var(--tblr-form-switch-lg-height);margin-inline-start:var(--tblr-form-switch-lg-input-offset)}.form-switch-lg .form-check-label{padding-top:var(--tblr-form-switch-lg-label-padding-top)}.otp{--tblr-otp-size:calc(1.25rem + 1.125rem + calc(var(--tblr-border-width) * 2));--tblr-otp-font-size:0.875rem;--tblr-otp-gap:0.5rem;--tblr-otp-slot-color:var(--tblr-body-color);--tblr-otp-slot-bg:var(--tblr-bg-forms);--tblr-otp-slot-border-width:var(--tblr-border-width);--tblr-otp-slot-border-color:var(--tblr-border-color);--tblr-otp-slot-border-radius:var(--tblr-border-radius);--tblr-otp-slot-box-shadow:var(--tblr-shadow-input);--tblr-otp-separator-color:var(--tblr-secondary);position:relative;display:inline-flex;gap:var(--tblr-otp-gap);align-items:center;min-height:var(--tblr-otp-size);vertical-align:bottom}.otp>input{width:100%;height:var(--tblr-otp-size);padding-inline:0.75rem;font-size:var(--tblr-otp-font-size);color:var(--tblr-otp-slot-color);background-color:var(--tblr-otp-slot-bg);border:var(--tblr-otp-slot-border-width) solid var(--tblr-otp-slot-border-color);box-shadow:var(--tblr-otp-slot-box-shadow);border-radius:var(--tblr-otp-slot-border-radius)}.otp-rendered .otp-input{position:absolute;inset:0;width:100%;height:100%;padding:0;margin:0;color:transparent;cursor:text;caret-color:transparent;background-color:transparent;border:0;box-shadow:none}.otp-rendered .otp-input:focus{outline:0}.otp-rendered .otp-input::selection{background-color:transparent}.otp-slots{display:inline-flex;gap:var(--tblr-otp-gap);align-items:center;pointer-events:none}.otp-slot{position:relative;display:flex;flex:none;align-items:center;justify-content:center;width:var(--tblr-otp-size);height:var(--tblr-otp-size);font-size:var(--tblr-otp-font-size);color:var(--tblr-otp-slot-color);background-color:var(--tblr-otp-slot-bg);border:var(--tblr-otp-slot-border-width) solid var(--tblr-otp-slot-border-color);box-shadow:var(--tblr-otp-slot-box-shadow);border-radius:var(--tblr-otp-slot-border-radius);outline-color:transparent;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.otp-slot{transition:none}}.otp-slot-active{z-index:1;--tblr-focus-ring-offset:-1px;border-color:color-mix(in oklab,var(--tblr-white) 50%,var(--tblr-primary));outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.otp-slot-active:not(.otp-slot-filled)::after{display:block;width:1px;height:1.2em;content:"";background-color:var(--tblr-otp-slot-color);animation:otp-caret-blink 1s step-end infinite}.otp-input:disabled~.otp-slots .otp-slot{color:var(--tblr-disabled-color);background-color:var(--tblr-control-disabled-bg)}.otp-connected{--tblr-otp-gap:0}.otp-connected .otp-slot{margin-inline-start:calc(var(--tblr-otp-slot-border-width) * -1);border-radius:0}.otp-connected .otp-slot:first-child{margin-inline-start:0;border-start-start-radius:var(--tblr-otp-slot-border-radius);border-end-start-radius:var(--tblr-otp-slot-border-radius)}.otp-connected .otp-slot:last-child{border-start-end-radius:var(--tblr-otp-slot-border-radius);border-end-end-radius:var(--tblr-otp-slot-border-radius)}.otp-separator{display:flex;flex:none;align-items:center;justify-content:center;padding-inline:calc(var(--tblr-otp-gap)/ 2);color:var(--tblr-otp-separator-color)}.otp-sm{--tblr-otp-size:var(--tblr-btn-input-sm-min-height);--tblr-otp-font-size:0.75rem}.otp-lg{--tblr-otp-size:var(--tblr-btn-input-lg-min-height);--tblr-otp-font-size:1rem}@keyframes otp-caret-blink{0%,50%{opacity:1}100%,50.01%{opacity:0}}.number-input{--tblr-number-input-input-width:3.5rem;--tblr-number-input-bg:var(--tblr-bg-forms);--tblr-number-input-border-color:var(--tblr-border-color);--tblr-number-input-border-radius:var(--tblr-border-radius);position:relative;display:inline-flex;align-items:stretch;width:fit-content;vertical-align:middle;background-color:var(--tblr-number-input-bg);border:var(--tblr-border-width) solid var(--tblr-number-input-border-color);box-shadow:var(--tblr-shadow-input);border-radius:var(--tblr-number-input-border-radius);outline-color:transparent;transition:border-color,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.number-input{transition:none}}.number-input:focus-within{--tblr-focus-ring-offset:-1px;border-color:color-mix(in oklab,var(--tblr-white) 50%,var(--tblr-primary));outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.number-input:has(> .form-control:disabled){background-color:var(--tblr-bg-forms-disabled)}.number-input>.form-control{--tblr-control-border-width:0px;flex:0 0 auto;width:var(--tblr-number-input-input-width);min-width:0;padding-inline:0.25rem;text-align:center;appearance:textfield;background-color:transparent;border:0;border-radius:0;box-shadow:none}.number-input>.form-control::-webkit-inner-spin-button,.number-input>.form-control::-webkit-outer-spin-button{margin:0;appearance:none}.number-input>.form-control:focus{background-color:transparent;outline:0;box-shadow:none}.number-input>.form-control.is-valid,.was-validated .number-input>.form-control:valid{padding-inline-end:0.25rem!important;background-image:none}.number-input>.form-control.is-invalid,.was-validated .number-input>.form-control:invalid{padding-inline-end:0.25rem!important;background-image:none}.number-input>.btn{--tblr-btn-border-width:0px;--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-hover-bg);--tblr-btn-box-shadow:none;--tblr-focus-ring-offset:-2px;touch-action:manipulation;-webkit-user-select:none;user-select:none;border-radius:0}.number-input>.btn[data-bs-number-input-action=decrement],.number-input>.btn[data-tblr-number-input-action=decrement]{--tblr-number-input-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 12h14'/%3e%3c/svg%3e")}.number-input>.btn[data-bs-number-input-action=increment],.number-input>.btn[data-tblr-number-input-action=increment]{--tblr-number-input-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 5v14M5 12h14'/%3e%3c/svg%3e")}.number-input>.btn:not(:has(> *))::before{width:var(--tblr-btn-icon-size);height:var(--tblr-btn-icon-size);content:"";background-color:currentColor;mask-image:var(--tblr-number-input-icon);mask-repeat:no-repeat;mask-position:center;mask-size:100%}.number-input>.btn:first-child{border-top-left-radius:calc(var(--tblr-number-input-border-radius) - var(--tblr-border-width));border-bottom-left-radius:calc(var(--tblr-number-input-border-radius) - var(--tblr-border-width))}.number-input>.btn:last-child{border-top-right-radius:calc(var(--tblr-number-input-border-radius) - var(--tblr-border-width));border-bottom-right-radius:calc(var(--tblr-number-input-border-radius) - var(--tblr-border-width))}.number-input:has(> .form-control.is-valid),.was-validated .number-input:has(> .form-control:valid){border-color:var(--tblr-form-valid-border-color)}.number-input:has(> .form-control.is-valid):focus-within,.was-validated .number-input:has(> .form-control:valid):focus-within{outline-color:light-dark(color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-success) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)))}.number-input:has(> .form-control.is-valid)~.valid-feedback,.number-input:has(> .form-control.is-valid)~.valid-tooltip,.was-validated .number-input:has(> .form-control:valid)~.valid-feedback,.was-validated .number-input:has(> .form-control:valid)~.valid-tooltip{display:block}.number-input:has(> .form-control.is-invalid),.was-validated .number-input:has(> .form-control:invalid){border-color:var(--tblr-form-invalid-border-color)}.number-input:has(> .form-control.is-invalid):focus-within,.was-validated .number-input:has(> .form-control:invalid):focus-within{outline-color:light-dark(color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity) * 100%),var(--tblr-body-bg)),color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-focus-ring-opacity-dark) * 100%),var(--tblr-body-bg)))}.number-input:has(> .form-control.is-invalid)~.invalid-feedback,.number-input:has(> .form-control.is-invalid)~.invalid-tooltip,.was-validated .number-input:has(> .form-control:invalid)~.invalid-feedback,.was-validated .number-input:has(> .form-control:invalid)~.invalid-tooltip{display:block}.number-input-sm{--tblr-number-input-input-width:3rem;--tblr-number-input-border-radius:var(--tblr-btn-input-sm-border-radius)}.number-input-sm>.form-control{--tblr-control-padding-y:var(--tblr-btn-input-sm-padding-y);--tblr-control-font-size:var(--tblr-btn-input-sm-font-size);--tblr-control-line-height:var(--tblr-btn-input-sm-line-height)}.number-input-sm>.btn{--tblr-btn-padding-y:var(--tblr-btn-input-sm-padding-y);--tblr-btn-font-size:var(--tblr-btn-input-sm-font-size);--tblr-btn-line-height:var(--tblr-btn-input-sm-line-height);--tblr-btn-icon-size:1rem}.number-input-lg{--tblr-number-input-input-width:4rem;--tblr-number-input-border-radius:var(--tblr-btn-input-lg-border-radius)}.number-input-lg>.form-control{--tblr-control-padding-y:var(--tblr-btn-input-lg-padding-y);--tblr-control-font-size:var(--tblr-btn-input-lg-font-size);--tblr-control-line-height:var(--tblr-btn-input-lg-line-height)}.number-input-lg>.btn{--tblr-btn-padding-y:var(--tblr-btn-input-lg-padding-y);--tblr-btn-font-size:var(--tblr-btn-input-lg-font-size);--tblr-btn-line-height:var(--tblr-btn-input-lg-line-height);--tblr-btn-icon-size:1.5rem}.form-control.is-invalid-lite,.form-control.is-valid-lite,.form-select.is-invalid-lite,.form-select.is-valid-lite{border-color:var(--tblr-border-color)!important}.form-control.is-invalid,.form-control.is-valid{--tblr-form-feedback-icon-size:1.25rem;--tblr-form-feedback-icon-inset:var(--tblr-btn-input-padding-x);padding-inline-end:calc(var(--tblr-form-feedback-icon-size) + var(--tblr-form-feedback-icon-inset) * 2)!important;background-position:right var(--tblr-form-feedback-icon-inset) center!important;background-size:var(--tblr-form-feedback-icon-size) var(--tblr-form-feedback-icon-size)!important}.form-control-sm.is-invalid,.form-control-sm.is-valid{--tblr-form-feedback-icon-size:1rem;--tblr-form-feedback-icon-inset:var(--tblr-btn-input-sm-padding-x)}.form-control-lg.is-invalid,.form-control-lg.is-valid{--tblr-form-feedback-icon-size:1.5rem;--tblr-form-feedback-icon-inset:var(--tblr-btn-input-lg-padding-x)}textarea.form-control.is-invalid,textarea.form-control.is-valid{background-position:top var(--tblr-form-feedback-icon-inset) right var(--tblr-form-feedback-icon-inset)!important}.form-select.is-invalid,.form-select.is-valid{--tblr-form-feedback-icon-size:1.25rem;background-size:16px 12px,var(--tblr-form-feedback-icon-size) var(--tblr-form-feedback-icon-size)!important}.otp.is-valid .otp-slot{--tblr-otp-slot-border-color:var(--tblr-form-valid-border-color)}.otp.is-invalid .otp-slot{--tblr-otp-slot-border-color:var(--tblr-form-invalid-border-color)}.strength{--tblr-strength-height:0.25rem;--tblr-strength-gap:0.25rem;--tblr-strength-bg:var(--tblr-border-color);--tblr-strength-border-radius:var(--tblr-border-radius-pill);--tblr-strength-color:var(--tblr-border-color);--tblr-strength-margin-top:0.5rem;display:flex;gap:var(--tblr-strength-gap);width:100%}.form-control+.strength,.form-hint+.strength,.form-select+.strength,.input-group+.strength{margin-top:var(--tblr-strength-margin-top)}.strength-segment{flex:1;height:var(--tblr-strength-height);background:var(--tblr-strength-bg);border-radius:var(--tblr-strength-border-radius);transition:background-color .2s ease-in-out}.strength-segment.active{background:var(--tblr-strength-color)}@media (prefers-reduced-motion:reduce){.strength-segment{transition:none}}.strength+.strength-text{margin-top:.25rem}.strength-text{font-size:.875em;color:var(--tblr-strength-color,var(--tblr-secondary))}.strength-text:empty{display:none}.strength-text[data-bs-strength=weak],.strength[data-bs-strength=weak]{--tblr-strength-color:var(--tblr-danger)}.strength-text[data-bs-strength=fair],.strength[data-bs-strength=fair]{--tblr-strength-color:var(--tblr-warning)}.strength-text[data-bs-strength=good],.strength[data-bs-strength=good]{--tblr-strength-color:var(--tblr-info)}.strength-text[data-bs-strength=strong],.strength[data-bs-strength=strong]{--tblr-strength-color:var(--tblr-success)}.legend-dot,.legend:empty{--tblr-legend-size:0.5rem;--tblr-legend-color:var(--tblr-border-color);display:inline-block;flex-shrink:0;width:var(--tblr-legend-size);height:var(--tblr-legend-size);background:var(--tblr-legend-color);border:1px solid var(--tblr-border-color-translucent);border-radius:var(--tblr-border-radius-pill)}.legend{--tblr-legend-color:var(--tblr-border-color);--tblr-legend-gap:0.5rem;--tblr-legend-padding-y:0.375rem;--tblr-legend-padding-x:0.75rem;--tblr-legend-hover-bg:color-mix(in oklab, var(--tblr-legend-color) 10%, transparent);display:inline-flex;gap:var(--tblr-legend-gap);align-items:center;padding:var(--tblr-legend-padding-y) 0;margin:0;font:inherit;font-weight:var(--tblr-font-weight-medium);line-height:1;color:var(--tblr-body-color);text-decoration:none;white-space:nowrap;background:0 0;border:0;outline-color:transparent;transition:background-color .3s,opacity .3s,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.legend{transition:none}}.legend{border-radius:var(--tblr-border-radius-pill)}.legend .legend-dot,.legend .legend:empty{--tblr-legend-color:inherit}.legend:focus:not(:focus-visible){outline:0}.legend:focus-visible{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:calc(var(--tblr-focus-ring-width) * -1)}a.legend,button.legend{padding-inline:var(--tblr-legend-padding-x);cursor:pointer}a.legend.active,a.legend:hover,button.legend.active,button.legend:hover{color:var(--tblr-body-color);text-decoration:none;background:var(--tblr-legend-hover-bg)}.legend-off{opacity:.5}.legend-off .legend-dot,.legend-off .legend:empty{--tblr-legend-color:var(--tblr-border-color)}.legend-value{font-variant-numeric:tabular-nums;color:var(--tblr-secondary)}.legend-unit{font-size:.75rem;font-weight:var(--tblr-font-weight-normal);color:var(--tblr-secondary)}.legend-lg{display:inline-grid;grid-template-columns:auto 1fr;row-gap:.5rem;min-width:9rem;border-radius:var(--tblr-border-radius);font-weight:var(--tblr-font-weight-normal);text-align:start}.legend-lg .legend-value{grid-column:1/-1;font-size:1.25rem;font-weight:var(--tblr-font-weight-medium);color:var(--tblr-body-color)}.legend-primary{--tblr-legend-color:var(--tblr-primary)}.legend-secondary{--tblr-legend-color:var(--tblr-secondary)}.legend-success{--tblr-legend-color:var(--tblr-success)}.legend-info{--tblr-legend-color:var(--tblr-info)}.legend-warning{--tblr-legend-color:var(--tblr-warning)}.legend-danger{--tblr-legend-color:var(--tblr-danger)}.legend-light{--tblr-legend-color:var(--tblr-light)}.legend-dark{--tblr-legend-color:var(--tblr-dark)}.legend-muted{--tblr-legend-color:var(--tblr-muted)}.legend-blue{--tblr-legend-color:var(--tblr-blue)}.legend-azure{--tblr-legend-color:var(--tblr-azure)}.legend-indigo{--tblr-legend-color:var(--tblr-indigo)}.legend-purple{--tblr-legend-color:var(--tblr-purple)}.legend-pink{--tblr-legend-color:var(--tblr-pink)}.legend-red{--tblr-legend-color:var(--tblr-red)}.legend-orange{--tblr-legend-color:var(--tblr-orange)}.legend-yellow{--tblr-legend-color:var(--tblr-yellow)}.legend-lime{--tblr-legend-color:var(--tblr-lime)}.legend-green{--tblr-legend-color:var(--tblr-green)}.legend-teal{--tblr-legend-color:var(--tblr-teal)}.legend-cyan{--tblr-legend-color:var(--tblr-cyan)}.legend-x{--tblr-legend-color:var(--tblr-x)}.legend-facebook{--tblr-legend-color:var(--tblr-facebook)}.legend-twitter{--tblr-legend-color:var(--tblr-twitter)}.legend-linkedin{--tblr-legend-color:var(--tblr-linkedin)}.legend-google{--tblr-legend-color:var(--tblr-google)}.legend-youtube{--tblr-legend-color:var(--tblr-youtube)}.legend-vimeo{--tblr-legend-color:var(--tblr-vimeo)}.legend-dribbble{--tblr-legend-color:var(--tblr-dribbble)}.legend-github{--tblr-legend-color:var(--tblr-github)}.legend-instagram{--tblr-legend-color:var(--tblr-instagram)}.legend-pinterest{--tblr-legend-color:var(--tblr-pinterest)}.legend-vk{--tblr-legend-color:var(--tblr-vk)}.legend-rss{--tblr-legend-color:var(--tblr-rss)}.legend-flickr{--tblr-legend-color:var(--tblr-flickr)}.legend-bitbucket{--tblr-legend-color:var(--tblr-bitbucket)}.legend-tabler{--tblr-legend-color:var(--tblr-tabler)}.legend-list{--tblr-legend-list-gap:0.25rem 1rem;display:flex;flex-wrap:wrap;gap:var(--tblr-legend-list-gap);align-items:center}.legend-list:has(> a.legend,> button.legend){--tblr-legend-list-gap:0.25rem}.legend-list-vertical{flex-direction:column;align-items:flex-start}.legend-list-divided,.legend-list-divided:has(> a.legend,> button.legend){--tblr-legend-list-gap:0.5rem 1.5rem}.legend-list-divided>.legend{position:relative}.legend-list-divided>.legend+.legend::before{position:absolute;inset-block:0;inset-inline-start:-0.75rem;content:"";border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.list-group{--tblr-list-group-header-padding-y:0.5rem;--tblr-list-group-item-gap:1rem;--tblr-list-group-nested-indent:2.25rem;margin-inline-start:0;margin-inline-end:0}.list-group-header{padding:var(--tblr-list-group-header-padding-y) 1.25rem;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);line-height:1;color:var(--tblr-secondary-color);text-transform:uppercase;background:var(--tblr-fill-tertiary);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.list-group-flush>.list-group-header:last-child{border-bottom-width:0}.list-group-item.disabled,.list-group-item:disabled{color:oklch(55.55% 0 0deg);background-color:var(--tblr-hover-bg)}.list-group-item.active,.list-group-selectable .list-group-item:has(.list-group-selectable-check:checked){background-color:var(--tblr-active-bg);box-shadow:inset 2px 0 0 oklch(54.6% .1724 254.2deg)}.list-group-sm{--tblr-list-group-item-padding-y:0.5rem;--tblr-list-group-item-gap:0.75rem}.list-group-lg{--tblr-list-group-item-padding-y:1.5rem;--tblr-list-group-item-gap:1.25rem}.list-group-item:has(> .list-group-item-content){display:flex;gap:var(--tblr-list-group-item-gap);align-items:center}.list-group-item-actions,.list-group-item-media,.list-group-item-meta{flex:none}.list-group-item-media{display:flex;align-items:center}.list-group-item-content{flex:1;min-width:0}.list-group-item-description,.list-group-item-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-group-item-title{color:inherit}.list-group-item-description,.list-group-item-meta{color:var(--tblr-secondary)}.list-group-nested{border:var(--tblr-list-group-border-width) solid var(--tblr-list-group-border-color);border-top-width:0}.list-group-nested>.list-group-item{padding-inline-start:calc(var(--tblr-list-group-item-padding-x) + var(--tblr-list-group-nested-indent));border-width:0}.list-group-nested+.list-group-item{border-top-width:0}.list-group-flush>.list-group-nested{border-inline-width:0}.list-group-flush>.list-group-nested:last-child{border-bottom-width:0}.list-group-item-toggle{transition:transform .3s}@media (prefers-reduced-motion:reduce){.list-group-item-toggle{transition:none}}[aria-expanded=true] .list-group-item-toggle{transform:rotate(180deg)}.list-bordered .list-item{margin-top:-1px;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.list-bordered .list-item:first-child{border-top:none}.list-group-hoverable .list-group-item:active,.list-group-hoverable .list-group-item:focus,.list-group-hoverable .list-group-item:hover{background-color:var(--tblr-hover-bg)}.list-group-hoverable .list-group-item-actions{opacity:0;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.list-group-hoverable .list-group-item-actions{transition:none}}.list-group-hoverable .list-group-item-actions.show,.list-group-hoverable .list-group-item:hover .list-group-item-actions{opacity:1}.list-group-transparent{--tblr-list-group-border-radius:0;margin:0 -1.25rem}.list-group-transparent .list-group-item{background:0 0;border:0}.list-group-transparent .list-group-item .icon{color:var(--tblr-secondary)}.list-group-transparent .list-group-item.active{font-weight:var(--tblr-font-weight-semibold);color:inherit;background:var(--tblr-active-bg)}.list-group-transparent .list-group-item.active .icon{color:inherit}.list-separated{display:flex;flex-direction:column;gap:1rem}.list-inline{margin:0}.list-inline-dots .list-inline-item+.list-inline-item::before{margin-inline-end:.5rem;content:" · "}.list-icon{--tblr-list-icon-gap:0.5rem;--tblr-list-icon-row-gap:0.5rem;--tblr-list-icon-inline-gap:1.5rem;--tblr-list-icon-size:1rem;--tblr-list-icon-color:var(--tblr-secondary);display:flex;flex-direction:column;gap:var(--tblr-list-icon-row-gap);padding-inline-start:0;list-style:none}.list-icon>*{display:flex;gap:var(--tblr-list-icon-gap);align-items:flex-start}.list-icon>*>.icon:first-child{--tblr-icon-size:var(--tblr-list-icon-size);flex-shrink:0;margin-top:calc((1lh - var(--tblr-list-icon-size))/ 2);font-size:inherit;color:var(--tblr-list-icon-color)}.list-icon-inline{flex-flow:row wrap;gap:var(--tblr-list-icon-row-gap) var(--tblr-list-icon-inline-gap)}.loader{position:relative;display:block;width:2.5rem;height:2.5rem;color:oklch(54.6% .1724 254.2deg);vertical-align:middle}.loader::after{position:absolute;inset-inline-start:0;top:0;width:100%;height:100%;content:"";border:1px var(--tblr-border-style);border-color:transparent;border-inline-start-color:currentColor;border-top-color:currentColor;animation:rotate-360 .6s linear;animation-iteration-count:infinite;border-radius:var(--tblr-border-radius-pill)}.dimmer{position:relative}.dimmer .loader{position:absolute;inset-inline-start:0;inset-inline-end:0;top:50%;display:none;margin:0 auto;transform:translateY(-50%)}.dimmer.active .loader{display:block}.dimmer.active .dimmer-content{pointer-events:none;opacity:.1}@keyframes animated-dots{0%{transform:translateX(calc(var(--tblr-dir) * -100%))}}.animated-dots{display:inline-block;overflow:hidden;vertical-align:bottom}.animated-dots::after{display:inline-block;content:"...";animation:animated-dots 1.2s steps(4,jump-none) infinite}.mockup-browser{--tblr-mockup-browser-bg:var(--tblr-bg-surface);--tblr-mockup-browser-border-color:var(--tblr-border-light-color);--tblr-mockup-browser-border-radius:var(--tblr-border-radius-lg);--tblr-mockup-browser-box-shadow:var(--tblr-shadow-lg);--tblr-mockup-browser-toolbar-min-height:2rem;--tblr-mockup-browser-toolbar-padding-y:0.5rem;--tblr-mockup-browser-toolbar-padding-x:12.5%;--tblr-mockup-browser-toolbar-color:var(--tblr-secondary);--tblr-mockup-browser-toolbar-bg:var(--tblr-bg-surface-secondary);--tblr-mockup-browser-control-offset:1rem;--tblr-mockup-browser-control-size:0.75rem;--tblr-mockup-browser-control-gap:0.5rem;--tblr-mockup-browser-control-color-1:#ff5f57;--tblr-mockup-browser-control-color-2:#febc2e;--tblr-mockup-browser-control-color-3:#28c840;--tblr-mockup-browser-url-font-size:0.75rem;--tblr-mockup-browser-url-line-height:1rem;--tblr-mockup-browser-url-icon-size:0.875rem;display:flex;flex-direction:column;overflow:hidden;background:var(--tblr-mockup-browser-bg);border:var(--tblr-border-width) solid var(--tblr-mockup-browser-border-color);box-shadow:var(--tblr-mockup-browser-box-shadow);border-radius:var(--tblr-mockup-browser-border-radius)}.mockup-browser-sm{--tblr-mockup-browser-border-radius:var(--tblr-border-radius);--tblr-mockup-browser-toolbar-min-height:1.5rem;--tblr-mockup-browser-toolbar-padding-y:0.25rem;--tblr-mockup-browser-control-size:0.5rem;--tblr-mockup-browser-control-gap:0.25rem;--tblr-mockup-browser-url-font-size:0.625rem;--tblr-mockup-browser-url-icon-size:0.75rem}.mockup-browser-toolbar{position:relative;display:flex;align-items:center;min-height:var(--tblr-mockup-browser-toolbar-min-height);padding:var(--tblr-mockup-browser-toolbar-padding-y) var(--tblr-mockup-browser-toolbar-padding-x);color:var(--tblr-mockup-browser-toolbar-color);background:var(--tblr-mockup-browser-toolbar-bg);box-shadow:inset 0 calc(-1 * var(--tblr-border-width)) var(--tblr-mockup-browser-border-color)}.mockup-browser-controls{position:absolute;inset-inline-start:var(--tblr-mockup-browser-control-offset);width:var(--tblr-mockup-browser-control-size);height:var(--tblr-mockup-browser-control-size);background:var(--tblr-mockup-browser-control-color-1);border-radius:50%;box-shadow:calc(var(--tblr-mockup-browser-control-size) + var(--tblr-mockup-browser-control-gap)) 0 0 var(--tblr-mockup-browser-control-color-2),calc(2 * (var(--tblr-mockup-browser-control-size) + var(--tblr-mockup-browser-control-gap))) 0 0 var(--tblr-mockup-browser-control-color-3)}.mockup-browser-url{display:flex;gap:.25rem;align-items:center;justify-content:center;width:100%;min-width:0;font-size:var(--tblr-mockup-browser-url-font-size);line-height:var(--tblr-mockup-browser-url-line-height)}.mockup-browser-url>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mockup-browser-url .icon{--tblr-icon-size:var(--tblr-mockup-browser-url-icon-size);flex-shrink:0}.mockup-browser-body{flex:1;min-height:0}.mockup-browser-body>iframe,.mockup-browser-body>img,.mockup-browser-body>video{display:block;width:100%}.mockup-browser-body>iframe{border:0}.modal-content>.btn-close,.modal-header>.btn-close{position:absolute;inset-inline-end:0;top:0;z-index:10;width:3.5rem;height:3.5rem;padding:0;margin:0}.modal-body{scrollbar-color:color-mix(in oklab,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent) transparent}.modal-body::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){.modal-body::-webkit-scrollbar{-webkit-transition:none;transition:none}}.modal-body::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem color-mix(in oklab,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent)}.modal-body::-webkit-scrollbar-track{background:0 0}.modal-body:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem color-mix(in oklab,var(--tblr-scrollbar-color,var(--tblr-body-color)) 40%,transparent)}.modal-body::-webkit-scrollbar-corner{background:0 0}.modal-body{overscroll-behavior:contain}.modal-body .modal-title{margin-bottom:var(--tblr-modal-body-title-margin-bottom)}.modal-body+.modal-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.modal-status{position:absolute;inset-inline-start:0;inset-inline-end:0;top:0;height:2px;background:var(--tblr-secondary);border-radius:var(--tblr-border-radius-lg) var(--tblr-border-radius-lg) 0 0}.modal-header{align-items:center;min-height:3.5rem;padding-block:0;padding-inline:1.5rem 3.5rem;background:0 0}.modal-title{font-size:1rem;font-weight:var(--tblr-font-weight-semibold);line-height:1.4285714286;color:var(--tblr-heading-color,var(--tblr-emphasis-color))}.modal-footer{padding-top:var(--tblr-modal-footer-padding-y);padding-bottom:var(--tblr-modal-footer-padding-y)}.modal-blur{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-full-width{max-width:none;margin:0 .5rem}.modal{--tblr-modal-body-title-margin-bottom:1rem;--tblr-modal-footer-padding-y:0.75rem;overscroll-behavior:contain}@media print{.modal{display:none!important}}dialog::backdrop{background:color-mix(in oklab,var(--tblr-backdrop-bg) calc(var(--tblr-backdrop-opacity) * 100%),transparent)}dialog.modal-blur::backdrop{-webkit-backdrop-filter:var(--tblr-backdrop-filter);backdrop-filter:var(--tblr-backdrop-filter)}.nav{--tblr-nav-link-hover-bg:var(--tblr-hover-bg);--tblr-nav-link-active-color:var(--tblr-body-color);--tblr-nav-vertical-nested-margin-start:1.25rem;--tblr-nav-vertical-nested-padding-start:0.5rem;--tblr-nav-link-toggle-padding-x:0.25rem;--tblr-nav-link-icon-margin-end:0.5rem;font-size:var(--tblr-body-font-size)}.nav-vertical,.nav-vertical .nav{flex-direction:column;flex-wrap:nowrap}.nav-vertical .nav{padding-inline-start:var(--tblr-nav-vertical-nested-padding-start);margin-inline-start:var(--tblr-nav-vertical-nested-margin-start);border-inline-start:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.nav-vertical .nav-item.show .nav-link,.nav-vertical .nav-link.active{font-weight:var(--tblr-font-weight-semibold);color:var(--tblr-nav-link-active-color)}.nav-vertical.nav-pills{margin:0 -.75rem}.nav-bordered{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.nav-bordered .nav-item+.nav-item{margin-inline-start:1.25rem}.nav-bordered .nav-link{padding-inline-start:0;padding-inline-end:0;margin:0 0 calc(-1 * var(--tblr-border-width));border:0;border-bottom:2px var(--tblr-border-style) transparent}.nav-bordered .nav-link:hover{background-color:transparent}.nav-bordered .nav-item.show .nav-link,.nav-bordered .nav-link.active{color:var(--tblr-primary);border-color:var(--tblr-primary)}.nav-underline .nav-link{border-radius:0}.nav-link{display:flex;align-items:center;transition:color .3s,background-color .3s,outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{background-color:var(--tblr-nav-link-hover-bg)}.nav-link-toggle{padding:0 var(--tblr-nav-link-toggle-padding-x);margin-inline-start:auto;transition:transform .3s}@media (prefers-reduced-motion:reduce){.nav-link-toggle{transition:none}}.nav-link-toggle:after{content:"";display:inline-block;vertical-align:.306em;width:.36em;height:.36em;border-bottom:1px var(--tblr-border-style);border-inline-start:1px var(--tblr-border-style);margin-inline-start:.306em;margin-inline-end:.1em;transform:rotate(-45deg)}.nav-link-toggle::after{margin:0}.nav-link[aria-expanded=true] .nav-link-toggle{transform:rotate(180deg)}.nav-link-icon{flex-shrink:0;width:var(--tblr-nav-link-icon-width,1.25rem);height:var(--tblr-nav-link-icon-height,1.25rem);margin-inline-end:var(--tblr-nav-link-icon-margin-end);color:var(--tblr-nav-link-icon-color,color-mix(in oklab,var(--tblr-nav-link-color) 50%,transparent))}.nav-link-icon svg{display:block;height:100%}.nav-link:hover .nav-link-icon{color:var(--tblr-nav-link-hover-icon-color,color-mix(in oklab,var(--tblr-nav-link-color) 80%,transparent))}.nav-fill .nav-item .nav-link{justify-content:center}.nav-overflow{contain:inline-size;flex:1 1 0;min-width:0}.nav-overflow:not(.nav-overflow-initialized){overflow:clip}.nav-overflow>.nav,.nav-overflow>.navbar-nav{display:flex;flex-wrap:nowrap;min-width:0}.nav-overflow>.nav>.nav-item,.nav-overflow>.navbar-nav>.nav-item{flex-shrink:0}.nav-overflow-item{margin-inline-start:auto}.nav-overflow-toggle{gap:var(--tblr-nav-link-icon-margin-end)}.nav-overflow-icon{display:flex}.nav-overflow-icon .icon{width:var(--tblr-nav-link-icon-width,1.25rem);height:var(--tblr-nav-link-icon-height,1.25rem)}.stars{--tblr-stars-gap:0.25rem;display:inline-flex;font-size:.75rem;color:oklch(71.55% 0 0deg)}.stars .star:not(:first-child){margin-inline-start:var(--tblr-stars-gap)}.pagination{gap:var(--tblr-pagination-gap);margin:0;line-height:var(--tblr-body-line-height);-webkit-user-select:none;user-select:none;--tblr-pagination-gap:0.25rem;--tblr-pagination-link-min-width:2rem;--tblr-page-text-padding-x:0.5rem}@media print{.pagination{display:none}}.page-link{min-width:var(--tblr-pagination-link-min-width);border-radius:var(--tblr-pagination-border-radius)}.page-item:not(.active) .page-link:hover{background:var(--tblr-pagination-hover-bg)}.page-text{padding-inline-start:var(--tblr-page-text-padding-x);padding-inline-end:var(--tblr-page-text-padding-x);font-size:var(--tblr-pagination-font-size)}.page-text:not(.page-link){display:block;padding-block:calc(var(--tblr-pagination-padding-y) + var(--tblr-pagination-border-width))}.page-item{text-align:center}.page-item.page-next,.page-item.page-prev{flex:0 0 50%;text-align:start}.page-item.page-next{margin-inline-start:auto;text-align:end}.page-item-subtitle{--tblr-page-item-subtitle-margin-bottom:2px;--tblr-page-item-subtitle-font-size:12px;margin-bottom:var(--tblr-page-item-subtitle-margin-bottom);font-size:var(--tblr-page-item-subtitle-font-size);color:var(--tblr-secondary);text-transform:uppercase}.page-item.disabled .page-item-subtitle{color:var(--tblr-disabled-color)}.page-item-title{font-size:1rem;font-weight:var(--tblr-font-weight-normal);color:var(--tblr-body-color)}.page-link:hover .page-item-title{color:oklch(54.6% .1724 254.2deg)}.page-item.disabled .page-item-title{color:var(--tblr-disabled-color)}.pagination-outline{--tblr-pagination-border-color:var(--tblr-border-color);--tblr-pagination-disabled-border-color:var(--tblr-border-color);--tblr-pagination-border-width:1px}.pagination-circle{--tblr-pagination-border-radius:var(--tblr-border-radius-pill)}@media print{.popover{display:none}}.pricing{display:flex;flex-direction:column;justify-content:center;margin:0 auto}@media (min-width:768px){.pricing{flex-direction:row}}.pricing-card{position:relative;display:flex;flex:1;flex-direction:column;padding:2rem;margin:0 0 1rem;text-align:center;background:var(--tblr-bg-surface);border:var(--tblr-border-width) solid var(--tblr-border-color);box-shadow:var(--tblr-shadow-card);border-radius:8px}@media (min-width:768px){.pricing-card{max-width:22rem;margin:1rem -1px}.pricing-card:first-child{border-radius:8px 0 0 8px}.pricing-card:last-child{border-radius:0 8px 8px 0}}.pricing-card.featured{z-index:1;order:-1;border:2px solid var(--tblr-primary)}@media (min-width:768px){.pricing-card.featured{order:unset;margin-top:0;margin-bottom:0;box-shadow:var(--tblr-shadow-card);border-radius:8px}}.pricing-title{font-size:1.25rem;line-height:1.75rem}.pricing-label{position:absolute;inset-inline-start:0;inset-inline-end:0;top:0;display:flex;align-items:center;justify-content:center;vertical-align:bottom;transform:translateY(-50%)}.pricing-btn{padding-top:2rem;margin-top:auto}.pricing-price{display:flex;justify-content:center;margin:.75rem 0;font-size:2.5rem;font-weight:600;line-height:1}.pricing-price-currency{margin-inline-end:.25rem;font-size:1.25rem;font-weight:600;line-height:1.5}.pricing-price-description{align-self:center;margin-inline-start:.5rem;font-size:.875rem;font-weight:400;line-height:1.25rem;color:oklch(55.55% 0 0deg)}.pricing-features{padding:0;margin:1rem 0 0;text-align:start;list-style:none}.pricing-features>li:not(:first-child){margin-top:.25rem}.shape{--tblr-shape-size:2.5rem;--tblr-shape-icon-size:1.5rem;--tblr-shape-border-radius:35%;display:inline-flex;align-items:center;justify-content:center;width:var(--tblr-shape-size);height:var(--tblr-shape-size);color:var(--tblr-primary);background-color:var(--tblr-primary-lt);border-radius:var(--tblr-shape-border-radius)}.shape .icon{width:var(--tblr-shape-icon-size);height:var(--tblr-shape-icon-size)}.shape-xxs{--tblr-shape-size:1rem;--tblr-shape-icon-size:0.5rem}.shape-xs{--tblr-shape-size:1.25rem;--tblr-shape-icon-size:0.75rem}.shape-sm{--tblr-shape-size:2rem;--tblr-shape-icon-size:1.5rem}.shape-md{--tblr-shape-size:2.5rem;--tblr-shape-icon-size:1.5rem}.shape-lg{--tblr-shape-size:3rem;--tblr-shape-icon-size:2rem}.shape-xl{--tblr-shape-size:5rem;--tblr-shape-icon-size:3rem}.shape-2xl{--tblr-shape-size:7rem;--tblr-shape-icon-size:5rem}.shape-blue{color:var(--tblr-blue);background:var(--tblr-blue-lt)}.shape-azure{color:var(--tblr-azure);background:var(--tblr-azure-lt)}.shape-indigo{color:var(--tblr-indigo);background:var(--tblr-indigo-lt)}.shape-purple{color:var(--tblr-purple);background:var(--tblr-purple-lt)}.shape-pink{color:var(--tblr-pink);background:var(--tblr-pink-lt)}.shape-red{color:var(--tblr-red);background:var(--tblr-red-lt)}.shape-orange{color:var(--tblr-orange);background:var(--tblr-orange-lt)}.shape-yellow{color:var(--tblr-yellow);background:var(--tblr-yellow-lt)}.shape-lime{color:var(--tblr-lime);background:var(--tblr-lime-lt)}.shape-green{color:var(--tblr-green);background:var(--tblr-green-lt)}.shape-teal{color:var(--tblr-teal);background:var(--tblr-teal-lt)}.shape-cyan{color:var(--tblr-cyan);background:var(--tblr-cyan-lt)}.shape-black{color:var(--tblr-black);background:var(--tblr-black-lt)}.shape-white{color:var(--tblr-white);background:var(--tblr-white-lt)}.shape-gray{color:var(--tblr-gray);background:var(--tblr-gray-lt)}.shape-gray-dark{color:var(--tblr-gray-dark);background:var(--tblr-gray-dark-lt)}@keyframes progress-indeterminate{0%{inset-inline-start:-35%;inset-inline-end:100%}100%,60%{inset-inline-start:100%;inset-inline-end:-90%}}.progress{position:relative;width:100%;line-height:.5rem;appearance:none}.progress::-webkit-progress-bar{background:var(--tblr-progress-bg)}.progress::-webkit-progress-value{background-color:var(--tblr-primary)}.progress::-moz-progress-bar{background-color:var(--tblr-primary)}.progress::-ms-fill{background-color:var(--tblr-primary);border:none}.progress-sm{--tblr-progress-height:0.25rem}.progress-lg{--tblr-progress-height:0.75rem}.progress-xl{--tblr-progress-height:1rem}.progress-bar{height:100%;transition:width .3s,background .3s}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar.bg-primary{--tblr-progress-bar-fg:var(--tblr-primary-fg)}.progress-bar.bg-secondary{--tblr-progress-bar-fg:var(--tblr-secondary-fg)}.progress-bar.bg-success{--tblr-progress-bar-fg:var(--tblr-success-fg)}.progress-bar.bg-info{--tblr-progress-bar-fg:var(--tblr-info-fg)}.progress-bar.bg-warning{--tblr-progress-bar-fg:var(--tblr-warning-fg)}.progress-bar.bg-danger{--tblr-progress-bar-fg:var(--tblr-danger-fg)}.progress-bar.bg-light{--tblr-progress-bar-fg:var(--tblr-light-fg)}.progress-bar.bg-dark{--tblr-progress-bar-fg:var(--tblr-dark-fg)}.progress-bar.bg-muted{--tblr-progress-bar-fg:var(--tblr-muted-fg)}.progress-bar.bg-blue{--tblr-progress-bar-fg:var(--tblr-blue-fg)}.progress-bar.bg-azure{--tblr-progress-bar-fg:var(--tblr-azure-fg)}.progress-bar.bg-indigo{--tblr-progress-bar-fg:var(--tblr-indigo-fg)}.progress-bar.bg-purple{--tblr-progress-bar-fg:var(--tblr-purple-fg)}.progress-bar.bg-pink{--tblr-progress-bar-fg:var(--tblr-pink-fg)}.progress-bar.bg-red{--tblr-progress-bar-fg:var(--tblr-red-fg)}.progress-bar.bg-orange{--tblr-progress-bar-fg:var(--tblr-orange-fg)}.progress-bar.bg-yellow{--tblr-progress-bar-fg:var(--tblr-yellow-fg)}.progress-bar.bg-lime{--tblr-progress-bar-fg:var(--tblr-lime-fg)}.progress-bar.bg-green{--tblr-progress-bar-fg:var(--tblr-green-fg)}.progress-bar.bg-teal{--tblr-progress-bar-fg:var(--tblr-teal-fg)}.progress-bar.bg-cyan{--tblr-progress-bar-fg:var(--tblr-cyan-fg)}.progress-bar-indeterminate::after,.progress-bar-indeterminate::before{position:absolute;inset-inline-start:0;top:0;bottom:0;content:"";background-color:inherit;animation:progress-indeterminate 1.5s cubic-bezier(.65,.815,.735,.395) infinite;will-change:inset-inline-start,inset-inline-end}.progress-bar-indeterminate::after{animation-delay:.75s}.progress-separated{--tblr-progress-separated-ring-width:2px}.progress-separated .progress-bar{box-shadow:0 0 0 var(--tblr-progress-separated-ring-width) var(--tblr-card-bg,var(--tblr-bg-surface))}.progressbg{--tblr-progressbg-padding-y:0.25rem;--tblr-progressbg-padding-x:0.5rem;position:relative;display:flex;padding:var(--tblr-progressbg-padding-y) var(--tblr-progressbg-padding-x)}.progressbg-text{position:relative;z-index:1;display:flex;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.progressbg-progress{position:absolute;inset-inline-start:0;inset-inline-end:0;top:0;bottom:0;z-index:0;height:100%;pointer-events:none;background:0 0}.progressbg-value{--tblr-progressbg-value-padding-start:2rem;padding-inline-start:var(--tblr-progressbg-value-padding-start);margin-inline-start:auto;font-weight:var(--tblr-font-weight-medium)}.progress-steps{--tblr-progress-steps-gap:0.25rem;display:flex;flex-wrap:nowrap;gap:var(--tblr-progress-steps-gap);width:100%;padding:0;margin:0;list-style:none}.progress-steps-item{--tblr-progress-steps-item-height:0.25rem;flex:1 1 0;min-height:var(--tblr-progress-steps-item-height);margin-top:0;color:inherit;text-align:center;cursor:default;background-color:var(--tblr-border-color);border-radius:var(--tblr-border-radius-pill)}a.progress-steps-item{cursor:pointer}.ribbon{--tblr-ribbon-margin:0.25rem;--tblr-ribbon-border-radius:var(--tblr-border-radius);--tblr-ribbon-font-size:0.625rem;--tblr-ribbon-icon-size:1.25rem;--tblr-ribbon-offset:0.75rem;--tblr-ribbon-padding-y:0.25rem;--tblr-ribbon-padding-x:0.75rem;--tblr-ribbon-min-size:2rem;--tblr-ribbon-top-width:2rem;--tblr-ribbon-top-padding-y:0.5rem;--tblr-ribbon-bookmark-border-size:1rem;--tblr-ribbon-bookmark-notch-width:0.5rem;position:absolute;inset-inline-end:calc(-1 * var(--tblr-ribbon-margin));top:var(--tblr-ribbon-offset);z-index:1;display:inline-flex;align-items:center;justify-content:center;min-width:var(--tblr-ribbon-min-size);min-height:var(--tblr-ribbon-min-size);padding:var(--tblr-ribbon-padding-y) var(--tblr-ribbon-padding-x);font-size:var(--tblr-ribbon-font-size);font-weight:var(--tblr-font-weight-semibold);line-height:1;color:#fff;text-align:center;text-transform:uppercase;background:var(--tblr-primary);border-color:var(--tblr-primary);border-radius:var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius)}.ribbon::before{position:absolute;inset-inline-end:0;bottom:100%;width:0;height:0;content:"";filter:brightness(70%);border:calc(var(--tblr-ribbon-margin) * .5) var(--tblr-border-style);border-color:inherit;border-inline-end-color:transparent;border-top-color:transparent}.ribbon.bg-primary{border-color:var(--tblr-primary)}.ribbon.bg-primary-lt{border-color:color-mix(in oklab,var(--tblr-primary) 10%,transparent)!important}.ribbon.bg-secondary{border-color:var(--tblr-secondary)}.ribbon.bg-secondary-lt{border-color:color-mix(in oklab,var(--tblr-secondary) 10%,transparent)!important}.ribbon.bg-success{border-color:var(--tblr-success)}.ribbon.bg-success-lt{border-color:color-mix(in oklab,var(--tblr-success) 10%,transparent)!important}.ribbon.bg-info{border-color:var(--tblr-info)}.ribbon.bg-info-lt{border-color:color-mix(in oklab,var(--tblr-info) 10%,transparent)!important}.ribbon.bg-warning{border-color:var(--tblr-warning)}.ribbon.bg-warning-lt{border-color:color-mix(in oklab,var(--tblr-warning) 10%,transparent)!important}.ribbon.bg-danger{border-color:var(--tblr-danger)}.ribbon.bg-danger-lt{border-color:color-mix(in oklab,var(--tblr-danger) 10%,transparent)!important}.ribbon.bg-light{border-color:var(--tblr-light)}.ribbon.bg-light-lt{border-color:color-mix(in oklab,var(--tblr-light) 10%,transparent)!important}.ribbon.bg-dark{border-color:var(--tblr-dark)}.ribbon.bg-dark-lt{border-color:color-mix(in oklab,var(--tblr-dark) 10%,transparent)!important}.ribbon.bg-muted{border-color:var(--tblr-muted)}.ribbon.bg-muted-lt{border-color:color-mix(in oklab,var(--tblr-muted) 10%,transparent)!important}.ribbon.bg-blue{border-color:var(--tblr-blue)}.ribbon.bg-blue-lt{border-color:color-mix(in oklab,var(--tblr-blue) 10%,transparent)!important}.ribbon.bg-azure{border-color:var(--tblr-azure)}.ribbon.bg-azure-lt{border-color:color-mix(in oklab,var(--tblr-azure) 10%,transparent)!important}.ribbon.bg-indigo{border-color:var(--tblr-indigo)}.ribbon.bg-indigo-lt{border-color:color-mix(in oklab,var(--tblr-indigo) 10%,transparent)!important}.ribbon.bg-purple{border-color:var(--tblr-purple)}.ribbon.bg-purple-lt{border-color:color-mix(in oklab,var(--tblr-purple) 10%,transparent)!important}.ribbon.bg-pink{border-color:var(--tblr-pink)}.ribbon.bg-pink-lt{border-color:color-mix(in oklab,var(--tblr-pink) 10%,transparent)!important}.ribbon.bg-red{border-color:var(--tblr-red)}.ribbon.bg-red-lt{border-color:color-mix(in oklab,var(--tblr-red) 10%,transparent)!important}.ribbon.bg-orange{border-color:var(--tblr-orange)}.ribbon.bg-orange-lt{border-color:color-mix(in oklab,var(--tblr-orange) 10%,transparent)!important}.ribbon.bg-yellow{border-color:var(--tblr-yellow)}.ribbon.bg-yellow-lt{border-color:color-mix(in oklab,var(--tblr-yellow) 10%,transparent)!important}.ribbon.bg-lime{border-color:var(--tblr-lime)}.ribbon.bg-lime-lt{border-color:color-mix(in oklab,var(--tblr-lime) 10%,transparent)!important}.ribbon.bg-green{border-color:var(--tblr-green)}.ribbon.bg-green-lt{border-color:color-mix(in oklab,var(--tblr-green) 10%,transparent)!important}.ribbon.bg-teal{border-color:var(--tblr-teal)}.ribbon.bg-teal-lt{border-color:color-mix(in oklab,var(--tblr-teal) 10%,transparent)!important}.ribbon.bg-cyan{border-color:var(--tblr-cyan)}.ribbon.bg-cyan-lt{border-color:color-mix(in oklab,var(--tblr-cyan) 10%,transparent)!important}.ribbon .icon{width:var(--tblr-ribbon-icon-size);height:var(--tblr-ribbon-icon-size);font-size:var(--tblr-ribbon-icon-size)}.ribbon-top{inset-inline-end:var(--tblr-ribbon-offset);top:calc(-1 * var(--tblr-ribbon-margin));width:var(--tblr-ribbon-top-width);padding:var(--tblr-ribbon-top-padding-y) 0;border-radius:0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius)}.ribbon-top::before{inset-inline-end:100%;top:0;bottom:auto;border-color:inherit;border-inline-start-color:transparent;border-top-color:transparent}.ribbon-top.ribbon-start{inset-inline-start:var(--tblr-ribbon-offset);inset-inline-end:auto}.ribbon-top.ribbon-start::before{inset-inline-start:auto;inset-inline-end:100%;top:0}.ribbon-start{inset-inline-start:calc(-1 * var(--tblr-ribbon-margin));inset-inline-end:auto;border-radius:0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius)}.ribbon-start::before{inset-inline-start:0;top:auto;bottom:100%;border-color:inherit;border-inline-start-color:transparent;border-top-color:transparent}.ribbon-bottom{top:auto;bottom:var(--tblr-ribbon-offset)}.ribbon-bookmark{padding-inline-start:var(--tblr-ribbon-padding-y);border-radius:0 0 var(--tblr-ribbon-border-radius) 0}.ribbon-bookmark::after{position:absolute;inset-inline-end:100%;top:0;display:block;width:0;height:0;content:"";border:var(--tblr-ribbon-bookmark-border-size) var(--tblr-border-style);border-color:inherit;border-inline-start-color:transparent;border-inline-start-width:var(--tblr-ribbon-bookmark-notch-width);border-inline-end-width:0}.ribbon-bookmark.ribbon-start{padding-inline-end:var(--tblr-ribbon-bookmark-notch-width)}.ribbon-bookmark.ribbon-start::after{inset-inline-start:100%;inset-inline-end:auto;border-inline-start-width:0;border-inline-end-color:transparent;border-inline-end-width:var(--tblr-ribbon-bookmark-notch-width)}.ribbon-bookmark.ribbon-top{padding-inline-start:0;padding-inline-end:0;padding-bottom:var(--tblr-ribbon-padding-y);border-radius:0 var(--tblr-ribbon-border-radius) 0 0}.ribbon-bookmark.ribbon-top::after{inset-inline-start:0;inset-inline-end:0;top:100%;border-color:inherit;border-width:var(--tblr-ribbon-bookmark-border-size);border-top-width:0;border-bottom-color:transparent;border-bottom-width:var(--tblr-ribbon-bookmark-notch-width)}.markdown,.prose{--tblr-markdown-heading-margin-top:2.5rem;--tblr-markdown-blockquote-margin-y:1.5rem;--tblr-markdown-blockquote-padding-y:0.5rem;--tblr-markdown-blockquote-padding-x:1.5rem;--tblr-markdown-pre-max-height:20rem;font-size:var(--tblr-font-size-h3);line-height:var(--tblr-line-height-lg)}.markdown>:first-child,.prose>:first-child{margin-top:0}.markdown>:last-child,.markdown>:last-child .highlight,.prose>:last-child,.prose>:last-child .highlight{margin-bottom:0}@media (min-width:768px){.markdown>.hr,.markdown>hr,.prose>.hr,.prose>hr{margin-top:3em;margin-bottom:3em}}.markdown>.h1,.markdown>.h2,.markdown>.h3,.markdown>.h4,.markdown>.h5,.markdown>.h6,.markdown>h1,.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6,.prose>.h1,.prose>.h2,.prose>.h3,.prose>.h4,.prose>.h5,.prose>.h6,.prose>h1,.prose>h2,.prose>h3,.prose>h4,.prose>h5,.prose>h6{font-weight:var(--tblr-font-weight-semibold)}.markdown>.h2,.markdown>.h3,.markdown>.h4,.markdown>.h5,.markdown>.h6,.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6,.prose>.h2,.prose>.h3,.prose>.h4,.prose>.h5,.prose>.h6,.prose>h2,.prose>h3,.prose>h4,.prose>h5,.prose>h6{margin-top:var(--tblr-markdown-heading-margin-top)}.markdown>table,.prose>table{font-size:var(--tblr-body-font-size)}.markdown>blockquote,.prose>blockquote{padding:var(--tblr-markdown-blockquote-padding-y) var(--tblr-markdown-blockquote-padding-x);margin:var(--tblr-markdown-blockquote-margin-y) 0;font-size:1rem}.markdown>figure>img,.markdown>img,.markdown>p>img,.prose>figure>img,.prose>img,.prose>p>img{border-radius:var(--tblr-border-radius);border:1px solid var(--tblr-border-color)}.markdown pre,.prose pre{max-height:var(--tblr-markdown-pre-max-height);font-size:.8125em}.placeholder:not(.btn):not([class*=bg-]){background-color:currentColor!important}.placeholder:not(.avatar):not([class*=card-img-]){border-radius:var(--tblr-border-radius)}.nav-segmented{--tblr-nav-bg:var(--tblr-bg-surface-tertiary);--tblr-nav-padding:2px;--tblr-nav-height:2.5rem;--tblr-nav-gap:0.25rem;--tblr-nav-active-bg:var(--tblr-bg-surface);--tblr-nav-font-size:inherit;--tblr-nav-radius:6px;--tblr-nav-link-disabled-color:var(--tblr-disabled-color);--tblr-nav-link-gap:0.25rem;--tblr-nav-link-padding-x:0.75rem;--tblr-nav-link-icon-size:1.25rem;--tblr-nav-link-icon-margin:-0.25rem;--tblr-nav-link-hover-icon-color:currentColor;display:inline-flex;flex-wrap:wrap;gap:var(--tblr-nav-gap);padding:var(--tblr-nav-padding);list-style:none;background:var(--tblr-nav-bg);border-radius:calc(var(--tblr-nav-radius) + var(--tblr-nav-padding));box-shadow:inset 0 0 0 1px rgba(0,0,0,.04)}.nav-segmented .nav-link{display:inline-flex;flex-grow:1;gap:calc(.25rem + var(--tblr-nav-link-gap));align-items:center;justify-content:center;min-width:calc(var(--tblr-nav-height) - 2 * var(--tblr-nav-padding));height:calc(var(--tblr-nav-height) - 2 * var(--tblr-nav-padding));padding:0 calc(var(--tblr-nav-link-padding-x) - 2px);margin:0;font-size:var(--tblr-nav-font-size);color:var(--tblr-secondary);text-align:center;text-decoration:none;white-space:nowrap;cursor:pointer;background:0 0;border:1px solid transparent;transition:background-color .3s,color .3s;border-radius:var(--tblr-nav-radius)}.nav-segmented .nav-link.hover,.nav-segmented .nav-link:hover{color:var(--tblr-body-color);background:var(--tblr-hover-bg)}.nav-segmented .nav-link.disabled,.nav-segmented .nav-link:disabled{color:var(--tblr-nav-link-disabled-color);cursor:not-allowed}.nav-segmented .nav-link-input:checked+.nav-link,.nav-segmented .nav-link.active{color:var(--tblr-body-color);background:var(--tblr-nav-active-bg);border-color:var(--tblr-border-color)}.nav-segmented .nav-link-input{display:none}.nav-segmented .nav-link-icon{width:var(--tblr-nav-link-icon-size);height:var(--tblr-nav-link-icon-size);margin:0 var(--tblr-nav-link-icon-margin);color:inherit}.nav-segmented-vertical{flex-direction:column}.nav-segmented-vertical .nav-link{justify-content:start}.nav-sm{--tblr-nav-height:2rem;--tblr-nav-font-size:var(--tblr-font-size-h5);--tblr-nav-radius:4px;--tblr-nav-link-padding-x:0.5rem;--tblr-nav-link-gap:0.25rem;--tblr-nav-link-icon-size:1rem}.nav-lg{--tblr-nav-height:3rem;--tblr-nav-font-size:var(--tblr-font-size-h3);--tblr-nav-radius:8px;--tblr-nav-link-padding-x:1rem;--tblr-nav-link-gap:0.5rem;--tblr-nav-link-icon-size:1.5rem}.signal{--tblr-signal-size:1.25rem;--tblr-signal-color:oklch(55.55% 0 0deg);--tblr-signal-bars:3;--tblr-signal-bar-border-radius:1px;--tblr-signal-bar-inactive-opacity:0.24;--tblr-signal-gap:calc(var(--tblr-signal-size) * 0.1);--tblr-signal-padding-y:calc(var(--tblr-signal-size) * 0.2);--tblr-signal-padding-x:calc(var(--tblr-signal-size) * 0.1);display:inline-flex;flex-shrink:0;gap:var(--tblr-signal-gap);align-items:flex-end;width:var(--tblr-signal-size);height:var(--tblr-signal-size);padding:var(--tblr-signal-padding-y) var(--tblr-signal-padding-x);vertical-align:middle}.signal-bar{--tblr-signal-bar-index:1;flex:1;height:calc(100% * var(--tblr-signal-bar-index)/ var(--tblr-signal-bars));background:var(--tblr-signal-color);opacity:var(--tblr-signal-bar-inactive-opacity);border-radius:var(--tblr-signal-bar-border-radius)}.signal-bar.active{opacity:1}.signal-bar:nth-child(2){--tblr-signal-bar-index:2}.signal-bar:nth-child(3){--tblr-signal-bar-index:3}.signal-bar:nth-child(4){--tblr-signal-bar-index:4}.signal-bar:nth-child(5){--tblr-signal-bar-index:5}.signal:has(> .signal-bar:last-child:nth-child(2)){--tblr-signal-bars:2}.signal:has(> .signal-bar:last-child:nth-child(4)){--tblr-signal-bars:4}.signal:has(> .signal-bar:last-child:nth-child(5)){--tblr-signal-bars:5}.signal-primary{--tblr-signal-color:var(--tblr-primary)}.signal-secondary{--tblr-signal-color:var(--tblr-secondary)}.signal-success{--tblr-signal-color:var(--tblr-success)}.signal-info{--tblr-signal-color:var(--tblr-info)}.signal-warning{--tblr-signal-color:var(--tblr-warning)}.signal-danger{--tblr-signal-color:var(--tblr-danger)}.signal-light{--tblr-signal-color:var(--tblr-light)}.signal-dark{--tblr-signal-color:var(--tblr-dark)}.signal-muted{--tblr-signal-color:var(--tblr-muted)}.signal-blue{--tblr-signal-color:var(--tblr-blue)}.signal-azure{--tblr-signal-color:var(--tblr-azure)}.signal-indigo{--tblr-signal-color:var(--tblr-indigo)}.signal-purple{--tblr-signal-color:var(--tblr-purple)}.signal-pink{--tblr-signal-color:var(--tblr-pink)}.signal-red{--tblr-signal-color:var(--tblr-red)}.signal-orange{--tblr-signal-color:var(--tblr-orange)}.signal-yellow{--tblr-signal-color:var(--tblr-yellow)}.signal-lime{--tblr-signal-color:var(--tblr-lime)}.signal-green{--tblr-signal-color:var(--tblr-green)}.signal-teal{--tblr-signal-color:var(--tblr-teal)}.signal-cyan{--tblr-signal-color:var(--tblr-cyan)}.steps{--tblr-steps-color:var(--tblr-primary);--tblr-steps-inactive-color:var(--tblr-border-color);--tblr-steps-dot-size:0.5rem;--tblr-steps-border-width:2px;display:flex;flex-wrap:nowrap;width:100%;padding:0;margin:0;list-style:none}@media (max-width:575.98px){.steps{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}}.steps-blue{--tblr-steps-color:var(--tblr-blue)}.steps-blue-lt{--tblr-steps-color:var(--tblr-blue-lt)}.steps-azure{--tblr-steps-color:var(--tblr-azure)}.steps-azure-lt{--tblr-steps-color:var(--tblr-azure-lt)}.steps-indigo{--tblr-steps-color:var(--tblr-indigo)}.steps-indigo-lt{--tblr-steps-color:var(--tblr-indigo-lt)}.steps-purple{--tblr-steps-color:var(--tblr-purple)}.steps-purple-lt{--tblr-steps-color:var(--tblr-purple-lt)}.steps-pink{--tblr-steps-color:var(--tblr-pink)}.steps-pink-lt{--tblr-steps-color:var(--tblr-pink-lt)}.steps-red{--tblr-steps-color:var(--tblr-red)}.steps-red-lt{--tblr-steps-color:var(--tblr-red-lt)}.steps-orange{--tblr-steps-color:var(--tblr-orange)}.steps-orange-lt{--tblr-steps-color:var(--tblr-orange-lt)}.steps-yellow{--tblr-steps-color:var(--tblr-yellow)}.steps-yellow-lt{--tblr-steps-color:var(--tblr-yellow-lt)}.steps-lime{--tblr-steps-color:var(--tblr-lime)}.steps-lime-lt{--tblr-steps-color:var(--tblr-lime-lt)}.steps-green{--tblr-steps-color:var(--tblr-green)}.steps-green-lt{--tblr-steps-color:var(--tblr-green-lt)}.steps-teal{--tblr-steps-color:var(--tblr-teal)}.steps-teal-lt{--tblr-steps-color:var(--tblr-teal-lt)}.steps-cyan{--tblr-steps-color:var(--tblr-cyan)}.steps-cyan-lt{--tblr-steps-color:var(--tblr-cyan-lt)}.step-item{--tblr-step-item-min-height:1rem;position:relative;flex:1 1 0;min-height:var(--tblr-step-item-min-height);padding-top:calc(var(--tblr-steps-dot-size));margin-top:0;color:inherit;text-align:center;cursor:default}a.step-item{cursor:pointer}a.step-item:hover{color:inherit}.step-item::after,.step-item::before{background:var(--tblr-steps-color)}.step-item:not(:last-child)::after{position:absolute;inset-inline-start:50%;width:100%;content:"";transform:translateY(-50%)}.step-item::after{top:calc(var(--tblr-steps-dot-size) * .5);height:var(--tblr-steps-border-width)}.step-item::before{position:absolute;inset-inline-start:50%;top:0;z-index:1;box-sizing:content-box;display:flex;align-items:center;justify-content:center;width:var(--tblr-steps-dot-size);height:var(--tblr-steps-dot-size);color:var(--tblr-white);content:"";transform:translateX(calc(var(--tblr-dir) * -50%));border-radius:var(--tblr-border-radius-pill)}.step-item.active{font-weight:var(--tblr-font-weight-semibold)}.step-item.active::after{background:var(--tblr-steps-inactive-color)}.step-item.active~.step-item{color:var(--tblr-disabled-color)}.step-item.active~.step-item::after,.step-item.active~.step-item::before{background:var(--tblr-steps-inactive-color)}.step-item.active~.step-item::before{color:var(--tblr-disabled-color)}.steps-counter{--tblr-steps-dot-size:1.5rem;counter-reset:steps}.steps-counter .step-item{counter-increment:steps}.steps-counter .step-item::before{content:counter(steps)}.steps-vertical{--tblr-steps-dot-offset:6px;--tblr-steps-vertical-padding-start:1rem;--tblr-steps-vertical-item-gap:1rem;--tblr-steps-vertical-connector-gap:1rem;flex-direction:column}.steps-vertical.steps-counter{--tblr-steps-dot-offset:-2px}.steps-vertical .step-item{min-height:auto;padding-inline-start:calc(var(--tblr-steps-dot-size) + var(--tblr-steps-vertical-padding-start));padding-top:0;text-align:start}.steps-vertical .step-item:not(:first-child){margin-top:var(--tblr-steps-vertical-item-gap)}.steps-vertical .step-item::before{inset-inline-start:0;top:var(--tblr-steps-dot-offset);transform:translate(0,0)}.steps-vertical .step-item:not(:last-child)::after{position:absolute;inset-inline-start:calc(var(--tblr-steps-dot-size) * 0.5);top:var(--tblr-steps-dot-offset);width:var(--tblr-steps-border-width);height:calc(100% + var(--tblr-steps-vertical-connector-gap));content:"";transform:translateX(calc(var(--tblr-dir) * -50%))}@keyframes status-pulsate-main{40%{transform:scale(1.25,1.25)}60%{transform:scale(1.25,1.25)}}@keyframes status-pulsate-secondary{10%{transform:scale(1,1)}30%{transform:scale(3,3)}80%{transform:scale(3,3)}100%{transform:scale(1,1)}}@keyframes status-pulsate-tertiary{25%{transform:scale(1,1)}80%{opacity:0;transform:scale(3,3)}100%{opacity:0;transform:scale(3,3)}}.status{--tblr-status-height:1.5rem;--tblr-status-color:oklch(55.55% 0 0deg);--tblr-status-padding-y:0.25rem;--tblr-status-padding-x:0.75rem;--tblr-status-gap:0.5rem;display:inline-flex;gap:var(--tblr-status-gap);align-items:center;height:var(--tblr-status-height);padding:var(--tblr-status-padding-y) var(--tblr-status-padding-x);margin:0;font-size:.875rem;font-weight:var(--tblr-font-weight-medium);line-height:1;color:var(--tblr-status-color);text-transform:none;letter-spacing:normal;background:color-mix(in oklab,var(--tblr-status-color) 10%,transparent);border-radius:var(--tblr-border-radius-pill)}.status .status-dot{background:var(--tblr-status-color)}.status .icon{font-size:1.25rem}.status-lite{color:var(--tblr-body-color)!important;background:0 0!important;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important}.status-primary{--tblr-status-color:var(--tblr-primary)}.status-secondary{--tblr-status-color:var(--tblr-secondary)}.status-success{--tblr-status-color:var(--tblr-success)}.status-info{--tblr-status-color:var(--tblr-info)}.status-warning{--tblr-status-color:var(--tblr-warning)}.status-danger{--tblr-status-color:var(--tblr-danger)}.status-light{--tblr-status-color:var(--tblr-light)}.status-dark{--tblr-status-color:var(--tblr-dark)}.status-muted{--tblr-status-color:var(--tblr-muted)}.status-blue{--tblr-status-color:var(--tblr-blue)}.status-azure{--tblr-status-color:var(--tblr-azure)}.status-indigo{--tblr-status-color:var(--tblr-indigo)}.status-purple{--tblr-status-color:var(--tblr-purple)}.status-pink{--tblr-status-color:var(--tblr-pink)}.status-red{--tblr-status-color:var(--tblr-red)}.status-orange{--tblr-status-color:var(--tblr-orange)}.status-yellow{--tblr-status-color:var(--tblr-yellow)}.status-lime{--tblr-status-color:var(--tblr-lime)}.status-green{--tblr-status-color:var(--tblr-green)}.status-teal{--tblr-status-color:var(--tblr-teal)}.status-cyan{--tblr-status-color:var(--tblr-cyan)}.status-x{--tblr-status-color:var(--tblr-x)}.status-facebook{--tblr-status-color:var(--tblr-facebook)}.status-twitter{--tblr-status-color:var(--tblr-twitter)}.status-linkedin{--tblr-status-color:var(--tblr-linkedin)}.status-google{--tblr-status-color:var(--tblr-google)}.status-youtube{--tblr-status-color:var(--tblr-youtube)}.status-vimeo{--tblr-status-color:var(--tblr-vimeo)}.status-dribbble{--tblr-status-color:var(--tblr-dribbble)}.status-github{--tblr-status-color:var(--tblr-github)}.status-instagram{--tblr-status-color:var(--tblr-instagram)}.status-pinterest{--tblr-status-color:var(--tblr-pinterest)}.status-vk{--tblr-status-color:var(--tblr-vk)}.status-rss{--tblr-status-color:var(--tblr-rss)}.status-flickr{--tblr-status-color:var(--tblr-flickr)}.status-bitbucket{--tblr-status-color:var(--tblr-bitbucket)}.status-tabler{--tblr-status-color:var(--tblr-tabler)}.status-dot{--tblr-status-dot-color:var(--tblr-status-color, oklch(55.55% 0 0deg));--tblr-status-size:0.5rem;position:relative;display:inline-block;width:var(--tblr-status-size);height:var(--tblr-status-size);background:var(--tblr-status-dot-color);border-radius:var(--tblr-border-radius-pill)}.status-dot-animated::before{position:absolute;inset:0;z-index:0;content:"";background:inherit;border-radius:inherit;opacity:.6;animation:1s linear 2s backwards infinite status-pulsate-tertiary}.status-indicator{--tblr-status-indicator-size:2.5rem;--tblr-status-indicator-color:var(--tblr-status-color, oklch(55.55% 0 0deg));position:relative;display:block;width:var(--tblr-status-indicator-size);height:var(--tblr-status-indicator-size)}.status-indicator-circle{--tblr-status-circle-size:0.75rem;position:absolute;inset-inline-start:50%;top:50%;width:var(--tblr-status-circle-size);height:var(--tblr-status-circle-size);margin:calc(var(--tblr-status-circle-size)/ -2) 0 0 calc(var(--tblr-status-circle-size)/ -2);background:var(--tblr-status-color);border-radius:var(--tblr-border-radius-pill)}.status-indicator-circle:first-child{z-index:3}.status-indicator-circle:nth-child(2){z-index:2;opacity:.1}.status-indicator-circle:nth-child(3){z-index:1;opacity:.3}.status-indicator-animated .status-indicator-circle:first-child{animation:2s linear 1s infinite backwards status-pulsate-main}.status-indicator-animated .status-indicator-circle:nth-child(2){animation:2s linear 1s infinite backwards status-pulsate-secondary}.status-indicator-animated .status-indicator-circle:nth-child(3){animation:2s linear 1s infinite backwards status-pulsate-tertiary}.switch-icon{outline-color:transparent;transition:outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.switch-icon{transition:none}}.switch-icon{--tblr-switch-icon-size:var(--tblr-icon-size);--tblr-switch-icon-min-size:1.5rem;--tblr-switch-icon-disabled-opacity:0.4;--tblr-switch-icon-loading-size:1rem;--tblr-switch-icon-loading-border-width:1px;--tblr-switch-icon-loading-animation-speed:0.75s;position:relative;display:inline-block;width:var(--tblr-switch-icon-size);min-width:var(--tblr-switch-icon-min-size);height:var(--tblr-switch-icon-size);min-height:var(--tblr-switch-icon-min-size);padding:0;line-height:1;vertical-align:bottom;cursor:pointer;background:0 0;border:0}.switch-icon.disabled,.switch-icon:disabled,.switch-icon[aria-disabled=true]{pointer-events:none;opacity:var(--tblr-switch-icon-disabled-opacity)}@media (prefers-reduced-motion:reduce){.switch-icon{--tblr-switch-icon-loading-animation-speed:1.5s}}.switch-icon:focus:not(:focus-visible){outline:0}.switch-icon:focus-visible{outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.switch-icon svg{display:block;width:100%;height:100%}.switch-icon .switch-icon-a,.switch-icon .switch-icon-b{position:absolute;inset:0;display:block;width:var(--tblr-switch-icon-size);height:var(--tblr-switch-icon-size);margin:auto}.switch-icon .switch-icon-a{opacity:1}.switch-icon .switch-icon-b{opacity:0}.switch-icon.active .switch-icon-a{opacity:0}.switch-icon.active .switch-icon-b{opacity:1}.switch-icon.switch-icon-loading{pointer-events:none}.switch-icon.switch-icon-loading .switch-icon-a,.switch-icon.switch-icon-loading .switch-icon-b{opacity:0;transition:none}.switch-icon.switch-icon-loading::after{position:absolute;inset-inline-start:calc(50% - var(--tblr-switch-icon-loading-size)/ 2);top:calc(50% - var(--tblr-switch-icon-loading-size)/ 2);width:var(--tblr-switch-icon-loading-size);height:var(--tblr-switch-icon-loading-size);content:"";border:var(--tblr-switch-icon-loading-border-width) var(--tblr-border-style) currentColor;border-inline-end-color:transparent;animation:spinner-border var(--tblr-switch-icon-loading-animation-speed) linear infinite;border-radius:var(--tblr-border-radius-pill)}.btn .switch-icon{--tblr-switch-icon-min-size:var(--tblr-switch-icon-size);vertical-align:middle;pointer-events:none}.btn .switch-icon .icon{width:100%;min-width:0;height:100%;margin:0}.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:opacity .5s}@media (prefers-reduced-motion:reduce){.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:opacity .5s,transform 0s .5s}@media (prefers-reduced-motion:reduce){.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-b{transform:scale(1.5)}.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:opacity 0s,transform .5s}@media (prefers-reduced-motion:reduce){.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:none}}.switch-icon-scale.active .switch-icon-b{transform:scale(1)}.switch-icon-flip{perspective:10em}.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{backface-visibility:hidden;transform-style:preserve-3d;transition:opacity 0s .2s,transform .4s ease-in-out}@media (prefers-reduced-motion:reduce){.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{transition:none}}.switch-icon-flip .switch-icon-a{opacity:1;transform:rotateY(0deg)}.switch-icon-flip .switch-icon-b{opacity:1;transform:rotateY(-180deg)}.switch-icon-flip.active .switch-icon-a{opacity:1;transform:rotateY(180deg)}.switch-icon-flip.active .switch-icon-b{opacity:1;transform:rotateY(0deg)}.switch-icon-slide-down,.switch-icon-slide-end,.switch-icon-slide-left,.switch-icon-slide-right,.switch-icon-slide-start,.switch-icon-slide-up{overflow:hidden}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-end .switch-icon-a,.switch-icon-slide-end .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-start .switch-icon-a,.switch-icon-slide-start .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:opacity .3s,transform .3s}@media (prefers-reduced-motion:reduce){.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-end .switch-icon-a,.switch-icon-slide-end .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-start .switch-icon-a,.switch-icon-slide-start .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:none}}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-end .switch-icon-a,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-start .switch-icon-a,.switch-icon-slide-up .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-end .switch-icon-b,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-start .switch-icon-b,.switch-icon-slide-up .switch-icon-b{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-a,.switch-icon-slide-end.active .switch-icon-a,.switch-icon-slide-left.active .switch-icon-a,.switch-icon-slide-right.active .switch-icon-a,.switch-icon-slide-start.active .switch-icon-a,.switch-icon-slide-up.active .switch-icon-a{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-b,.switch-icon-slide-end.active .switch-icon-b,.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right.active .switch-icon-b,.switch-icon-slide-start.active .switch-icon-b,.switch-icon-slide-up.active .switch-icon-b{transform:translateY(0)}.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-start .switch-icon-a{transform:translateX(0)}.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-start .switch-icon-b{transform:translateX(calc(var(--tblr-dir) * 100%))}.switch-icon-slide-left.active .switch-icon-a,.switch-icon-slide-start.active .switch-icon-a{transform:translateX(calc(var(--tblr-dir) * -100%))}.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-start.active .switch-icon-b{transform:translateX(0)}.switch-icon-slide-end .switch-icon-a,.switch-icon-slide-right .switch-icon-a{transform:translateX(0)}.switch-icon-slide-end .switch-icon-b,.switch-icon-slide-right .switch-icon-b{transform:translateX(calc(var(--tblr-dir) * -100%))}.switch-icon-slide-end.active .switch-icon-a,.switch-icon-slide-right.active .switch-icon-a{transform:translateX(calc(var(--tblr-dir) * 100%))}.switch-icon-slide-end.active .switch-icon-b,.switch-icon-slide-right.active .switch-icon-b{transform:translateX(0)}.switch-icon-slide-down .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-a{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-b{transform:translateY(0)}.markdown>table,.prose>table,.table{font:inherit}@media print{.markdown>table thead,.prose>table thead,.table thead{display:table-header-group}.markdown>table tr,.prose>table tr,.table tr{break-inside:avoid}}.markdown>table thead th,.prose>table thead th,.table thead th{padding-top:.5rem;padding-bottom:.5rem;white-space:nowrap;background:var(--tblr-bg-surface-tertiary);font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary)}@media print{.markdown>table thead th,.prose>table thead th,.table thead th{background:0 0}}.table-responsive .markdown>table,.table-responsive .prose>table,.table-responsive .table{margin-bottom:0}.table-responsive:focus-visible{--tblr-focus-ring-offset:-2px;outline:var(--tblr-focus-ring,var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color));outline-offset:var(--tblr-focus-ring-offset)}.table-transparent thead th{background:0 0}.table-nowrap>:not(caption)>*>*{white-space:nowrap}.table-vcenter>:not(caption)>*>*{vertical-align:middle}.table-center>:not(caption)>*>*{text-align:center}.td-truncate{width:100%;max-width:1px}.table-mobile{display:block}.table-mobile thead{display:none}.table-mobile tbody,.table-mobile tr{display:flex;flex-direction:column}.table-mobile td{display:block;padding:.75rem .75rem!important;color:var(--tblr-body-color)!important;border:none}.table-mobile td[data-label]::before{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);display:block;content:attr(data-label)}.table-mobile tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile .btn{display:block}@media (max-width:575.98px){.table-mobile-sm{display:block}.table-mobile-sm thead{display:none}.table-mobile-sm tbody,.table-mobile-sm tr{display:flex;flex-direction:column}.table-mobile-sm td{display:block;padding:.75rem .75rem!important;color:var(--tblr-body-color)!important;border:none}.table-mobile-sm td[data-label]::before{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);display:block;content:attr(data-label)}.table-mobile-sm tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-sm .btn{display:block}}@media (max-width:767.98px){.table-mobile-md{display:block}.table-mobile-md thead{display:none}.table-mobile-md tbody,.table-mobile-md tr{display:flex;flex-direction:column}.table-mobile-md td{display:block;padding:.75rem .75rem!important;color:var(--tblr-body-color)!important;border:none}.table-mobile-md td[data-label]::before{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);display:block;content:attr(data-label)}.table-mobile-md tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-md .btn{display:block}}@media (max-width:991.98px){.table-mobile-lg{display:block}.table-mobile-lg thead{display:none}.table-mobile-lg tbody,.table-mobile-lg tr{display:flex;flex-direction:column}.table-mobile-lg td{display:block;padding:.75rem .75rem!important;color:var(--tblr-body-color)!important;border:none}.table-mobile-lg td[data-label]::before{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);display:block;content:attr(data-label)}.table-mobile-lg tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-lg .btn{display:block}}@media (max-width:1199.98px){.table-mobile-xl{display:block}.table-mobile-xl thead{display:none}.table-mobile-xl tbody,.table-mobile-xl tr{display:flex;flex-direction:column}.table-mobile-xl td{display:block;padding:.75rem .75rem!important;color:var(--tblr-body-color)!important;border:none}.table-mobile-xl td[data-label]::before{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);display:block;content:attr(data-label)}.table-mobile-xl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xl .btn{display:block}}@media (max-width:1399.98px){.table-mobile-xxl{display:block}.table-mobile-xxl thead{display:none}.table-mobile-xxl tbody,.table-mobile-xxl tr{display:flex;flex-direction:column}.table-mobile-xxl td{display:block;padding:.75rem .75rem!important;color:var(--tblr-body-color)!important;border:none}.table-mobile-xxl td[data-label]::before{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary);display:block;content:attr(data-label)}.table-mobile-xxl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xxl .btn{display:block}}.table-sort{--tblr-table-sort-icon-size:1rem;--tblr-table-sort-icon-margin-start:0.25rem;display:block;width:100%;padding:.5rem .75rem;margin:-.5rem -.75rem;font:inherit;color:inherit;text-align:inherit;text-transform:inherit;letter-spacing:inherit;background:inherit;border:0;transition:color .3s}@media (prefers-reduced-motion:reduce){.table-sort{transition:none}}.table-sort.asc,.table-sort.desc,.table-sort:hover{color:var(--tblr-body-color)}.table-sort::after{display:inline-flex;width:var(--tblr-table-sort-icon-size);height:var(--tblr-table-sort-icon-size);margin-inline-start:var(--tblr-table-sort-icon-margin-start);vertical-align:bottom;content:"";background:currentColor;mask-image:url("data:image/svg+xml,")}.table-sort.asc::after{mask-image:url("data:image/svg+xml,")}.table-sort.desc::after{mask-image:url("data:image/svg+xml,")}.table-borderless thead th{background:0 0}.table-selectable tbody tr .on-checked{display:none}.table-selectable tbody tr .on-unchecked{display:initial}.table-selectable tbody tr:has(.table-selectable-check:checked){background-color:var(--tblr-active-bg)}.table-selectable tbody tr:has(.table-selectable-check:checked) .on-checked{display:initial}.table-selectable tbody tr:has(.table-selectable-check:checked) .on-unchecked{display:none}.tag{--tblr-tag-height:1.5rem;--tblr-tag-padding-x:0.5rem;--tblr-tag-gap:0.5rem;--tblr-tag-close-margin-end:-0.25rem;--tblr-tag-close-margin-start:-0.125rem;--tblr-tag-close-size:1rem;--tblr-tag-close-font-size:0.5rem;--tblr-tag-addon-margin-start:-0.25rem;--tblr-tag-icon-margin-end:-0.125rem;--tblr-tag-icon-size:1rem;--tblr-tag-check-size:1rem;display:inline-flex;gap:var(--tblr-tag-gap);align-items:center;height:var(--tblr-tag-height);padding:0 var(--tblr-tag-padding-x);background:var(--tblr-bg-surface);border:1px solid var(--tblr-border-color);box-shadow:var(--tblr-shadow-input);border-radius:var(--tblr-border-radius)}.tag .btn-close{width:var(--tblr-tag-close-size);height:var(--tblr-tag-close-size);padding:0;margin-inline-start:var(--tblr-tag-close-margin-start);margin-inline-end:var(--tblr-tag-close-margin-end);font-size:var(--tblr-tag-close-font-size)}.tag-badge{--tblr-tag-badge-padding-y:0.125rem;--tblr-tag-badge-padding-x:0.25rem;--tblr-tag-badge-margin-end:-0.25rem;--tblr-badge-font-size:0.625rem;--tblr-badge-padding-x:var(--tblr-tag-badge-padding-x);--tblr-badge-padding-y:var(--tblr-tag-badge-padding-y);margin-inline-end:var(--tblr-tag-badge-margin-end)}.tag-avatar,.tag-check,.tag-flag,.tag-icon,.tag-payment{margin-inline-start:var(--tblr-tag-addon-margin-start)}.tag-icon{width:var(--tblr-tag-icon-size);height:var(--tblr-tag-icon-size);margin-inline-end:var(--tblr-tag-icon-margin-end);color:var(--tblr-secondary)}.tag-check{width:var(--tblr-tag-check-size);height:var(--tblr-tag-check-size);background-size:var(--tblr-tag-check-size)}.tag-list,.tags-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.text-shimmer{--tblr-text-shimmer-duration:2s;--tblr-text-shimmer-opacity:0.4;--tblr-text-shimmer-width:20%;--tblr-text-shimmer-fade-duration:320ms;--tblr-text-shimmer-fade-easing:cubic-bezier(0.22, 1, 0.36, 1);--tblr-text-shimmer-loader-size:0.8571428571em;--tblr-text-shimmer-loader-border-width:0.1em;--tblr-text-shimmer-loader-margin:0.2857142857em;--tblr-text-shimmer-loader-duration:0.75s;--tblr-text-shimmer-loader-opacity:0.25;display:inline-block;mask-image:linear-gradient(90deg,rgba(0,0,0,var(--tblr-text-shimmer-opacity)) calc(50% - var(--tblr-text-shimmer-width)/ 2),#000 50%,rgba(0,0,0,var(--tblr-text-shimmer-opacity)) calc(50% + var(--tblr-text-shimmer-width)/ 2));mask-size:300% 100%;animation:text-shimmer-in var(--tblr-text-shimmer-fade-duration) var(--tblr-text-shimmer-fade-easing) both,text-shimmer var(--tblr-text-shimmer-duration) linear infinite}@media (prefers-reduced-motion:reduce){.text-shimmer{mask-image:none;animation:none}}.text-shimmer-loader{position:relative;display:inline-block;width:1em;height:1em;margin-inline-end:var(--tblr-text-shimmer-loader-margin);vertical-align:-.125em}.text-shimmer-loader::after,.text-shimmer-loader::before{position:absolute;inset:0;width:var(--tblr-text-shimmer-loader-size);height:var(--tblr-text-shimmer-loader-size);margin:auto;content:"";border:var(--tblr-text-shimmer-loader-border-width) solid;border-radius:50%}.text-shimmer-loader::before{border-color:currentColor;opacity:var(--tblr-text-shimmer-loader-opacity)}.text-shimmer-loader::after{border-color:currentColor transparent transparent;animation:rotate-360 var(--tblr-text-shimmer-loader-duration) linear infinite}@media (prefers-reduced-motion:reduce){.text-shimmer-loader::after{animation-duration:calc(var(--tblr-text-shimmer-loader-duration) * 2)}}@keyframes text-shimmer-in{from{opacity:0}to{opacity:1}}@keyframes text-shimmer{from{mask-position:calc(50% + var(--tblr-dir) * 50%) 0}to{mask-position:calc(50% - var(--tblr-dir) * 50%) 0}}.toast{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);box-shadow:color-mix(in oklab,var(--tblr-dark) 4%,transparent) 0 2px 4px 0}.toast .toast-header{-webkit-user-select:none;user-select:none}.toast button[data-bs-dismiss=toast]:focus:not(:focus-visible),.toast button[data-dismiss=toast]:focus:not(:focus-visible){outline:0}@media print{.toast{display:none}}.toast-primary{--tblr-toast-color:oklch(54.6% 0.1724 254.2deg)}.toast-secondary{--tblr-toast-color:oklch(55.55% 0 0deg)}.toast-success{--tblr-toast-color:oklch(67.38% 0.1885 145.43deg)}.toast-info{--tblr-toast-color:oklch(66.26% 0.1358 246.81deg)}.toast-warning{--tblr-toast-color:oklch(77.02% 0.1658 71.02deg)}.toast-danger{--tblr-toast-color:oklch(58.29% 0.1941 25.59deg)}.toast-light{--tblr-toast-color:oklch(98.51% 0 0deg)}.toast-dark{--tblr-toast-color:oklch(26.86% 0 0deg)}.toast-muted{--tblr-toast-color:oklch(55.55% 0 0deg)}.toast-blue{--tblr-toast-color:oklch(54.6% 0.1724 254.2deg)}.toast-azure{--tblr-toast-color:oklch(66.26% 0.1358 246.81deg)}.toast-indigo{--tblr-toast-color:oklch(55.66% 0.2082 268.35deg)}.toast-purple{--tblr-toast-color:oklch(57.83% 0.2186 319.15deg)}.toast-pink{--tblr-toast-color:oklch(58.81% 0.201 5.25deg)}.toast-red{--tblr-toast-color:oklch(58.29% 0.1941 25.59deg)}.toast-orange{--tblr-toast-color:oklch(68.51% 0.1954 44.57deg)}.toast-yellow{--tblr-toast-color:oklch(77.02% 0.1658 71.02deg)}.toast-lime{--tblr-toast-color:oklch(70.99% 0.1897 131.53deg)}.toast-green{--tblr-toast-color:oklch(67.38% 0.1885 145.43deg)}.toast-teal{--tblr-toast-color:oklch(64.32% 0.1338 164.7deg)}.toast-cyan{--tblr-toast-color:oklch(65.52% 0.1105 212.17deg)}.toolbar{--tblr-toolbar-gutter:0.5rem;display:flex;flex-shrink:0;flex-wrap:nowrap;margin:0 calc(-1 * var(--tblr-toolbar-gutter))}.toolbar>*{margin:0 var(--tblr-toolbar-gutter)}@media print{.toolbar{display:none}}.tracking{--tblr-tracking-height:1.5rem;--tblr-tracking-gap-width:0.125rem;--tblr-tracking-block-border-radius:var(--tblr-border-radius);--tblr-tracking-block-min-width:0.25rem;display:flex;gap:var(--tblr-tracking-gap-width)}.tracking-squares{--tblr-tracking-block-border-radius:var(--tblr-border-radius-sm)}.tracking-squares .tracking-block{height:auto}.tracking-squares .tracking-block::before{display:block;padding-top:100%;content:""}.tracking-block{flex:1;min-width:var(--tblr-tracking-block-min-width);height:var(--tblr-tracking-height);background:var(--tblr-border-color);border-radius:var(--tblr-tracking-block-border-radius)}.timeline{--tblr-timeline-icon-size:2.5rem;position:relative;padding:0;list-style:none}.timeline-event{position:relative}.timeline-event:not(:last-child){margin-bottom:var(--tblr-page-padding)}.timeline-event:not(:last-child)::before{position:absolute;inset-inline-start:calc(var(--tblr-timeline-icon-size)/ 2);top:var(--tblr-timeline-icon-size);bottom:calc(-1 * var(--tblr-page-padding));width:var(--tblr-border-width);content:"";background-color:var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.timeline-event-icon{position:absolute;z-index:5;display:flex;align-items:center;justify-content:center;width:var(--tblr-timeline-icon-size,2.5rem);height:var(--tblr-timeline-icon-size,2.5rem);color:var(--tblr-secondary);background:var(--tblr-bg-surface-secondary);border-radius:var(--tblr-border-radius)}.timeline-event-card{margin-inline-start:calc(var(--tblr-timeline-icon-size,2.5rem) + var(--tblr-page-padding))}.timeline-simple .timeline-event-icon{display:none}.timeline-simple .timeline-event-card{margin-inline-start:0}.hr-text{--tblr-hr-text-gap:0.5rem;display:flex;align-items:center;height:1px;margin:2rem 0;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary)}.hr-text::after,.hr-text::before{flex:1 1 auto;height:1px;background-color:var(--tblr-border-color)}.hr-text::before{margin-inline-end:var(--tblr-hr-text-gap);content:""}.hr-text::after{margin-inline-start:var(--tblr-hr-text-gap);content:""}.hr-text>:first-child{padding-inline-start:0;padding-inline-end:var(--tblr-hr-text-gap);color:var(--tblr-secondary)}.hr-text.hr-text-left::before,.hr-text.hr-text-start::before{content:none}.hr-text.hr-text-left>:first-child,.hr-text.hr-text-start>:first-child{padding-inline-start:var(--tblr-hr-text-gap);padding-inline-end:var(--tblr-hr-text-gap)}.hr-text.hr-text-end::before,.hr-text.hr-text-right::before{content:""}.hr-text.hr-text-end::after,.hr-text.hr-text-right::after{content:none}.hr-text.hr-text-end>:first-child,.hr-text.hr-text-right>:first-child{padding-inline-start:var(--tblr-hr-text-gap);padding-inline-end:0}.card>.hr-text{margin:0}.hr-text-spaceless{--tblr-hr-text-spaceless-margin-y:-0.5rem;margin:var(--tblr-hr-text-spaceless-margin-y) 0}.lead{font-size:inherit;color:var(--tblr-secondary)}a{-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;color:color-mix(in oklab,var(--tblr-link-color) calc(var(--tblr-link-opacity,1) * 100%),transparent)}a:hover{color:color-mix(in oklab,var(--tblr-link-hover-color) calc(var(--tblr-link-opacity,1) * 100%),transparent)}.h1 a,.h2 a,.h3 a,.h4 a,.h5 a,.h6 a,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit}.h1 a:hover,.h2 a:hover,.h3 a:hover,.h4 a:hover,.h5 a:hover,.h6 a:hover,h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color:inherit}.h1,h1{font-size:var(--tblr-font-size-h1);line-height:var(--tblr-line-height-h1)}.h2,h2{font-size:var(--tblr-font-size-h2);line-height:var(--tblr-line-height-h2)}.h3,h3{font-size:var(--tblr-font-size-h3);line-height:var(--tblr-line-height-h3)}.h4,h4{font-size:var(--tblr-font-size-h4);line-height:var(--tblr-line-height-h4)}.h5,h5{font-size:var(--tblr-font-size-h5);line-height:var(--tblr-line-height-h5)}.h6,h6{font-size:var(--tblr-font-size-h6);line-height:var(--tblr-line-height-h6)}.fs-base{font-size:var(--tblr-body-font-size)}.strong,b,strong{font-weight:var(--tblr-font-weight-semibold)}blockquote{--tblr-blockquote-padding:1rem;--tblr-blockquote-paragraph-margin-bottom:1rem;padding:var(--tblr-blockquote-padding) var(--tblr-blockquote-padding) var(--tblr-blockquote-padding);border-inline-start:2px var(--tblr-border-style) var(--tblr-border-color)}blockquote p{margin-bottom:var(--tblr-blockquote-paragraph-margin-bottom)}blockquote p:last-child{margin-bottom:0}blockquote cite{display:block;text-align:end}blockquote cite::before{content:"— "}ol,ul{--tblr-list-padding-start:1.5rem;padding-inline-start:var(--tblr-list-padding-start)}.hr,hr{--tblr-hr-margin-y:2rem;margin:var(--tblr-hr-margin-y) 0}dl dd:last-child{margin-bottom:0}pre{--tblr-scrollbar-color:var(--tblr-light);padding:1rem;font-size:.92857143em;line-height:1.4285714286;color:var(--tblr-light);background:var(--tblr-bg-surface-dark);border-radius:var(--tblr-border-radius)}pre{scrollbar-color:color-mix(in oklab,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent) transparent}pre::-webkit-scrollbar{width:1rem;height:1rem;-webkit-transition:background .3s;transition:background .3s}@media (prefers-reduced-motion:reduce){pre::-webkit-scrollbar{-webkit-transition:none;transition:none}}pre::-webkit-scrollbar-thumb{border-radius:1rem;border:5px solid transparent;box-shadow:inset 0 0 0 1rem color-mix(in oklab,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent)}pre::-webkit-scrollbar-track{background:0 0}pre:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem color-mix(in oklab,var(--tblr-scrollbar-color,var(--tblr-body-color)) 40%,transparent)}pre::-webkit-scrollbar-corner{background:0 0}pre ::selection,pre::selection{background-color:color-mix(in oklab,var(--tblr-primary) 40%,transparent)}pre code{padding:0;background:0 0}code{padding:2px 4px;background:var(--tblr-code-bg);border-radius:var(--tblr-border-radius)}abbr{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}img{max-width:100%;height:auto}.list-unstyled{margin-inline-start:0}.text-selected,::selection{background-color:light-dark(color-mix(in oklab,var(--tblr-primary) 10%,transparent),color-mix(in oklab,var(--tblr-primary) 40%,transparent))}.text-selected{display:inline-block}[class*=" link-"].disabled,[class^=link-].disabled{color:var(--tblr-disabled-color)!important;pointer-events:none}a:hover:has(.icon){text-decoration:none}.link-hoverable{border-radius:var(--tblr-border-radius);transition:background-color .15s ease-in-out}.link-hoverable:hover{color:var(--tblr-primary);text-decoration:none;background:var(--tblr-hover-bg)}.subheader{font-size:.75rem;font-weight:var(--tblr-font-weight-medium);text-transform:uppercase;letter-spacing:.04em;line-height:1rem;color:var(--tblr-secondary)}.mention{display:inline-block;padding:.1666666667em .6666666667em;font-size:.8571428571em;font-weight:var(--tblr-font-weight-medium);line-height:1.3333333333em;color:var(--tblr-body-color);background:var(--tblr-bg-surface-tertiary);box-shadow:var(--tblr-shadow-border);border-radius:var(--tblr-border-radius-pill)}a.mention{cursor:pointer}a.mention.hover,a.mention:hover{text-decoration:underline;background:var(--tblr-hover-bg)}.mention-app,.mention-avatar,.mention-color{display:inline-flex;width:1.1666666667em;height:1.1666666667em;margin:-.1666666667em .3333333333em 0 -.3333333333em;text-align:center;vertical-align:middle;background:no-repeat center center/cover;box-shadow:var(--tblr-shadow-border);border-radius:var(--tblr-border-radius-pill)}.mention-app{background:0 0;border-radius:0;box-shadow:none}.mention-count{margin-inline-start:.6666666667em;color:var(--tblr-secondary)}.text-incorrect{text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:var(--tblr-red);background:color-mix(in oklab,var(--tblr-red) 4%,transparent);background:color-mix(in oklab,var(--tblr-red) 4%,transparent)}.text-correct{text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:var(--tblr-green);background:color-mix(in oklab,var(--tblr-green) 4%,transparent);background:color-mix(in oklab,var(--tblr-green) 4%,transparent)}.steps:not(:has(> .step-item)){--tblr-steps-padding:2rem;--tblr-steps-item-size:1.5rem;--tblr-steps-margin-start:1rem;--tblr-steps-margin-bottom:2rem;--tblr-steps-heading-margin-top:2.5rem;display:block;width:auto;padding-inline-start:var(--tblr-steps-padding);margin-inline-start:var(--tblr-steps-margin-start);margin-bottom:var(--tblr-steps-margin-bottom);overflow:visible;counter-reset:step;border-inline-start:1px solid var(--tblr-border-color)}.steps:not(:has(> .step-item)) .h3,.steps:not(:has(> .step-item)) h3{counter-increment:step}.steps:not(:has(> .step-item)) .h3:not(:first-child),.steps:not(:has(> .step-item)) h3:not(:first-child){margin-top:var(--tblr-steps-heading-margin-top)!important}.steps:not(:has(> .step-item)) .h3::before,.steps:not(:has(> .step-item)) h3::before{position:absolute;display:inline-block;width:var(--tblr-steps-item-size);height:var(--tblr-steps-item-size);margin-inline-start:calc(-1 * var(--tblr-steps-padding) - var(--tblr-steps-item-size)/ 2);margin-top:1px;font-size:var(--tblr-font-size-h4);font-weight:var(--tblr-font-weight-semibold);line-height:calc(var(--tblr-steps-item-size) - 2px);color:var(--tblr-body-color);text-align:center;content:counter(step);background:var(--tblr-bg-surface);border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.steps:not(:has(> .step-item))>:last-child{margin-bottom:0}.callout{--tblr-callout-margin-bottom:1.5rem;--tblr-callout-padding-y:0.5rem;--tblr-callout-padding-x:1rem;padding:var(--tblr-callout-padding-y) var(--tblr-callout-padding-x);margin-bottom:var(--tblr-callout-margin-bottom);background:var(--tblr-primary-lt);border:1px solid var(--tblr-primary-200);border-radius:var(--tblr-border-radius)}.callout>:last-child{margin-bottom:0}.kbd,kbd{--tblr-kbd-height:1.25rem;--tblr-kbd-padding-x:0.25rem;--tblr-kbd-padding-y:0;--tblr-kbd-gap:0.25rem;--tblr-kbd-font-size:var(--tblr-font-size-h5);--tblr-kbd-font-weight:var(--tblr-font-weight-medium);--tblr-kbd-color:var(--tblr-secondary-color);--tblr-kbd-bg:color-mix(in oklab, currentColor 12%, transparent);--tblr-kbd-border:0;--tblr-kbd-border-radius:var(--tblr-border-radius-sm);box-sizing:border-box;display:inline-flex;gap:var(--tblr-kbd-gap);align-items:center;justify-content:center;min-width:var(--tblr-kbd-height);max-width:100%;height:var(--tblr-kbd-height);padding:var(--tblr-kbd-padding-y) var(--tblr-kbd-padding-x);font-family:var(--tblr-font-sans-serif);font-size:var(--tblr-kbd-font-size);font-weight:var(--tblr-kbd-font-weight);line-height:1;color:var(--tblr-kbd-color);white-space:nowrap;vertical-align:baseline;background-color:var(--tblr-kbd-bg);border:var(--tblr-kbd-border);border-radius:var(--tblr-kbd-border-radius)}.kbd .icon,kbd .icon{--tblr-icon-size:0.75rem}.badge .kbd,.badge kbd,.btn .kbd,.btn kbd,.tooltip .kbd,.tooltip kbd{--tblr-kbd-color:inherit}.badge>.kbd,.badge>kbd,.btn>.kbd,.btn>kbd{margin-inline-start:.5em}.kbd-group{display:inline-flex;gap:var(--tblr-kbd-gap,.25rem);align-items:center;min-width:0;height:auto;padding:0;font-weight:inherit;color:inherit;background:0 0;border:0}.kbd-group>kbd{padding:var(--tblr-kbd-padding-y) var(--tblr-kbd-padding-x);font-size:var(--tblr-kbd-font-size)}.chart{--tblr-chart-min-height:10rem;display:block;min-height:var(--tblr-chart-min-height)}.chart text{font-family:inherit}.chart-sm{--tblr-chart-height-sm:2.5rem;height:var(--tblr-chart-height-sm)}.chart-lg{--tblr-chart-height-lg:15rem;height:var(--tblr-chart-height-lg)}.chart-square{--tblr-chart-height-square:5.75rem;height:var(--tblr-chart-height-square)}.chart-sparkline{--tblr-chart-sparkline-width:4rem;--tblr-chart-sparkline-height:2.5rem;position:relative;width:var(--tblr-chart-sparkline-width);height:var(--tblr-chart-sparkline-height);min-height:0!important;line-height:1}.chart-sparkline-sm{--tblr-chart-sparkline-height-sm:1.5rem;height:var(--tblr-chart-sparkline-height-sm)}.chart-sparkline-square{--tblr-chart-sparkline-width-square:2.5rem;width:var(--tblr-chart-sparkline-width-square)}.chart-sparkline-wide{--tblr-chart-sparkline-width-wide:6rem;width:var(--tblr-chart-sparkline-width-wide)}.chart-sparkline-label{--tblr-chart-sparkline-label-icon-size:1rem;position:absolute;inset-inline-start:0;inset-inline-end:0;top:0;bottom:0;display:flex;align-items:center;justify-content:center;font-size:.625rem}.chart-sparkline-label .icon{width:var(--tblr-chart-sparkline-label-icon-size);height:var(--tblr-chart-sparkline-label-icon-size);font-size:var(--tblr-chart-sparkline-label-icon-size)}.sparkline{--tblr-sparkline-width:5rem;--tblr-sparkline-height:1.5rem;--tblr-sparkline-stroke:currentColor;--tblr-sparkline-negative:var(--tblr-red);--tblr-sparkline-zero:var(--tblr-border-color);--tblr-sparkline-threshold:var(--tblr-secondary);--tblr-sparkline-stroke-width:2;--tblr-sparkline-fill:color-mix(in oklab, currentColor 10%, transparent);--tblr-sparkline-track:color-mix(in oklab, currentColor 15%, transparent);--tblr-sparkline-spot:currentColor;--tblr-sparkline-spot-size:2;--tblr-sparkline-label-font-size:0.625rem;--tblr-sparkline-label-color:var(--tblr-body-color);position:relative;display:inline-block;flex-shrink:0;width:var(--tblr-sparkline-width);height:var(--tblr-sparkline-height);line-height:0;vertical-align:middle}.sparkline .sparkline-svg{display:block;width:100%;height:100%;overflow:visible}.sparkline .sparkline-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:var(--tblr-sparkline-label-font-size);font-weight:500;font-variant-numeric:tabular-nums;line-height:1;color:var(--tblr-sparkline-label-color)}.sparkline-sm{--tblr-sparkline-width:3rem;--tblr-sparkline-height:1rem}.sparkline-lg{--tblr-sparkline-width:8rem;--tblr-sparkline-height:2.5rem}.sparkline-square{--tblr-sparkline-width:var(--tblr-sparkline-height)}.sparkline-disabled{--tblr-sparkline-stroke:var(--tblr-disabled-color);--tblr-sparkline-negative:var(--tblr-disabled-color);--tblr-sparkline-spot:var(--tblr-disabled-color);--tblr-sparkline-fill:color-mix(in oklab, var(--tblr-disabled-color) 30%, transparent);--tblr-sparkline-track:color-mix(in oklab, var(--tblr-disabled-color) 40%, transparent);--tblr-sparkline-label-color:var(--tblr-disabled-color)}@keyframes vector-map-line{to{stroke-dashoffset:calc(var(--tblr-vector-map-line-dash) * -2)}}.vector-map{--tblr-vector-map-color:var(--tblr-primary);--tblr-vector-map-region-fill:var(--tblr-border-color);--tblr-vector-map-region-stroke:var(--tblr-bg-surface);--tblr-vector-map-region-stroke-width:1px;--tblr-vector-map-value-min:0.1;--tblr-vector-map-point-size:0.375rem;--tblr-vector-map-selected-stroke:var(--tblr-body-color);--tblr-vector-map-selected-stroke-width:2px;--tblr-vector-map-marker-size:0.5rem;--tblr-vector-map-marker-color:var(--tblr-vector-map-color);--tblr-vector-map-marker-halo-color:var(--tblr-bg-surface);--tblr-vector-map-marker-halo-width:2px;--tblr-vector-map-line-color:var(--tblr-secondary);--tblr-vector-map-line-width:1px;--tblr-vector-map-line-dash:4px;--tblr-vector-map-line-duration:1s;--tblr-vector-map-controls-offset:var(--tblr-spacer-2);--tblr-vector-map-legend-width:8rem;--tblr-vector-map-legend-height:0.5rem;position:relative;display:block;line-height:0}.vector-map-svg{display:block;width:100%;height:100%}.vector-map-region{--tblr-vector-map-region-color:var(--tblr-vector-map-region-fill);fill:var(--tblr-vector-map-region-color);stroke:var(--tblr-vector-map-region-stroke);stroke-linejoin:round;stroke-width:var(--tblr-vector-map-region-stroke-width);vector-effect:non-scaling-stroke}.vector-map-legend-step,.vector-map-region[data-value]{--tblr-vector-map-region-color:color-mix(in oklab, var(--tblr-vector-map-color) calc((var(--tblr-vector-map-value-min) + var(--tblr-vector-map-value, 1) * (1 - var(--tblr-vector-map-value-min))) * 100%), var(--tblr-vector-map-region-fill))}.vector-map-line{fill:none;stroke:var(--tblr-vector-map-line-color);stroke-dasharray:var(--tblr-vector-map-line-dash);stroke-width:var(--tblr-vector-map-line-width);vector-effect:non-scaling-stroke;animation:vector-map-line var(--tblr-vector-map-line-duration) linear infinite}@media (prefers-reduced-motion:reduce){.vector-map-line{animation:none}}.vector-map-marker-dot,.vector-map-marker-halo,.vector-map-region-point-dot,.vector-map-region-point-halo{fill:none;stroke-linecap:round;vector-effect:non-scaling-stroke}.vector-map-colors .vector-map-legend-step,.vector-map-colors .vector-map-region[data-value]{--tblr-vector-map-region-color:color-mix(in oklab, color-mix(in oklab, color-mix(in oklab, color-mix(in oklab, var(--tblr-vector-map-color-1, transparent), var(--tblr-vector-map-color-2, transparent) calc(clamp(0, var(--tblr-vector-map-value, 1) * (var(--tblr-vector-map-colors, 2) - 1) - 0, 1) * 100%)), var(--tblr-vector-map-color-3, transparent) calc(clamp(0, var(--tblr-vector-map-value, 1) * (var(--tblr-vector-map-colors, 2) - 1) - 1, 1) * 100%)), var(--tblr-vector-map-color-4, transparent) calc(clamp(0, var(--tblr-vector-map-value, 1) * (var(--tblr-vector-map-colors, 2) - 1) - 2, 1) * 100%)), var(--tblr-vector-map-color-5, transparent) calc(clamp(0, var(--tblr-vector-map-value, 1) * (var(--tblr-vector-map-colors, 2) - 1) - 3, 1) * 100%))}.vector-map-region-point:not([data-value]){display:none}.vector-map-region-point-halo{stroke:var(--tblr-vector-map-marker-halo-color);stroke-width:calc(var(--tblr-vector-map-point-size) + var(--tblr-vector-map-marker-halo-width) * 2)}.vector-map-region-point-dot{stroke:var(--tblr-vector-map-region-color);stroke-width:var(--tblr-vector-map-point-size)}.vector-map-marker-halo{stroke:var(--tblr-vector-map-marker-halo-color);stroke-width:calc(var(--tblr-vector-map-marker-size) + var(--tblr-vector-map-marker-halo-width) * 2)}.vector-map-marker-dot{stroke:var(--tblr-vector-map-marker-color);stroke-width:var(--tblr-vector-map-marker-size)}.vector-map-tooltip{position:absolute;z-index:1;padding:var(--tblr-spacer-1) var(--tblr-spacer-2);font-size:.765625rem;line-height:1.4285714286;color:var(--tblr-text-inverted);white-space:nowrap;pointer-events:none;background:var(--tblr-bg-surface-inverted);border-radius:var(--tblr-border-radius);transform:translate(-50%,calc(-100% - .5rem))}.vector-map-zoomable .vector-map-svg{touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none}.vector-map-dragging .vector-map-svg{cursor:grabbing}.vector-map-controls{position:absolute;inset-block-start:var(--tblr-vector-map-controls-offset);inset-inline-end:var(--tblr-vector-map-controls-offset);z-index:1}.vector-map-controls .icon{fill:none;stroke:currentColor;stroke-linecap:round;stroke-width:2}.vector-map-legend{display:flex;gap:.5rem;align-items:center;justify-content:center;margin-top:.5rem;font-size:.765625rem;font-variant-numeric:tabular-nums;line-height:1.4285714286;color:var(--tblr-secondary)}.vector-map-legend-scale{display:flex;width:var(--tblr-vector-map-legend-width);height:var(--tblr-vector-map-legend-height);overflow:hidden;border-radius:100rem}.vector-map-legend-step{flex:1;background:var(--tblr-vector-map-region-color)}.vector-map-selectable .vector-map-region{cursor:pointer}.vector-map-region-selected{stroke:var(--tblr-vector-map-selected-stroke);stroke-width:var(--tblr-vector-map-selected-stroke-width)}.vector-map-region-selected .vector-map-region-point-halo{stroke:var(--tblr-vector-map-selected-stroke)}@media print{.offcanvas{display:none}}.offcanvas-body{overscroll-behavior:contain}.offcanvas-header{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.offcanvas-footer{padding:1.5rem 1.5rem}.offcanvas-title{--tblr-offcanvas-title-line-height:1.4285714286;font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:var(--tblr-offcanvas-title-line-height)}.offcanvas-narrow{--tblr-offcanvas-narrow-width:20rem;--tblr-offcanvas-width:var(--tblr-offcanvas-narrow-width)}.offcanvas-floating,html[data-bs-offcanvas-style=floating] :is(.offcanvas-start,.offcanvas-end,.offcanvas-top,.offcanvas-bottom){--tblr-offcanvas-transition:transform 0.3s ease-in-out,translate 0.3s ease-in-out;max-width:calc(100% - 2 * var(--tblr-offcanvas-margin));max-height:calc(100% - 2 * var(--tblr-offcanvas-margin));margin:var(--tblr-offcanvas-margin);border:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);border-radius:var(--tblr-border-radius-lg)}.offcanvas-floating.offcanvas-start,html[data-bs-offcanvas-style=floating] :is(.offcanvas-start,.offcanvas-end,.offcanvas-top,.offcanvas-bottom).offcanvas-start{translate:calc(var(--tblr-dir) * -1 * var(--tblr-offcanvas-margin))}.offcanvas-floating.offcanvas-end,html[data-bs-offcanvas-style=floating] :is(.offcanvas-start,.offcanvas-end,.offcanvas-top,.offcanvas-bottom).offcanvas-end{translate:calc(var(--tblr-dir) * var(--tblr-offcanvas-margin))}.offcanvas-floating.offcanvas-top,html[data-bs-offcanvas-style=floating] :is(.offcanvas-start,.offcanvas-end,.offcanvas-top,.offcanvas-bottom).offcanvas-top{translate:0 calc(-1 * var(--tblr-offcanvas-margin))}.offcanvas-floating.offcanvas-bottom,html[data-bs-offcanvas-style=floating] :is(.offcanvas-start,.offcanvas-end,.offcanvas-top,.offcanvas-bottom).offcanvas-bottom{translate:0 var(--tblr-offcanvas-margin)}.offcanvas-floating.show:not(.hiding),.offcanvas-floating.showing,html[data-bs-offcanvas-style=floating] :is(.offcanvas-start,.offcanvas-end,.offcanvas-top,.offcanvas-bottom).show:not(.hiding),html[data-bs-offcanvas-style=floating] :is(.offcanvas-start,.offcanvas-end,.offcanvas-top,.offcanvas-bottom).showing{translate:none}.chat{--tblr-chat-bubbles-gap:1rem;--tblr-chat-bubble-padding:1rem;--tblr-chat-bubble-title-margin-bottom:0.25rem}.chat-bubbles{display:flex;flex-direction:column;gap:var(--tblr-chat-bubbles-gap)}.chat-bubble{position:relative;padding:var(--tblr-chat-bubble-padding);background:var(--tblr-fill-tertiary);border-radius:var(--tblr-border-radius-lg)}.chat-bubble-me{background-color:var(--tblr-primary-lt);box-shadow:none}.chat-bubble-title{margin-bottom:var(--tblr-chat-bubble-title-margin-bottom)}.chat-bubble-author{font-weight:600}.chat-bubble-date{color:var(--tblr-secondary)}.chat-bubble-body>:last-child{margin-bottom:0}.signature{--tblr-signature-padding:var(--tblr-spacer-1);--tblr-signature-border-radius:var(--tblr-border-radius);--tblr-signature-canvas-height:12.5rem;padding:var(--tblr-signature-padding);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.signature-canvas{display:block;width:100%;height:var(--tblr-signature-canvas-height);cursor:crosshair;border:var(--tblr-border-width) dashed var(--tblr-border-color);border-radius:calc(var(--tblr-signature-border-radius) - var(--tblr-signature-padding))}.bg-pattern-blueprint,.bg-pattern-circles,.bg-pattern-cross-dots,.bg-pattern-diagonal,.bg-pattern-diagonal-2,.bg-pattern-diagonal-stripes,.bg-pattern-diagonal-stripes-2,.bg-pattern-dots,.bg-pattern-grid,.bg-pattern-grid-diagonal,.bg-pattern-horizontal-stripes,.bg-pattern-lines,.bg-pattern-lines-vertical,.bg-pattern-rectangles,.bg-pattern-transparent,.bg-pattern-vertical-stripes,.bg-pattern-zigzag{--tblr-pattern-color:var(--tblr-body-color);--tblr-pattern-size:0.5rem;--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 10%);--tblr-pattern-fill:color-mix(in oklab, var(--tblr-pattern-color) var(--tblr-pattern-opacity), transparent);background-clip:padding-box}.bg-pattern-transparent{background-image:repeating-conic-gradient(var(--tblr-pattern-fill) 0% 25%,transparent 0% 50%);background-size:calc(var(--tblr-pattern-size) * 2) calc(var(--tblr-pattern-size) * 2)}.bg-pattern-diagonal{background-image:repeating-linear-gradient(-45deg,var(--tblr-pattern-fill) 0 1px,transparent 0 50%);background-size:var(--tblr-pattern-size) var(--tblr-pattern-size)}.bg-pattern-diagonal-2{background-image:repeating-linear-gradient(45deg,var(--tblr-pattern-fill) 0 1px,transparent 0 50%);background-size:var(--tblr-pattern-size) var(--tblr-pattern-size)}.bg-pattern-dots{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 20%);--tblr-pattern-dot:max(1px, calc(var(--tblr-pattern-size) * 0.1));background-image:radial-gradient(circle,var(--tblr-pattern-fill) var(--tblr-pattern-dot),transparent calc(var(--tblr-pattern-dot) + .5px)),radial-gradient(circle,var(--tblr-pattern-fill) var(--tblr-pattern-dot),transparent calc(var(--tblr-pattern-dot) + .5px));background-position:0 0,calc(var(--tblr-pattern-size)) calc(var(--tblr-pattern-size));background-size:calc(var(--tblr-pattern-size) * 2) calc(var(--tblr-pattern-size) * 2)}.bg-pattern-rectangles{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 3%);background-image:repeating-linear-gradient(45deg,var(--tblr-pattern-fill) 25%,transparent 25%,transparent 75%,var(--tblr-pattern-fill) 75%,var(--tblr-pattern-fill)),repeating-linear-gradient(45deg,var(--tblr-pattern-fill) 25%,transparent 25%,transparent 75%,var(--tblr-pattern-fill) 75%,var(--tblr-pattern-fill));background-position:-1px -1px,calc(var(--tblr-pattern-size) - 1px) calc(var(--tblr-pattern-size) - 1px);background-size:calc(var(--tblr-pattern-size) * 2) calc(var(--tblr-pattern-size) * 2)}.bg-pattern-lines{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 6%);background-image:repeating-linear-gradient(0deg,var(--tblr-pattern-fill),var(--tblr-pattern-fill) 1px,transparent 1px,transparent);background-position:-1px -1px;background-size:var(--tblr-pattern-size) var(--tblr-pattern-size)}.bg-pattern-lines-vertical{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 6%);background-image:repeating-linear-gradient(90deg,var(--tblr-pattern-fill),var(--tblr-pattern-fill) 1px,transparent 1px,transparent);background-position:-1px -1px;background-size:var(--tblr-pattern-size) var(--tblr-pattern-size)}.bg-pattern-grid{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 6%);background-image:linear-gradient(to right,var(--tblr-pattern-fill) 1px,transparent 1px),linear-gradient(to bottom,var(--tblr-pattern-fill) 1px,transparent 1px);background-position:-1px -1px,-1px -1px;background-size:calc(var(--tblr-pattern-size) * 2) calc(var(--tblr-pattern-size) * 2)}.bg-pattern-grid-diagonal{background-image:linear-gradient(45deg,transparent 49%,var(--tblr-pattern-fill) 49%,var(--tblr-pattern-fill) 51%,transparent 51%),linear-gradient(-45deg,transparent 49%,var(--tblr-pattern-fill) 49%,var(--tblr-pattern-fill) 51%,transparent 51%);background-position:center center;background-size:calc(var(--tblr-pattern-size) * 2) calc(var(--tblr-pattern-size) * 2)}.bg-pattern-blueprint{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 6%);--tblr-pattern-line:var(--tblr-pattern-fill);background-image:linear-gradient(var(--tblr-pattern-line) 2px,transparent 2px),linear-gradient(90deg,var(--tblr-pattern-line) 2px,transparent 2px),linear-gradient(var(--tblr-pattern-line) 1px,transparent 1px),linear-gradient(90deg,var(--tblr-pattern-line) 1px,transparent 1px);background-position:-3px -3px,-3px -3px,-2px -2px,-2px -2px;background-size:calc(var(--tblr-pattern-size) * 10) calc(var(--tblr-pattern-size) * 10),calc(var(--tblr-pattern-size) * 10) calc(var(--tblr-pattern-size) * 10),calc(var(--tblr-pattern-size) * 2) calc(var(--tblr-pattern-size) * 2),calc(var(--tblr-pattern-size) * 2) calc(var(--tblr-pattern-size) * 2)}.bg-pattern-cross-dots{background-image:radial-gradient(var(--tblr-pattern-fill) 1px,transparent 1px),radial-gradient(var(--tblr-pattern-fill) 1px,transparent 1px);background-position:0 0,var(--tblr-pattern-size) var(--tblr-pattern-size);background-size:calc(var(--tblr-pattern-size) * 2) calc(var(--tblr-pattern-size) * 2)}.bg-pattern-circles{background-image:radial-gradient(circle at center top,transparent 9%,var(--tblr-pattern-fill) 10%,var(--tblr-pattern-fill) 15%,transparent 16%),radial-gradient(circle at center bottom,transparent 9%,var(--tblr-pattern-fill) 10%,var(--tblr-pattern-fill) 15%,transparent 16%),radial-gradient(circle at right center,transparent 9%,var(--tblr-pattern-fill) 10%,var(--tblr-pattern-fill) 15%,transparent 16%),radial-gradient(circle at left center,transparent 9%,var(--tblr-pattern-fill) 10%,var(--tblr-pattern-fill) 15%,transparent 16%);background-position:0 0;background-size:calc(var(--tblr-pattern-size) * 3) calc(var(--tblr-pattern-size) * 3)}.bg-pattern-diagonal-stripes{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 5%);background-image:repeating-linear-gradient(45deg,transparent,transparent var(--tblr-pattern-size),var(--tblr-pattern-fill) var(--tblr-pattern-size),var(--tblr-pattern-fill) calc(2 * var(--tblr-pattern-size)));background-repeat:no-repeat}.bg-pattern-diagonal-stripes-2{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 5%);background-image:repeating-linear-gradient(-45deg,transparent,transparent var(--tblr-pattern-size),var(--tblr-pattern-fill) var(--tblr-pattern-size),var(--tblr-pattern-fill) calc(2 * var(--tblr-pattern-size)));background-repeat:no-repeat}.bg-pattern-zigzag{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 5%);background:linear-gradient(135deg,var(--tblr-pattern-fill) 25%,transparent 25%) calc(-1 * var(--tblr-pattern-size)) 0,linear-gradient(225deg,var(--tblr-pattern-fill) 25%,transparent 25%) calc(-1 * var(--tblr-pattern-size)) 0,linear-gradient(315deg,var(--tblr-pattern-fill) 25%,transparent 25%),linear-gradient(45deg,var(--tblr-pattern-fill) 25%,transparent 25%);background-clip:padding-box;background-size:calc(2 * var(--tblr-pattern-size)) calc(2 * var(--tblr-pattern-size))}.bg-pattern-vertical-stripes{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 5%);background-image:repeating-linear-gradient(90deg,transparent,transparent var(--tblr-pattern-size),var(--tblr-pattern-fill) var(--tblr-pattern-size),var(--tblr-pattern-fill) calc(2 * var(--tblr-pattern-size)))}.bg-pattern-horizontal-stripes{--tblr-pattern-opacity:calc(var(--tblr-pattern-opacity-factor, 1) * 5%);background-image:repeating-linear-gradient(0deg,transparent,transparent var(--tblr-pattern-size),var(--tblr-pattern-fill) var(--tblr-pattern-size),var(--tblr-pattern-fill) calc(2 * var(--tblr-pattern-size)));background-position:-1px -1px}.bg-pattern-primary{--tblr-pattern-color:oklch(54.6% 0.1724 254.2deg)}.bg-pattern-secondary{--tblr-pattern-color:oklch(55.55% 0 0deg)}.bg-pattern-success{--tblr-pattern-color:oklch(67.38% 0.1885 145.43deg)}.bg-pattern-info{--tblr-pattern-color:oklch(66.26% 0.1358 246.81deg)}.bg-pattern-warning{--tblr-pattern-color:oklch(77.02% 0.1658 71.02deg)}.bg-pattern-danger{--tblr-pattern-color:oklch(58.29% 0.1941 25.59deg)}.bg-pattern-light{--tblr-pattern-color:oklch(98.51% 0 0deg)}.bg-pattern-dark{--tblr-pattern-color:oklch(26.86% 0 0deg)}.bg-pattern-muted{--tblr-pattern-color:oklch(55.55% 0 0deg)}.bg-pattern-blue{--tblr-pattern-color:oklch(54.6% 0.1724 254.2deg)}.bg-pattern-azure{--tblr-pattern-color:oklch(66.26% 0.1358 246.81deg)}.bg-pattern-indigo{--tblr-pattern-color:oklch(55.66% 0.2082 268.35deg)}.bg-pattern-purple{--tblr-pattern-color:oklch(57.83% 0.2186 319.15deg)}.bg-pattern-pink{--tblr-pattern-color:oklch(58.81% 0.201 5.25deg)}.bg-pattern-red{--tblr-pattern-color:oklch(58.29% 0.1941 25.59deg)}.bg-pattern-orange{--tblr-pattern-color:oklch(68.51% 0.1954 44.57deg)}.bg-pattern-yellow{--tblr-pattern-color:oklch(77.02% 0.1658 71.02deg)}.bg-pattern-lime{--tblr-pattern-color:oklch(70.99% 0.1897 131.53deg)}.bg-pattern-green{--tblr-pattern-color:oklch(67.38% 0.1885 145.43deg)}.bg-pattern-teal{--tblr-pattern-color:oklch(64.32% 0.1338 164.7deg)}.bg-pattern-cyan{--tblr-pattern-color:oklch(65.52% 0.1105 212.17deg)}.bg-pattern-sm{--tblr-pattern-size:0.25rem}.bg-pattern-md{--tblr-pattern-size:0.5rem}.bg-pattern-lg{--tblr-pattern-size:0.75rem}.bg-pattern-xl{--tblr-pattern-size:1rem}.bg-pattern-opacity-lighter{--tblr-pattern-opacity:6%}.bg-pattern-opacity-light{--tblr-pattern-opacity:8%}.bg-pattern-opacity-dark{--tblr-pattern-opacity:20%}.bg-pattern-opacity-darker{--tblr-pattern-opacity:50%}.sortable-drag,.sortable-ghost,.sortable-selected,.sortable-swap-highlight{--tblr-sortable-ghost-bg:var(--tblr-primary-lt);--tblr-sortable-ghost-border-color:var(--tblr-primary);--tblr-sortable-ghost-opacity:0.6;--tblr-sortable-outline-width:1px;--tblr-sortable-selected-bg:var(--tblr-primary-lt);--tblr-sortable-drag-bg:var(--tblr-bg-surface);--tblr-sortable-drag-rotate:1.5deg;--tblr-sortable-drag-box-shadow:0px 4px 6px -2px color-mix(in oklab, var(--tblr-shadow-color) 12.5%, transparent),0px 10px 15px -3px color-mix(in oklab, var(--tblr-shadow-color) 20%, transparent)}.sortable-ghost,.sortable-swap-highlight{background-color:var(--tblr-sortable-ghost-bg);outline:var(--tblr-sortable-outline-width) dashed var(--tblr-sortable-ghost-border-color);outline-offset:calc(var(--tblr-sortable-outline-width) * -1)}.sortable-ghost{opacity:var(--tblr-sortable-ghost-opacity)}tr.sortable-ghost>*,tr.sortable-selected>*,tr.sortable-swap-highlight>*{--tblr-table-bg-state:var(--tblr-sortable-ghost-bg)}.sortable-selected{background-color:var(--tblr-sortable-selected-bg);outline:var(--tblr-sortable-outline-width) solid var(--tblr-sortable-ghost-border-color);outline-offset:calc(var(--tblr-sortable-outline-width) * -1)}.list-group-item.sortable-drag,.list-group-item.sortable-ghost,.list-group-item.sortable-selected,.list-group-item.sortable-swap-highlight{border-radius:var(--tblr-list-group-border-radius)}.sortable-chosen{cursor:grabbing}.sortable-drag{cursor:grabbing;background-color:var(--tblr-sortable-drag-bg);outline:var(--tblr-sortable-outline-width) solid var(--tblr-sortable-ghost-border-color);outline-offset:calc(var(--tblr-sortable-outline-width) * -1);box-shadow:var(--tblr-sortable-drag-box-shadow);opacity:1!important;transition:none}.sortable-drag.sortable-fallback{rotate:calc(var(--tblr-sortable-drag-rotate) * var(--tblr-dir))}.card.sortable-drag{box-shadow:var(--tblr-sortable-drag-box-shadow)}.clearfix::after{display:block;clear:both;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--tblr-border-width);min-height:1em;background-color:currentColor;opacity:11.9%}.stretched-link::after{position:absolute;inset-inline-start:0;inset-inline-end:0;top:0;bottom:0;z-index:1;content:""}.stretched-link.btn{position:static}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden!important}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.fixed-top{position:fixed;inset-inline-start:0;inset-inline-end:0;top:0;z-index:1030}.fixed-bottom{position:fixed;inset-inline-start:0;inset-inline-end:0;bottom:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--tblr-aspect-ratio);content:""}.ratio>*{position:absolute;inset-inline-start:0;top:0;width:100%;height:100%}.ratio-1x1{--tblr-aspect-ratio:100%}.ratio-2x1{--tblr-aspect-ratio:50%}.ratio-1x2{--tblr-aspect-ratio:200%}.ratio-3x1{--tblr-aspect-ratio:33.3333333333%}.ratio-1x3{--tblr-aspect-ratio:300%}.ratio-4x1{--tblr-aspect-ratio:25%}.ratio-1x4{--tblr-aspect-ratio:400%}.ratio-4x3{--tblr-aspect-ratio:75%}.ratio-3x4{--tblr-aspect-ratio:133.3333333333%}.ratio-16x9{--tblr-aspect-ratio:56.25%}.ratio-9x16{--tblr-aspect-ratio:177.7777777778%}.ratio-21x9{--tblr-aspect-ratio:42.8571428571%}.ratio-9x21{--tblr-aspect-ratio:233.3333333333%}.focus-ring{outline-color:transparent;transition:outline-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.focus-ring{transition:none}}.focus-ring:focus-visible{outline:var(--tblr-focus-ring-width) solid var(--tblr-focus-ring-color)}.bg-white-overlay{color:#fff;background-color:color-mix(in oklab,var(--tblr-light) 24%,transparent)}.bg-dark-overlay{color:#fff;background-color:color-mix(in oklab,var(--tblr-dark) 24%,transparent)}.bg-cover{background-repeat:no-repeat;background-position:center;background-size:cover}.bg-primary{background-color:color-mix(in oklab,var(--tblr-primary) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-primary-lt{color:color-mix(in oklab,var(--tblr-primary) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-primary-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-primary{border-color:color-mix(in oklab,var(--tblr-primary) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-primary{--tblr-gradient-from:var(--tblr-primary)}.bg-gradient-to-primary{--tblr-gradient-to:var(--tblr-primary)}.bg-gradient-via-primary{--tblr-gradient-via:var(--tblr-primary);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-primary{color:var(--tblr-primary-fg)!important;background-color:color-mix(in oklab,var(--tblr-primary) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-primary{color:color-mix(in oklab,var(--tblr-primary) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-primary) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-primary:focus,.link-primary:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-primary)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-primary)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-secondary{background-color:color-mix(in oklab,var(--tblr-secondary) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-secondary-lt{color:color-mix(in oklab,var(--tblr-secondary) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-secondary-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-secondary{border-color:color-mix(in oklab,var(--tblr-secondary) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-secondary{--tblr-gradient-from:var(--tblr-secondary)}.bg-gradient-to-secondary{--tblr-gradient-to:var(--tblr-secondary)}.bg-gradient-via-secondary{--tblr-gradient-via:var(--tblr-secondary);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-secondary{color:var(--tblr-secondary-fg)!important;background-color:color-mix(in oklab,var(--tblr-secondary) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-secondary{color:color-mix(in oklab,var(--tblr-secondary) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-secondary) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-secondary:focus,.link-secondary:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-secondary)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-secondary)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-success{background-color:color-mix(in oklab,var(--tblr-success) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-success-lt{color:color-mix(in oklab,var(--tblr-success) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-success-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-success{border-color:color-mix(in oklab,var(--tblr-success) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-success{--tblr-gradient-from:var(--tblr-success)}.bg-gradient-to-success{--tblr-gradient-to:var(--tblr-success)}.bg-gradient-via-success{--tblr-gradient-via:var(--tblr-success);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-success{color:var(--tblr-success-fg)!important;background-color:color-mix(in oklab,var(--tblr-success) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-success{color:color-mix(in oklab,var(--tblr-success) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-success) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-success:focus,.link-success:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-success)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-success)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-info{background-color:color-mix(in oklab,var(--tblr-info) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-info-lt{color:color-mix(in oklab,var(--tblr-info) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-info-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-info{border-color:color-mix(in oklab,var(--tblr-info) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-info{--tblr-gradient-from:var(--tblr-info)}.bg-gradient-to-info{--tblr-gradient-to:var(--tblr-info)}.bg-gradient-via-info{--tblr-gradient-via:var(--tblr-info);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-info{color:var(--tblr-info-fg)!important;background-color:color-mix(in oklab,var(--tblr-info) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-info{color:color-mix(in oklab,var(--tblr-info) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-info) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-info:focus,.link-info:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-info)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-info)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-warning{background-color:color-mix(in oklab,var(--tblr-warning) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-warning-lt{color:color-mix(in oklab,var(--tblr-warning) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-warning-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-warning{border-color:color-mix(in oklab,var(--tblr-warning) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-warning{--tblr-gradient-from:var(--tblr-warning)}.bg-gradient-to-warning{--tblr-gradient-to:var(--tblr-warning)}.bg-gradient-via-warning{--tblr-gradient-via:var(--tblr-warning);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-warning{color:var(--tblr-warning-fg)!important;background-color:color-mix(in oklab,var(--tblr-warning) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-warning{color:color-mix(in oklab,var(--tblr-warning) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-warning) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-warning:focus,.link-warning:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-warning)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-warning)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-danger{background-color:color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-danger-lt{color:color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-danger-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-danger{border-color:color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-danger{--tblr-gradient-from:var(--tblr-danger)}.bg-gradient-to-danger{--tblr-gradient-to:var(--tblr-danger)}.bg-gradient-via-danger{--tblr-gradient-via:var(--tblr-danger);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-danger{color:var(--tblr-danger-fg)!important;background-color:color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-danger{color:color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-danger:focus,.link-danger:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-danger)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-danger)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-light{background-color:color-mix(in oklab,var(--tblr-light) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-light-lt{color:color-mix(in oklab,var(--tblr-light) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-light-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-light{border-color:color-mix(in oklab,var(--tblr-light) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-light{--tblr-gradient-from:var(--tblr-light)}.bg-gradient-to-light{--tblr-gradient-to:var(--tblr-light)}.bg-gradient-via-light{--tblr-gradient-via:var(--tblr-light);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-light{color:var(--tblr-light-fg)!important;background-color:color-mix(in oklab,var(--tblr-light) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-light{color:color-mix(in oklab,var(--tblr-light) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-light) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-light:focus,.link-light:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-white) 20%,var(--tblr-light)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-white) 20%,var(--tblr-light)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-dark{background-color:color-mix(in oklab,var(--tblr-dark) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-dark-lt{color:color-mix(in oklab,var(--tblr-dark) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-dark-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-dark{border-color:color-mix(in oklab,var(--tblr-dark) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-dark{--tblr-gradient-from:var(--tblr-dark)}.bg-gradient-to-dark{--tblr-gradient-to:var(--tblr-dark)}.bg-gradient-via-dark{--tblr-gradient-via:var(--tblr-dark);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-dark{color:var(--tblr-dark-fg)!important;background-color:color-mix(in oklab,var(--tblr-dark) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-dark{color:color-mix(in oklab,var(--tblr-dark) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-dark) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-dark:focus,.link-dark:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-dark)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-dark)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-muted{background-color:color-mix(in oklab,var(--tblr-muted) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-muted-lt{color:color-mix(in oklab,var(--tblr-muted) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-muted-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-muted{border-color:color-mix(in oklab,var(--tblr-muted) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-muted{--tblr-gradient-from:var(--tblr-muted)}.bg-gradient-to-muted{--tblr-gradient-to:var(--tblr-muted)}.bg-gradient-via-muted{--tblr-gradient-via:var(--tblr-muted);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-muted{color:var(--tblr-muted-fg)!important;background-color:color-mix(in oklab,var(--tblr-muted) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-muted{color:color-mix(in oklab,var(--tblr-muted) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-muted) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-muted:focus,.link-muted:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-muted)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-muted)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-blue{background-color:color-mix(in oklab,var(--tblr-blue) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-blue-lt{color:color-mix(in oklab,var(--tblr-blue) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-blue-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-blue{border-color:color-mix(in oklab,var(--tblr-blue) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-blue{--tblr-gradient-from:var(--tblr-blue)}.bg-gradient-to-blue{--tblr-gradient-to:var(--tblr-blue)}.bg-gradient-via-blue{--tblr-gradient-via:var(--tblr-blue);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-blue{color:var(--tblr-blue-fg)!important;background-color:color-mix(in oklab,var(--tblr-blue) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-blue{color:color-mix(in oklab,var(--tblr-blue) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-blue) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-blue:focus,.link-blue:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-blue)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-blue)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-azure{background-color:color-mix(in oklab,var(--tblr-azure) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-azure-lt{color:color-mix(in oklab,var(--tblr-azure) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-azure-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-azure{border-color:color-mix(in oklab,var(--tblr-azure) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-azure{--tblr-gradient-from:var(--tblr-azure)}.bg-gradient-to-azure{--tblr-gradient-to:var(--tblr-azure)}.bg-gradient-via-azure{--tblr-gradient-via:var(--tblr-azure);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-azure{color:var(--tblr-azure-fg)!important;background-color:color-mix(in oklab,var(--tblr-azure) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-azure{color:color-mix(in oklab,var(--tblr-azure) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-azure) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-azure:focus,.link-azure:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-azure)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-azure)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-indigo{background-color:color-mix(in oklab,var(--tblr-indigo) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-indigo-lt{color:color-mix(in oklab,var(--tblr-indigo) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-indigo-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-indigo{border-color:color-mix(in oklab,var(--tblr-indigo) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-indigo{--tblr-gradient-from:var(--tblr-indigo)}.bg-gradient-to-indigo{--tblr-gradient-to:var(--tblr-indigo)}.bg-gradient-via-indigo{--tblr-gradient-via:var(--tblr-indigo);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-indigo{color:var(--tblr-indigo-fg)!important;background-color:color-mix(in oklab,var(--tblr-indigo) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-indigo{color:color-mix(in oklab,var(--tblr-indigo) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-indigo) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-indigo:focus,.link-indigo:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-indigo)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-indigo)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-purple{background-color:color-mix(in oklab,var(--tblr-purple) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-purple-lt{color:color-mix(in oklab,var(--tblr-purple) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-purple-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-purple{border-color:color-mix(in oklab,var(--tblr-purple) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-purple{--tblr-gradient-from:var(--tblr-purple)}.bg-gradient-to-purple{--tblr-gradient-to:var(--tblr-purple)}.bg-gradient-via-purple{--tblr-gradient-via:var(--tblr-purple);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-purple{color:var(--tblr-purple-fg)!important;background-color:color-mix(in oklab,var(--tblr-purple) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-purple{color:color-mix(in oklab,var(--tblr-purple) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-purple) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-purple:focus,.link-purple:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-purple)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-purple)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-pink{background-color:color-mix(in oklab,var(--tblr-pink) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-pink-lt{color:color-mix(in oklab,var(--tblr-pink) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-pink-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-pink{border-color:color-mix(in oklab,var(--tblr-pink) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-pink{--tblr-gradient-from:var(--tblr-pink)}.bg-gradient-to-pink{--tblr-gradient-to:var(--tblr-pink)}.bg-gradient-via-pink{--tblr-gradient-via:var(--tblr-pink);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-pink{color:var(--tblr-pink-fg)!important;background-color:color-mix(in oklab,var(--tblr-pink) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-pink{color:color-mix(in oklab,var(--tblr-pink) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-pink) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-pink:focus,.link-pink:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-pink)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-pink)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-red{background-color:color-mix(in oklab,var(--tblr-red) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-red-lt{color:color-mix(in oklab,var(--tblr-red) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-red-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-red{border-color:color-mix(in oklab,var(--tblr-red) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-red{--tblr-gradient-from:var(--tblr-red)}.bg-gradient-to-red{--tblr-gradient-to:var(--tblr-red)}.bg-gradient-via-red{--tblr-gradient-via:var(--tblr-red);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-red{color:var(--tblr-red-fg)!important;background-color:color-mix(in oklab,var(--tblr-red) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-red{color:color-mix(in oklab,var(--tblr-red) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-red) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-red:focus,.link-red:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-red)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-red)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-orange{background-color:color-mix(in oklab,var(--tblr-orange) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-orange-lt{color:color-mix(in oklab,var(--tblr-orange) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-orange-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-orange{border-color:color-mix(in oklab,var(--tblr-orange) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-orange{--tblr-gradient-from:var(--tblr-orange)}.bg-gradient-to-orange{--tblr-gradient-to:var(--tblr-orange)}.bg-gradient-via-orange{--tblr-gradient-via:var(--tblr-orange);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-orange{color:var(--tblr-orange-fg)!important;background-color:color-mix(in oklab,var(--tblr-orange) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-orange{color:color-mix(in oklab,var(--tblr-orange) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-orange) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-orange:focus,.link-orange:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-orange)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-orange)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-yellow{background-color:color-mix(in oklab,var(--tblr-yellow) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-yellow-lt{color:color-mix(in oklab,var(--tblr-yellow) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-yellow-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-yellow{border-color:color-mix(in oklab,var(--tblr-yellow) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-yellow{--tblr-gradient-from:var(--tblr-yellow)}.bg-gradient-to-yellow{--tblr-gradient-to:var(--tblr-yellow)}.bg-gradient-via-yellow{--tblr-gradient-via:var(--tblr-yellow);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-yellow{color:var(--tblr-yellow-fg)!important;background-color:color-mix(in oklab,var(--tblr-yellow) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-yellow{color:color-mix(in oklab,var(--tblr-yellow) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-yellow) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-yellow:focus,.link-yellow:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-yellow)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-yellow)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-lime{background-color:color-mix(in oklab,var(--tblr-lime) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-lime-lt{color:color-mix(in oklab,var(--tblr-lime) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-lime-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-lime{border-color:color-mix(in oklab,var(--tblr-lime) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-lime{--tblr-gradient-from:var(--tblr-lime)}.bg-gradient-to-lime{--tblr-gradient-to:var(--tblr-lime)}.bg-gradient-via-lime{--tblr-gradient-via:var(--tblr-lime);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-lime{color:var(--tblr-lime-fg)!important;background-color:color-mix(in oklab,var(--tblr-lime) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-lime{color:color-mix(in oklab,var(--tblr-lime) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-lime) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-lime:focus,.link-lime:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-lime)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-lime)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-green{background-color:color-mix(in oklab,var(--tblr-green) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-green-lt{color:color-mix(in oklab,var(--tblr-green) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-green-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-green{border-color:color-mix(in oklab,var(--tblr-green) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-green{--tblr-gradient-from:var(--tblr-green)}.bg-gradient-to-green{--tblr-gradient-to:var(--tblr-green)}.bg-gradient-via-green{--tblr-gradient-via:var(--tblr-green);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-green{color:var(--tblr-green-fg)!important;background-color:color-mix(in oklab,var(--tblr-green) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-green{color:color-mix(in oklab,var(--tblr-green) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-green) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-green:focus,.link-green:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-green)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-green)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-teal{background-color:color-mix(in oklab,var(--tblr-teal) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-teal-lt{color:color-mix(in oklab,var(--tblr-teal) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-teal-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-teal{border-color:color-mix(in oklab,var(--tblr-teal) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-teal{--tblr-gradient-from:var(--tblr-teal)}.bg-gradient-to-teal{--tblr-gradient-to:var(--tblr-teal)}.bg-gradient-via-teal{--tblr-gradient-via:var(--tblr-teal);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-teal{color:var(--tblr-teal-fg)!important;background-color:color-mix(in oklab,var(--tblr-teal) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-teal{color:color-mix(in oklab,var(--tblr-teal) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-teal) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-teal:focus,.link-teal:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-teal)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-teal)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-cyan{background-color:color-mix(in oklab,var(--tblr-cyan) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-cyan-lt{color:color-mix(in oklab,var(--tblr-cyan) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-cyan-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-cyan{border-color:color-mix(in oklab,var(--tblr-cyan) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-cyan{--tblr-gradient-from:var(--tblr-cyan)}.bg-gradient-to-cyan{--tblr-gradient-to:var(--tblr-cyan)}.bg-gradient-via-cyan{--tblr-gradient-via:var(--tblr-cyan);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-cyan{color:var(--tblr-cyan-fg)!important;background-color:color-mix(in oklab,var(--tblr-cyan) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-cyan{color:color-mix(in oklab,var(--tblr-cyan) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-cyan) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-cyan:focus,.link-cyan:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-cyan)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-black) 20%,var(--tblr-cyan)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-white{background-color:color-mix(in oklab,var(--tblr-white) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.bg-white-lt{color:color-mix(in oklab,var(--tblr-white) calc(var(--tblr-text-opacity,1) * 100%),transparent)!important;background-color:color-mix(in oklab,var(--tblr-white-lt) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.border-white{border-color:color-mix(in oklab,var(--tblr-white) calc(var(--tblr-border-opacity,1) * 100%),transparent)!important}.bg-gradient-from-white{--tblr-gradient-from:var(--tblr-white)}.bg-gradient-to-white{--tblr-gradient-to:var(--tblr-white)}.bg-gradient-via-white{--tblr-gradient-via:var(--tblr-white);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.text-bg-white{color:#000!important;background-color:color-mix(in oklab,var(--tblr-white) calc(var(--tblr-bg-opacity,1) * 100%),transparent)!important}.link-white{color:color-mix(in oklab,var(--tblr-white) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,var(--tblr-white) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.link-white:focus,.link-white:hover{color:color-mix(in oklab,color-mix(in oklab,var(--tblr-white) 20%,var(--tblr-white)) calc(var(--tblr-link-opacity,1) * 100%),transparent)!important;text-decoration-color:color-mix(in oklab,color-mix(in oklab,var(--tblr-white) 20%,var(--tblr-white)) calc(var(--tblr-link-underline-opacity,1) * 100%),transparent)!important}.bg-fill{background-color:var(--tblr-fill)!important}.bg-fill-primary{background-color:var(--tblr-fill-primary)!important}.bg-fill-secondary{background-color:var(--tblr-fill-secondary)!important}.bg-fill-tertiary{background-color:var(--tblr-fill-tertiary)!important}.bg-fill-quaternary{background-color:var(--tblr-fill-quaternary)!important}.text-primary{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-primary) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-primary-fg{color:var(--tblr-primary-fg)!important}.text-secondary{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-secondary) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-secondary-fg{color:var(--tblr-secondary-fg)!important}.text-success{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-success) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-success-fg{color:var(--tblr-success-fg)!important}.text-info{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-info) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-info-fg{color:var(--tblr-info-fg)!important}.text-warning{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-warning) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-warning-fg{color:var(--tblr-warning-fg)!important}.text-danger{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-danger) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-danger-fg{color:var(--tblr-danger-fg)!important}.text-light{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-light) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-light-fg{color:var(--tblr-light-fg)!important}.text-dark{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-dark) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-dark-fg{color:var(--tblr-dark-fg)!important}.text-muted{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-muted) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-muted-fg{color:var(--tblr-muted-fg)!important}.text-blue{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-blue) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-blue-fg{color:var(--tblr-blue-fg)!important}.text-azure{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-azure) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-azure-fg{color:var(--tblr-azure-fg)!important}.text-indigo{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-indigo) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-indigo-fg{color:var(--tblr-indigo-fg)!important}.text-purple{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-purple) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-purple-fg{color:var(--tblr-purple-fg)!important}.text-pink{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-pink) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-pink-fg{color:var(--tblr-pink-fg)!important}.text-red{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-red) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-red-fg{color:var(--tblr-red-fg)!important}.text-orange{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-orange) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-orange-fg{color:var(--tblr-orange-fg)!important}.text-yellow{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-yellow) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-yellow-fg{color:var(--tblr-yellow-fg)!important}.text-lime{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-lime) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-lime-fg{color:var(--tblr-lime-fg)!important}.text-green{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-green) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-green-fg{color:var(--tblr-green-fg)!important}.text-teal{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-teal) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-teal-fg{color:var(--tblr-teal-fg)!important}.text-cyan{--tblr-text-opacity:1;color:color-mix(in oklab,var(--tblr-cyan) calc(var(--tblr-text-opacity) * 100%),transparent)!important}.text-cyan-fg{color:var(--tblr-cyan-fg)!important}.bg-gray-50{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-50) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-50-fg{color:var(--tblr-gray-50-fg)!important}.text-gray-50{color:var(--tblr-gray-50)!important}.bg-gray-100{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-100) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-100-fg{color:var(--tblr-gray-100-fg)!important}.text-gray-100{color:var(--tblr-gray-100)!important}.bg-gray-200{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-200) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-200-fg{color:var(--tblr-gray-200-fg)!important}.text-gray-200{color:var(--tblr-gray-200)!important}.bg-gray-300{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-300) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-300-fg{color:var(--tblr-gray-300-fg)!important}.text-gray-300{color:var(--tblr-gray-300)!important}.bg-gray-400{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-400) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-400-fg{color:var(--tblr-gray-400-fg)!important}.text-gray-400{color:var(--tblr-gray-400)!important}.bg-gray-500{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-500) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-500-fg{color:var(--tblr-gray-500-fg)!important}.text-gray-500{color:var(--tblr-gray-500)!important}.bg-gray-600{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-600) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-600-fg{color:var(--tblr-gray-600-fg)!important}.text-gray-600{color:var(--tblr-gray-600)!important}.bg-gray-700{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-700) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-700-fg{color:var(--tblr-gray-700-fg)!important}.text-gray-700{color:var(--tblr-gray-700)!important}.bg-gray-800{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-800) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-800-fg{color:var(--tblr-gray-800-fg)!important}.text-gray-800{color:var(--tblr-gray-800)!important}.bg-gray-900{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-900) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-900-fg{color:var(--tblr-gray-900-fg)!important}.text-gray-900{color:var(--tblr-gray-900)!important}.bg-gray-950{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-gray-950) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-gray-950-fg{color:var(--tblr-gray-950-fg)!important}.text-gray-950{color:var(--tblr-gray-950)!important}.bg-x{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-x) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-x-fg{color:var(--tblr-x-fg)!important}.bg-facebook{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-facebook) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-facebook-fg{color:var(--tblr-facebook-fg)!important}.bg-twitter{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-twitter) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-twitter-fg{color:var(--tblr-twitter-fg)!important}.bg-linkedin{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-linkedin) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-linkedin-fg{color:var(--tblr-linkedin-fg)!important}.bg-google{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-google) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-google-fg{color:var(--tblr-google-fg)!important}.bg-youtube{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-youtube) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-youtube-fg{color:var(--tblr-youtube-fg)!important}.bg-vimeo{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-vimeo) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-vimeo-fg{color:var(--tblr-vimeo-fg)!important}.bg-dribbble{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-dribbble) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-dribbble-fg{color:var(--tblr-dribbble-fg)!important}.bg-github{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-github) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-github-fg{color:var(--tblr-github-fg)!important}.bg-instagram{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-instagram) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-instagram-fg{color:var(--tblr-instagram-fg)!important}.bg-pinterest{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-pinterest) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-pinterest-fg{color:var(--tblr-pinterest-fg)!important}.bg-vk{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-vk) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-vk-fg{color:var(--tblr-vk-fg)!important}.bg-rss{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-rss) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-rss-fg{color:var(--tblr-rss-fg)!important}.bg-flickr{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-flickr) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-flickr-fg{color:var(--tblr-flickr-fg)!important}.bg-bitbucket{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-bitbucket) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-bitbucket-fg{color:var(--tblr-bitbucket-fg)!important}.bg-tabler{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-tabler) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.text-tabler-fg{color:var(--tblr-tabler-fg)!important}.bg-inverted{--tblr-bg-opacity:1;background-color:color-mix(in oklab,var(--tblr-bg-surface-inverted) calc(var(--tblr-bg-opacity) * 100%),transparent)!important}.bg-surface{background-color:var(--tblr-bg-surface)!important}.bg-surface-secondary{background-color:var(--tblr-bg-surface-secondary)!important}.bg-surface-tertiary{background-color:var(--tblr-bg-surface-tertiary)!important}.bg-surface-backdrop{background-color:color-mix(in oklab,light-dark(var(--tblr-gray-800),var(--tblr-black)) 32%,transparent)!important}.bg-gradient-from-transparent{--tblr-gradient-from:transparent}.bg-gradient-to-transparent{--tblr-gradient-to:transparent}.bg-gradient-via-transparent{--tblr-gradient-via:transparent;--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.bg-gradient-from-inverted{--tblr-gradient-from:var(--tblr-bg-surface-inverted)}.bg-gradient-to-inverted{--tblr-gradient-to:var(--tblr-bg-surface-inverted)}.bg-gradient-via-inverted{--tblr-gradient-via:var(--tblr-bg-surface-inverted);--tblr-gradient-stops:var(--tblr-gradient-from, transparent),var(--tblr-gradient-via, transparent),var(--tblr-gradient-to, transparent)}.scrollable{overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.scrollable.hover{overflow-y:hidden}.scrollable.hover>*{margin-top:-1px}.scrollable.hover:active,.scrollable.hover:focus,.scrollable.hover:hover{overflow:visible;overflow-y:auto}.touch .scrollable{overflow-y:auto!important}.scroll-x,.scroll-y{overflow:hidden;-webkit-overflow-scrolling:touch}.scroll-y{overflow-y:auto}.scroll-x{overflow-x:auto}.no-scroll{overflow:hidden}.w-0{width:0!important}.h-0{height:0!important}.w-1{width:.25rem!important}.h-1{height:.25rem!important}.w-2{width:.5rem!important}.h-2{height:.5rem!important}.w-3{width:1rem!important}.h-3{height:1rem!important}.w-4{width:1.5rem!important}.h-4{height:1.5rem!important}.w-5{width:2rem!important}.h-5{height:2rem!important}.w-6{width:2.5rem!important}.h-6{height:2.5rem!important}.w-auto{width:auto!important}.h-auto{height:auto!important}.w-px{width:1px!important}.h-px{height:1px!important}.w-full{width:100%!important}.h-full{height:100%!important}.opacity-0{opacity:calc(0 / 100)!important}.opacity-5{opacity:calc(5 / 100)!important}.opacity-10{opacity:calc(10 / 100)!important}.opacity-15{opacity:calc(15 / 100)!important}.opacity-20{opacity:calc(20 / 100)!important}.opacity-25{opacity:calc(25 / 100)!important}.opacity-30{opacity:calc(30 / 100)!important}.opacity-35{opacity:calc(35 / 100)!important}.opacity-40{opacity:calc(40 / 100)!important}.opacity-45{opacity:calc(45 / 100)!important}.opacity-50{opacity:calc(50 / 100)!important}.opacity-55{opacity:calc(55 / 100)!important}.opacity-60{opacity:calc(60 / 100)!important}.opacity-65{opacity:calc(65 / 100)!important}.opacity-70{opacity:calc(70 / 100)!important}.opacity-75{opacity:calc(75 / 100)!important}.opacity-80{opacity:calc(80 / 100)!important}.opacity-85{opacity:calc(85 / 100)!important}.opacity-90{opacity:calc(90 / 100)!important}.opacity-95{opacity:calc(95 / 100)!important}.opacity-100{opacity:calc(100 / 100)!important}.hover-shadow-sm:hover{box-shadow:0 1px 3px 0 color-mix(in oklab,var(--tblr-shadow-color) 25%,transparent),0 1px 2px 0 color-mix(in oklab,var(--tblr-shadow-color) 15%,transparent)!important}.hover-shadow:hover{box-shadow:0px 2px 4px -1px color-mix(in oklab,var(--tblr-shadow-color) 15%,transparent),0px 4px 6px -1px color-mix(in oklab,var(--tblr-shadow-color) 20%,transparent)!important}.hover-shadow-lg:hover{box-shadow:0px 4px 6px -2px color-mix(in oklab,var(--tblr-shadow-color) 12.5%,transparent),0px 10px 15px -3px color-mix(in oklab,var(--tblr-shadow-color) 20%,transparent)!important}.hover-shadow-none:hover{box-shadow:none!important}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.hover-elevate-down,.hover-elevate-up,.hover-rotate-end,.hover-rotate-start,.hover-scale{transition:transform .3s ease}.hover-elevate-down:hover,.hover-elevate-up:hover,.hover-rotate-end:hover,.hover-rotate-start:hover,.hover-scale:hover{will-change:transform}.hover-elevate-up:hover{transform:translateY(-4px)}.hover-elevate-down:hover{transform:translateY(4px)}.hover-scale:hover{transform:scale(1.1)}.hover-rotate-end:hover{transform:rotate(4deg)}.hover-rotate-start:hover{transform:rotate(-4deg)}.markdown>table,.prose>table{font-size:var(--tblr-body-font-size)}.markdown>table td:first-child,.markdown>table th:first-child,.prose>table td:first-child,.prose>table th:first-child{padding-left:0}.markdown>table td:last-child,.markdown>table th:last-child,.prose>table td:last-child,.prose>table th:last-child{padding-right:0}.markdown>table tr:last-child>*,.prose>table tr:last-child>*{border-bottom:0}.markdown>table th,.prose>table th{--tblr-bg-surface-tertiary:transparent}:root{--tblr-primary-rgb:6,111,209;--tblr-primary-lt-rgb:230,241,250;--tblr-secondary-rgb:115,115,115;--tblr-secondary-lt-rgb:241,241,241;--tblr-success-rgb:47,179,68;--tblr-success-lt-rgb:234,247,236;--tblr-info-rgb:66,153,225;--tblr-info-lt-rgb:236,245,252;--tblr-warning-rgb:245,159,0;--tblr-warning-lt-rgb:254,245,230;--tblr-danger-rgb:214,57,57;--tblr-danger-lt-rgb:251,235,235;--tblr-light-rgb:250,250,250;--tblr-light-lt-rgb:254,254,254;--tblr-dark-rgb:38,38,38;--tblr-dark-lt-rgb:233,233,233;--tblr-muted-rgb:115,115,115;--tblr-muted-lt-rgb:241,241,241;--tblr-blue-rgb:6,111,209;--tblr-blue-lt-rgb:230,241,250;--tblr-azure-rgb:66,153,225;--tblr-azure-lt-rgb:236,245,252;--tblr-indigo-rgb:66,99,235;--tblr-indigo-lt-rgb:236,239,253;--tblr-purple-rgb:174,62,201;--tblr-purple-lt-rgb:247,236,250;--tblr-pink-rgb:214,51,108;--tblr-pink-lt-rgb:251,235,240;--tblr-red-rgb:214,57,57;--tblr-red-lt-rgb:251,235,235;--tblr-orange-rgb:247,103,7;--tblr-orange-lt-rgb:254,240,230;--tblr-yellow-rgb:245,159,0;--tblr-yellow-lt-rgb:254,245,230;--tblr-lime-rgb:116,184,22;--tblr-lime-lt-rgb:241,248,232;--tblr-green-rgb:47,179,68;--tblr-green-lt-rgb:234,247,236;--tblr-teal-rgb:12,166,120;--tblr-teal-lt-rgb:231,246,241;--tblr-cyan-rgb:23,162,184;--tblr-cyan-lt-rgb:232,246,248;--tblr-x-rgb:0,0,0;--tblr-x-lt-rgb:230,230,230;--tblr-facebook-rgb:8,102,255;--tblr-facebook-lt-rgb:230,240,255;--tblr-twitter-rgb:29,161,242;--tblr-twitter-lt-rgb:232,246,254;--tblr-linkedin-rgb:10,102,194;--tblr-linkedin-lt-rgb:231,240,249;--tblr-google-rgb:66,133,244;--tblr-google-lt-rgb:236,243,254;--tblr-youtube-rgb:255,0,0;--tblr-youtube-lt-rgb:255,230,230;--tblr-vimeo-rgb:26,183,234;--tblr-vimeo-lt-rgb:232,248,253;--tblr-dribbble-rgb:234,76,137;--tblr-dribbble-lt-rgb:253,237,243;--tblr-github-rgb:24,23,23;--tblr-github-lt-rgb:232,232,232;--tblr-instagram-rgb:255,0,105;--tblr-instagram-lt-rgb:255,230,240;--tblr-pinterest-rgb:189,8,28;--tblr-pinterest-lt-rgb:248,230,232;--tblr-vk-rgb:0,119,255;--tblr-vk-lt-rgb:230,241,255;--tblr-rss-rgb:255,165,0;--tblr-rss-lt-rgb:255,246,230;--tblr-flickr-rgb:0,99,220;--tblr-flickr-lt-rgb:230,239,252;--tblr-bitbucket-rgb:0,82,204;--tblr-bitbucket-lt-rgb:230,238,250;--tblr-tabler-rgb:6,111,209;--tblr-tabler-lt-rgb:230,241,250}:root{--tblr-white-rgb:255,255,255;--tblr-black-rgb:0,0,0;--tblr-body-color-rgb:38,38,38;--tblr-body-bg-rgb:250,250,250;--tblr-emphasis-color-rgb:64,64,64;--tblr-secondary-color-rgb:38,38,38;--tblr-secondary-bg-rgb:229,229,229;--tblr-tertiary-color-rgb:38,38,38;--tblr-tertiary-bg-rgb:245,245,245;--tblr-link-color-rgb:6,111,209;--tblr-link-hover-color-rgb:3,81,155}.theme-dark,[data-bs-theme=dark],[data-theme=dark]{--tblr-body-color-rgb:229,229,229;--tblr-body-bg-rgb:23,23,23;--tblr-emphasis-color-rgb:255,255,255;--tblr-secondary-color-rgb:229,229,229;--tblr-secondary-bg-rgb:38,38,38;--tblr-tertiary-color-rgb:229,229,229;--tblr-tertiary-bg-rgb:30,30,30;--tblr-link-color-rgb:121,170,231;--tblr-link-hover-color-rgb:148,187,237}.form-select{--tblr-form-select-bg-img:var(--tblr-control-select-bg)}.form-hint{--tblr-form-hint-margin-top:0.25rem;--tblr-form-hint-label-offset:-0.25rem;--tblr-form-hint-control-margin-top:0.5rem;display:block}.form-hint+.form-control{margin-top:var(--tblr-form-hint-margin-top)}.form-label+.form-hint{margin-top:var(--tblr-form-hint-label-offset)}.form-control+.form-hint,.form-select+.form-hint,.input-group+.form-hint{margin-top:var(--tblr-form-hint-control-margin-top)}.legend:empty{padding:0}.status{--tblr-status-color-rgb:115,115,115}.status-primary{--tblr-status-color-rgb:var(--tblr-primary-rgb)}.status-secondary{--tblr-status-color-rgb:var(--tblr-secondary-rgb)}.status-success{--tblr-status-color-rgb:var(--tblr-success-rgb)}.status-info{--tblr-status-color-rgb:var(--tblr-info-rgb)}.status-warning{--tblr-status-color-rgb:var(--tblr-warning-rgb)}.status-danger{--tblr-status-color-rgb:var(--tblr-danger-rgb)}.status-light{--tblr-status-color-rgb:var(--tblr-light-rgb)}.status-dark{--tblr-status-color-rgb:var(--tblr-dark-rgb)}.status-muted{--tblr-status-color-rgb:var(--tblr-muted-rgb)}.status-blue{--tblr-status-color-rgb:var(--tblr-blue-rgb)}.status-azure{--tblr-status-color-rgb:var(--tblr-azure-rgb)}.status-indigo{--tblr-status-color-rgb:var(--tblr-indigo-rgb)}.status-purple{--tblr-status-color-rgb:var(--tblr-purple-rgb)}.status-pink{--tblr-status-color-rgb:var(--tblr-pink-rgb)}.status-red{--tblr-status-color-rgb:var(--tblr-red-rgb)}.status-orange{--tblr-status-color-rgb:var(--tblr-orange-rgb)}.status-yellow{--tblr-status-color-rgb:var(--tblr-yellow-rgb)}.status-lime{--tblr-status-color-rgb:var(--tblr-lime-rgb)}.status-green{--tblr-status-color-rgb:var(--tblr-green-rgb)}.status-teal{--tblr-status-color-rgb:var(--tblr-teal-rgb)}.status-cyan{--tblr-status-color-rgb:var(--tblr-cyan-rgb)}.status-x{--tblr-status-color-rgb:var(--tblr-x-rgb)}.status-facebook{--tblr-status-color-rgb:var(--tblr-facebook-rgb)}.status-twitter{--tblr-status-color-rgb:var(--tblr-twitter-rgb)}.status-linkedin{--tblr-status-color-rgb:var(--tblr-linkedin-rgb)}.status-google{--tblr-status-color-rgb:var(--tblr-google-rgb)}.status-youtube{--tblr-status-color-rgb:var(--tblr-youtube-rgb)}.status-vimeo{--tblr-status-color-rgb:var(--tblr-vimeo-rgb)}.status-dribbble{--tblr-status-color-rgb:var(--tblr-dribbble-rgb)}.status-github{--tblr-status-color-rgb:var(--tblr-github-rgb)}.status-instagram{--tblr-status-color-rgb:var(--tblr-instagram-rgb)}.status-pinterest{--tblr-status-color-rgb:var(--tblr-pinterest-rgb)}.status-vk{--tblr-status-color-rgb:var(--tblr-vk-rgb)}.status-rss{--tblr-status-color-rgb:var(--tblr-rss-rgb)}.status-flickr{--tblr-status-color-rgb:var(--tblr-flickr-rgb)}.status-bitbucket{--tblr-status-color-rgb:var(--tblr-bitbucket-rgb)}.status-tabler{--tblr-status-color-rgb:var(--tblr-tabler-rgb)}.btn-check:focus-visible+.btn,.btn:focus-visible:not(:active){box-shadow:var(--tblr-btn-focus-box-shadow,var(--tblr-btn-box-shadow))}.btn-link:focus-visible:not(:active){box-shadow:var(--tblr-btn-focus-box-shadow,none)}.btn-close:focus-visible{box-shadow:var(--tblr-btn-close-focus-shadow,none)}.page-link:focus-visible{box-shadow:var(--tblr-pagination-focus-box-shadow,none)}.accordion-button:focus-visible{box-shadow:var(--tblr-accordion-btn-focus-box-shadow,none)}.focus-ring:focus-visible{box-shadow:var(--tblr-focus-ring-x,0) var(--tblr-focus-ring-y,0) var(--tblr-focus-ring-blur,0) 0 var(--tblr-focus-ring-color)}.form-check-input:checked,.form-check-input:indeterminate{background-image:var(--tblr-form-check-bg-image,none)}.form-switch .form-check-input{background-image:var(--tblr-form-switch-bg,none)} +/*# sourceMappingURL=tabler.min.css.map */ \ No newline at end of file diff --git a/src/internal/web/assets/vendor/tabler/tabler.min.js b/src/internal/web/assets/vendor/tabler/tabler.min.js new file mode 100644 index 0000000..e0f6d07 --- /dev/null +++ b/src/internal/web/assets/vendor/tabler/tabler.min.js @@ -0,0 +1,8 @@ +/*! +* Tabler v1.7.1 (https://tabler.io) +* Copyright 2018-2026 The Tabler Authors +* Copyright 2018-2026 codecalm.net Paweł Kuna +* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE) +*/ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).tabler={})}(this,function(t){Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});var e=Object.defineProperty,i=(t,i)=>{let n={};for(var s in t)e(n,s,{get:t[s],enumerable:!0});return i||e(n,Symbol.toStringTag,{value:"Module"}),n},n=new Map,s={set(t,e,i){n.has(t)||n.set(t,new Map);const s=n.get(t);s.has(e)||0===s.size?s.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(t,e)=>n.has(t)&&n.get(t).get(e)||null,remove(t,e){if(!n.has(t))return;const i=n.get(t);i.delete(e),0===i.size&&n.delete(t)}},r="transitionend",o=t=>(t&&"undefined"!=typeof CSS&&"function"==typeof CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,(t,e)=>`#${CSS.escape(e)}`)),t),a=t=>null==t?`${t}`:Object.prototype.toString.call(t).match(/\s([a-z]+)/i)[1].toLowerCase(),l=t=>{t.dispatchEvent(new Event(r))},c=t=>t&&"object"==typeof t&&void 0!==t.jquery?t[0]:t,h=t=>!(!(t=c(t))||"object"!=typeof t)&&void 0!==t.nodeType,u=t=>(t=c(t),h(t)?t:"string"==typeof t&&t.length>0?document.querySelector(o(t)):null),d=(t,e)=>{const i=c(t);if(h(i)&&!e.contains(i))return i;let n=document.activeElement;for(;n?.shadowRoot?.activeElement;)n=n.shadowRoot.activeElement;return(n instanceof HTMLElement||n instanceof SVGElement)&&n!==document.body&&!e.contains(n)?n:null},p=(t,e)=>{if(!t||!f(t))return;const{activeElement:i}=document;i&&i!==document.body&&!e.contains(i)||t.focus()},f=t=>{if(!h(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},m=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||("disabled"in t&&void 0!==t.disabled?Boolean(t.disabled):t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),_=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?_(t.parentNode):null},g=()=>{},b=t=>{t.offsetHeight},v=()=>"rtl"===document.documentElement.dir,y=()=>!window.jQuery||document.body.hasAttribute("data-bs-no-jquery")||document.body.hasAttribute("data-tblr-no-jquery")?null:window.jQuery,w=[],A=t=>{"loading"===document.readyState?(w.length||document.addEventListener("DOMContentLoaded",()=>{for(const t of w)t()}),w.push(t)):t()},E=t=>{A(()=>{const e=y();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}})},x=(t,e=[],i=t)=>"function"==typeof t?t.call(e[0],...e.slice(1)):i,T=(t,e,i=!0)=>{if(!i)return void x(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);return Number.parseFloat(e)||Number.parseFloat(i)?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(r,o),x(t))};e.addEventListener(r,o),setTimeout(()=>{s||l(e)},n)},C=(t,e,i,n)=>{const s=t.length;let r=t.indexOf(e);return-1===r?!i&&n?t[s-1]:t[0]:(r+=i?1:-1,n&&(r=(r+s)%s),t[Math.max(0,Math.min(r,s-1))])},k=/[^.]*(?=\..*)\.|.*/,S=/\..*/,I=/::\d+$/,O={},D=1,L={mouseenter:"mouseover",mouseleave:"mouseout"},M=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function $(t,e){return e&&`${e}::${D++}`||t.uidEvent||D++}function N(t){const e=$(t);return t.uidEvent=e,O[e]=O[e]||{},O[e]}function P(t,e,i=null){return Object.values(t).find(t=>t.callable===e&&t.delegationSelector===i)}function j(t,e,i){const n="string"==typeof e,s=n?i:e||i;let r=W(t);return M.has(r)||(r=t),[n,s,r]}function F(t,e,i,n,s){if("string"!=typeof e||!t)return;let[r,o,a]=j(e,i,n);if(e in L){const t=t=>function(e){const i=e;if(!i.relatedTarget||i.relatedTarget!==i.delegateTarget&&!i.delegateTarget.contains(i.relatedTarget))return t.call(this,e)};o=t(o)}const l=N(t),c=l[a]||(l[a]={}),h=P(c,o,r?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const u=$(o,e.replace(k,"")),d=r?function(t,e,i){return function n(s){const r=t.querySelectorAll(e);for(let{target:o}=s;o&&o!==this;o=o.parentNode)for(const a of r)if(a===o)return R(s,{delegateTarget:o}),n.oneOff&&H.off(t,s.type,e,i),i.apply(o,[s])}}(t,i,o):function(t,e){return function i(n){return R(n,{delegateTarget:t}),i.oneOff&&H.off(t,n.type,e),e.apply(t,[n])}}(t,o);d.delegationSelector=r?i:null,d.callable=o,d.oneOff=s,d.uidEvent=u,c[u]=d,t.addEventListener(a,d,r)}function z(t,e,i,n,s){const r=P(e[i],n,s??null);r&&(t.removeEventListener(i,r,Boolean(s)),delete e[i][r.uidEvent])}function B(t,e,i,n){const s=e[i]||{};for(const[r,o]of Object.entries(s))r.includes(n)&&z(t,e,i,o.callable,o.delegationSelector)}function W(t){return t=t.replace(S,""),L[t]||t}var H={on(t,e,i,n){F(t,e,i,n,!1)},one(t,e,i,n){F(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,r,o]=j(e,i,n),a=o!==e,l=N(t),c=l[o]||{},h=e.startsWith(".");if(void 0===r){if(h)for(const i of Object.keys(l))B(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(I,"");a&&!e.includes(s)||z(t,l,o,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;z(t,l,o,r,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=y();let s=null,r=!0,o=!0,a=!1;e!==W(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),r=!s.isPropagationStopped(),o=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=R(new Event(e,{bubbles:r,cancelable:!0}),i);return a&&l.preventDefault(),o&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function R(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch{Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function V(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch{return t}}function q(t){return t.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}var Y=["tblr","bs"],U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${q(e)}`,i)},removeDataAttribute(t,e){for(const i of Y)t.removeAttribute(`data-${i}-${q(e)}`)},getDataAttributes(t){if(!t)return{};const e={};for(const i of Y){const n=Object.keys(t.dataset).filter(t=>t.startsWith(i)&&!t.startsWith(`${i}Config`));for(const s of n){let n=s.replace(new RegExp(`^${i}`),"");n=n.charAt(0).toLowerCase()+n.slice(1),n in e||(e[n]=V(t.dataset[s]))}}return e},getDataAttribute(t,e){for(const i of Y){const n=t.getAttribute(`data-${i}-${q(e)}`);if(null!==n)return V(n)}return null}},K=class{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=h(e)?U.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...h(e)?U.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e){const i=this.constructor,n=e||i.DefaultType;for(const[e,s]of Object.entries(n)){const n=t[e],r=h(n)?"element":a(n);if(!new RegExp(s).test(r))throw new TypeError(`${i.NAME.toUpperCase()}: Option "${e}" provided type "${r}" but expected type "${s}".`)}}},G=class extends K{constructor(t,e){super();const i=u(t);if(!i)return;const n=this.constructor;s.get(i,n.DATA_KEY)?.dispose(),this._element=i,this._config=this._getConfig(e),s.set(this._element,n.DATA_KEY,this)}dispose(){const t=this.constructor;s.remove(this._element,t.DATA_KEY),H.off(this._element,t.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){T(()=>{this._element&&t()},e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return s.get(u(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:void 0)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}},X=t=>{let e=t.getAttribute("data-tblr-target")||t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e?e.split(",").map(t=>o(t)).join(","):null},Q={find:(t,e=document.documentElement)=>Array.from(e.querySelectorAll(t)),findOne:(t,e=document.documentElement)=>e.querySelector(t),children:(t,e)=>Array.from(t.children).filter(t=>t.matches(e)),parents(t,e){const i=[];let n=t.parentNode&&t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode&&n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(t=>`${t}:not([tabindex^="-"])`).join(",");return this.find(e,t).filter(t=>!m(t)&&f(t))},getSelectorFromElement(t){const e=X(t);return e&&Q.findOne(e)?e:null},getElementFromSelector(t){const e=X(t);return e?Q.findOne(e):null},getMultipleElementsFromSelector(t){const e=X(t);return e?Q.find(e):[]}},Z=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;H.on(document,i,`[data-bs-dismiss="${n}"], [data-tblr-dismiss="${n}"]`,function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),m(this))return;const s=Q.getElementFromSelector(this)||this.closest(`.${n}`);((t,e)=>{const i=t[e];"function"==typeof i&&i.call(t)})(t.getOrCreateInstance(s),e)})},J=(t,e,i=null)=>{for(const n of Q.find(t))if(!i||i(n))try{e.getOrCreateInstance(n)}catch(t){console.error(t)}},tt="autosize",et=`resized.bs.${tt}`,it=`[data-bs-toggle="${tt}"], [data-tblr-toggle="${tt}"]`,nt={},st={},rt=class extends G{constructor(t,e){super(t,e),this._observer=null,this._inlineStyle="",this._width=0,this._onInput=()=>this.update(),this._element&&(this._inlineStyle=this._element.getAttribute("style")??"",this._element.style.resize="none",this._element.style.overflowY="hidden",this._element.addEventListener("input",this._onInput),"undefined"!=typeof ResizeObserver&&(this._observer=new ResizeObserver(()=>{this._element.offsetWidth!==this._width&&(this._width=this._element.offsetWidth,this.update())}),this._observer.observe(this._element)),this.update())}static get Default(){return nt}static get DefaultType(){return st}static get NAME(){return tt}update(){const t=this._element;if(!t.isConnected||0===t.getClientRects().length)return;const{scrollTop:e}=document.documentElement,i=getComputedStyle(t),n="border-box"===i.boxSizing?Number.parseFloat(i.borderTopWidth)+Number.parseFloat(i.borderBottomWidth):-(Number.parseFloat(i.paddingTop)+Number.parseFloat(i.paddingBottom)),s=t.style.height;t.style.overflowY="hidden",t.style.height="auto";const r=`${t.scrollHeight+n}px`;t.style.height=r,t.style.overflowY=t.scrollHeight>t.clientHeight?"auto":"hidden",document.documentElement.scrollTop=e,r!==s&&H.trigger(t,et)}dispose(){this._element.removeEventListener("input",this._onInput),this._observer?.disconnect(),this._inlineStyle?this._element.setAttribute("style",this._inlineStyle):this._element.removeAttribute("style"),super.dispose()}};J(it,rt);var ot="clipboard",at=`.bs.${ot}`,lt=`copied${at}`,ct=`error${at}`,ht=`[data-bs-toggle="${ot}"], [data-tblr-toggle="${ot}"]`,ut=`.${ot}-label`,dt=`.${ot}-feedback`,pt={target:null,text:null,delay:2e3},ft={target:"(string|null)",text:"(string|number|null)",delay:"number"},mt=(t,e)=>{e?t.setAttribute("hidden",""):t.removeAttribute("hidden")},_t=class extends G{constructor(t,e){if(super(t,e),this._labels=[],this._feedbacks=[],this._timeout=0,this._element){this._labels=Q.find(ut,this._element),this._feedbacks=Q.find(dt,this._element);for(const t of this._feedbacks)mt(t,!0),t.hasAttribute("role")||t.setAttribute("role","status");H.on(this._element,`click${at}`,t=>{t.preventDefault(),this.copy()})}}static get Default(){return pt}static get DefaultType(){return ft}static get NAME(){return ot}get text(){const{text:t,target:e}=this._config;if(null!==t&&""!==t)return String(t);const i=e?u(e):null;return i?i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement?i.value:(i instanceof HTMLElement?i.innerText:i.textContent??"").trim():""}async copy(){const{text:t}=this;if(t&&navigator.clipboard){try{await navigator.clipboard.writeText(t)}catch{return void H.trigger(this._element,ct)}this._showCopied(),H.trigger(this._element,lt)}else H.trigger(this._element,ct)}reset(){window.clearTimeout(this._timeout),this._toggleCopied(!1)}dispose(){window.clearTimeout(this._timeout),super.dispose()}_mergeConfigObj(t,e){const i=e?.getAttribute("data-bs-text")??e?.getAttribute("data-tblr-text"),n=null==i?{}:{text:i};return super._mergeConfigObj({...n,...t},e)}_showCopied(){window.clearTimeout(this._timeout),this._toggleCopied(!0),this._config.delay>0&&(this._timeout=window.setTimeout(()=>this._toggleCopied(!1),this._config.delay))}_toggleCopied(t){this._element.classList.toggle("copied",t);for(const e of this._labels)mt(e,t);for(const e of this._feedbacks)mt(e,!t)}};J(ht,_t);var gt=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,bt="confetti",vt=`.bs.${bt}`,yt=`start${vt}`,wt=`end${vt}`,At=`click${vt}.data-api`,Et=`${bt}-canvas`,xt=`[data-bs-toggle="${bt}"], [data-tblr-toggle="${bt}"]`,Tt=[["blue","#066fd1"],["azure","#4299e1"],["indigo","#4263eb"],["purple","#ae3ec9"],["pink","#d6336c"],["red","#d63939"],["orange","#f76707"],["yellow","#f59f00"],["lime","#74b816"],["green","#2fb344"],["teal","#0ca678"],["cyan","#17a2b8"]],Ct=1e3/60,kt={count:220,duration:3500,decay:3.5,fade:.15,speed:1,colors:null},St={count:"number",duration:"number",decay:"number",fade:"number",speed:"number",colors:"(array|string|null)"},It={canvas:null,context:null,particles:[],emitters:[],frame:0,lastTick:0,add(t){return this._mount(),!!this.context&&(this.emitters.push(t),this.frame||(this.lastTick=performance.now(),this.frame=requestAnimationFrame(t=>this._tick(t))),!0)},_mount(){if(this.canvas)return;const t=document.createElement("canvas");t.className=Et,t.setAttribute("aria-hidden","true"),Object.assign(t.style,{position:"fixed",inset:"0",width:"100%",height:"100%",zIndex:"9999",pointerEvents:"none",display:"block"});const e=t.getContext("2d");e&&(document.body.append(t),this.canvas=t,this.context=e,this._resize(),window.addEventListener("resize",this._onResize))},_unmount(){cancelAnimationFrame(this.frame),this.frame=0,window.removeEventListener("resize",this._onResize),this.canvas?.remove(),this.canvas=null,this.context=null,this.particles=[],this.emitters=[]},_onResize:()=>{It._resize()},_resize(){if(!this.canvas||!this.context)return;const t=Math.min(window.devicePixelRatio||1,2);this.canvas.width=document.documentElement.clientWidth*t,this.canvas.height=window.innerHeight*t,this.context.setTransform(t,0,0,t,0,0)},_spawn(t){const{colors:e,config:i}=t,n=window.innerHeight/800*i.speed;return{emitter:t,x:Math.random()*window.innerWidth,y:-20-30*Math.random(),w:6+3.6*Math.random(),h:10+4.4*Math.random(),color:e[Math.floor(Math.random()*e.length)]??"#000",vx:1.2*(Math.random()-.5),vy:(1.5+2.1*Math.random())*n,speed:n,angle:Math.random()*Math.PI*2,spin:.25*(Math.random()-.5),flip:Math.random()*Math.PI*2,flipSpeed:.12+.15*Math.random(),sway:Math.random()*Math.PI*2,alpha:1}},_pour(t,e){const{count:i,duration:n,decay:s}=t.config,r=e-t.startedAt;if(t.stopped||r>=n)return;const o=r/n,a=Math.round(i*(1-Math.exp(-s*o))/(1-Math.exp(-s)));for(;t.emitted=0;t--){const n=this.particles[t],r=s*(1-n.emitter.config.fade);n.sway+=.05*i,n.vy=Math.min(n.vy+.025*n.speed*i,4.2*n.speed),n.x+=(n.vx+.7*Math.sin(n.sway))*i,n.y+=n.vy*i,n.angle+=n.spin*i,n.flip+=n.flipSpeed*i,n.y>r&&(n.alpha=Math.max(0,1-(n.y-r)/(s-r))),0!==n.alpha?(e.save(),e.globalAlpha=n.alpha,e.translate(n.x,n.y),e.rotate(n.angle),e.scale(1,Math.cos(n.flip)),e.fillStyle=n.color,e.fillRect(-n.w/2,-n.h/2,n.w,n.h),e.restore()):this.particles.splice(t,1)}this._settle(t),0!==this.emitters.length?this.frame=requestAnimationFrame(t=>this._tick(t)):this._unmount()},_settle(t){for(let e=this.emitters.length-1;e>=0;e--){const i=this.emitters[e],n=!i.stopped&&t-i.startedAtt.emitter===i);n||s||(this.emitters.splice(e,1),i.done=!0,i.detached||H.trigger(i.element,wt))}}},Ot=class extends G{constructor(t,e){super(t,e),this._emitter=null}static get Default(){return kt}static get DefaultType(){return St}static get NAME(){return bt}burst(){H.trigger(this._element,yt)?.defaultPrevented||(this.stop(),gt()?H.trigger(this._element,wt):(this._emitter={element:this._element,config:this._config,colors:this._colors(),startedAt:performance.now(),emitted:0,stopped:!1,done:!1,detached:!1},It.add(this._emitter)||(this._emitter=null,H.trigger(this._element,wt))))}stop(){this._emitter&&!this._emitter.done&&(this._emitter.stopped=!0),this._emitter=null}dispose(){this._emitter&&(this._emitter.detached=!0),this.stop(),super.dispose()}_configAfterMerge(t){return"string"==typeof t.colors&&(t.colors=t.colors.split(",").map(t=>t.trim()).filter(Boolean)),t}_colors(){const{colors:t}=this._config;if(t&&t.length>0)return t;const e=getComputedStyle(document.documentElement);return Tt.map(([t,i])=>e.getPropertyValue(`--tblr-${t}`).trim()||i)}};H.on(document,At,xt,function(t){if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),m(this))return;const e=Q.getElementFromSelector(this)||this,i=U.getDataAttributes(this),n=Ot.getOrCreateInstance(e,i);e!==this&&(n._config=n._getConfig(i)),n.burst()});var Dt="countup",Lt=`.bs.${Dt}`,Mt=`data-${Dt}`,$t=`start${Lt}`,Nt=`complete${Lt}`,Pt=`data-tblr-${Dt}`,jt=`[${Mt}], [${Pt}]`,Ft={autoAnimate:!0,startVal:0,duration:2,decimalPlaces:0,useEasing:!0,useGrouping:!0,separator:",",decimal:".",prefix:"",suffix:"",format:"number",formatter:null},zt={autoAnimate:"boolean",startVal:"number",duration:"number",decimalPlaces:"number",useEasing:"boolean",useGrouping:"boolean",separator:"string",decimal:"string",prefix:"string",suffix:"string",format:"string",formatter:"(function|null)"},Bt=t=>{const e={...t};for(const[i,n]of Object.entries(t)){const t=zt[i];"string"!=typeof n||"number"!==t||""===n.trim()||Number.isNaN(Number(n))?"string"!=typeof n||"boolean"!==t||"true"!==n&&"false"!==n?"number"==typeof n&&"string"===t&&(e[i]=String(n)):e[i]="true"===n:e[i]=Number(n)}return e},Wt=(t,e)=>{if("number"==typeof t)return t;if("time"===e){const e=/^\D{0,32}(\d{1,4}):(\d{1,2})/.exec(t);return e?60*Number(e[1])+Number(e[2]):NaN}return Number.parseFloat(t.replace(/[^0-9.-]/g,""))},Ht=class extends G{constructor(t,e){if(super(t,e),this._endVal=0,this._value=0,this._frame=0,this._observer=null,this._from=0,this._elapsed=0,this._running=!1,this._paused=!1,this._started=!1,!this._element)return;const i=Wt(this._element.textContent??"",this._config.format);Number.isNaN(i)||(this._endVal=i,this._value=this._config.startVal,this._print(this._value),this._config.autoAnimate&&"undefined"!=typeof IntersectionObserver?(this._observer=new IntersectionObserver(t=>this._observerCallback(t)),this._observer.observe(this._element)):this.start())}static get Default(){return Ft}static get DefaultType(){return zt}static get NAME(){return Dt}start(){this._animate(this._value,this._endVal)}reset(){this._stop(),this._started=!1,this._value=this._config.startVal,this._print(this._value)}update(t){const e=Wt(t,this._config.format);Number.isNaN(e)||(this._endVal=e,this._animate(this._value,this._endVal))}pauseResume(){this._paused?(this._paused=!1,this._run()):this._running&&(this._paused=!0,cancelAnimationFrame(this._frame))}dispose(){this._stop(),this._observer?.disconnect(),super.dispose()}_mergeConfigObj(t,e){let i={};const n=e?.getAttribute(Mt)??e?.getAttribute(Pt);if(n)try{const t=JSON.parse(n);t&&"object"==typeof t&&!Array.isArray(t)&&(i=t)}catch{}return super._mergeConfigObj({...Bt(i),...t},e)}_observerCallback(t){t.some(t=>t.isIntersecting)&&(this._observer?.disconnect(),this._observer=null,this._started||this.start())}_animate(t,e){this._stop(),this._started=!0,t===e||this._config.duration<=0||gt()?this._finish(e):(this._from=t,this._elapsed=0,this._running=!0,H.trigger(this._element,$t),this._run())}_run(){const t=1e3*this._config.duration;let e=performance.now();const i=n=>{this._elapsed+=n-e,e=n;const s=Math.min(1,this._elapsed/t),r=this._config.useEasing?(t=>t>=1?1:1024*(1-2**(-10*t))/1023)(s):s;this._value=this._from+(this._endVal-this._from)*r,this._print(this._value),s<1?this._frame=requestAnimationFrame(i):this._finish(this._endVal)};this._frame=requestAnimationFrame(i)}_finish(t){this._running=!1,this._paused=!1,this._value=t,this._print(t),H.trigger(this._element,Nt)}_stop(){cancelAnimationFrame(this._frame),this._running=!1,this._paused=!1}_print(t){this._element.textContent=this._format(t)}_format(t){const{decimalPlaces:e,useGrouping:i,separator:n,decimal:s,prefix:r,suffix:o,format:a,formatter:l}=this._config;if(l)return l(t);if("time"===a){const e=Math.sign(t)*Math.round(Math.abs(t)),i=Math.abs(e);return`${e<0?"-":""}${r}${Math.floor(i/60)}:${String(i%60).padStart(2,"0")}${o}`}const c=t.toFixed(e),[h,u]=c.replace("-","").split("."),d=i?h.replace(/\B(?=(\d{3})+(?!\d))/g,n):h;return`${Number(c)<0?"-":""}${r}${d}${u?s+u:""}${o}`}};J(jt,Ht);var Rt="datepicker",Vt=`.bs.${Rt}`,qt=".data-api",Yt=`change${Vt}`,Ut=`show${Vt}`,Kt=`shown${Vt}`,Gt=`hide${Vt}`,Xt=`hidden${Vt}`,Qt=`focusin${Vt}`,Zt=`click${Vt}${qt}`,Jt=`focusin${Vt}${qt}`,te='[data-bs-toggle="datepicker"], [data-tblr-toggle="datepicker"]',ee='input[type="hidden"], input[name]',ie=/^(\d{4})-(\d{2})-(\d{2})$/,ne=/YYYY|MM|M|DD|D/g,se=["annotations","months","motion","time","weeks"],re=new WeakMap,oe={boundInput:null,datepickerTheme:null,dateMin:null,dateMax:null,dateFormat:null,displayElement:null,displayMonthsCount:1,firstWeekday:1,inline:!1,locale:"default",positionElement:null,selectedDates:[],selectionMode:"single",placement:"left",weekNumbers:!1,vcpOptions:{}},ae={boundInput:"(null|string|element)",datepickerTheme:"(null|string)",dateMin:"(null|string|number|object|date)",dateMax:"(null|string|number|object|date)",dateFormat:"(null|string|object|function)",displayElement:"(null|string|element|boolean)",displayMonthsCount:"number",firstWeekday:"number",inline:"boolean",locale:"string",positionElement:"(null|string|element)",selectedDates:"array",selectionMode:"string",placement:"string",weekNumbers:"boolean",vcpOptions:"object"},le=(t,e=2)=>String(t).padStart(e,"0"),ce=t=>{setTimeout(()=>setTimeout(t))},he=class extends G{constructor(t,e){super(t,e),this._calendar=null,this._isShown=!1,this._isShowing=!1,this._isHiding=!1,this._isSilent=!1,this._skipPluginShow=!1,this._resolveShown=null,this._hideTimeout=0,this._isInput=!1,this._isInline=!1,this._boundInput=null,this._boundInputInside=!1,this._positionElement=null,this._displayElement=null,this._themeObserver=null,this._onFocusIn=null,this._onResize=()=>this._alignToPositionElement(),this._selectedDates=[],this._element&&window.VanillaCalendarPro&&this._initCalendar()}static get Default(){return oe}static get DefaultType(){return ae}static get NAME(){return Rt}get calendar(){return this._calendar}toggle(){return this._config.inline?Promise.resolve():this._isShown?this.hide():this.show()}async show(){if(!this._config.inline&&this._calendar&&!m(this._element)&&!this._isShown&&!this._isShowing&&!H.trigger(this._element,Ut)?.defaultPrevented){this._isShowing=!0,this._skipPluginShow=!1;try{this._calendar.show(),this._isShown||await new Promise(t=>{this._resolveShown=t,ce(t)})}finally{this._resolveShown=null,this._isShowing=!1}}}async hide(){if(!this._config.inline&&this._calendar&&this._isShown&&!H.trigger(this._element,Gt)?.defaultPrevented){this._skipPluginShow=!0,ce(()=>{this._skipPluginShow=!1}),this._isHiding=!0;try{this._calendar.hide()}finally{this._isHiding=!1}}}dispose(){if(window.clearTimeout(this._hideTimeout),this._themeObserver?.disconnect(),window.removeEventListener("resize",this._onResize),this._onFocusIn&&H.off(document,Qt,this._onFocusIn),this._calendar){this._calendar.destroy();const t=this._calendar.context.mainElement;if(t&&t!==this._element&&t.isConnected)if(this._isInput)t.replaceWith(this._element);else if(this._boundInput&&this._boundInputInside){const e=Q.findOne(ee,t);e?e.replaceWith(this._boundInput):t.append(this._boundInput)}}super.dispose()}getSelectedDates(){const t=this._calendar?.context?.selectedDates;return t&&t.length>0?[...t]:[...this._selectedDates]}setSelectedDates(t){this._select(t.map(t=>this._toIsoDate(t))),this._writeSelection(this._selectedDates)}_initCalendar(){this._isInput="INPUT"===this._element.tagName,this._isInline=this._config.inline,this._boundInput=this._resolveBoundInput(),this._boundInputInside=Boolean(this._boundInput&&this._element.contains(this._boundInput)),this._positionElement=this._resolvePositionElement(),this._displayElement=this._resolveDisplayElement(),this._selectedDates=[...this._config.selectedDates],this._calendar=new window.VanillaCalendarPro.Calendar(this._element,this._buildCalendarOptions()),this._calendar.init(),this._boundInput&&!this._boundInput.isConnected&&this._element.after(this._boundInput),this._setupThemeObserver(),this._setupDismissOnFocus(),this._isInput&&this._element.value&&this._parseInputValue();const t=this._boundInput?.value.split(",").filter(t=>ie.test(t));0===this._selectedDates.length&&t?.length&&this._select(t),this._updateDisplayWithSelectedDates()}_updateDisplayWithSelectedDates(){0!==this._selectedDates.length&&this._writeSelection(this._selectedDates)}_writeSelection(t){const e=this._formatDateForInput(t);this._isInput&&(this._element.value=e,re.set(this._element,{text:e,dates:[...t]})),this._boundInput&&(this._boundInput.value=t.join(",")),this._displayElement&&(this._displayElement.textContent=e)}_resolveBoundInput(){const{boundInput:t}=this._config;return t?u(t):this._isInline&&!this._isInput?Q.findOne(ee,this._element):null}_resolvePositionElement(){let{positionElement:t}=this._config;return"string"==typeof t&&(t=u(t)),t||!this._isInput||this._isInline||(t=this._element.closest(".input-icon, .input-group")),t||this._element}_resolveDisplayElement(){const{displayElement:t}=this._config;return"string"==typeof t?u(t):!0===t||null===t&&!this._isInput&&!this._isInline?Q.findOne("[data-bs-datepicker-display], [data-tblr-datepicker-display]",this._element)||this._element:t}_alignToPositionElement(){const t=this._calendar?.context?.mainElement;if(!t||this._isInline||!this._positionElement||this._positionElement===this._element)return;const e=this._positionElement.getBoundingClientRect(),i=t.getBoundingClientRect();let{placement:n}=this._config;"auto"===n&&(n=e.left+i.width>document.documentElement.clientWidth?"right":"left");const s="right"===n?e.right-i.width:"center"===n?e.left+(e.width-i.width)/2:e.left;t.style.left=`${s+window.scrollX}px`}_getThemeAncestor(){return this._element.closest("[data-bs-theme]")}_getEffectiveTheme(){const{datepickerTheme:t}=this._config;return t||this._getThemeAncestor()?.getAttribute("data-bs-theme")||null}_syncThemeAttribute(t){if(!t)return;const e=this._getEffectiveTheme();e?t.setAttribute("data-bs-theme",e):t.removeAttribute("data-bs-theme")}_setupThemeObserver(){const t=this._getThemeAncestor();t&&!this._config.datepickerTheme&&(this._themeObserver=new MutationObserver(()=>{this._syncThemeAttribute(this._calendar?.context?.mainElement)}),this._themeObserver.observe(t,{attributes:!0,attributeFilter:["data-bs-theme"]}))}_setupDismissOnFocus(){this._isInline||(this._onFocusIn=t=>{if(!this._isShown)return;const{target:e}=t,i=this._calendar?.context?.mainElement;e instanceof Node&&(this._element.contains(e)||i?.contains(e))||this.hide()},H.on(document,Qt,this._onFocusIn))}_silently(t){this._isSilent=!0,t(),this._isSilent=!1}_handlePluginShow(){const t=this._calendar;if(!t)return;if(!this._isSilent&&!this._isShown&&(this._skipPluginShow||!this._isShowing&&H.trigger(this._element,Ut)?.defaultPrevented))return void this._silently(()=>t.hide());const e=this._isShown;this._isShown=!0,this._syncThemeAttribute(t.context.mainElement),this._alignToPositionElement(),window.removeEventListener("resize",this._onResize),window.addEventListener("resize",this._onResize),e||H.trigger(this._element,Kt),this._resolveShown?.()}_handlePluginHide(){const t=this._calendar;t&&!this._isSilent&&this._isShown&&(this._isHiding||!H.trigger(this._element,Gt)?.defaultPrevented?(this._isShown=!1,window.removeEventListener("resize",this._onResize),H.trigger(this._element,Xt)):this._silently(()=>t.show()))}_calendarExtensions(t=[]){const e=window.VanillaCalendarPro,i=[...t];for(const t of se){const n=e?.[t];n&&"object"==typeof n&&!i.includes(n)&&i.push(n)}return i}_buildCalendarOptions(){const t=this._getEffectiveTheme(),e=t&&"auto"!==t?t:"system",i=this._config.vcpOptions,n=this._calendarExtensions(i.extensions),s={...i,...n.length>0?{extensions:n}:{},inputMode:!this._isInline,positionToInput:this._config.placement,firstWeekday:this._config.firstWeekday,locale:this._config.locale,selectionDatesMode:this._config.selectionMode,selectedDates:this._config.selectedDates,displayMonthsCount:this._config.displayMonthsCount,enableWeekNumbers:this._config.weekNumbers||Boolean(i.enableWeekNumbers),type:this._config.displayMonthsCount>1?"multiple":"default",selectedTheme:e,themeAttrDetect:"[data-bs-theme]",onClickDate:(t,e)=>this._handleDateClick(t,e),onInit:t=>{this._syncThemeAttribute(t.context.mainElement)},onShow:()=>this._handlePluginShow(),onHide:()=>this._handlePluginHide()},[r]=this._config.selectedDates;if(r){const t=this._parseDate(r);s.selectedMonth=t.getMonth(),s.selectedYear=t.getFullYear()}return this._config.dateMin&&(s.dateMin=this._config.dateMin),this._config.dateMax&&(s.dateMax=this._config.dateMax),s}_handleDateClick(t,e){const i=[...t.context.selectedDates];this._selectedDates=i,this._writeSelection(i);const n={dates:i,event:e};H.trigger(this._element,Yt,n),this._maybeHideAfterSelection(i)}_maybeHideAfterSelection(t){this._isInline||("single"===this._config.selectionMode&&t.length>0||"multiple-ranged"===this._config.selectionMode&&t.length>=2)&&(window.clearTimeout(this._hideTimeout),this._hideTimeout=window.setTimeout(()=>{this.hide()},100))}_parseDate(t){const[e=0,i=1,n=1]=t.split("-").map(Number);return new Date(e,i-1,n)}_formatDate(t){const e=this._parseDate(t),i="default"===this._config.locale?void 0:this._config.locale,{dateFormat:n}=this._config;return"string"==typeof n?((t,e)=>{const i={YYYY:le(t.getFullYear(),4),MM:le(t.getMonth()+1),M:String(t.getMonth()+1),DD:le(t.getDate()),D:String(t.getDate())};return e.replace(ne,t=>i[t])})(e,this._formatPattern()):"function"==typeof n?n(e,i):n&&"object"==typeof n?new Intl.DateTimeFormat(i,n).format(e):e.toLocaleDateString(i)}_formatPattern(){const{dateFormat:t}=this._config;return"string"!=typeof t?null:"iso"===t.toLowerCase()?"YYYY-MM-DD":t}_dateSeparator(){return"multiple-ranged"===this._config.selectionMode?" – ":", "}_formatDateForInput(t){return 0===t.length?"":1===t.length?this._formatDate(t[0]):t.map(t=>this._formatDate(t)).join(this._dateSeparator())}_parseInputValue(){const t=this._element.value.trim();if(!t)return;const e=re.get(this._element);if(e&&e.text.trim()===t)return void this._select(e.dates);const i=this._formatPattern();if(i){const e=("single"===this._config.selectionMode?[t]:t.split(this._dateSeparator())).map(t=>((t,e)=>{const i=[],n=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(ne,t=>(i.push(t[0]),"YYYY"===t?"(\\d{4})":2===t.length?"(\\d{2})":"(\\d{1,2})")),s=new RegExp(`^${n}$`).exec(t);if(!s)return null;const r={Y:0,M:1,D:1};i.forEach((t,e)=>{r[t]=Number(s[e+1])});const{Y:o=0,M:a=1,D:l=1}=r,c=new Date(o,a-1,l);return c.getMonth()===a-1&&c.getDate()===l?`${le(o,4)}-${le(a)}-${le(l)}`:null})(t.trim(),i));if(e.every(Boolean))return void this._select(e)}const n=ie.test(t)?this._parseDate(t):new Date(t);Number.isNaN(n.getTime())||this._select([this._toIsoDate(n)])}_select(t){this._selectedDates=[...t],this._calendar?.set({selectedDates:this._selectedDates,...this._monthOf(this._selectedDates[0])})}_toIsoDate(t){if("string"==typeof t&&ie.test(t))return t;const e=t instanceof Date?t:"string"==typeof t&&ie.test(t)?this._parseDate(t):new Date(t);return Number.isNaN(e.getTime())?String(t):`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}_monthOf(t){if(!t||!ie.test(t))return{};const e=this._parseDate(t);return{selectedMonth:e.getMonth(),selectedYear:e.getFullYear()}}};H.on(document,Zt,te,function(t){"INPUT"!==this.tagName&&"true"!==this.dataset.bsInline&&"true"!==this.dataset.tblrInline&&(t.preventDefault(),he.getOrCreateInstance(this).toggle())}),H.on(document,Jt,te,function(){"INPUT"===this.tagName&&he.getOrCreateInstance(this).show()}),J(te,he,t=>{const{dataset:e}=t;return"true"===e.bsInline||"true"===e.tblrInline||"bsSelectedDates"in e||"tblrSelectedDates"in e||"bsBoundInput"in e||"tblrBoundInput"in e||Boolean(t.value)});var ue="data-mask",de="data-mask-visible",pe=`[${ue}]`,fe={mask:"",lazy:!0},me={mask:"(string|function|regexp|object|array)",lazy:"boolean"},_e=class extends G{constructor(t,e){super(t,e),this._mask=null,this._element&&this._config.mask&&window.IMask&&(this._mask=new window.IMask(this._element,{...this._config}))}static get Default(){return fe}static get DefaultType(){return me}static get NAME(){return"input-mask"}get mask(){return this._mask}update(){this._mask?.updateValue()}dispose(){this._mask?.destroy(),super.dispose()}_mergeConfigObj(t,e){const i={},n=e?.getAttribute(ue);return n&&(i.mask=n),e?.hasAttribute(de)&&(i.lazy="false"===e.getAttribute(de)),super._mergeConfigObj({...i,...t},e)}};J(pe,_e);var ge="bottom",be="right",ve="left",ye="auto",we=["top",ge,be,ve],Ae="start",Ee="clippingParents",xe="viewport",Te="popper",Ce="reference",ke=we.reduce(function(t,e){return t.concat([e+"-"+Ae,e+"-end"])},[]),Se=[].concat(we,[ye]).reduce(function(t,e){return t.concat([e,e+"-"+Ae,e+"-end"])},[]),Ie="beforeRead",Oe="read",De="afterRead",Le="beforeMain",Me="main",$e="afterMain",Ne="beforeWrite",Pe="write",je="afterWrite",Fe=[Ie,Oe,De,Le,Me,$e,Ne,Pe,je];function ze(t){return t?(t.nodeName||"").toLowerCase():null}function Be(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function We(t){return t instanceof Be(t).Element||t instanceof Element}function He(t){return t instanceof Be(t).HTMLElement||t instanceof HTMLElement}function Re(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Be(t).ShadowRoot||t instanceof ShadowRoot)}var Ve={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach(function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];He(s)&&ze(s)&&(Object.assign(s.style,i),Object.keys(n).forEach(function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)}))})},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach(function(t){var n=e.elements[t],s=e.attributes[t]||{},r=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce(function(t,e){return t[e]="",t},{});He(n)&&ze(n)&&(Object.assign(n.style,r),Object.keys(s).forEach(function(t){n.removeAttribute(t)}))})}},requires:["computeStyles"]};function qe(t){return t.split("-")[0]}var Ye=Math.max,Ue=Math.min,Ke=Math.round;function Ge(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function Xe(){return!/^((?!chrome|android).)*safari/i.test(Ge())}function Qe(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,r=1;e&&He(t)&&(s=t.offsetWidth>0&&Ke(n.width)/t.offsetWidth||1,r=t.offsetHeight>0&&Ke(n.height)/t.offsetHeight||1);var o=(We(t)?Be(t):window).visualViewport,a=!Xe()&&i,l=(n.left+(a&&o?o.offsetLeft:0))/s,c=(n.top+(a&&o?o.offsetTop:0))/r,h=n.width/s,u=n.height/r;return{width:h,height:u,top:c,right:l+h,bottom:c+u,left:l,x:l,y:c}}function Ze(t){var e=Qe(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Je(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&Re(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function ti(t){return Be(t).getComputedStyle(t)}function ei(t){return["table","td","th"].indexOf(ze(t))>=0}function ii(t){return((We(t)?t.ownerDocument:t.document)||window.document).documentElement}function ni(t){return"html"===ze(t)?t:t.assignedSlot||t.parentNode||(Re(t)?t.host:null)||ii(t)}function si(t){return He(t)&&"fixed"!==ti(t).position?t.offsetParent:null}function ri(t){for(var e=Be(t),i=si(t);i&&ei(i)&&"static"===ti(i).position;)i=si(i);return i&&("html"===ze(i)||"body"===ze(i)&&"static"===ti(i).position)?e:i||function(t){var e=/firefox/i.test(Ge());if(/Trident/i.test(Ge())&&He(t)&&"fixed"===ti(t).position)return null;var i=ni(t);for(Re(i)&&(i=i.host);He(i)&&["html","body"].indexOf(ze(i))<0;){var n=ti(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function oi(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function ai(t,e,i){return Ye(t,Ue(e,i))}function li(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ci(t,e){return e.reduce(function(e,i){return e[i]=t,e},{})}var hi={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,r=i.elements.arrow,o=i.modifiersData.popperOffsets,a=qe(i.placement),l=oi(a),c=["left","right"].indexOf(a)>=0?"height":"width";if(r&&o){var h=function(t,e){return li("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ci(t,we))}(s.padding,i),u=Ze(r),d="y"===l?"top":ve,p="y"===l?ge:be,f=i.rects.reference[c]+i.rects.reference[l]-o[l]-i.rects.popper[c],m=o[l]-i.rects.reference[l],_=ri(r),g=_?"y"===l?_.clientHeight||0:_.clientWidth||0:0,b=f/2-m/2,v=h[d],y=g-u[c]-h[p],w=g/2-u[c]/2+b,A=ai(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Je(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ui(t){return t.split("-")[1]}var di={top:"auto",right:"auto",bottom:"auto",left:"auto"};function pi(t){var e,i=t.popper,n=t.popperRect,s=t.placement,r=t.variation,o=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,u=t.isFixed,d=o.x,p=void 0===d?0:d,f=o.y,m=void 0===f?0:f,_="function"==typeof h?h({x:p,y:m}):{x:p,y:m};p=_.x,m=_.y;var g=o.hasOwnProperty("x"),b=o.hasOwnProperty("y"),v=ve,y="top",w=window;if(c){var A=ri(i),E="clientHeight",x="clientWidth";A===Be(i)&&"static"!==ti(A=ii(i)).position&&"absolute"===a&&(E="scrollHeight",x="scrollWidth"),("top"===s||("left"===s||"right"===s)&&"end"===r)&&(y=ge,m-=(u&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),"left"!==s&&("top"!==s&&"bottom"!==s||"end"!==r)||(v=be,p-=(u&&A===w&&w.visualViewport?w.visualViewport.width:A[x])-n.width,p*=l?1:-1)}var T,C=Object.assign({position:a},c&&di),k=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:Ke(i*s)/s||0,y:Ke(n*s)/s||0}}({x:p,y:m},Be(i)):{x:p,y:m};return p=k.x,m=k.y,l?Object.assign({},C,((T={})[y]=b?"0":"",T[v]=g?"0":"",T.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",T)):Object.assign({},C,((e={})[y]=b?m+"px":"",e[v]=g?p+"px":"",e.transform="",e))}var fi={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,r=i.adaptive,o=void 0===r||r,a=i.roundOffsets,l=void 0===a||a,c={placement:qe(e.placement),variation:ui(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,pi(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:o,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,pi(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},mi={passive:!0},_i={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,r=void 0===s||s,o=n.resize,a=void 0===o||o,l=Be(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return r&&c.forEach(function(t){t.addEventListener("scroll",i.update,mi)}),a&&l.addEventListener("resize",i.update,mi),function(){r&&c.forEach(function(t){t.removeEventListener("scroll",i.update,mi)}),a&&l.removeEventListener("resize",i.update,mi)}},data:{}},gi={left:"right",right:"left",bottom:"top",top:"bottom"};function bi(t){return t.replace(/left|right|bottom|top/g,function(t){return gi[t]})}var vi={start:"end",end:"start"};function yi(t){return t.replace(/start|end/g,function(t){return vi[t]})}function wi(t){var e=Be(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ai(t){return Qe(ii(t)).left+wi(t).scrollLeft}function Ei(t){var e=ti(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function xi(t){return["html","body","#document"].indexOf(ze(t))>=0?t.ownerDocument.body:He(t)&&Ei(t)?t:xi(ni(t))}function Ti(t,e){var i;void 0===e&&(e=[]);var n=xi(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),r=Be(n),o=s?[r].concat(r.visualViewport||[],Ei(n)?n:[]):n,a=e.concat(o);return s?a:a.concat(Ti(ni(o)))}function Ci(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ki(t,e,i){return"viewport"===e?Ci(function(t,e){var i=Be(t),n=ii(t),s=i.visualViewport,r=n.clientWidth,o=n.clientHeight,a=0,l=0;if(s){r=s.width,o=s.height;var c=Xe();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:r,height:o,x:a+Ai(t),y:l}}(t,i)):We(e)?function(t,e){var i=Qe(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ci(function(t){var e,i=ii(t),n=wi(t),s=null==(e=t.ownerDocument)?void 0:e.body,r=Ye(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),o=Ye(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ai(t),l=-n.scrollTop;return"rtl"===ti(s||i).direction&&(a+=Ye(i.clientWidth,s?s.clientWidth:0)-r),{width:r,height:o,x:a,y:l}}(ii(t)))}function Si(t){var e,i=t.reference,n=t.element,s=t.placement,r=s?qe(s):null,o=s?ui(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(r){case"top":e={x:a,y:i.y-n.height};break;case ge:e={x:a,y:i.y+i.height};break;case be:e={x:i.x+i.width,y:l};break;case ve:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=r?oi(r):null;if(null!=c){var h="y"===c?"height":"width";switch(o){case Ae:e[c]=e[c]-(i[h]/2-n[h]/2);break;case"end":e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function Ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,r=i.strategy,o=void 0===r?t.strategy:r,a=i.boundary,l=void 0===a?Ee:a,c=i.rootBoundary,h=void 0===c?xe:c,u=i.elementContext,d=void 0===u?Te:u,p=i.altBoundary,f=void 0!==p&&p,m=i.padding,_=void 0===m?0:m,g=li("number"!=typeof _?_:ci(_,we)),b="popper"===d?Ce:Te,v=t.rects.popper,y=t.elements[f?b:d],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Ti(ni(t)),i=["absolute","fixed"].indexOf(ti(t).position)>=0&&He(t)?ri(t):t;return We(i)?e.filter(function(t){return We(t)&&Je(t,i)&&"body"!==ze(t)}):[]}(t):[].concat(e),r=[].concat(s,[i]),o=r[0],a=r.reduce(function(e,i){var s=ki(t,i,n);return e.top=Ye(s.top,e.top),e.right=Ue(s.right,e.right),e.bottom=Ue(s.bottom,e.bottom),e.left=Ye(s.left,e.left),e},ki(t,o,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(We(y)?y:y.contextElement||ii(t.elements.popper),l,h,o),A=Qe(t.elements.reference),E=Si({reference:A,element:v,strategy:"absolute",placement:s}),x=Ci(Object.assign({},v,E)),T="popper"===d?x:A,C={top:w.top-T.top+g.top,bottom:T.bottom-w.bottom+g.bottom,left:w.left-T.left+g.left,right:T.right-w.right+g.right},k=t.modifiersData.offset;if("popper"===d&&k){var S=k[s];Object.keys(C).forEach(function(t){var e=["right","bottom"].indexOf(t)>=0?1:-1,i=["top","bottom"].indexOf(t)>=0?"y":"x";C[t]+=S[i]*e})}return C}function Oi(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,r=i.rootBoundary,o=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Se:l,h=ui(n),u=h?a?ke:ke.filter(function(t){return ui(t)===h}):we,d=u.filter(function(t){return c.indexOf(t)>=0});0===d.length&&(d=u);var p=d.reduce(function(e,i){return e[i]=Ii(t,{placement:i,boundary:s,rootBoundary:r,padding:o})[qe(i)],e},{});return Object.keys(p).sort(function(t,e){return p[t]-p[e]})}var Di={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,r=void 0===s||s,o=i.altAxis,a=void 0===o||o,l=i.fallbackPlacements,c=i.padding,h=i.boundary,u=i.rootBoundary,d=i.altBoundary,p=i.flipVariations,f=void 0===p||p,m=i.allowedAutoPlacements,_=e.options.placement,g=qe(_)===_,b=l||(g||!f?[bi(_)]:function(t){if("auto"===qe(t))return[];var e=bi(t);return[yi(t),e,yi(e)]}(_)),v=[_].concat(b).reduce(function(t,i){return t.concat("auto"===qe(i)?Oi(e,{placement:i,boundary:h,rootBoundary:u,padding:c,flipVariations:f,allowedAutoPlacements:m}):i)},[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,x=v[0],T=0;T=0,O=I?"width":"height",D=Ii(e,{placement:C,boundary:h,rootBoundary:u,altBoundary:d,padding:c}),L=I?S?be:ve:S?ge:"top";y[O]>w[O]&&(L=bi(L));var M=bi(L),$=[];if(r&&$.push(D[k]<=0),a&&$.push(D[L]<=0,D[M]<=0),$.every(function(t){return t})){x=C,E=!1;break}A.set(C,$)}if(E)for(var N=function(t){var e=v.find(function(e){var i=A.get(e);if(i)return i.slice(0,t).every(function(t){return t})});if(e)return x=e,"break"},P=f?3:1;P>0&&"break"!==N(P);P--);e.placement!==x&&(e.modifiersData[n]._skip=!0,e.placement=x,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Li(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Mi(t){return["top",be,ge,ve].some(function(e){return t[e]>=0})}var $i={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,r=e.modifiersData.preventOverflow,o=Ii(e,{elementContext:"reference"}),a=Ii(e,{altBoundary:!0}),l=Li(o,n),c=Li(a,s,r),h=Mi(l),u=Mi(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:u},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":u})}},Ni={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,r=void 0===s?[0,0]:s,o=Se.reduce(function(t,i){return t[i]=function(t,e,i){var n=qe(t),s=["left","top"].indexOf(n)>=0?-1:1,r="function"==typeof i?i(Object.assign({},e,{placement:t})):i,o=r[0],a=r[1];return o=o||0,a=(a||0)*s,["left","right"].indexOf(n)>=0?{x:a,y:o}:{x:o,y:a}}(i,e.rects,r),t},{}),a=o[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=o}},Pi={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Si({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},ji={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,r=void 0===s||s,o=i.altAxis,a=void 0!==o&&o,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,u=i.padding,d=i.tether,p=void 0===d||d,f=i.tetherOffset,m=void 0===f?0:f,_=Ii(e,{boundary:l,rootBoundary:c,padding:u,altBoundary:h}),g=qe(e.placement),b=ui(e.placement),v=!b,y=oi(g),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,x=e.rects.popper,T="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),k=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,S={x:0,y:0};if(A){if(r){var I,O="y"===y?"top":ve,D="y"===y?ge:be,L="y"===y?"height":"width",M=A[y],$=M+_[O],N=M-_[D],P=p?-x[L]/2:0,j="start"===b?E[L]:x[L],F="start"===b?-x[L]:-E[L],z=e.elements.arrow,B=p&&z?Ze(z):{width:0,height:0},W=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},H=W[O],R=W[D],V=ai(0,E[L],B[L]),q=v?E[L]/2-P-V-H-C.mainAxis:j-V-H-C.mainAxis,Y=v?-E[L]/2+P+V+R+C.mainAxis:F+V+R+C.mainAxis,U=e.elements.arrow&&ri(e.elements.arrow),K=U?"y"===y?U.clientTop||0:U.clientLeft||0:0,G=null!=(I=null==k?void 0:k[y])?I:0,X=M+Y-G,Q=ai(p?Ue($,M+q-G-K):$,M,p?Ye(N,X):N);A[y]=Q,S[y]=Q-M}if(a){var Z,J="x"===y?"top":ve,tt="x"===y?ge:be,et=A[w],it="y"===w?"height":"width",nt=et+_[J],st=et-_[tt],rt=-1!==["top",ve].indexOf(g),ot=null!=(Z=null==k?void 0:k[w])?Z:0,at=rt?nt:et-E[it]-x[it]-ot+C.altAxis,lt=rt?et+E[it]+x[it]-ot-C.altAxis:st,ct=p&&rt?function(t,e,i){var n=ai(t,e,i);return n>i?i:n}(at,et,lt):ai(p?at:nt,et,p?lt:st);A[w]=ct,S[w]=ct-et}e.modifiersData[n]=S}},requiresIfExists:["offset"]};function Fi(t,e,i){void 0===i&&(i=!1);var n,s,r=He(e),o=He(e)&&function(t){var e=t.getBoundingClientRect(),i=Ke(e.width)/t.offsetWidth||1,n=Ke(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=ii(e),l=Qe(t,o,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(r||!r&&!i)&&(("body"!==ze(e)||Ei(a))&&(c=(n=e)!==Be(n)&&He(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:wi(n)),He(e)?((h=Qe(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ai(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function zi(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach(function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}}),n.push(t)}return t.forEach(function(t){e.set(t.name,t)}),t.forEach(function(t){i.has(t.name)||s(t)}),n}var Bi={placement:"bottom",modifiers:[],strategy:"absolute"};function Wi(){for(var t=arguments.length,e=new Array(t),i=0;i$e,afterRead:()=>De,afterWrite:()=>je,applyStyles:()=>Ve,arrow:()=>hi,auto:()=>ye,basePlacements:()=>we,beforeMain:()=>Le,beforeRead:()=>Ie,beforeWrite:()=>Ne,bottom:()=>ge,clippingParents:()=>Ee,computeStyles:()=>fi,createPopper:()=>qi,createPopperBase:()=>Ri,createPopperLite:()=>Vi,detectOverflow:()=>Ii,end:()=>"end",eventListeners:()=>_i,flip:()=>Di,hide:()=>$i,left:()=>ve,main:()=>Me,modifierPhases:()=>Fe,offset:()=>Ni,placements:()=>Se,popper:()=>Te,popperGenerator:()=>Hi,popperOffsets:()=>Pi,preventOverflow:()=>ji,read:()=>Oe,reference:()=>Ce,right:()=>be,start:()=>Ae,top:()=>"top",variationPlacements:()=>ke,viewport:()=>xe,write:()=>Pe}),Ui=".bs.alert",Ki=`close${Ui}`,Gi=`closed${Ui}`,Xi=class t extends G{static get NAME(){return"alert"}close(){if(H.trigger(this._element,Ki)?.defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),H.trigger(this._element,Gi),this.dispose()}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this);if("string"==typeof e){if(void 0===i[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);i[e](this)}})}};Z(Xi,"close"),E(Xi);var Qi='[data-bs-toggle="button"], [data-tblr-toggle="button"]',Zi=class t extends G{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",String(this._element.classList.toggle("active")))}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this);"toggle"===e&&i.toggle()})}};H.on(document,"click.bs.button.data-api",Qi,t=>{t.preventDefault();const e=t.target?.closest(Qi);e&&Zi.getOrCreateInstance(e).toggle()}),E(Zi);var Ji=".bs.swipe",tn=`touchstart${Ji}`,en=`touchmove${Ji}`,nn=`touchend${Ji}`,sn=`pointerdown${Ji}`,rn=`pointerup${Ji}`,on={endCallback:null,leftCallback:null,rightCallback:null},an={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"},ln=class t extends K{constructor(e,i){super(),this._element=e,e&&t.isSupported()&&(this._config=this._getConfig(i),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return on}static get DefaultType(){return an}static get NAME(){return"swipe"}dispose(){H.off(this._element,Ji)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),x(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&x(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(H.on(this._element,sn,t=>this._start(t)),H.on(this._element,rn,t=>this._end(t)),this._element.classList.add("pointer-event")):(H.on(this._element,tn,t=>this._start(t)),H.on(this._element,en,t=>this._move(t)),H.on(this._element,nn,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}},cn=".bs.carousel",hn=".data-api",un="ArrowLeft",dn="ArrowRight",pn="next",fn="prev",mn="left",_n="right",gn=`slide${cn}`,bn=`slid${cn}`,vn=`keydown${cn}`,yn=`mouseenter${cn}`,wn=`mouseleave${cn}`,An=`dragstart${cn}`,En=`load${cn}${hn}`,xn=`click${cn}${hn}`,Tn="carousel",Cn="active",kn={[un]:_n,[dn]:mn},Sn={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},In={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"},On=class t extends G{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Q.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Tn&&this.cycle()}static get Default(){return Sn}static get DefaultType(){return In}static get NAME(){return"carousel"}next(){this._slide(pn)}nextWhenVisible(){!document.hidden&&f(this._element)&&this.next()}prev(){this._slide(fn)}pause(){this._isSliding&&l(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?H.one(this._element,bn,()=>this.cycle()):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void H.one(this._element,bn,()=>this.to(t));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?pn:fn;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&H.on(this._element,vn,t=>this._keydown(t)),"hover"===this._config.pause&&(H.on(this._element,yn,()=>this.pause()),H.on(this._element,wn,()=>this._maybeEnableCycle())),this._config.touch&&ln.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of Q.find(".carousel-item img",this._element))H.on(t,An,t=>t.preventDefault());const t={leftCallback:()=>this._slide(this._directionToOrder(mn)),rightCallback:()=>this._slide(this._directionToOrder(_n)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),500+this._config.interval))}};this._swipeHelper=new ln(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=kn[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=Q.findOne(".active",this._indicatorsElement);e.classList.remove(Cn),e.removeAttribute("aria-current");const i=Q.findOne(`[data-bs-slide-to="${t}"], [data-tblr-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(Cn),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval")||t.getAttribute("data-tblr-interval")||"",10);this._config.interval=e||(this._config.defaultInterval??this._config.interval)}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===pn,s=e||C(this._getItems(),i,n,this._config.wrap);if(s===i)return;const r=this._getItemIndex(s),o=e=>H.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:r});if(o(gn)?.defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(r),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),b(s),i.classList.add(l),s.classList.add(l),this._queueCallback(()=>{s.classList.remove(l,c),s.classList.add(Cn),i.classList.remove(Cn,c,l),this._isSliding=!1,o(bn)},i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return Q.findOne(".active.carousel-item",this._element)}_getItems(){return Q.find(".carousel-item",this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return v()?t===mn?fn:pn:t===mn?pn:fn}_orderToDirection(t){return v()?t===fn?mn:_n:t===fn?_n:mn}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this,e);if("number"!=typeof e){if("string"==typeof e){if(void 0===i[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);i[e]()}}else i.to(e)})}};H.on(document,xn,"[data-bs-slide], [data-bs-slide-to], [data-tblr-slide], [data-tblr-slide-to]",function(t){const e=Q.getElementFromSelector(this);if(!e||!e.classList.contains(Tn))return;t.preventDefault();const i=On.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to")||this.getAttribute("data-tblr-slide-to");return n?(i.to(Number(n)),void i._maybeEnableCycle()):"next"===U.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())}),H.on(window,En,()=>{const t=Q.find('[data-bs-ride="carousel"], [data-tblr-ride="carousel"]');for(const e of t)On.getOrCreateInstance(e)}),E(On);var Dn=".bs.collapse",Ln=`show${Dn}`,Mn=`shown${Dn}`,$n=`hide${Dn}`,Nn=`hidden${Dn}`,Pn=`click${Dn}.data-api`,jn="show",Fn="collapse",zn="collapsing",Bn=`:scope .${Fn} .${Fn}`,Wn='[data-bs-toggle="collapse"], [data-tblr-toggle="collapse"]',Hn={parent:null,toggle:!0},Rn={parent:"(null|element)",toggle:"boolean"},Vn=class t extends G{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=Q.find(Wn);for(const t of i){const e=Q.getSelectorFromElement(t),i=Q.find(e).filter(t=>t===this._element);null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Hn}static get DefaultType(){return Rn}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter(t=>t!==this._element).map(e=>t.getOrCreateInstance(e,{toggle:!1}))),e.length&&e[0]._isTransitioning)return;if(H.trigger(this._element,Ln)?.defaultPrevented)return;for(const t of e)t.hide();const i=this._getDimension();this._element.classList.remove(Fn),this._element.classList.add(zn),this._element.style[i]="0",this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${i[0].toUpperCase()+i.slice(1)}`;this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(zn),this._element.classList.add(Fn,jn),this._element.style[i]="",H.trigger(this._element,Mn)},this._element,!0),this._element.style[i]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(H.trigger(this._element,$n)?.defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,b(this._element),this._element.classList.add(zn),this._element.classList.remove(Fn,jn);for(const t of this._triggerArray){const e=Q.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(zn),this._element.classList.add(Fn),H.trigger(this._element,Nn)},this._element,!0)}_isShown(t=this._element){return t.classList.contains(jn)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=u(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Wn);for(const e of t){const t=Q.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=Q.find(Bn,this._config.parent);return Q.find(t,this._config.parent).filter(t=>!e.includes(t))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",String(e))}static jQueryInterface(e){const i={};return"string"==typeof e&&/show|hide/.test(e)&&(i.toggle=!1),this.each(function(){const n=t.getOrCreateInstance(this,i);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}})}};H.on(document,Pn,Wn,function(t){const{delegateTarget:e}=t;("A"===t.target.tagName||e&&"A"===e.tagName)&&t.preventDefault();for(const t of Q.getMultipleElementsFromSelector(this))Vn.getOrCreateInstance(t,{toggle:!1}).toggle()}),E(Vn);var qn="dropdown",Yn=".bs.dropdown",Un=".data-api",Kn="ArrowUp",Gn="ArrowDown",Xn=`hide${Yn}`,Qn=`hidden${Yn}`,Zn=`show${Yn}`,Jn=`shown${Yn}`,ts=`click${Yn}${Un}`,es=`keydown${Yn}${Un}`,is=`keyup${Yn}${Un}`,ns="show",ss='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled), [data-tblr-toggle="dropdown"]:not(.disabled):not(:disabled)',rs=ss.split(", ").map(t=>`${t}.${ns}`).join(", "),os=".dropdown-menu",as=v()?"top-end":"top-start",ls=v()?"top-start":"top-end",cs=v()?"bottom-end":"bottom-start",hs=v()?"bottom-start":"bottom-end",us=v()?"left-start":"right-start",ds=v()?"right-start":"left-start",ps={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},fs={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"},ms=class t extends G{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=Q.next(this._element,os)[0]||Q.prev(this._element,os)[0]||Q.findOne(os,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return ps}static get DefaultType(){return fs}static get NAME(){return qn}toggle(){this._isShown()?this.hide():this.show()}show(){if(m(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!H.trigger(this._element,Zn,t)?.defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of Array.from(document.body.children))H.on(t,"mouseover",g);this._element.focus(),this._element.setAttribute("aria-expanded","true"),this._menu.classList.add(ns),this._element.classList.add(ns),H.trigger(this._element,Jn,t)}}hide(){if(m(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!H.trigger(this._element,Xn,t)?.defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of Array.from(document.body.children))H.off(t,"mouseover",g);this._popper&&this._popper.destroy(),this._menu.classList.remove(ns),this._element.classList.remove(ns),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),H.trigger(this._element,Qn,t)}}_getConfig(t){const e=super._getConfig(t);if("object"==typeof e.reference&&!h(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${qn.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===Yi)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let t=this._element;"parent"===this._config.reference?t=this._parent:h(this._config.reference)?t=u(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=qi(t,this._menu,e)}_isShown(){return this._menu.classList.contains(ns)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return us;if(t.classList.contains("dropstart"))return ds;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ls:as:e?hs:cs}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};(this._inNavbar||"static"===this._config.display)&&(U.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]);const e=x(this._config.popperConfig,[void 0,t]);return{...t,..."object"==typeof e&&null!==e?e:{}}}_selectMenuItem({key:t,target:e}){const i=Q.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(t=>f(t));if(!i.length)return;const n=e;C(i,n,t===Gn,!i.includes(n)).focus()}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const i=Q.find(rs);for(const n of i){const i=t.getInstance(n);if(!i||!1===i._config.autoClose)continue;const s=e.composedPath(),r=s.includes(i._menu);if(s.includes(i._element)||"inside"===i._config.autoClose&&!r||"outside"===i._config.autoClose&&r)continue;if(i._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const o={relatedTarget:i._element};"click"===e.type&&(o.clickEvent=e),i._completeHide(o)}}static dataApiKeydownHandler(e){const i=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,s=[Kn,Gn].includes(e.key);if(!s&&!n)return;if(i&&!n)return;e.preventDefault();const r=this.matches(ss)?this:Q.prev(this,ss)[0]||Q.next(this,ss)[0]||Q.findOne(ss,e.delegateTarget.parentNode),o=t.getOrCreateInstance(r);if(s)return e.stopPropagation(),o.show(),void o._selectMenuItem(e);o._isShown()&&(e.stopPropagation(),o.hide(),r.focus())}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e]()}})}};H.on(document,es,ss,ms.dataApiKeydownHandler),H.on(document,es,os,ms.dataApiKeydownHandler),H.on(document,ts,ms.clearMenus),H.on(document,is,ms.clearMenus),H.on(document,ts,ss,function(t){t.preventDefault(),ms.getOrCreateInstance(this).toggle()}),E(ms);var _s="backdrop",gs="show",bs=`mousedown.bs.${_s}`,vs={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},ys={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"},ws=class extends K{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return vs}static get DefaultType(){return ys}static get NAME(){return _s}show(t){if(!this._config.isVisible)return void x(t);this._append();const e=this._getElement();this._config.isAnimated&&b(e),e.classList.add(gs),this._emulateAnimation(()=>{x(t)})}hide(t){this._config.isVisible?(this._getElement().classList.remove(gs),this._emulateAnimation(()=>{this.dispose(),x(t)})):x(t)}dispose(){this._isAppended&&(H.off(this._element,bs),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=u(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),H.on(t,bs,()=>{x(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){T(t,this._getElement(),this._config.isAnimated)}},As=".bs.focustrap",Es=`focusin${As}`,xs=`keydown.tab${As}`,Ts="backward",Cs={autofocus:!0,trapElement:null},ks={autofocus:"boolean",trapElement:"element"},Ss=class extends K{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Cs}static get DefaultType(){return ks}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),H.off(document,As),H.on(document,Es,t=>this._handleFocusin(t)),H.on(document,xs,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,H.off(document,As))}_handleFocusin(t){const{trapElement:e}=this._config;if(!e||t.target===document||t.target===e||e.contains(t.target))return;const i=Q.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===Ts?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ts:"forward")}},Is=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Os=".sticky-top",Ds="padding-right",Ls="margin-right",Ms=class{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Ds,e=>e+t),this._setElementAttributes(Is,Ds,e=>e+t),this._setElementAttributes(Os,Ls,e=>e-t)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Ds),this._resetElementAttributes(Is,Ds),this._resetElementAttributes(Os,Ls)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)})}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,t=>{const i=U.getDataAttribute(t,e);null!==i?(U.removeDataAttribute(t,e),t.style.setProperty(e,String(i))):t.style.removeProperty(e)})}_applyManipulationCallback(t,e){if(h(t))e(t);else for(const i of Q.find(t,this._element))e(i)}},$s=".bs.modal",Ns=`hide${$s}`,Ps=`hidePrevented${$s}`,js=`hidden${$s}`,Fs=`show${$s}`,zs=`shown${$s}`,Bs=`resize${$s}`,Ws=`click.dismiss${$s}`,Hs=`mousedown.dismiss${$s}`,Rs=`keydown.dismiss${$s}`,Vs=`click${$s}.data-api`,qs="modal-open",Ys="show",Us="modal-static",Ks={backdrop:!0,focus:!0,keyboard:!0},Gs={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"},Xs=class t extends G{constructor(t,e){super(t,e),this._dialog=Q.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._returnFocusTarget=null,this._scrollBar=new Ms,this._addEventListeners()}static get Default(){return Ks}static get DefaultType(){return Gs}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||H.trigger(this._element,Fs,{relatedTarget:t})?.defaultPrevented||(this._returnFocusTarget=d(t,this._element),this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(qs),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){if(!this._isShown||this._isTransitioning)return;if(H.trigger(this._element,Ns)?.defaultPrevented)return;this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Ys);const t=this._returnFocusTarget;this._returnFocusTarget=null,this._queueCallback(()=>this._hideModal(t),this._element,this._isAnimated())}dispose(){H.off(window,$s),H.off(this._dialog,$s),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new ws({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ss({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal","true"),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=this._dialog?Q.findOne(".modal-body",this._dialog):null;e&&(e.scrollTop=0),b(this._element),this._element.classList.add(Ys),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,H.trigger(this._element,zs,{relatedTarget:t})},this._dialog,this._isAnimated())}_addEventListeners(){H.on(this._element,Rs,t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())}),H.on(window,Bs,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),H.on(this._element,Hs,t=>{H.one(this._element,Ws,e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())})})}_hideModal(e){this._element.style.display="none",this._element.setAttribute("aria-hidden","true"),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(qs),this._resetAdjustments(),this._scrollBar.reset();const i=this._element;H.trigger(i,js),t.getInstance(i)?._isShown||p(e,i)})}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(H.trigger(this._element,Ps)?.defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Us)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Us),this._queueCallback(()=>{this._element.classList.remove(Us),this._queueCallback(()=>{this._element.style.overflowY=e},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=v()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=v()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,i){return this.each(function(){const n=t.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e](i)}})}};H.on(document,Vs,'[data-bs-toggle="modal"], [data-tblr-toggle="modal"]',function(t){const e=Q.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),!e)return;const i=Q.findOne(".modal.show");i&&Xs.getInstance(i).hide(),Xs.getOrCreateInstance(e).toggle(this)}),Z(Xs),E(Xs);var Qs=/^aria-[\w-]*$/i,Zs={"*":["class","dir","id","lang","role",Qs],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],kbd:[],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Js={"*":["class","role",Qs],svg:["xmlns","width","height","viewbox","fill","stroke","stroke-width","stroke-linecap","stroke-linejoin","focusable"],path:["d","fill","stroke","stroke-width","fill-rule","clip-rule"],line:["x1","y1","x2","y2","stroke","stroke-width","stroke-linecap"],circle:["cx","cy","r","fill","stroke","stroke-width"],rect:["x","y","width","height","rx","ry","fill","stroke","stroke-width"],polyline:["points","fill","stroke","stroke-width"],polygon:["points","fill","stroke","stroke-width"],g:["fill","stroke","stroke-width","transform"],span:[],i:[]},tr=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),er=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,ir=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!tr.has(i)||Boolean(er.test(t.nodeValue)):e.filter(t=>t instanceof RegExp).some(t=>t.test(i))};function nr(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=Array.from(n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=Array.from(t.attributes),s=[...e["*"]||[],...e[i]||[]];for(const e of n)ir(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}var sr=".bs.navoverflow",rr=`update${sr}`,or=`overflow${sr}`,ar=`resize${sr}`,lr=`click${sr}`,cr="nav-overflow",hr="nav-overflow-menu",ur="d-none",dr="nav-overflow-keep",pr="nav-overflow-initialized",fr="dropdown-menu-end",mr="show",_r="active",gr=".nav, .navbar-nav",br=".nav-item",vr=".nav-link",yr=".nav-overflow-toggle",wr=".dropdown-menu",Ar='[data-bs-toggle="dropdown"], [data-tblr-toggle="dropdown"]',Er="More",xr={collapseBelow:0,iconPlacement:"start",menuPlacement:"bottom-end",menuStrategy:"absolute",moreText:Er,moreIcon:'',threshold:0},Tr={collapseBelow:"(number|string)",iconPlacement:"string",menuPlacement:"string",menuStrategy:"string",moreText:"(string|boolean)",moreIcon:"string",threshold:"number"},Cr=class t extends G{constructor(t,e){super(t,e);const i=Q.findOne(gr,this._element);if(!i)throw new TypeError(`${this._element.outerHTML} has no child ${gr} to collapse`);this._nav=i,this._items=[],this._overflowItems=[],this._lastOverflow=[],this._overflowMenu=null,this._overflowToggle=null,this._ownsToggle=!1,this._ownsClass=!1,this._clones=new Map,this._resizeObserver=null,this._resizeHandler=null,this._collapseBelow=0,this._itemMenus=new Map,this._relocatedMenus=new Map,this._init()}static get Default(){return xr}static get DefaultType(){return Tr}static get NAME(){return"navoverflow"}update(){this._calculateOverflow(),H.trigger(this._element,rr)}dispose(){this._resizeObserver?.disconnect(),this._resizeHandler&&H.off(window,ar,this._resizeHandler),H.off(this._element,sr),this._restoreItems(),this._ownsToggle&&this._overflowToggle?.closest(br)?.remove(),this._element.classList.remove(pr),this._ownsClass&&this._element.classList.remove(cr),super.dispose()}_init(){this._ownsClass=!this._element.classList.contains(cr),this._element.classList.add(cr),this._items=Q.find(br,this._nav).filter(t=>t.parentElement===this._nav&&!t.querySelector(yr));for(const t of this._items){const e=Q.findOne(vr,t);e?.matches(Ar)&&this._findItemMenu(t,e)}H.on(this._element,`shown.bs.tab${sr}`,()=>this._syncStates()),this._collapseBelow=this._resolveCollapseBelow(),this._createOverflowMenu(),this._setupResizeObserver(),this._calculateOverflow(),this._element.classList.add(pr)}_createOverflowMenu(){if(this._overflowToggle=Q.findOne(yr,this._element),this._overflowToggle)return void(this._overflowMenu=Q.findOne(".nav-overflow-menu",this._element));const{moreText:t,menuPlacement:e,iconPlacement:i}=this._config,n="string"==typeof t?t:"",s=document.createElement("li");s.className="nav-item dropdown nav-overflow-item",e.startsWith("top")&&s.classList.add("dropup");const r=document.createElement("button");r.type="button",r.className="nav-link nav-overflow-toggle",r.setAttribute("data-bs-toggle","dropdown"),r.setAttribute("aria-expanded","false"),""===n&&r.setAttribute("aria-label",Er);const o=document.createElement("span");if(o.className="nav-overflow-icon",o.innerHTML=nr(this._resolveIcon(),Js),""===n)r.append(o);else{const t=document.createElement("span");t.className="nav-overflow-text",t.textContent=n,"end"===i?r.append(t,o):r.append(o,t)}const a=document.createElement("div");a.className=`dropdown-menu ${hr}`,e.endsWith("end")&&a.classList.add(fr),s.append(r,a),this._nav.append(s),this._overflowToggle=r,this._overflowMenu=a,this._ownsToggle=!0}_resolveIcon(){const t=Q.findOne("[data-bs-overflow-icon], [data-tblr-overflow-icon]",this._element);if(!t)return this._config.moreIcon;const e=t.cloneNode(!0);return e.removeAttribute("data-bs-overflow-icon"),e.removeAttribute("data-tblr-overflow-icon"),t.remove(),e.outerHTML}_resolveCollapseBelow(){const t=this._config.collapseBelow;if("number"==typeof t)return t;if(""===t)return 0;const e=Number(t);if(!Number.isNaN(e))return e;const i=getComputedStyle(document.documentElement).getPropertyValue(`--tblr-breakpoint-${t}`);return Number.parseFloat(i)||0}_setupResizeObserver(){if("undefined"==typeof ResizeObserver)return this._resizeHandler=()=>this._calculateOverflow(),void H.on(window,ar,this._resizeHandler);this._resizeObserver=new ResizeObserver(()=>{this._calculateOverflow()}),this._resizeObserver.observe(this._element)}_availableWidth(){const{paddingInlineStart:t,paddingInlineEnd:e}=getComputedStyle(this._element),i=(Number.parseFloat(t)||0)+(Number.parseFloat(e)||0);return this._element.clientWidth-i}_navGap(){return Number.parseFloat(getComputedStyle(this._nav).columnGap)||0}_calculateOverflow(){const t=this._overflowToggle?.closest(br)??null;this._setHidden([],t,!1);const e=this._getItemsToOverflow(t);e.length===this._lastOverflow.length&&e.every((t,e)=>t===this._lastOverflow[e])?this._setHidden(this._overflowItems,t):(this._restoreItems(),this._lastOverflow=e,this._applyOverflow(e,t))}_getItemsToOverflow(t){if(getComputedStyle(this._nav).flexDirection.startsWith("column"))return[];const e=this._availableWidth(),i=this._items.filter(t=>!t.classList.contains(dr));if(this._collapseBelow>0&&et.classList.contains(dr)).reduce((t,e)=>t+e.offsetWidth+n,0),r=e-s-(t?t.offsetWidth+n:0);let o=0,a=[];for(const t of i)o+=t.offsetWidth+n,o>r+1&&a.push(t);a.length>0&&o<=e-s+1&&(a=[]);const{threshold:l}=this._config;return this._items.length-a.lengthl&&(a=this._items.slice(l).filter(t=>!t.classList.contains(dr))),a}_setHidden(t,e,i=0===t.length){for(const e of this._items){const i=t.includes(e);e.classList.toggle(ur,i),i?e.dataset.bsNavOverflow="true":delete e.dataset.bsNavOverflow}e?.classList.toggle(ur,i)}_applyOverflow(t,e){const i=this._moveToOverflow(t);this._setHidden(this._overflowItems,e),this._overflowToggle&&this._ownsToggle&&ms.getOrCreateInstance(this._overflowToggle,{autoClose:!i||"outside",popperConfig:{strategy:this._config.menuStrategy}}),t.length>0&&H.trigger(this._element,or,{overflowCount:t.length,visibleCount:this._items.length-t.length})}_moveToOverflow(t){let e=!1;if(!this._overflowMenu)return e;this._clearMenu();for(const i of t){const t=Q.findOne(vr,i);if(!t)continue;const n=this._findItemMenu(i,t);n&&t.matches(Ar)?(this._overflowMenu.append(this._relocateAsSubmenu(i,t,n)),e=!0):this._overflowMenu.append(this._cloneAsProxy(t)),this._overflowItems.push(i)}return e}_relocateAsSubmenu(t,e,i){this._resetMenu(e,i),t.classList.remove(mr),this._relocatedMenus.set(t,{menu:i,parent:i.parentNode,nextSibling:i.nextSibling});const n=document.createElement("div");return n.className=this._overflowMenu?.classList.contains(fr)?"dropstart":"dropend",n.append(this._cloneAsMenuItem(e,!0),i),n}_cloneAsProxy(t){const e=this._cloneAsMenuItem(t);return t.matches("[data-bs-toggle], [data-tblr-toggle]")&&(this._removeDataAttributes(e),H.on(e,lr,e=>{e.preventDefault(),t.click(),this._syncStates()})),e}_removeDataAttributes(t){for(const e of t.getAttributeNames())!e.startsWith("data-bs-")&&!e.startsWith("data-tblr-")||e.endsWith("-theme")||t.removeAttribute(e)}_isActive(t){return t.classList.contains(_r)||Boolean(t.closest(br)?.classList.contains(_r))}_syncStates(){for(const[t,e]of this._clones)t.classList.toggle(_r,this._isActive(e))}_cloneAsMenuItem(t,e=!1){const i=t.cloneNode(!0);return i.className="dropdown-item",i.removeAttribute("id"),this._clones.set(i,t),this._isActive(t)&&i.classList.add(_r),(t.classList.contains("disabled")||t.hasAttribute("disabled"))&&i.classList.add("disabled"),e&&(this._removeDataAttributes(i),i.classList.add("dropdown-toggle"),i.removeAttribute("href"),i.setAttribute("data-bs-toggle","dropdown"),i.setAttribute("data-bs-auto-close","outside"),i.setAttribute("aria-haspopup","true"),i.setAttribute("aria-expanded","false"),"A"===i.tagName&&(i.setAttribute("role","button"),i.hasAttribute("tabindex")||i.setAttribute("tabindex","0"))),i}_findItemMenu(t,e){const i=Q.next(e,wr)[0];if(i&&!i.classList.contains(hr))return this._itemMenus.set(t,i),i;const n=Q.findOne(wr,t);if(n&&!n.classList.contains(hr))return this._itemMenus.set(t,n),n;const s=this._itemMenus.get(t);return s?.isConnected?s:(this._itemMenus.delete(t),null)}_resetMenu(t,e){ms.getInstance(t)?.dispose(),t.classList.remove(mr),t.setAttribute("aria-expanded","false"),t.parentElement?.classList.remove(mr),e.classList.remove(mr)}_restoreRelocatedMenus(){for(const{menu:t,parent:e,nextSibling:i}of this._relocatedMenus.values()){const n=t.previousElementSibling;n?.matches(Ar)&&this._resetMenu(n,t),i?i.before(t):e.append(t)}this._relocatedMenus.clear()}_restoreItems(){this._overflowToggle&&this._overflowMenu&&this._resetMenu(this._overflowToggle,this._overflowMenu),this._restoreRelocatedMenus(),this._setHidden([],this._overflowToggle?.closest(br)??null,!1),this._clearMenu()}_clearMenu(){for(const t of this._clones.keys())H.off(t,sr);this._clones.clear(),this._overflowMenu?.replaceChildren(),this._overflowItems=[]}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===i[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);i[e]()}})}};A(()=>{for(const t of Q.find('[data-bs-toggle="nav-overflow"], [data-tblr-toggle="nav-overflow"]'))Cr.getOrCreateInstance(t)}),E(Cr);var kr=".bs.offcanvas",Sr=".data-api",Ir=`load${kr}${Sr}`,Or="show",Dr="showing",Lr="hiding",Mr=".offcanvas.show",$r=`show${kr}`,Nr=`shown${kr}`,Pr=`hide${kr}`,jr=`hidePrevented${kr}`,Fr=`hidden${kr}`,zr=`resize${kr}`,Br=`click${kr}${Sr}`,Wr=`keydown.dismiss${kr}`,Hr={backdrop:!0,keyboard:!0,scroll:!1},Rr={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"},Vr=class t extends G{constructor(t,e){super(t,e),this._isShown=!1,this._returnFocusTarget=null,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Hr}static get DefaultType(){return Rr}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||H.trigger(this._element,$r,{relatedTarget:t})?.defaultPrevented||(this._returnFocusTarget=d(t,this._element),this._isShown=!0,this._backdrop.show(),this._config.scroll||(new Ms).hide(),this._element.setAttribute("aria-modal","true"),this._element.setAttribute("role","dialog"),this._element.classList.add(Dr),this._queueCallback(()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Or),this._element.classList.remove(Dr),H.trigger(this._element,Nr,{relatedTarget:t})},this._element,!0))}hide(){if(!this._isShown)return;if(H.trigger(this._element,Pr)?.defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Lr),this._backdrop.hide();const e=this._element,i=this._returnFocusTarget;this._returnFocusTarget=null,this._queueCallback(()=>{this._element.classList.remove(Or,Lr),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new Ms).reset(),H.trigger(e,Fr),t.getInstance(e)?._isShown||p(i,e)},this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new ws({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():H.trigger(this._element,jr)}:null})}_initializeFocusTrap(){return new Ss({trapElement:this._element})}_addEventListeners(){H.on(this._element,Wr,t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():H.trigger(this._element,jr))})}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===i[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);i[e](this)}})}};H.on(document,Br,'[data-bs-toggle="offcanvas"], [data-tblr-toggle="offcanvas"]',function(t){const e=Q.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),!e)return;if(m(this))return;const i=Q.findOne(Mr);i&&i!==e&&Vr.getInstance(i).hide(),Vr.getOrCreateInstance(e).toggle(this)}),H.on(window,Ir,()=>{for(const t of Q.find(Mr))Vr.getOrCreateInstance(t).show()}),H.on(window,zr,()=>{for(const t of Q.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Vr.getOrCreateInstance(t).hide()}),Z(Vr),E(Vr);var qr={allowList:Zs,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Yr={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Ur={entry:"(string|element|function|null)",selector:"(string|element)"},Kr=class extends K{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return qr}static get DefaultType(){return Yr}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Ur)}_setContent(t,e,i){const n=Q.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?h(e)?this._putElementInTemplate(u(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?nr(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return x(t,[void 0,this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}},Gr=new Set(["sanitize","allowList","sanitizeFn"]),Xr="fade",Qr="show",Zr=".tooltip-inner",Jr=".modal",to="hide.bs.modal",eo="hover",io="focus",no="click",so={AUTO:"auto",TOP:"top",RIGHT:v()?"left":"right",BOTTOM:"bottom",LEFT:v()?"right":"left"},ro={allowList:Zs,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},oo={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"},ao=class t extends G{constructor(t,e){if(void 0===Yi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._hideModalHandler=()=>{this._element&&this.hide()},this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return ro}static get DefaultType(){return oo}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),H.off(this._element.closest(Jr),to,this._hideModalHandler),(this._element.getAttribute("data-bs-original-title")||this._element.getAttribute("data-tblr-original-title"))&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")||this._element.getAttribute("data-tblr-original-title")||""),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=H.trigger(this._element,this.constructor.eventName("show")),e=(_(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t?.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),H.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(Qr),"ontouchstart"in document.documentElement)for(const t of Array.from(document.body.children))H.on(t,"mouseover",g);this._queueCallback(()=>{H.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1},this.tip,this._isAnimated())}hide(){if(this._isShown()&&!H.trigger(this._element,this.constructor.eventName("hide"))?.defaultPrevented){if(this._getTipElement().classList.remove(Qr),"ontouchstart"in document.documentElement)for(const t of Array.from(document.body.children))H.off(t,"mouseover",g);this._activeTrigger[no]=!1,this._activeTrigger[io]=!1,this._activeTrigger[eo]=!1,this._isHovered=null,this._queueCallback(()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),H.trigger(this._element,this.constructor.eventName("hidden")))},this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Xr,Qr),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(Xr),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Kr({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[Zr]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")||this._element.getAttribute("data-tblr-original-title")||""}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||null!==this.tip&&this.tip.classList.contains(Xr)}_isShown(){return null!==this.tip&&this.tip.classList.contains(Qr)}_createPopper(t){const e=so[x(this._config.placement,[this,t,this._element]).toUpperCase()];return qi(this._element,t,this._getPopperConfig(e))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return x(t,[this._element,this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]},i=x(this._config.popperConfig,[void 0,e]);return{...e,..."object"==typeof i&&null!==i?i:{}}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)H.on(this._element,this.constructor.eventName("click"),this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[no]=!(e._isShown()&&e._activeTrigger[no]),e.toggle()});else if("manual"!==e){const t=e===eo?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===eo?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");H.on(this._element,t,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?io:eo]=!0,e._enter()}),H.on(this._element,i,this._config.selector,t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?io:eo]=e._element.contains(t.relatedTarget),e._leave()})}H.on(this._element.closest(Jr),to,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._getDelay().show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._getDelay().hide))}_getDelay(){const{delay:t}=this._config;return"number"==typeof t?{show:t,hide:t}:t}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=U.getDataAttributes(this._element);for(const t of Object.keys(e))Gr.has(t)&&delete e[t];let i={...e,..."object"==typeof t&&t?t:{}};return i=this._mergeConfigObj(i),i=this._configAfterMerge(i),this._typeCheckConfig(i),i}_configAfterMerge(t){t.container=!1===t.container?document.body:u(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay});const e=t;return"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),t}_getDelegateConfig(){const t={},e=this.constructor.Default;for(const[i,n]of Object.entries(this._config))e[i]!==n&&(t[i]=n);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e]()}})}};E(ao);var lo=".popover-header",co=".popover-body",ho={...ao.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},uo={...ao.DefaultType,content:"(null|string|element|function)"},po=class t extends ao{constructor(t,e){super(t,e)}static get Default(){return ho}static get DefaultType(){return uo}static get NAME(){return"popover"}_isWithContent(){return Boolean(this._getTitle()||this._getContent())}_getContentForTemplate(){return{[lo]:this._getTitle(),[co]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e]()}})}};E(po);var fo=".bs.scrollspy",mo=`activate${fo}`,_o=`click${fo}`,go=`load${fo}.data-api`,bo="active",vo="[href]",yo=".nav-link",wo=`${yo}, .nav-item > ${yo}, .list-group-item`,Ao={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Eo={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"},xo=class t extends G{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Ao}static get DefaultType(){return Eo}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){t.target=u(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin;const e=t.threshold;return"string"==typeof e&&(t.threshold=e.split(",").map(t=>Number.parseFloat(t))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(H.off(this._config.target,_o),H.on(this._config.target,_o,vo,t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if("scrollTo"in i)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}}))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(t=>this._observerCallback(t),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const r of t){if(!r.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(r));continue}const t=r.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(r),!n)return}else s||t||i(r)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=Q.find(vo,this._config.target);for(const e of t){if(!e.hash||m(e))continue;const t=Q.findOne(o(decodeURI(e.hash)),this._element);f(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(bo),this._activateParents(t),H.trigger(this._element,mo,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))Q.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(bo);else for(const e of Q.parents(t,".nav, .list-group"))for(const t of Q.prev(e,wo))t.classList.add(bo)}_clearActiveClass(t){t.classList.remove(bo);const e=Q.find(`${vo}.${bo}`,t);for(const t of e)t.classList.remove(bo)}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===i[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);i[e]()}})}};H.on(window,go,()=>{for(const t of Q.find('[data-bs-spy="scroll"], [data-tblr-spy="scroll"]'))xo.getOrCreateInstance(t)}),E(xo);var To=".bs.tab",Co=`hide${To}`,ko=`hidden${To}`,So=`show${To}`,Io=`shown${To}`,Oo=`click${To}`,Do=`keydown${To}`,Lo=`load${To}`,Mo="ArrowLeft",$o="ArrowRight",No="ArrowUp",Po="ArrowDown",jo="Home",Fo="End",zo="active",Bo="fade",Wo="show",Ho=".dropdown-toggle",Ro=`:not(${Ho})`,Vo='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"], [data-tblr-toggle="tab"], [data-tblr-toggle="pill"], [data-tblr-toggle="list"]',qo=`.nav-link${Ro}, .list-group-item${Ro}, [role="tab"]${Ro}, ${Vo}`,Yo=`.${zo}[data-bs-toggle="tab"], .${zo}[data-bs-toggle="pill"], .${zo}[data-bs-toggle="list"], .${zo}[data-tblr-toggle="tab"], .${zo}[data-tblr-toggle="pill"], .${zo}[data-tblr-toggle="list"]`,Uo=class t extends G{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),H.on(this._element,Do,t=>this._keydown(t)))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?H.trigger(e,Co,{relatedTarget:t}):null;H.trigger(t,So,{relatedTarget:e})?.defaultPrevented||i?.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(zo),this._activate(Q.getElementFromSelector(t)),this._queueCallback(()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected","true"),this._toggleDropDown(t,!0),H.trigger(t,Io,{relatedTarget:e})):t.classList.add(Wo)},t,t.classList.contains(Bo)))}_deactivate(t,e){t&&(t.classList.remove(zo),t.blur(),this._deactivate(Q.getElementFromSelector(t)),this._queueCallback(()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected","false"),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),H.trigger(t,ko,{relatedTarget:e})):t.classList.remove(Wo)},t,t.classList.contains(Bo)))}_keydown(e){if(![Mo,$o,No,Po,jo,Fo].includes(e.key))return;e.stopPropagation(),e.preventDefault();const i=this._getChildren().filter(t=>!m(t));let n;if([jo,Fo].includes(e.key))n=i[e.key===jo?0:i.length-1];else{const t=[$o,Po].includes(e.key);n=C(i,e.target,t,!0)}n&&(n.focus({preventScroll:!0}),t.getOrCreateInstance(n).show())}_getChildren(){return Q.find(qo,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",String(e)),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=Q.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=Q.findOne(t,i);s&&s.classList.toggle(n,e)};n(Ho,zo),n(".dropdown-menu",Wo),i.setAttribute("aria-expanded",String(e))}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(zo)}_getInnerElement(t){return t.matches(qo)?t:Q.findOne(qo,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this);if("string"==typeof e){if(void 0===i[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);i[e]()}})}};H.on(document,Oo,Vo,function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),m(this)||Uo.getOrCreateInstance(this).show()}),H.on(window,Lo,()=>{for(const t of Q.find(Yo))Uo.getOrCreateInstance(t)}),E(Uo);var Ko=".bs.toast",Go=`mouseover${Ko}`,Xo=`mouseout${Ko}`,Qo=`focusin${Ko}`,Zo=`focusout${Ko}`,Jo=`hide${Ko}`,ta=`hidden${Ko}`,ea=`show${Ko}`,ia=`shown${Ko}`,na="hide",sa="show",ra="showing",oa={animation:"boolean",autohide:"boolean",delay:"number"},aa={animation:!0,autohide:!0,delay:5e3},la=class t extends G{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return aa}static get DefaultType(){return oa}static get NAME(){return"toast"}show(){H.trigger(this._element,ea)?.defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(na),b(this._element),this._element.classList.add(sa,ra),this._queueCallback(()=>{this._element.classList.remove(ra),H.trigger(this._element,ia),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this.isShown()&&(H.trigger(this._element,Jo)?.defaultPrevented||(this._element.classList.add(ra),this._queueCallback(()=>{this._element.classList.add(na),this._element.classList.remove(ra,sa),H.trigger(this._element,ta)},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(sa),super.dispose()}isShown(){return this._element.classList.contains(sa)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){H.on(this._element,Go,t=>this._onInteraction(t,!0)),H.on(this._element,Xo,t=>this._onInteraction(t,!1)),H.on(this._element,Qo,t=>this._onInteraction(t,!0)),H.on(this._element,Zo,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){const i=t.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e](this)}})}};Z(la),E(la);var ca={Alert:Xi,Button:Zi,Carousel:On,Collapse:Vn,Dropdown:ms,Modal:Xs,NavOverflow:Cr,Offcanvas:Vr,Popover:po,ScrollSpy:xo,Tab:Uo,Toast:la,Tooltip:ao};A(()=>{for(const t of document.querySelectorAll('[data-bs-toggle="dropdown"], [data-tblr-toggle="dropdown"]'))try{const e={boundary:"viewport"===U.getDataAttribute(t,"boundary")?document.documentElement:"clippingParents"};ms.getOrCreateInstance(t,e)}catch(t){console.error(t)}});var ha=t=>{for(const e of document.querySelectorAll('[data-bs-toggle="sidebar-folded"], [data-tblr-toggle="sidebar-folded"]'))e.setAttribute("aria-pressed",String(t))},ua=t=>{for(const e of document.querySelectorAll('.navbar-vertical [data-bs-toggle="dropdown"][aria-expanded="true"]'))e!==t&&ms.getInstance(e)?.hide()};document.addEventListener("click",t=>{if(!(document.documentElement.getAttribute("data-bs-sidebar")??"").startsWith("folded")&&!document.querySelector(".navbar-vertical.navbar-folded, .navbar-vertical.navbar-folded-hover"))return;const e=t.target;e instanceof Element&&!e.closest(".navbar-vertical .dropdown-menu")&&ua(e.closest('.navbar-vertical [data-bs-toggle="dropdown"]'))}),document.addEventListener("mouseleave",t=>{const e=t.target;e instanceof Element&&e.matches(".navbar-vertical")&&("folded-hover"===document.documentElement.getAttribute("data-bs-sidebar")||e.classList.contains("navbar-folded-hover"))&&ua()},!0),A(()=>{const t=(document.documentElement.getAttribute("data-bs-sidebar")??"").startsWith("folded");if(ha(t),t)for(const t of document.querySelectorAll(".navbar-vertical .dropdown-menu.show"))t.classList.remove("show"),t.parentElement?.querySelector('[data-bs-toggle="dropdown"]')?.setAttribute("aria-expanded","false")}),document.addEventListener("click",t=>{if(!(t.target instanceof Element&&t.target.closest('[data-bs-toggle="sidebar-folded"], [data-tblr-toggle="sidebar-folded"]')))return;const e=document.documentElement,i=!(e.getAttribute("data-bs-sidebar")??"").startsWith("folded");i?e.setAttribute("data-bs-sidebar","folded-hover"):e.removeAttribute("data-bs-sidebar");try{localStorage.setItem("tabler-sidebar",i?"folded-hover":"default")}catch{}ha(i),ua(),document.dispatchEvent(new CustomEvent("tabler:sidebar-folded",{detail:{folded:i}}))}),A(()=>{for(const t of document.querySelectorAll('[data-bs-toggle="tooltip"], [data-tblr-toggle="tooltip"]'))try{const e={delay:U.getDataAttribute(t,"delay")??{show:50,hide:50},placement:U.getDataAttribute(t,"placement")??"auto"};ao.getOrCreateInstance(t,e)}catch(t){console.error(t)}}),A(()=>{for(const t of document.querySelectorAll('[data-bs-toggle="popover"], [data-tblr-toggle="popover"]'))try{const e={delay:U.getDataAttribute(t,"delay")??{show:50,hide:50},placement:U.getDataAttribute(t,"placement")??"auto"};po.getOrCreateInstance(t,e)}catch(t){console.error(t)}});var da="switch-icon",pa=`.bs.${da}`,fa=`click${pa}`,ma=`toggle${pa}`,_a=`change${pa}`,ga="active",ba="switch-icon-loading",va=".switch-icon",ya=`[data-bs-toggle="${da}"], [data-tblr-toggle="${da}"]`,wa={},Aa={},Ea=class extends G{#t;constructor(t,e){super(t,e),this._element&&(this.#t=this._element.matches(va)?this._element:Q.findOne(va,this._element)??this._element,this._element.hasAttribute("aria-pressed")||this._element.setAttribute("aria-pressed",String(this.isActive)),H.on(this._element,fa,t=>{t.stopPropagation(),this._element.classList.contains("disabled")||"true"===this._element.getAttribute("aria-disabled")||this.toggle()}))}static get Default(){return wa}static get DefaultType(){return Aa}static get NAME(){return da}get isActive(){return this.#t.classList.contains(ga)}get isLoading(){return this.#t.classList.contains(ba)}toggle(t){if(this.isLoading)return;const e=t??!this.isActive;let i;H.trigger(this._element,ma,{active:e,wait:t=>{i=t}})?.defaultPrevented||(i?(this.#e(!0),i.then(()=>this.#i(e),()=>{}).finally(()=>this.#e(!1))):this.#i(e))}dispose(){this.#e(!1),super.dispose()}#i(t){this._element&&(this.#t.classList.toggle(ga,t),this._element.setAttribute("aria-pressed",String(t)),H.trigger(this._element,_a,{active:t}))}#e(t){this._element&&(this.#t.classList.toggle(ba,t),t?this._element.setAttribute("aria-busy","true"):this._element.removeAttribute("aria-busy"))}};J(ya,Ea),A(()=>{const t=window.location.hash;if(t)for(const e of document.querySelectorAll('[data-bs-toggle="tab"], [data-tblr-toggle="tab"]'))if(e.hash===t)try{Uo.getOrCreateInstance(e).show()}catch(t){console.error(t)}}),A(()=>{for(const t of document.querySelectorAll('[data-bs-toggle="toast"], [data-tblr-toggle="toast"]'))try{const e=Q.getElementFromSelector(t);if(!e)continue;const i=la.getOrCreateInstance(e);t.addEventListener("click",()=>{i.show()})}catch(t){console.error(t)}});var xa="sortable",Ta=`data-${xa}`,Ca=`[${Ta}]`,ka={},Sa={},Ia=class extends G{constructor(t,e){super(t,e),this._sortable=null,this._element&&window.Sortable&&(this._sortable=new window.Sortable(this._element,this._config))}static get Default(){return ka}static get DefaultType(){return Sa}static get NAME(){return xa}get sortable(){return this._sortable}toArray(){return this._sortable?.toArray()??[]}sort(t,e){this._sortable?.sort(t,e)}dispose(){this._sortable?.destroy(),super.dispose()}_mergeConfigObj(t,e){let i={};const n=e?.getAttribute(Ta);if(n)try{const t=JSON.parse(n);t&&"object"==typeof t&&!Array.isArray(t)&&(i=t)}catch{}return super._mergeConfigObj({...i,...t},e)}};J(Ca,Ia);var Oa="otpInput",Da=`.bs.${Oa}`,La=`input${Da}`,Ma=`complete${Da}`,$a="otp-rendered",Na=["blur","keyup","select"],Pa=["click","pointercancel"],ja={numeric:{inputmode:"numeric",pattern:"[0-9]*",filter:/[^0-9]/g},alphanumeric:{inputmode:"text",pattern:"[A-Za-z0-9]*",filter:/[^A-Za-z0-9]/g},alpha:{inputmode:"text",pattern:"[A-Za-z]*",filter:/[^A-Za-z]/g}},Fa={groups:null,length:null,mask:!1,separator:"·",type:"numeric"},za={groups:"(array|null)",length:"(number|null)",mask:"boolean",separator:"string",type:"string"},Ba=class extends G{constructor(t,e){if(super(t,e),this._length=0,this._wasComplete=!1,this._slots=[],this._slotsContainer=null,this._pointerActive=!1,this._pointerIndex=0,this._composedValue=null,this._onInput=t=>{if(t.isComposing)return;const e=this._composedValue;this._composedValue=null,null!==e&&e===this._input.value||this._handleInput()},this._onCompositionEnd=()=>{this._handleInput(),this._composedValue=this._input.value},this._onBeforeInput=t=>this._handleBeforeInput(t),this._onFocus=()=>this._handleFocus(),this._onPointerDown=t=>this._handlePointerDown(t),this._onPointerEnd=()=>{this._pointerActive=!1},this._onSync=()=>this._render(),this._onSelectionChange=()=>{document.activeElement===this._input&&this._render()},!this._element)return;const i=Q.findOne("input",this._element);i&&(this._input=i,this._type=ja[this._config.type]??ja.numeric,this._length=this._resolveLength(),this._setupInput(),this._renderSlots(),this._addEventListeners(),this._render(),this._wasComplete=this._input.value.length===this._length)}static get Default(){return Fa}static get DefaultType(){return za}static get NAME(){return Oa}getValue(){return this._input.value}setValue(t){this._input.value=this._sanitize(String(t)),this._render(),this._checkComplete()}clear(){this._input.value="",this._render(),this._input.focus()}focus(){this._pointerActive=!1,this._input.focus(),this._selectSlot(this._firstEmptyIndex()),this._render()}dispose(){if(this._input){this._input.removeEventListener("input",this._onInput),this._input.removeEventListener("beforeinput",this._onBeforeInput),this._input.removeEventListener("focus",this._onFocus),this._input.removeEventListener("pointerdown",this._onPointerDown),this._input.removeEventListener("compositionend",this._onCompositionEnd);for(const t of Pa)this._input.removeEventListener(t,this._onPointerEnd);for(const t of Na)this._input.removeEventListener(t,this._onSync);document.removeEventListener("selectionchange",this._onSelectionChange),this._slotsContainer?.remove(),this._element.classList.remove($a),super.dispose()}else super.dispose()}_resolveLength(){const t=[this._config.length,Number.parseInt(this._input.getAttribute("maxlength")??"",10)],{groups:e}=this._config;Array.isArray(e)&&e.length>0&&t.push(e.reduce((t,e)=>t+Number(e),0));for(const e of t)if("number"==typeof e&&Number.isInteger(e)&&e>0)return Math.min(e,32);return 6}_setupInput(){const t=this._input;"text"!==t.type&&"tel"!==t.type&&(t.type="text"),t.classList.add("otp-input"),t.setAttribute("maxlength",String(this._length)),t.setAttribute("inputmode",this._type.inputmode),t.setAttribute("pattern",this._type.pattern),t.getAttribute("autocomplete")||t.setAttribute("autocomplete","one-time-code"),t.value&&(t.value=this._sanitize(t.value))}_renderSlots(){const t=document.createElement("div");t.className="otp-slots",t.setAttribute("aria-hidden","true");const{groups:e,separator:i}=this._config;let n=0,s=0;for(let r=0;r0&&(s++,s===e[n]&&ri?(s.splice(i,n-i),this._input.value=s.join(""),this._selectSlot(i)):i>0&&(s.splice(i-1,1),this._input.value=s.join(""),this._selectSlot(i-1)),void this._afterValueChange(e)}if("deleteContentForward"===e){t.preventDefault();const e=this._input.value,i=this._input.selectionStart??0,n=this._input.selectionEnd??i,s=[...this._input.value];n>i?(s.splice(i,n-i),this._input.value=s.join("")):i=s.left:t<=s.right)||i===this._slots.length-1)return i}return null}_afterValueChange(t){this._render(),void 0!==t&&t===this._input.value||(H.trigger(this._element,La,{value:this._input.value}),this._checkComplete())}_firstEmptyIndex(){return Math.min(this._input.value.length,this._length-1)}_selectSlot(t){const e=Math.max(0,Math.min(t,this._length-1)),i=edocument.createElementNS("http://www.w3.org/2000/svg",t),Qa=(t,e)=>{for(const[i,n]of Object.entries(e))null!=n&&t.setAttribute(i,String(n))},Za=t=>`var(${Ua}-${t})`,Ja=(t,e)=>{const i=e-t;return 0===i?1:i},tl=(t,e,i,...n)=>{const s=e??Math.min(...t,...n),r=i??Math.max(...t,...n);return{min:s,max:r,span:Ja(s,r)}},el=/-?\d*\.?\d+(?:e[-+]?\d+)?/g,il=(t,e,i)=>{const n=t.match(el),s=e.match(el);if(!n||!s||n.length!==s.length||t.replace(el,"#")!==e.replace(el,"#"))return e;let r=0;return e.replace(el,()=>{const t=Number(n[r])+(Number(s[r])-Number(n[r]))*i;return r++,String(Math.round(1e3*t)/1e3)})},nl=(t,e,i)=>{const n=getComputedStyle(t).getPropertyValue(`${Ua}-${e}`).trim(),s=Number.parseFloat(n);return Number.isFinite(s)?s:i},sl=class extends G{constructor(t,e){super(t,e),this._userConfig={},this._frame=0,this._element&&(this._userConfig={...e},this.render())}static get Default(){return Ka}static get DefaultType(){return Ga}static get NAME(){return Wa}update(t){const e=Array.isArray(t)?t.join(","):String(t),i=this._element.hasAttribute("data-tblr-values")?"data-tblr-values":"data-bs-values";this._element.setAttribute(i,e),delete this._userConfig.values,this.render(),H.trigger(this._element,Va)}render(){this._config=this._getConfig(this._userConfig);const t=this._element.querySelector("svg");if(this._element.querySelector(`.${qa}`)?.remove(),0===this._config.values.length)return cancelAnimationFrame(this._frame),t?.remove(),void H.trigger(this._element,Ra);let e;switch(this._config.type){case"bar":e=this._renderBars();break;case"tristate":e=this._renderTristate();break;case"circle":e=this._renderCircle();break;default:e=this._renderLine()}t&&this._canAnimate(t,e)?this._animate(t,e):(cancelAnimationFrame(this._frame),t?.remove(),this._element.append(e));const i=this._labelText();if(""!==i){const t=document.createElement("span");t.className=qa,t.textContent=i,this._element.append(t)}H.trigger(this._element,Ra)}dispose(){cancelAnimationFrame(this._frame),this._element.querySelector("svg")?.remove(),this._element.querySelector(`.${qa}`)?.remove(),super.dispose()}_configAfterMerge(t){return t.values=(e=t.values,Array.isArray(e)?e.map(Number).filter(Number.isFinite):"number"==typeof e?Number.isFinite(e)?[e]:[]:(t=>{const e="string"==typeof t?t.trim():"";if(!e)return[];if(e.startsWith("["))try{const t=JSON.parse(e);return Array.isArray(t)?t.map(Number).filter(Number.isFinite):[]}catch{return[]}return e.split(",").map(t=>Number(t.trim())).filter(Number.isFinite)})(e)),t;var e}_labelText(){const{label:t,values:e,type:i}=this._config;return null===t||!1===t||""===t?"":"auto"!==t&&!0!==t?String(t):"circle"===i?`${Math.round(100*this._circleRatio())}%`:String(e[e.length-1])}_circleRatio(){const t=this._config,e=t.values[0]??0,i=t.max??(t.values.length>1?t.values[1]:100),n=t.min??0;return Math.max(0,Math.min(1,(e-n)/Ja(n,i)))}_canAnimate(t,e){return!(this._config.animation<=0||gt())&&t.getAttribute("viewBox")===e.getAttribute("viewBox")&&t.children.length===e.children.length&&Array.from(t.children).every((t,i)=>t.tagName===e.children[i].tagName)}_animate(t,e){cancelAnimationFrame(this._frame);const i=Array.from(e.children).map((e,i)=>{const n=t.children[i],s=[];for(const{name:t}of Array.from(n.attributes))e.hasAttribute(t)||n.removeAttribute(t);for(const{name:t,value:i}of Array.from(e.attributes)){const e=n.getAttribute(t);null===e||e===i?n.setAttribute(t,i):s.push([t,e,i])}return{source:n,tweens:s}}),n=this._config.animation,s=performance.now(),r=t=>{const e=(t=>1-(1-t)**3)(Math.min(1,(t-s)/n));for(const{source:t,tweens:n}of i)for(const[i,s,r]of n)t.setAttribute(i,e>=1?r:il(s,r,e));e<1&&(this._frame=requestAnimationFrame(r))};this._frame=requestAnimationFrame(r)}_hairline(t,e,i,n=!1){const s=Xa("line");Qa(s,{x1:0,x2:this._config.width,y1:e,y2:e,stroke:Za(i),"stroke-width":1,"stroke-dasharray":n?"3 2":null,"vector-effect":"non-scaling-stroke"}),t.append(s)}_createSvg(){const{width:t,height:e}=this._config,i=Xa("svg");return Qa(i,{viewBox:`0 0 ${t} ${e}`,preserveAspectRatio:"none",width:t,height:e,class:"sparkline-svg","aria-hidden":"true"}),i}_renderLine(){const t=this._config,e=this._createSvg(),{min:i,span:n}=tl(t.values,t.min,t.max,...null===t.threshold?[]:[t.threshold]),s=e=>t.pad+(1-(e-i)/n)*(t.height-2*t.pad),r=1===t.values.length?[s(t.values[0]),s(t.values[0])]:t.values.map(s),o=t.width/(r.length-1);if(null!==t.threshold&&this._hairline(e,s(t.threshold),"threshold",!0),"auto"===t.fill){const i=Xa("path");Qa(i,{d:this._areaPath(r,o,t.height),fill:Za("fill"),stroke:"none"}),e.append(i)}const a=Xa("polyline");Qa(a,{points:r.map((t,e)=>`${e*o},${t}`).join(" "),fill:"none",stroke:Za("stroke"),"stroke-width":Za("stroke-width"),"stroke-linecap":"round","stroke-linejoin":"round"}),e.append(a);const l=((t,e)=>{if(0===t.length||"none"===e)return-1;if("last"===e)return t.length-1;let i=0;for(let n=1;nt[i])&&(i=n);return i})(t.values,t.spot);if(l>=0){const i=Xa("circle");Qa(i,{cx:1===t.values.length?t.width/2:l*o,cy:r[l],r:nl(this._element,"spot-size",2),fill:Za("spot")}),e.append(i)}return e}_areaPath(t,e,i){return`${t.map((t,i)=>`${0===i?"M":"L"} ${i*e} ${t}`).join(" ")} L ${(t.length-1)*e} ${i} L 0 ${i} Z`}_renderBars(){const t=this._config,e=this._createSvg(),{min:i,span:n}=tl(t.values,t.min,t.max,0,...null===t.threshold?[]:[t.threshold]),s=e=>t.height-(e-i)/n*t.height,r=t.values.length,o=(t.width-t.barGap*(r-1))/r,a=s(0);i<0&&this._hairline(e,a,"zero"),null!==t.threshold&&this._hairline(e,s(t.threshold),"threshold",!0);const l=e=>Math.max(0,Math.min(t.height,e));return t.values.forEach((i,n)=>{const r=l(s(Math.max(i,0))),a=l(s(Math.min(i,0))),c=null===t.threshold?i<0:i{const a=Xa("rect"),l=i>0?{y:0,height:s,fill:"stroke"}:i<0?{y:s,height:s,fill:"negative"}:{y:s-r/2,height:r,fill:"track"};Qa(a,{x:o*(n+t.barGap),y:l.y,width:n,height:l.height,rx:t.barRadius,fill:Za(l.fill)}),e.append(a)}),e}_renderCircle(){const t=this._config,e=this._createSvg(),i=nl(this._element,"stroke-width",2),n=Math.max(0,Math.min(t.width,t.height)/2-i/2),s=t.width/2,r=t.height/2,o=this._circleRatio(),a=2*Math.PI*n,l=Xa("circle");Qa(l,{cx:s,cy:r,r:n,fill:"none",stroke:Za("track"),"stroke-width":i}),e.append(l);const c=Xa("circle");return Qa(c,{cx:s,cy:r,r:n,fill:"none",stroke:Za("stroke"),"stroke-width":i,"stroke-linecap":"round","stroke-dasharray":a,"stroke-dashoffset":a*(1-o),transform:`rotate(-90 ${s} ${r})`}),e.append(c),e}};J(Ya,sl);var rl="strength",ol=`change.bs.${rl}`,al=`[data-bs-${rl}], [data-tblr-${rl}]`,ll=`.${rl}-segment`,cl=`.${rl}-text`,hl=["weak","fair","good","strong"],ul={input:null,minLength:8,messages:{weak:"Weak",fair:"Fair",good:"Good",strong:"Strong"},weights:{minLength:1,extraLength:1,longPassword:1,lowercase:1,uppercase:1,numbers:1,special:1,multipleSpecial:1},thresholds:[2,4,6],scorer:null},dl={input:"(string|null)",minLength:"number",messages:"object",weights:"object",thresholds:"array",scorer:"(function|null)"},pl=class extends G{constructor(t,e){super(t,e),this._input=null,this._segments=[],this._text=null,this._emptyText="",this._level=null,this._onInput=()=>this.evaluate(),this._element&&(this._input=this._getInput(),this._segments=Q.find(ll,this._element),this._text=this._getText(),this._emptyText=this._text?.textContent?.trim()??"",this._setUpAria(),this._input&&(this._input.addEventListener("input",this._onInput),this.evaluate()))}static get Default(){return ul}static get DefaultType(){return dl}static get NAME(){return rl}get level(){return this._level}evaluate(){if(!this._input)return;const t=this._input.value,e=this._score(t),i=this._level_(e);i!==this._level&&(this._level=i,this._render(i),H.trigger(this._element,ol,{strength:i,score:e}))}dispose(){this._input?.removeEventListener("input",this._onInput),super.dispose()}_configAfterMerge(t){return{...t,messages:{...ul.messages,...t.messages},weights:{...ul.weights,...t.weights}}}_getInput(){const{input:t}=this._config;if(t)return u(t);const e=this._element.parentElement,i=e?Q.find('input[type="password"]',e):[],n=i.filter(t=>Boolean(t.compareDocumentPosition(this._element)&Node.DOCUMENT_POSITION_FOLLOWING));return n[n.length-1]??i[0]??null}_getText(){const t=this._element.parentElement;return t?Q.findOne(cl,t):null}_setUpAria(){const t=this._element;t.setAttribute("role","progressbar"),t.setAttribute("aria-valuemin","0"),t.setAttribute("aria-valuemax",String(hl.length)),t.setAttribute("aria-valuenow","0"),t.hasAttribute("aria-label")||t.hasAttribute("aria-labelledby")||t.setAttribute("aria-label","Password strength");for(const t of this._segments)t.setAttribute("aria-hidden","true");this._text?.setAttribute("aria-live","polite")}_score(t){if(!t)return 0;const{scorer:e,weights:i,minLength:n}=this._config;return"function"==typeof e?e(t):[[t.length>=n,i.minLength],[t.length>=n+4,i.extraLength],[t.length>=16,i.longPassword],[/[a-z]/.test(t),i.lowercase],[/[A-Z]/.test(t),i.uppercase],[/\d/.test(t),i.numbers],[/[^\dA-Za-z]/.test(t),i.special],[(t.match(/[^\dA-Za-z]/g)??[]).length>1,i.multipleSpecial]].reduce((t,[e,i])=>t+(e?i??0:0),0)}_level_(t){if(t<=0)return null;const e=this._config.thresholds.findIndex(e=>t<=e);return hl[-1===e?hl.length-1:e]??null}_render(t){const e=this._element,i=t?hl.indexOf(t):-1;e.dataset.bsStrength=t??"",e.setAttribute("aria-valuenow",String(i+1)),t?e.setAttribute("aria-valuetext",this._config.messages[t]??t):e.removeAttribute("aria-valuetext");const n=t?Math.ceil((i+1)/hl.length*this._segments.length):0;for(const[t,e]of this._segments.entries())e.classList.toggle("active",tthis._handleClick(t),this._onPointerDown=t=>this._handlePointerDown(t),this._onPointerEnd=()=>this._stopRepeat(),this._onKeyDown=t=>this._handleKeyDown(t),this._onBeforeInput=t=>this._handleBeforeInput(t),this._onInputChange=()=>this._handleInputChange(),!this._element)return;const i=this._element instanceof HTMLInputElement?this._element:Q.findOne("input",this._element);i&&(this._input=i,this._element===i?this._renderWrapper():this._buttons=Q.find(vl,this._element),this._resolveBounds(),this._setUpInput(),this._addEventListeners(),this._update())}static get Default(){return Sl}static get DefaultType(){return Il}static get NAME(){return fl}getValue(){return this._parse(this._input?.value??"")}setValue(t){const e=this._parse(String(t));null!==e&&this._commit(e)}increment(){this._stepBy(1)}decrement(){this._stepBy(-1)}dispose(){this._stopRepeat(),this._input&&(this._input.removeEventListener("keydown",this._onKeyDown),this._input.removeEventListener("beforeinput",this._onBeforeInput),this._input.removeEventListener("change",this._onInputChange),this._input.removeEventListener("blur",this._onInputChange));for(const t of this._buttons){t.removeEventListener("click",this._onClick),t.removeEventListener("pointerdown",this._onPointerDown);for(const e of kl)t.removeEventListener(e,this._onPointerEnd)}this._wrapper&&this._input&&this._wrapper.replaceWith(this._input),super.dispose()}_renderWrapper(){const t=this._input,e=document.createElement("div");e.className=gl;for(const i of Al)t.classList.contains(`form-control-${i}`)&&e.classList.add(`${gl}-${i}`);const i=(t,e)=>{const i=document.createElement("button");return i.type="button",i.className="btn btn-icon",i.setAttribute(wl,t),i.setAttribute("aria-label",e),i},n=i("decrement",this._config.decrementLabel),s=i("increment",this._config.incrementLabel);t.replaceWith(e),e.append(n,t,s),this._wrapper=e,this._buttons=[n,s]}_resolveBounds(){const t=this._input,e=e=>{const i=Number.parseFloat(t.getAttribute(e)??"");return Number.isFinite(i)?i:null};this._min=this._config.min??e("min")??Number.NEGATIVE_INFINITY,this._max=this._config.max??e("max")??Number.POSITIVE_INFINITY;const i=this._config.step??e("step");this._step=null!==i&&i>0?i:1;const n=String(this._step).split(".")[1];this._precision=n?n.length:0;const s=`0-9${this._min<0?"-":""}${this._precision>0?".,":""}`;this._disallowed=new RegExp(`[^${s}]`,"g")}_setUpInput(){const t=this._input;"number"!==t.type&&(t.setAttribute("role","spinbutton"),t.hasAttribute("inputmode")||t.setAttribute("inputmode",this._precision>0?"decimal":"numeric"));const e=this._parse(t.value);null!==e&&(t.value=this._format(this._clamp(e))),this._lastValue=t.value}_addEventListeners(){const t=this._input;t.addEventListener("keydown",this._onKeyDown),t.addEventListener("beforeinput",this._onBeforeInput),t.addEventListener("change",this._onInputChange),t.addEventListener("blur",this._onInputChange);for(const t of this._buttons){t.addEventListener("click",this._onClick),t.addEventListener("pointerdown",this._onPointerDown);for(const e of kl)t.addEventListener(e,this._onPointerEnd)}}_actionOf(t){for(const e of yl){const i=t.getAttribute(e);if("increment"===i||"decrement"===i)return i}return null}_handleClick(t){const e=t.currentTarget;t.preventDefault(),this._held?this._held=!1:this._runAction(this._actionOf(e))}_handlePointerDown(t){const e=t.currentTarget,i=this._actionOf(e);this._stopRepeat(),this._config.repeat&&i&&!m(e)&&!this._isLocked()&&("mouse"===t.pointerType&&t.preventDefault(),this._holdTimer=setTimeout(()=>{this._holdTimer=null,this._held=!0,this._runAction(i),this._repeatTimer=setInterval(()=>this._runAction(i),this._config.repeatInterval)},this._config.repeatDelay))}_stopRepeat(){null!==this._holdTimer&&(clearTimeout(this._holdTimer),this._holdTimer=null),null!==this._repeatTimer&&(clearInterval(this._repeatTimer),this._repeatTimer=null)}_runAction(t){"increment"===t?this.increment():"decrement"===t&&this.decrement()}_handleKeyDown(t){const e={[El]:()=>this.increment(),[xl]:()=>this.decrement(),[Tl]:()=>this._commit(this._min),[Cl]:()=>this._commit(this._max)}[t.key];e&&(t.key===Tl&&!Number.isFinite(this._min)||"End"===t.key&&!Number.isFinite(this._max)||(t.preventDefault(),e()))}_handleBeforeInput(t){const{data:e,inputType:i}=t;if(!e||!i.startsWith("insert"))return;const n=e.replace(this._disallowed,"");if(n===e)return;if(t.preventDefault(),""===n)return;const s=this._input,r=s.selectionStart??s.value.length,o=s.selectionEnd??r;s.setRangeText(n,r,o,"end"),s.dispatchEvent(new Event("input",{bubbles:!0}))}_handleInputChange(){const t=this._input;if(t.value===this._lastValue)return;const e=this._parse(t.value);if(null===e)return t.value=this._lastValue,void this._update();this._commit(e)}_stepBy(t){if(this._isLocked())return;const e=this.getValue()??this._fallbackValue();this._commit(e+t*this._step)}_fallbackValue(){return Number.isFinite(this._min)&&this._min>0?this._min:Number.isFinite(this._max)&&this._max<0?this._max:0}_commit(t){const e=this._input,i=this.getValue(),n=this._clamp(t),s=this._format(n),r=e.value!==s;e.value=s,this._lastValue=s,this._update(),r&&(e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0})),H.trigger(this._element,_l,{value:n,previousValue:i}),n!==this._min&&n!==this._max||this._stopRepeat())}_isLocked(){const t=this._input;return t.disabled||t.readOnly}_clamp(t){return Math.min(this._max,Math.max(this._min,t))}_parse(t){const e=t.trim().replace(",",".");if(""===e)return null;const i=Number(e);return Number.isFinite(i)?i:null}_format(t){return t.toFixed(this._precision)}_update(){const t=this._input,e=this.getValue(),i=this._isLocked();for(const t of this._buttons){const n=this._actionOf(t),s=null!==e&&("increment"===n&&e>=this._max||"decrement"===n&&e<=this._min);t.disabled=i||s}"spinbutton"===t.getAttribute("role")&&(Number.isFinite(this._min)&&t.setAttribute("aria-valuemin",this._format(this._min)),Number.isFinite(this._max)&&t.setAttribute("aria-valuemax",this._format(this._max)),null===e?t.removeAttribute("aria-valuenow"):t.setAttribute("aria-valuenow",this._format(e)))}};J(bl,Ol);var Dl=i({getColor:()=>$l,hexToRgba:()=>Ml,prefix:()=>Ll}),Ll="tblr-",Ml=(t,e)=>{const i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?`rgba(${parseInt(i[1],16)}, ${parseInt(i[2],16)}, ${parseInt(i[3],16)}, ${e})`:null},$l=(t,e=1)=>{const i=getComputedStyle(document.body).getPropertyValue(`--${Ll}${t}`).trim();return 1===e?i:Ml(i,e)??(i?`color-mix(in srgb, ${i} ${100*e}%, transparent)`:null)};t.Alert=Xi,t.Autosize=rt,t.Button=Zi,t.Carousel=On,t.Clipboard=_t,t.Collapse=Vn,t.Confetti=Ot,t.CountUp=Ht,t.Datepicker=he,t.Dropdown=ms,t.InputMask=_e,t.Modal=Xs,t.NavOverflow=Cr,t.NumberInput=Ol,t.Offcanvas=Vr,t.OtpInput=Ba,t.Popover=po,Object.defineProperty(t,"Popper",{enumerable:!0,get:function(){return Yi}}),t.ScrollSpy=xo,t.Sortable=Ia,t.Sparkline=sl,t.Strength=pl,t.SwitchIcon=Ea,t.Tab=Uo,t.Toast=la,t.Tooltip=ao,t.bootstrap=ca,Object.defineProperty(t,"tabler",{enumerable:!0,get:function(){return Dl}})}); +//# sourceMappingURL=tabler.min.js.map \ No newline at end of file diff --git a/src/internal/web/embed.go b/src/internal/web/embed.go new file mode 100644 index 0000000..16aa3ba --- /dev/null +++ b/src/internal/web/embed.go @@ -0,0 +1,12 @@ +package web + +import "embed" + +// The templates and the assets are compiled into the binary, so `serve` needs +// nothing on disk and the page needs nothing from the network. +// +//go:embed templates +var templateFS embed.FS + +//go:embed assets +var assetFS embed.FS diff --git a/src/internal/web/handlers.go b/src/internal/web/handlers.go new file mode 100644 index 0000000..1b0d16b --- /dev/null +++ b/src/internal/web/handlers.go @@ -0,0 +1,264 @@ +package web + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "io/fs" + "net/http" + "slices" + "strconv" + "strings" + "time" +) + +// overviewTimeout bounds a dashboard's look at the targets: detection reads a +// few files, and the container check asks the daemon once. +const overviewTimeout = 10 * time.Second + +type overviewData struct { + Overview Overview + Err string + Recent []Run + MaxJobs int +} + +func (s *Server) handleOverview(w http.ResponseWriter, r *http.Request) { + ctx, cancel := context.WithTimeout(r.Context(), overviewTimeout) + defer cancel() + ov, err := s.opts.Runner.Overview(ctx) + d := overviewData{Overview: ov, MaxJobs: max(1, len(ov.Repos))} + if err != nil { + d.Err = err.Error() + } + d.Recent = s.runs.list() + if len(d.Recent) > 5 { + d.Recent = d.Recent[:5] + } + s.render(w, http.StatusOK, "overview", s.newView(r, "overview", "Overview", d)) +} + +// handleStart starts a run with the stages the form ticked. +func (s *Server) handleStart(w http.ResponseWriter, r *http.Request) { + if err := r.ParseForm(); err != nil { + s.renderError(w, r, http.StatusBadRequest, "Bad form", err.Error()) + return + } + ctx, cancel := context.WithTimeout(r.Context(), overviewTimeout) + ov, err := s.opts.Runner.Overview(ctx) + cancel() + if err != nil { + s.renderError(w, r, http.StatusInternalServerError, "Cannot read the configuration", err.Error()) + return + } + req := RunRequest{Jobs: 1} + // Keep only stages the configuration enables, in pipeline order, whatever + // order or names the form sent. + picked := r.PostForm["stage"] + for _, name := range ov.Stages { + if slices.Contains(picked, name) { + req.Stages = append(req.Stages, name) + } + } + if len(req.Stages) == 0 { + s.renderErrorLink(w, r, http.StatusBadRequest, "No stages chosen", + "Tick at least one stage to run.", "/", "Back to the overview") + return + } + if n, err := strconv.Atoi(r.PostFormValue("jobs")); err == nil && n > 1 { + req.Jobs = min(n, max(1, len(ov.Repos))) + } + run, err := s.runs.start(s.base, s.opts.Runner, req, ov) + if errors.Is(err, errBusy) { + s.renderErrorLink(w, r, http.StatusConflict, "A run is already in progress", + "probaci runs one pipeline at a time. Wait for it to finish, or cancel it.", "/runs/"+run.ID, "Open the run in progress") + return + } + http.Redirect(w, r, "/runs/"+run.ID, http.StatusSeeOther) +} + +func (s *Server) handleRuns(w http.ResponseWriter, r *http.Request) { + s.render(w, http.StatusOK, "runs", s.newView(r, "runs", "Runs", s.runs.list())) +} + +type runData struct { + Run Run + Now time.Time + LastID int +} + +func (s *Server) lookupRun(w http.ResponseWriter, r *http.Request) (Run, <-chan struct{}, bool) { + id := r.PathValue("id") + if !validRunID(id) { + s.renderError(w, r, http.StatusNotFound, "No such run", "There is no run with this ID.") + return Run{}, nil, false + } + run, changed, ok := s.runs.get(id) + if !ok { + s.renderError(w, r, http.StatusNotFound, "No such run", "There is no run with this ID.") + return Run{}, nil, false + } + return run, changed, true +} + +func (s *Server) handleRun(w http.ResponseWriter, r *http.Request) { + run, _, ok := s.lookupRun(w, r) + if !ok { + return + } + last := 0 + if n := len(run.Lines); n > 0 { + last = run.Lines[n-1].Seq + } + s.render(w, http.StatusOK, "run", s.newView(r, "runs", "Run "+run.ID, runData{Run: run, Now: s.now(), LastID: last})) +} + +func (s *Server) handleCancel(w http.ResponseWriter, r *http.Request) { + run, _, ok := s.lookupRun(w, r) + if !ok { + return + } + s.runs.cancelRun(run.ID) + http.Redirect(w, r, "/runs/"+run.ID, http.StatusSeeOther) +} + +// handleReport serves the run's results as JSON, in the shape `probaci run +// --json` prints plus the run's own status. +func (s *Server) handleReport(w http.ResponseWriter, r *http.Request) { + run, _, ok := s.lookupRun(w, r) + if !ok { + return + } + run.Lines = nil + body, err := json.MarshalIndent(run, "", " ") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Content-Disposition", `attachment; filename="probaci-`+run.ID+`.json"`) + _, _ = w.Write(body) +} + +// streamWait is how long an event stream idles before a keep-alive comment. +const streamWait = 15 * time.Second + +// handleEvents streams a run's progress as server-sent events: "line" for each +// line of output after ?after=, "stage" for each stage's current state, and +// "done" once the run has finished. +func (s *Server) handleEvents(w http.ResponseWriter, r *http.Request) { + run, changed, ok := s.lookupRun(w, r) + if !ok { + return + } + flusher, ok := w.(http.Flusher) + if !ok { + http.Error(w, "streaming unsupported", http.StatusInternalServerError) + return + } + after, _ := strconv.Atoi(r.URL.Query().Get("after")) + w.Header().Set("Content-Type", "text/event-stream") + w.Header().Set("Cache-Control", "no-store") + w.WriteHeader(http.StatusOK) + + sent := map[string]string{} // repo|stage -> status|summary last sent + for { + for _, l := range run.Lines { + if l.Seq > after { + writeEvent(w, "line", l.Seq, l) + after = l.Seq + } + } + for _, repo := range run.Repos { + for _, st := range repo.Stages { + key, val := repo.Path+"|"+st.Name, string(st.Status)+"|"+st.Summary + if sent[key] != val { + sent[key] = val + writeEvent(w, "stage", 0, map[string]any{ + "repo": repo.Path, "stage": st.Name, "status": st.Status, + "summary": st.Summary, "duration": st.Duration.Round(100 * time.Millisecond).String(), + }) + } + } + } + if run.Status != RunRunning { + writeEvent(w, "done", 0, map[string]any{"status": run.Status, "error": run.Err}) + flusher.Flush() + return + } + flusher.Flush() + select { + case <-r.Context().Done(): + return + case <-s.base.Done(): + return + case <-changed: + case <-time.After(streamWait): + _, _ = fmt.Fprint(w, ": keep-alive\n\n") + } + run, changed, _ = s.runs.get(run.ID) + } +} + +func writeEvent(w http.ResponseWriter, event string, id int, data any) { + body, err := json.Marshal(data) + if err != nil { + return + } + if id > 0 { + _, _ = fmt.Fprintf(w, "id: %d\n", id) + } + _, _ = fmt.Fprintf(w, "event: %s\ndata: %s\n\n", event, body) +} + +type settingsData struct { + Overview Overview + Err string + BindAddr string + HistoryDir string +} + +func (s *Server) handleSettings(w http.ResponseWriter, r *http.Request) { + ctx, cancel := context.WithTimeout(r.Context(), overviewTimeout) + defer cancel() + ov, err := s.opts.Runner.Overview(ctx) + d := settingsData{Overview: ov, BindAddr: s.opts.BindAddr, HistoryDir: s.opts.HistoryDir} + if err != nil { + d.Err = err.Error() + } + s.render(w, http.StatusOK, "settings", s.newView(r, "settings", "Settings", d)) +} + +// license is one vendored package's license, as the licenses page shows it. +type license struct { + Package string + File string + Text string +} + +// embeddedLicenses reads the license texts shipped with the vendored assets. +func (s *Server) embeddedLicenses() ([]license, error) { + entries, err := fs.ReadDir(assetFS, "assets/vendor/LICENSES") + if err != nil { + return nil, err + } + var out []license + for _, e := range entries { + body, err := fs.ReadFile(assetFS, "assets/vendor/LICENSES/"+e.Name()) + if err != nil { + return nil, err + } + out = append(out, license{Package: strings.TrimSuffix(e.Name(), ".txt"), File: e.Name(), Text: string(body)}) + } + return out, nil +} + +func (s *Server) handleLicenses(w http.ResponseWriter, r *http.Request) { + ls, err := s.embeddedLicenses() + if err != nil { + s.renderError(w, r, http.StatusInternalServerError, "Licenses unavailable", err.Error()) + return + } + s.render(w, http.StatusOK, "licenses", s.newView(r, "", "Third-party licenses", ls)) +} diff --git a/src/internal/web/helpers_test.go b/src/internal/web/helpers_test.go new file mode 100644 index 0000000..97f4303 --- /dev/null +++ b/src/internal/web/helpers_test.go @@ -0,0 +1,187 @@ +package web + +import ( + "context" + "net/http" + "net/http/httptest" + "net/url" + "regexp" + "strings" + "sync" + "testing" + "time" + + "github.com/simtabi/probaci/src/internal/result" + "github.com/simtabi/probaci/src/internal/stage" +) + +const testHost = "127.0.0.1:7844" + +// fakeRunner stands in for probaci's engine. By default a run emits a start, +// one line and a pass for every requested stage of every repository. +type fakeRunner struct { + mu sync.Mutex + overview Overview + calls []RunRequest + // block, when set, makes Run wait until ctx is canceled. + block bool + // fail marks this stage as failed. + fail string +} + +func newFakeRunner() *fakeRunner { + return &fakeRunner{overview: Overview{ + Repos: []RepoInfo{{Path: "/work/alpha", Languages: []string{"go"}}, {Path: "/work/beta"}}, + Stages: []string{"detect", "lint", "test"}, + Docker: "available", + Sources: []string{"/home/u/.config/probaci/config.json"}, + Home: "/home/u/.config/probaci", + }} +} + +func (f *fakeRunner) Overview(context.Context) (Overview, error) { return f.overview, nil } + +func (f *fakeRunner) Run(ctx context.Context, req RunRequest, obs stage.Observer) (result.Aggregate, error) { + f.mu.Lock() + f.calls = append(f.calls, req) + block, fail := f.block, f.fail + f.mu.Unlock() + var agg result.Aggregate + for _, repo := range f.overview.Repos { + rep := result.RepoReport{Path: repo.Path} + for _, name := range req.Stages { + obs(stage.Event{Repo: repo.Path, Stage: name, Status: result.StatusRunning}) + obs(stage.Event{Repo: repo.Path, Stage: name, Status: result.StatusRunning, Line: "output of " + name}) + if block { + <-ctx.Done() + return agg, nil + } + res := result.Result{Stage: name, Status: result.StatusPass, Summary: name + " ok", Duration: time.Second} + if name == fail { + res.Status, res.Summary = result.StatusFail, name+" failed" + } + obs(stage.Event{Repo: repo.Path, Stage: name, Status: res.Status, Result: &res}) + rep.Results = append(rep.Results, res) + } + agg.Repos = append(agg.Repos, rep) + } + return agg, nil +} + +func newTestServerWith(t *testing.T, opts Options) *Server { + t.Helper() + if opts.Runner == nil { + opts.Runner = newFakeRunner() + } + if opts.Token == "" { + opts.Token = "launch-token" + } + opts.AllowedHosts = AllowedHosts("127.0.0.1", 7844, nil) + opts.Version = "test" + s, err := New(opts) + if err != nil { + t.Fatal(err) + } + t.Cleanup(s.Close) + return s +} + +func newTestServer(t *testing.T) (*Server, *fakeRunner) { + t.Helper() + f := newFakeRunner() + return newTestServerWith(t, Options{Runner: f}), f +} + +// do sends a request with the right Host and returns the recorded response. +func do(s *Server, req *http.Request) *httptest.ResponseRecorder { + if req.Host == "" || req.Host == "example.com" { + req.Host = testHost + } + rec := httptest.NewRecorder() + s.Handler().ServeHTTP(rec, req) + return rec +} + +// client is a signed-in browser: a session cookie and the page's CSRF token. +type client struct { + t *testing.T + s *Server + cookie *http.Cookie + csrf string +} + +var csrfMeta = regexp.MustCompile(``) + +func signIn(t *testing.T, s *Server) *client { + t.Helper() + rec := do(s, httptest.NewRequest(http.MethodGet, "/?token="+s.opts.Token, nil)) + if rec.Code != http.StatusSeeOther { + t.Fatalf("sign-in: status %d", rec.Code) + } + var cookie *http.Cookie + for _, c := range rec.Result().Cookies() { + if c.Name == SessionCookie { + cookie = c + } + } + if cookie == nil { + t.Fatal("sign-in set no session cookie") + } + c := &client{t: t, s: s, cookie: cookie} + m := csrfMeta.FindStringSubmatch(c.get("/").Body.String()) + if m == nil { + t.Fatal("no CSRF token on the overview") + } + c.csrf = m[1] + return c +} + +func (c *client) get(path string) *httptest.ResponseRecorder { + c.t.Helper() + req := httptest.NewRequest(http.MethodGet, path, nil) + req.AddCookie(c.cookie) + return do(c.s, req) +} + +// post sends a same-origin form POST carrying the CSRF token. +func (c *client) post(path string, form url.Values) *httptest.ResponseRecorder { + c.t.Helper() + if form == nil { + form = url.Values{} + } + form.Set(csrfField, c.csrf) + req := httptest.NewRequest(http.MethodPost, path, strings.NewReader(form.Encode())) + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + req.Header.Set("Origin", "http://"+testHost) + req.AddCookie(c.cookie) + return do(c.s, req) +} + +// startRun posts the run form and returns the new run's ID. +func (c *client) startRun(stages ...string) string { + c.t.Helper() + rec := c.post("/runs", url.Values{"stage": stages}) + if rec.Code != http.StatusSeeOther { + c.t.Fatalf("start run: status %d: %s", rec.Code, rec.Body.String()) + } + id := strings.TrimPrefix(rec.Header().Get("Location"), "/runs/") + if !validRunID(id) { + c.t.Fatalf("start run redirected to %q", rec.Header().Get("Location")) + } + return id +} + +// waitDone waits for the run to finish and returns it. +func waitDone(t *testing.T, s *Server, id string) Run { + t.Helper() + deadline := time.Now().Add(5 * time.Second) + for time.Now().Before(deadline) { + r, _, ok := s.runs.get(id) + if ok && r.Status != RunRunning { + return r + } + time.Sleep(5 * time.Millisecond) + } + t.Fatalf("run %s did not finish", id) + return Run{} +} diff --git a/src/internal/web/instance.go b/src/internal/web/instance.go new file mode 100644 index 0000000..5c562bf --- /dev/null +++ b/src/internal/web/instance.go @@ -0,0 +1,45 @@ +package web + +import ( + "net/http" + "sync" +) + +// The contract a script or a second launch relies on. +const ( + // HealthPath answers 200 and HealthBody to a request carrying the launch + // token in HealthTokenHeader, and 401 to anything else. + HealthPath = "/healthz" + HealthTokenHeader = "X-Probaci-Token" // #nosec G101 -- a header name, not a credential + HealthBody = "probaci" + + // StopPath is the "Stop server" action: a same-origin POST with the + // session's CSRF token, which shuts the server down gracefully. + StopPath = "/server/stop" +) + +// stopper is closed once, by Stop. +type stopper struct { + once sync.Once + ch chan struct{} +} + +// Stop asks Serve to shut down, as Ctrl-C does. Safe to call more than once. +func (s *Server) Stop() { s.stop.once.Do(func() { close(s.stop.ch) }) } + +// Stopped is closed once Stop has been called. +func (s *Server) Stopped() <-chan struct{} { return s.stop.ch } + +func (s *Server) handleHealth(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + w.Header().Set("Cache-Control", "no-store") + _, _ = w.Write([]byte(HealthBody + "\n")) +} + +func (s *Server) handleStop(w http.ResponseWriter, r *http.Request) { + s.render(w, http.StatusOK, "error", s.newView(r, "", "Server stopped", errorData{ + Status: http.StatusOK, Heading: "Server stopped", + Message: "probaci has shut down. You can close this tab; run probaci serve again to reopen the UI.", + })) + s.Stop() +} diff --git a/src/internal/web/listen.go b/src/internal/web/listen.go new file mode 100644 index 0000000..5093705 --- /dev/null +++ b/src/internal/web/listen.go @@ -0,0 +1,106 @@ +package web + +import ( + "errors" + "fmt" + "net" + "strconv" + "strings" + "syscall" +) + +// DefaultPort is where serve listens unless told otherwise. +const DefaultPort = 7844 + +// DefaultPortAttempts bounds how far past a taken default port Listen looks. +const DefaultPortAttempts = 20 + +// ListenFunc is net.Listen's signature, injectable so the port fallback can be +// tested without binding a socket. +type ListenFunc func(network, address string) (net.Listener, error) + +// Listen binds host:port. +// +// When pinned is false and the port is in use, it tries the next port up, up +// to attempts ports in all, and returns the first that binds: the default +// port being taken by another process is ordinary, and the caller prints the +// URL actually bound. When pinned is true -- the user asked for this port -- +// a taken port is an error, because silently serving elsewhere would leave +// whatever they pointed at this port talking to something else. Any error +// other than "address in use" stops the search at once. +func Listen(listen ListenFunc, host string, port int, pinned bool, attempts int) (net.Listener, error) { + if listen == nil { + listen = net.Listen + } + if attempts < 1 || pinned || port == 0 { + attempts = 1 + } + var first error + for i := 0; i < attempts; i++ { + p := port + i + if p > 65535 { + break + } + ln, err := listen("tcp", net.JoinHostPort(host, strconv.Itoa(p))) + if err == nil { + return ln, nil + } + if first == nil { + first = err + } + if !IsAddrInUse(err) { + return nil, err + } + if pinned { + return nil, fmt.Errorf("port %d is already in use; pick another with --port, or omit --port to take the next free one: %w", p, err) + } + } + return nil, fmt.Errorf("ports %d-%d are all in use: %w", port, port+attempts-1, first) +} + +// IsAddrInUse reports whether a listen error means the port is taken. +func IsAddrInUse(err error) bool { + if errors.Is(err, syscall.EADDRINUSE) { + return true + } + // Windows reports WSAEADDRINUSE, which does not unwrap to EADDRINUSE. + msg := strings.ToLower(err.Error()) + return strings.Contains(msg, "address already in use") || + strings.Contains(msg, "only one usage of each socket address") +} + +// IsLoopback reports whether host only accepts connections from this machine: +// localhost, or an address in 127.0.0.0/8 or ::1. +func IsLoopback(host string) bool { + if strings.EqualFold(host, "localhost") { + return true + } + ip := net.ParseIP(strings.Trim(host, "[]")) + return ip != nil && ip.IsLoopback() +} + +// AllowedHosts is the set of Host header values the server answers to. +// +// For a loopback bind that is the three spellings of this machine at the bound +// port. Anything else is refused, which is the DNS-rebinding defense: a page +// on evil.example that rebinds its name to 127.0.0.1 still sends +// Host: evil.example. With a remote bind the bound host and any explicitly +// allowed names are added. +func AllowedHosts(bindHost string, port int, extra []string) []string { + p := strconv.Itoa(port) + out := []string{ + net.JoinHostPort("127.0.0.1", p), + net.JoinHostPort("localhost", p), + net.JoinHostPort("::1", p), + } + if !IsLoopback(bindHost) && bindHost != "" && bindHost != "0.0.0.0" && bindHost != "::" { + out = append(out, net.JoinHostPort(bindHost, p)) + } + for _, h := range extra { + if _, _, err := net.SplitHostPort(h); err != nil { + h = net.JoinHostPort(h, p) + } + out = append(out, h) + } + return out +} diff --git a/src/internal/web/render.go b/src/internal/web/render.go new file mode 100644 index 0000000..32175ab --- /dev/null +++ b/src/internal/web/render.go @@ -0,0 +1,351 @@ +package web + +import ( + "bytes" + "crypto/sha256" + "encoding/hex" + "fmt" + "html/template" + "io/fs" + "net/http" + "path" + "path/filepath" + "sort" + "strings" + "time" + + "github.com/simtabi/probaci/src/internal/result" +) + +// assetSet is the embedded assets with a content hash each, for +// fingerprinted, immutable URLs. +type assetSet struct { + files map[string][]byte // path below assets/ + hashes map[string]string // first 12 hex chars of sha256 +} + +// The webfont's two files under assets/. +const ( + webfontCSS = "vendor/tabler-icons/tabler-icons.css" + webfontFont = "vendor/tabler-icons/tabler-icons.woff2" +) + +// faviconAsset is the logo mark every page links as its icon. +const faviconAsset = "favicon.svg" + +func loadAssets() (*assetSet, error) { + a := &assetSet{files: map[string][]byte{}, hashes: map[string]string{}} + err := fs.WalkDir(assetFS, "assets", func(p string, d fs.DirEntry, err error) error { + if err != nil || d.IsDir() { + return err + } + body, err := assetFS.ReadFile(p) + if err != nil { + return err + } + name := strings.TrimPrefix(p, "assets/") + sum := sha256.Sum256(body) + a.files[name] = body + a.hashes[name] = hex.EncodeToString(sum[:])[:12] + return nil + }) + if err != nil { + return nil, err + } + // The webfont CSS names its font relative to itself, and every asset URL + // carries its own fingerprint, so a relative URL would resolve under the + // CSS's fingerprint and 404. Point it at the font's own URL, then + // fingerprint the rewritten CSS. + css, ok := a.files[webfontCSS] + if !ok { + return nil, fmt.Errorf("web: the icon webfont CSS is not embedded") + } + font, err := a.url(webfontFont) + if err != nil { + return nil, fmt.Errorf("web: the webfont CSS is embedded without its font: %w", err) + } + body := bytes.ReplaceAll(css, []byte(`url("tabler-icons.woff2")`), []byte(`url("`+font+`")`)) + sum := sha256.Sum256(body) + a.files[webfontCSS] = body + a.hashes[webfontCSS] = hex.EncodeToString(sum[:])[:12] + if _, ok := a.files[faviconAsset]; !ok { + return nil, fmt.Errorf("web: the favicon is not embedded") + } + return a, nil +} + +// url returns the fingerprinted URL of an asset. Asking for one that does not +// exist fails template execution, which the page tests turn into a failure +// rather than a broken page. +func (a *assetSet) url(name string) (string, error) { + h, ok := a.hashes[name] + if !ok { + return "", fmt.Errorf("no embedded asset %q", name) + } + return "/assets/" + h + "/" + name, nil +} + +// pageSet is every page template, each parsed once over the shared layout. +type pageSet struct { + pages map[string]*template.Template +} + +// pageNames lists the page templates: every templates/*.html but the layout. +func pageNames() ([]string, error) { + entries, err := fs.ReadDir(templateFS, "templates") + if err != nil { + return nil, err + } + var out []string + for _, e := range entries { + if e.IsDir() || e.Name() == "layout.html" || !strings.HasSuffix(e.Name(), ".html") { + continue + } + out = append(out, strings.TrimSuffix(e.Name(), ".html")) + } + sort.Strings(out) + return out, nil +} + +func funcs(a *assetSet) template.FuncMap { + return template.FuncMap{ + "asset": a.url, + "icon": iconHTML, + "iconc": iconClassHTML, + "when": func(t time.Time) string { return t.Local().Format("2006-01-02 15:04:05") }, + "iso": func(t time.Time) string { return t.UTC().Format(time.RFC3339) }, + "clock": func(t time.Time) string { return t.Local().Format("15:04:05") }, + "dur": func(d time.Duration) string { + if d <= 0 { + return "–" + } + if d < time.Millisecond { + return "<1ms" + } + if d < time.Second { + return d.Round(time.Millisecond).String() + } + return d.Round(100 * time.Millisecond).String() + }, + "base": filepath.Base, + "stageClass": func(s result.Status) string { + switch s { + case result.StatusPass: + return "badge-ok" + case result.StatusSkip, result.StatusPending: + return "badge-muted" + case result.StatusRunning: + return "badge-info" + } + return "badge-bad" + }, + "runClass": func(s RunStatus) string { + switch s { + case RunPassed: + return "badge-ok" + case RunRunning: + return "badge-info" + case RunCanceled: + return "badge-muted" + } + return "badge-bad" + }, + "runAlert": func(s RunStatus) string { + switch s { + case RunPassed: + return "alert-success" + case RunRunning: + return "alert-info" + case RunCanceled: + return "alert-secondary" + } + return "alert-danger" + }, + "runText": func(s RunStatus) string { + switch s { + case RunPassed: + return "Passed" + case RunRunning: + return "Running" + case RunCanceled: + return "Canceled" + case RunFailed: + return "Failed" + } + return "Could not run" + }, + "orDash": func(s string) string { + if s == "" { + return "–" + } + return s + }, + "join": strings.Join, + "navItem": func(v view, key, href, icon, label string) navItem { + return navItem{Active: v.Nav == key, Href: href, Icon: icon, Label: label} + }, + } +} + +// iconHTML renders a Tabler icon from the vendored Tabler Icons webfont. Icons +// are decorative here: every one sits beside text that says the same thing. +func iconHTML(name string) template.HTML { + if !validIcon(name) { + return "" + } + return template.HTML(``) // #nosec G203 -- name is [a-z0-9-] only +} + +// iconClassHTML is iconHTML with extra classes ("icon-lg text-danger mb-2"), +// checked to the class-name alphabet. +func iconClassHTML(name, extra string) template.HTML { + if !validIcon(name) { + return "" + } + for _, r := range extra { + if (r < 'a' || r > 'z') && (r < '0' || r > '9') && r != '-' && r != ' ' { + return iconHTML(name) + } + } + return template.HTML(``) // #nosec G203 -- name and extra are [a-z0-9- ] only +} + +func validIcon(name string) bool { + if name == "" { + return false + } + for _, r := range name { + if (r < 'a' || r > 'z') && (r < '0' || r > '9') && r != '-' { + return false + } + } + return true +} + +func parsePages(a *assetSet) (*pageSet, error) { + base, err := template.New("layout.html").Funcs(funcs(a)).ParseFS(templateFS, "templates/layout.html") + if err != nil { + return nil, err + } + names, err := pageNames() + if err != nil { + return nil, err + } + ps := &pageSet{pages: map[string]*template.Template{}} + for _, n := range names { + t, err := base.Clone() + if err != nil { + return nil, err + } + if _, err := t.ParseFS(templateFS, path.Join("templates", n+".html")); err != nil { + return nil, err + } + ps.pages[n] = t + } + return ps, nil +} + +type navItem struct { + Active bool + Href, Icon, Label string +} + +// view is what every page template receives. +type view struct { + Title string + Nav string + Authed bool + CSRF string + Version string + ReadOnly bool + // Running is the run in progress, shown in the header on every page. + Running *Run + Data any +} + +func (s *Server) newView(r *http.Request, nav, title string, data any) view { + v := view{Title: title, Nav: nav, Version: s.opts.Version, ReadOnly: s.opts.ReadOnly, Data: data} + if sess := sessionFrom(r.Context()); sess != nil { + v.Authed = true + v.CSRF = sess.csrf + if run, ok := s.runs.running(); ok { + v.Running = &run + } + } + return v +} + +// render executes a page into a buffer first, so a template error becomes a +// clean 500 instead of half a page. +func (s *Server) render(w http.ResponseWriter, status int, page string, v view) { + t, ok := s.pages.pages[page] + if !ok { + http.Error(w, "no such page template: "+page, http.StatusInternalServerError) + return + } + var buf bytes.Buffer + if err := t.ExecuteTemplate(&buf, "layout", v); err != nil { + http.Error(w, "template error: "+err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.Header().Set("Cache-Control", "no-store") + w.WriteHeader(status) + _, _ = w.Write(buf.Bytes()) +} + +type errorData struct { + Status int + Heading string + Message string + Link, LinkText string +} + +func (s *Server) renderError(w http.ResponseWriter, r *http.Request, status int, heading, message string) { + s.render(w, status, "error", s.newView(r, "", heading, errorData{Status: status, Heading: heading, Message: message})) +} + +// renderErrorLink is renderError with a way forward, e.g. to the run in +// progress. +func (s *Server) renderErrorLink(w http.ResponseWriter, r *http.Request, status int, heading, message, link, text string) { + s.render(w, status, "error", s.newView(r, "", heading, + errorData{Status: status, Heading: heading, Message: message, Link: link, LinkText: text})) +} + +func (s *Server) renderUnauthorized(w http.ResponseWriter, r *http.Request) { + s.renderError(w, r, http.StatusUnauthorized, "Sign-in link required", + "Open the address probaci serve printed when it started. It carries a one-time token that signs this browser in.") +} + +// serveAsset answers /assets/{hash}/{path...}. A stale hash is a 404, not the +// current file: an immutable URL must never change content. +func (s *Server) serveAsset(w http.ResponseWriter, r *http.Request) { + name := r.PathValue("path") + body, ok := s.assets.files[name] + if !ok || r.PathValue("hash") != s.assets.hashes[name] { + http.NotFound(w, r) + return + } + switch path.Ext(name) { + case ".css": + w.Header().Set("Content-Type", "text/css; charset=utf-8") + case ".js": + w.Header().Set("Content-Type", "text/javascript; charset=utf-8") + case ".svg": + w.Header().Set("Content-Type", "image/svg+xml") + case ".woff2": + w.Header().Set("Content-Type", "font/woff2") + default: + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + } + w.Header().Set("Cache-Control", "public, max-age=31536000, immutable") + _, _ = w.Write(body) +} + +// serveFavicon answers /favicon.ico, which browsers ask for on their own, with +// the same SVG the pages link. +func (s *Server) serveFavicon(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "image/svg+xml") + w.Header().Set("Cache-Control", "public, max-age=86400") + _, _ = w.Write(s.assets.files[faviconAsset]) +} diff --git a/src/internal/web/routes.go b/src/internal/web/routes.go new file mode 100644 index 0000000..1c05e55 --- /dev/null +++ b/src/internal/web/routes.go @@ -0,0 +1,38 @@ +package web + +import "net/http" + +// routes registers every page and action. Under ReadOnly the routes that start +// or cancel a run are not registered at all, rather than registered and +// refused: a route that does not exist cannot be reached by a bug in a check. +func (s *Server) routes() http.Handler { + mux := http.NewServeMux() + mux.HandleFunc("GET /assets/{hash}/{path...}", s.serveAsset) + mux.HandleFunc("GET /favicon.ico", s.serveFavicon) + mux.HandleFunc("GET /{$}", s.handleOverview) + mux.HandleFunc("GET /runs", s.handleRuns) + mux.HandleFunc("GET /runs/{id}", s.handleRun) + mux.HandleFunc("GET /runs/{id}/events", s.handleEvents) + mux.HandleFunc("GET /runs/{id}/report.json", s.handleReport) + mux.HandleFunc("GET /settings", s.handleSettings) + mux.HandleFunc("GET /about/licenses", s.handleLicenses) + mux.HandleFunc("GET "+HealthPath, s.handleHealth) + // Stopping the server starts nothing, so a read-only server keeps it. + mux.HandleFunc("POST "+StopPath, s.handleStop) + + if !s.opts.ReadOnly { + mux.HandleFunc("POST /runs", s.handleStart) + mux.HandleFunc("POST /runs/{id}/cancel", s.handleCancel) + } + + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + if s.opts.ReadOnly && r.Method != http.MethodGet && r.Method != http.MethodHead { + w.Header().Set("Allow", "GET, HEAD") + s.renderError(w, r, http.StatusMethodNotAllowed, "Read-only server", + "This server was started with --read-only, so it cannot start or cancel a run.") + return + } + s.renderError(w, r, http.StatusNotFound, "Not found", "There is no page at this address.") + }) + return mux +} diff --git a/src/internal/web/runs.go b/src/internal/web/runs.go new file mode 100644 index 0000000..b1d9cb1 --- /dev/null +++ b/src/internal/web/runs.go @@ -0,0 +1,397 @@ +package web + +import ( + "context" + "crypto/rand" + "encoding/hex" + "encoding/json" + "errors" + "os" + "path/filepath" + "sort" + "strings" + "sync" + "time" + + "github.com/simtabi/probaci/src/internal/result" + "github.com/simtabi/probaci/src/internal/stage" +) + +// RunStatus is where a run started from the UI stands. +type RunStatus string + +const ( + RunRunning RunStatus = "running" + RunPassed RunStatus = "passed" + RunFailed RunStatus = "failed" + RunCanceled RunStatus = "canceled" + RunErrored RunStatus = "errored" +) + +// maxLines bounds the output a run keeps in memory and on disk. Lines past it +// are counted, not kept; the full output is still in the run's log file. +const maxLines = 5000 + +// maxHistory is how many finished runs the Runs page lists. +const maxHistory = 100 + +// StageState is one stage of one repository, as the run page shows it. +type StageState struct { + Name string `json:"name"` + Status result.Status `json:"status"` + Summary string `json:"summary,omitempty"` + Output string `json:"output,omitempty"` + Err string `json:"error,omitempty"` + Duration time.Duration `json:"duration_ns,omitempty"` +} + +// RepoState is one repository of a run. +type RepoState struct { + Path string `json:"path"` + Stages []StageState `json:"stages"` +} + +// LogLine is one line of streamed stage output, already redacted by the engine. +type LogLine struct { + Seq int `json:"seq"` + Time time.Time `json:"time"` + Repo string `json:"repo"` + Stage string `json:"stage"` + Text string `json:"text"` +} + +// Run is one pipeline run started from the UI. +type Run struct { + ID string `json:"id"` + Started time.Time `json:"started"` + Finished time.Time `json:"finished,omitzero"` + Status RunStatus `json:"status"` + Err string `json:"error,omitempty"` + Request RunRequest `json:"request"` + Repos []RepoState `json:"repos"` + Lines []LogLine `json:"lines"` + Dropped int `json:"dropped_lines,omitempty"` + + seq int + cancel context.CancelFunc + changed chan struct{} // closed and replaced on every change +} + +// Duration is how long the run took, or has taken so far. +func (r Run) Duration(now time.Time) time.Duration { + end := r.Finished + if end.IsZero() { + end = now + } + return end.Sub(r.Started).Round(time.Second) +} + +// Counts tallies the stage outcomes across every repository. +func (r Run) Counts() map[result.Status]int { + out := map[result.Status]int{} + for _, repo := range r.Repos { + for _, st := range repo.Stages { + out[st.Status]++ + } + } + return out +} + +// registry holds the runs: at most one in progress, the rest finished. +type registry struct { + mu sync.Mutex + byID map[string]*Run + order []string // newest first + active *Run + dir string + now func() time.Time + wg sync.WaitGroup +} + +// errBusy is returned when a run is already in progress. +var errBusy = errors.New("a run is already in progress") + +func newRegistry(dir string, now func() time.Time) *registry { + g := ®istry{byID: map[string]*Run{}, dir: dir, now: now} + g.load() + return g +} + +// load reads finished runs from the history directory, newest first. A file +// that does not parse is skipped rather than failing startup. +func (g *registry) load() { + if g.dir == "" { + return + } + entries, err := os.ReadDir(g.dir) + if err != nil { + return + } + var runs []*Run + for _, e := range entries { + if e.IsDir() || !strings.HasSuffix(e.Name(), ".json") { + continue + } + body, err := os.ReadFile(filepath.Join(g.dir, e.Name())) // #nosec G304 -- our own state directory + if err != nil { + continue + } + var r Run + if json.Unmarshal(body, &r) != nil || !validRunID(r.ID) { + continue + } + if r.Status == RunRunning { + // The server stopped while it ran; nothing will finish it now. + r.Status, r.Err = RunCanceled, "the server stopped before the run finished" + } + runs = append(runs, &r) + } + sort.Slice(runs, func(i, j int) bool { return runs[i].Started.After(runs[j].Started) }) + if len(runs) > maxHistory { + runs = runs[:maxHistory] + } + for _, r := range runs { + g.byID[r.ID] = r + g.order = append(g.order, r.ID) + } +} + +// newRunID is sortable by time and unguessable enough to name a file. +func newRunID(now time.Time) string { + b := make([]byte, 3) + _, _ = rand.Read(b) + return now.UTC().Format("20060102-150405") + "-" + hex.EncodeToString(b) +} + +// validRunID accepts only what newRunID makes, so an ID from a URL can never +// name a path outside the history directory. +func validRunID(id string) bool { + if len(id) != 22 { + return false + } + for i, c := range id { + switch { + case i == 8 || i == 15: + if c != '-' { + return false + } + case c >= '0' && c <= '9', i > 15 && c >= 'a' && c <= 'f': + default: + return false + } + } + return true +} + +// start begins a run in the background, or returns errBusy and the run in +// progress. +func (g *registry) start(base context.Context, rn Runner, req RunRequest, plan Overview) (*Run, error) { + g.mu.Lock() + defer g.mu.Unlock() + if g.active != nil { + return g.active, errBusy + } + ctx, cancel := context.WithCancel(base) + r := &Run{ + ID: newRunID(g.now()), + Started: g.now(), + Status: RunRunning, + Request: req, + cancel: cancel, + changed: make(chan struct{}), + } + stages := req.Stages + if len(stages) == 0 { + stages = plan.Stages + } + for _, repo := range plan.Repos { + rs := RepoState{Path: repo.Path} + for _, name := range stages { + rs.Stages = append(rs.Stages, StageState{Name: name, Status: result.StatusPending}) + } + r.Repos = append(r.Repos, rs) + } + g.byID[r.ID] = r + g.order = append([]string{r.ID}, g.order...) + g.active = r + + g.wg.Add(1) + go func() { + defer g.wg.Done() + defer cancel() + agg, err := rn.Run(ctx, req, func(e stage.Event) { g.observe(r, e) }) + g.finish(r, agg, err, ctx.Err() != nil) + }() + return r, nil +} + +// observe folds one engine event into the run. +func (g *registry) observe(r *Run, e stage.Event) { + g.mu.Lock() + defer g.mu.Unlock() + switch { + case e.Line != "": + if len(r.Lines) >= maxLines { + r.Dropped++ + break + } + r.seq++ + r.Lines = append(r.Lines, LogLine{Seq: r.seq, Time: g.now(), Repo: e.Repo, Stage: e.Stage, Text: e.Line}) + case e.Result != nil: + st := stageOf(r, e.Repo, e.Stage) + st.Status = e.Result.Status + st.Summary, st.Output, st.Err, st.Duration = e.Result.Summary, e.Result.Output, e.Result.Err, e.Result.Duration + default: + stageOf(r, e.Repo, e.Stage).Status = e.Status + } + g.notify(r) +} + +// stageOf returns the run's state for a repository's stage, adding either when +// the plan did not list it (a platform stage resolved at run time). +func stageOf(r *Run, repo, name string) *StageState { + ri := -1 + for i := range r.Repos { + if r.Repos[i].Path == repo { + ri = i + break + } + } + if ri < 0 { + r.Repos = append(r.Repos, RepoState{Path: repo}) + ri = len(r.Repos) - 1 + } + rs := &r.Repos[ri] + for i := range rs.Stages { + if rs.Stages[i].Name == name { + return &rs.Stages[i] + } + } + rs.Stages = append(rs.Stages, StageState{Name: name, Status: result.StatusPending}) + return &rs.Stages[len(rs.Stages)-1] +} + +// finish records the run's outcome, takes the final results from the +// aggregate, and saves it. +func (g *registry) finish(r *Run, agg result.Aggregate, err error, canceled bool) { + g.mu.Lock() + for _, repo := range agg.Repos { + for _, res := range repo.Results { + st := stageOf(r, repo.Path, res.Stage) + st.Status, st.Summary, st.Output, st.Err, st.Duration = res.Status, res.Summary, res.Output, res.Err, res.Duration + } + } + r.Finished = g.now() + switch { + case canceled: + r.Status = RunCanceled + case err != nil: + r.Status, r.Err = RunErrored, err.Error() + case agg.Failed(): + r.Status = RunFailed + default: + r.Status = RunPassed + } + // A stage the run never reached stays pending; say so rather than leave + // it looking queued. + for i := range r.Repos { + for j := range r.Repos[i].Stages { + if st := &r.Repos[i].Stages[j]; st.Status == result.StatusPending || st.Status == result.StatusRunning { + st.Status = result.StatusSkip + if st.Summary == "" { + st.Summary = "not run" + } + } + } + } + if g.active == r { + g.active = nil + } + g.notify(r) + snapshot, _ := json.MarshalIndent(r, "", " ") + g.mu.Unlock() + g.save(r.ID, snapshot) +} + +func (g *registry) save(id string, body []byte) { + if g.dir == "" || len(body) == 0 { + return + } + if err := os.MkdirAll(g.dir, 0o700); err != nil { + return + } + tmp := filepath.Join(g.dir, id+".json.tmp") + if err := os.WriteFile(tmp, body, 0o600); err != nil { + return + } + _ = os.Rename(tmp, filepath.Join(g.dir, id+".json")) +} + +// notify wakes every event stream waiting on r. Callers hold g.mu. +func (g *registry) notify(r *Run) { + if r.changed != nil { + close(r.changed) + } + r.changed = make(chan struct{}) +} + +// cancelRun stops a run in progress. It reports whether there was one to stop. +func (g *registry) cancelRun(id string) bool { + g.mu.Lock() + defer g.mu.Unlock() + r := g.byID[id] + if r == nil || r.Status != RunRunning || r.cancel == nil { + return false + } + r.cancel() + return true +} + +// get returns a copy of a run, safe to render while the run goes on, and the +// channel that closes on its next change. +func (g *registry) get(id string) (Run, <-chan struct{}, bool) { + g.mu.Lock() + defer g.mu.Unlock() + r := g.byID[id] + if r == nil { + return Run{}, nil, false + } + return copyRun(r), r.changed, true +} + +// list returns copies of the runs, newest first, without their output. +func (g *registry) list() []Run { + g.mu.Lock() + defer g.mu.Unlock() + out := make([]Run, 0, len(g.order)) + for _, id := range g.order { + c := copyRun(g.byID[id]) + c.Lines = nil + out = append(out, c) + } + return out +} + +// running returns the run in progress, if any. +func (g *registry) running() (Run, bool) { + g.mu.Lock() + defer g.mu.Unlock() + if g.active == nil { + return Run{}, false + } + return copyRun(g.active), true +} + +func copyRun(r *Run) Run { + c := *r + c.cancel, c.changed = nil, nil + c.Repos = make([]RepoState, len(r.Repos)) + for i, repo := range r.Repos { + c.Repos[i] = RepoState{Path: repo.Path, Stages: append([]StageState(nil), repo.Stages...)} + } + c.Lines = append([]LogLine(nil), r.Lines...) + return c +} + +// wait blocks until no run is in progress. +func (g *registry) wait() { g.wg.Wait() } diff --git a/src/internal/web/security.go b/src/internal/web/security.go new file mode 100644 index 0000000..13ddcdc --- /dev/null +++ b/src/internal/web/security.go @@ -0,0 +1,250 @@ +package web + +import ( + "crypto/rand" + "crypto/subtle" + "encoding/base64" + "net/http" + "net/url" + "strings" + "sync" + "time" +) + +// SessionCookie is the cookie a valid token is exchanged for. +const SessionCookie = "probaci_session" + +// csrfField is the form field, and csrfHeader the request header, that carry +// the per-session CSRF token on every state-changing request. +const ( + csrfField = "csrf" + csrfHeader = "X-CSRF-Token" +) + +// maxSessions bounds the session table. A session is only created by +// presenting the launch token, so this is a ceiling on memory, not a defense. +const maxSessions = 64 + +// ContentSecurityPolicy is sent on every response. Everything is same-origin; +// nothing is inline. img-src allows data: because Tabler's CSS draws its +// checkboxes and selects with data: SVG URLs. +const ContentSecurityPolicy = "default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' data:; " + + "connect-src 'self'; font-src 'self'; form-action 'self'; frame-ancestors 'none'; base-uri 'none'" + +// NewToken returns 32 random bytes, base64url-encoded. +func NewToken() string { + b := make([]byte, 32) + if _, err := rand.Read(b); err != nil { + panic("crypto/rand: " + err.Error()) // rand.Read does not fail on supported platforms + } + return base64.RawURLEncoding.EncodeToString(b) +} + +type session struct { + csrf string + created time.Time +} + +type sessions struct { + mu sync.Mutex + byID map[string]*session +} + +func (s *sessions) create(now time.Time) (id string, sess *session) { + s.mu.Lock() + defer s.mu.Unlock() + if s.byID == nil { + s.byID = map[string]*session{} + } + if len(s.byID) >= maxSessions { + var oldest string + for k, v := range s.byID { + if oldest == "" || v.created.Before(s.byID[oldest].created) { + oldest = k + } + } + delete(s.byID, oldest) + } + id = NewToken() + sess = &session{csrf: NewToken(), created: now} + s.byID[id] = sess + return id, sess +} + +func (s *sessions) get(id string) *session { + s.mu.Lock() + defer s.mu.Unlock() + return s.byID[id] +} + +func equal(a, b string) bool { + return len(a) == len(b) && subtle.ConstantTimeCompare([]byte(a), []byte(b)) == 1 +} + +// securityHeaders sets the headers every response carries, error pages +// included, so they are set before anything else can answer. +func securityHeaders(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + h := w.Header() + h.Set("Content-Security-Policy", ContentSecurityPolicy) + h.Set("X-Content-Type-Options", "nosniff") + h.Set("Referrer-Policy", "same-origin") + h.Set("X-Frame-Options", "DENY") + h.Set("Cross-Origin-Opener-Policy", "same-origin") + h.Set("Cross-Origin-Resource-Policy", "same-origin") + next.ServeHTTP(w, r) + }) +} + +// hostCheck refuses any Host header outside the allowed set. +func (s *Server) hostCheck(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if !s.hostAllowed(r.Host) { + s.renderError(w, r, http.StatusMisdirectedRequest, "Unknown host", + "This server only answers to the address it printed when it started.") + return + } + next.ServeHTTP(w, r) + }) +} + +func (s *Server) hostAllowed(host string) bool { + for _, h := range s.opts.AllowedHosts { + if strings.EqualFold(h, host) { + return true + } + } + return false +} + +// auth admits a request carrying a valid session cookie, exchanges a valid +// ?token= for one, and refuses everything else. Static assets are exempt: +// they are the vendored public Tabler files and the 401 page uses them. +func (s *Server) auth(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if strings.HasPrefix(r.URL.Path, "/assets/") || r.URL.Path == "/favicon.ico" { + next.ServeHTTP(w, r) + return + } + if r.URL.Path == HealthPath { + // A second launch's probe: the token in a header, never a URL, + // and no session is created for it. + if !equal(r.Header.Get(HealthTokenHeader), s.opts.Token) { + http.Error(w, "unauthorized", http.StatusUnauthorized) + return + } + next.ServeHTTP(w, r) + return + } + if tok := r.URL.Query().Get("token"); tok != "" { + if !equal(tok, s.opts.Token) || (r.Method != http.MethodGet && r.Method != http.MethodHead) { + s.renderUnauthorized(w, r) + return + } + id, _ := s.sessions.create(s.now()) + // #nosec G124 -- Secure is set whenever the request came over TLS (s.secure); + // the default loopback server is plain HTTP, where a Secure cookie would + // never be sent back. HttpOnly and SameSite=Strict are always set. + http.SetCookie(w, &http.Cookie{ + Name: SessionCookie, Value: id, Path: "/", + HttpOnly: true, SameSite: http.SameSiteStrictMode, Secure: s.secure(r), + }) + // Strip the token from the address bar and the history. + clean := *r.URL + q := clean.Query() + q.Del("token") + clean.RawQuery = q.Encode() + target := clean.RequestURI() + if !isLocalURL(target) { + // "//host/x" and "/\host/x" name another host. Land on the + // home page instead of following the request off site. + http.Redirect(w, r, "/", http.StatusSeeOther) + return + } + http.Redirect(w, r, target, http.StatusSeeOther) // #nosec G710 -- isLocalURL above admits only a same-origin path + return + } + c, err := r.Cookie(SessionCookie) + if err != nil { + s.renderUnauthorized(w, r) + return + } + sess := s.sessions.get(c.Value) + if sess == nil { + s.renderUnauthorized(w, r) + return + } + next.ServeHTTP(w, r.WithContext(withSession(r.Context(), sess))) + }) +} + +// isLocalURL reports whether target is a same-origin, relative URL: a path +// starting with exactly one slash, which no browser reads as naming a host. +// "//host" is scheme-relative, and browsers treat a backslash after the first +// slash as a second slash, so both are refused, as is anything with a scheme, +// a host or a control character. +func isLocalURL(target string) bool { + if target == "" || target[0] != '/' { + return false + } + if len(target) > 1 && (target[1] == '/' || target[1] == '\\') { + return false + } + for _, c := range target { + if c < 0x20 || c == 0x7f { + return false + } + } + u, err := url.Parse(target) + return err == nil && u.Scheme == "" && u.Host == "" && u.User == nil +} + +func (s *Server) secure(r *http.Request) bool { + return r.TLS != nil || (s.opts.AllowRemote && r.Header.Get("X-Forwarded-Proto") == "https") +} + +// sameOrigin enforces, for every request that can change state, that it came +// from this server's own pages: an Origin matching an allowed host (or, when +// a browser omits Origin, Sec-Fetch-Site: same-origin), and the session's +// CSRF token. SameSite=Strict already stops most cross-site requests; this is +// the second and third lock on the same door. +func (s *Server) sameOrigin(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet, http.MethodHead, http.MethodOptions: + next.ServeHTTP(w, r) + return + } + if !s.originAllowed(r) { + s.renderError(w, r, http.StatusForbidden, "Cross-origin request refused", + "Changes can only be made from this server's own pages.") + return + } + sess := sessionFrom(r.Context()) + token := r.Header.Get(csrfHeader) + if token == "" { + token = r.PostFormValue(csrfField) + } + if sess == nil || !equal(token, sess.csrf) { + s.renderError(w, r, http.StatusForbidden, "Missing or stale form token", + "Reload the page and try again.") + return + } + next.ServeHTTP(w, r) + }) +} + +func (s *Server) originAllowed(r *http.Request) bool { + origin := r.Header.Get("Origin") + if origin == "" || origin == "null" { + // A browser serializes the origin of a same-origin form POST as null + // when the referrer policy is no-referrer, so null passes only with the + // browser's own same-origin verdict. A bare null is refused. + return r.Header.Get("Sec-Fetch-Site") == "same-origin" + } + u, err := url.Parse(origin) + if err != nil || (u.Scheme != "http" && u.Scheme != "https") { + return false + } + return s.hostAllowed(u.Host) && strings.EqualFold(u.Host, r.Host) +} diff --git a/src/internal/web/server.go b/src/internal/web/server.go new file mode 100644 index 0000000..649ff30 --- /dev/null +++ b/src/internal/web/server.go @@ -0,0 +1,218 @@ +// Package web is the `serve` command's localhost web UI. +// +// Server-rendered html/template pages over the same stage engine the CLI and +// the TUI drive, with a little vanilla JavaScript and Tabler's CSS, all +// embedded in the binary: the page makes no network request beyond this +// server. It never imports internal/cli, which holds process-wide flag state a +// long-lived server cannot share; the CLI hands it a Runner instead. +// +// The shape follows the other Simtabi Go web UIs (ichava/icon-sets-sync, +// simtabi/authama): a one-time sign-in token exchanged for a session cookie, +// a Host allowlist, same-origin and CSRF checks on every change, a strict +// Content-Security-Policy, fingerprinted embedded assets, and a --read-only +// mode that does not register the routes that act. +package web + +import ( + "context" + "errors" + "net" + "net/http" + "os" + "path/filepath" + "runtime" + "time" + + "github.com/simtabi/probaci/src/internal/result" + "github.com/simtabi/probaci/src/internal/stage" +) + +// Runner is everything the UI needs from probaci. The CLI implements it over +// pkg/probaci; tests implement it with a fake. +type Runner interface { + // Overview describes the targets and the configured pipeline. It runs + // nothing. + Overview(ctx context.Context) (Overview, error) + + // Run runs the pipeline over every target, sending each engine event to + // obs. Canceling ctx stops it. + Run(ctx context.Context, req RunRequest, obs stage.Observer) (result.Aggregate, error) +} + +// RunRequest is what the run form asks for. +type RunRequest struct { + // Stages to run, in pipeline order. Empty runs every enabled stage. + Stages []string + // Jobs is how many repositories run at once; below 1 means 1. + Jobs int +} + +// Overview is the dashboard's picture of what a run would cover. +type Overview struct { + Repos []RepoInfo + Stages []string // enabled stages, in pipeline order + Docker string // "available", or why containers cannot run + Sources []string // config files that contributed, lowest precedence first + Home string // probaci's configuration home +} + +// RepoInfo is one target repository. +type RepoInfo struct { + Path string + Languages []string +} + +// DefaultHistoryDir is where finished runs are kept: XDG state on every +// platform but Windows, per the house layout ($XDG_STATE_HOME, else +// ~/.local/state; %LocalAppData% on Windows). +func DefaultHistoryDir(lookup func(string) (string, bool)) string { + if lookup == nil { + lookup = os.LookupEnv + } + base, _ := lookup("XDG_STATE_HOME") + if base == "" && runtime.GOOS == "windows" { + base, _ = lookup("LOCALAPPDATA") + } + if base == "" { + home, _ := lookup("HOME") + if home == "" { + home, _ = os.UserHomeDir() + } + if home == "" { + return "" + } + base = filepath.Join(home, ".local", "state") + } + return filepath.Join(base, "probaci", "runs") +} + +// Options configures a Server. +type Options struct { + // Runner runs the pipeline. Required. + Runner Runner + + // Token is the launch token printed in the URL. Required. + Token string + + // AllowedHosts are the Host header values answered (see AllowedHosts). + AllowedHosts []string + + // AllowRemote records that the bind is not loopback; it lets a TLS + // reverse proxy's X-Forwarded-Proto mark the session cookie Secure. + AllowRemote bool + + // ReadOnly registers no route that starts or cancels a run. + ReadOnly bool + + // Version and BindAddr are shown on the settings page. + Version string + BindAddr string + + // HistoryDir keeps finished runs, one JSON file each. Empty keeps them in + // memory only. See DefaultHistoryDir. + HistoryDir string + + // Now is the clock. Nil means time.Now. + Now func() time.Time +} + +// Server is the web UI. +type Server struct { + opts Options + pages *pageSet + assets *assetSet + sessions sessions + handler http.Handler + runs *registry + + // stop is closed by the "Stop server" action. + stop stopper + + // base is canceled on shutdown, stopping a run in progress. + base context.Context + cancel context.CancelFunc +} + +// New builds a Server. It parses every template once, so a template error is +// a startup error rather than a 500 on first visit. +func New(opts Options) (*Server, error) { + if opts.Runner == nil { + return nil, errors.New("web: a Runner is required") + } + if opts.Token == "" { + return nil, errors.New("web: a Token is required") + } + if opts.Now == nil { + opts.Now = time.Now + } + assets, err := loadAssets() + if err != nil { + return nil, err + } + pages, err := parsePages(assets) + if err != nil { + return nil, err + } + s := &Server{opts: opts, pages: pages, assets: assets, stop: stopper{ch: make(chan struct{})}} + s.base, s.cancel = context.WithCancel(context.Background()) + s.runs = newRegistry(opts.HistoryDir, opts.Now) + s.handler = securityHeaders(s.hostCheck(s.auth(s.sameOrigin(s.routes())))) + return s, nil +} + +// Handler returns the full middleware chain and routes. +func (s *Server) Handler() http.Handler { return s.handler } + +func (s *Server) now() time.Time { return s.opts.Now() } + +// Serve answers on ln until ctx is canceled or Stop is called, then shuts +// down with a ten-second grace for requests in flight. +func (s *Server) Serve(ctx context.Context, ln net.Listener) error { + srv := &http.Server{ + Handler: s.handler, + ReadHeaderTimeout: 10 * time.Second, + IdleTimeout: 2 * time.Minute, + } + errc := make(chan error, 1) + go func() { errc <- srv.Serve(ln) }() + + select { + case err := <-errc: + s.cancel() + return err + case <-ctx.Done(): + case <-s.stop.ch: + } + // Cancel the run first: an open event stream only ends when its run + // does, so shutting the server down before it would wait out the grace. + s.cancel() + shutdown, done := context.WithTimeout(context.Background(), 10*time.Second) + defer done() + if err := srv.Shutdown(shutdown); err != nil { + return err + } + s.runs.wait() + if err := <-errc; err != nil && !errors.Is(err, http.ErrServerClosed) { + return err + } + return nil +} + +// Close stops background work without serving; for tests. +func (s *Server) Close() { + s.cancel() + s.runs.wait() +} + +type ctxKey int + +const sessionKey ctxKey = 0 + +func withSession(ctx context.Context, s *session) context.Context { + return context.WithValue(ctx, sessionKey, s) +} + +func sessionFrom(ctx context.Context) *session { + s, _ := ctx.Value(sessionKey).(*session) + return s +} diff --git a/src/internal/web/templates/error.html b/src/internal/web/templates/error.html new file mode 100644 index 0000000..5743bec --- /dev/null +++ b/src/internal/web/templates/error.html @@ -0,0 +1,9 @@ +{{define "content"}}{{with .Data}} +
+

{{.Status}}

+

{{.Heading}}

+

{{.Message}}

+ {{if .Link}} + {{else if $.Authed}}{{end}} +
+{{end}}{{end}} diff --git a/src/internal/web/templates/layout.html b/src/internal/web/templates/layout.html new file mode 100644 index 0000000..1bb6882 --- /dev/null +++ b/src/internal/web/templates/layout.html @@ -0,0 +1,115 @@ +{{define "layout"}} + + + + + + +{{.Title}} · probaci + + + + + + + + +
+ + {{if .Authed}} + + {{end}} +
+
+
+ {{template "content" .}} +
+
+ +
+
+ + + + + +{{end}} + +{{define "navlink"}}{{end}} + +{{define "page_header"}}{{end}} + +{{define "run_badge"}}{{runText .}}{{end}} diff --git a/src/internal/web/templates/licenses.html b/src/internal/web/templates/licenses.html new file mode 100644 index 0000000..09dbd14 --- /dev/null +++ b/src/internal/web/templates/licenses.html @@ -0,0 +1,12 @@ +{{define "content"}} +{{template "page_header" "Third-party licenses"}} +

This page's styles, scripts and icons are third-party software embedded in the binary. Each is MIT-licensed; its full notice follows.

+{{range $i, $l := .Data}} +
+

{{.Package}}

+
+
{{.Text}}
+
+
+{{end}} +{{end}} diff --git a/src/internal/web/templates/overview.html b/src/internal/web/templates/overview.html new file mode 100644 index 0000000..61bbce5 --- /dev/null +++ b/src/internal/web/templates/overview.html @@ -0,0 +1,65 @@ +{{define "content"}}{{with .Data}} +{{template "page_header" "Overview"}} +{{if .Err}}{{end}} +
+
+
+

Repositories

+ {{if .Overview.Repos}} +
+ + + + {{range .Overview.Repos}} + + {{end}} + +
RepositoryLanguages
{{.Path}}{{if .Languages}}{{join .Languages ", "}}{{else}}none detected{{end}}
+
+ {{else}}
No repository to run on.
{{end}} +
+
+ + {{if .Recent}} + + {{else}}
No runs yet.
{{end}} +
+
+
+
+

Run the pipeline

+
+

Containers: {{orDash .Overview.Docker}}

+ {{if $.ReadOnly}} +

{{icon "lock"}} This server was started with --read-only, so it cannot start a run. Run probaci run in a terminal instead.

+ {{else if .Overview.Stages}} +
+ +
+ Stages + {{range .Overview.Stages}} + + {{end}} +
+ {{if gt .MaxJobs 1}} +
+ + +
+ {{end}} + + {{if $.Running}}

A run is in progress. Open it.

{{end}} +
+ {{else}}

No stage is enabled in the configuration.

{{end}} +
+
+
+
+{{end}}{{end}} diff --git a/src/internal/web/templates/run.html b/src/internal/web/templates/run.html new file mode 100644 index 0000000..e8632a7 --- /dev/null +++ b/src/internal/web/templates/run.html @@ -0,0 +1,59 @@ +{{define "content"}}{{with .Data}}{{$run := .Run}} + + +
+
+ {{runText $run.Status}}{{if $run.Err}}: {{$run.Err}}{{end}} + started {{when $run.Started}} · {{($run.Duration .Now).String}} +
+ + {{range $i, $repo := $run.Repos}} +
+

{{$repo.Path}}

+
+ + + + {{range $repo.Stages}} + + + + + + + {{end}} + +
StageResultSummaryTime
{{.Name}}{{.Status}}{{.Summary}}{{if .Err}}
{{.Err}}
{{end}} + {{if .Output}}
Output
{{.Output}}
{{end}}
{{dur .Duration}}
+
+
+ {{end}} + +
+
+

Output

+ {{if $run.Dropped}}{{$run.Dropped}} later lines not kept; the run's log file has them all{{end}} +
+
+
    + {{range $run.Lines}}
  1. {{base .Repo}} {{.Stage}} {{.Text}}
  2. {{else}}
  3. No output yet.
  4. {{end}} +
+
+
+{{end}}{{end}} diff --git a/src/internal/web/templates/runs.html b/src/internal/web/templates/runs.html new file mode 100644 index 0000000..9ea0fc6 --- /dev/null +++ b/src/internal/web/templates/runs.html @@ -0,0 +1,22 @@ +{{define "content"}} +{{template "page_header" "Runs"}} +
+ {{if .Data}} +
+ + + + {{range .Data}} + + + + + + + {{end}} + +
RunStartedStagesResult
{{.ID}}{{when .Started}}{{if .Request.Stages}}{{join .Request.Stages ", "}}{{else}}all{{end}}{{template "run_badge" .Status}}
+
+ {{else}}
No runs yet. Start one from the overview.
{{end}} +
+{{end}} diff --git a/src/internal/web/templates/settings.html b/src/internal/web/templates/settings.html new file mode 100644 index 0000000..8f6eeec --- /dev/null +++ b/src/internal/web/templates/settings.html @@ -0,0 +1,27 @@ +{{define "content"}}{{with .Data}} +{{template "page_header" "Settings"}} +{{if .Err}}{{end}} +
+

This server

+
+
+
Version
{{$.Version}}
+
Listening on
{{orDash .BindAddr}}
+
Mode
{{if $.ReadOnly}}read-only: runs cannot be started or canceled{{else}}runs can be started and canceled{{end}}
+
Run history
{{if .HistoryDir}}{{.HistoryDir}}{{else}}kept in memory only{{end}}
+
+
+
+
+

Configuration

+
+
+
Home
{{orDash .Overview.Home}}
+
Files read
{{if .Overview.Sources}}
    {{range .Overview.Sources}}
  1. {{.}}
  2. {{end}}
{{else}}built-in defaults only{{end}}
+
Containers
{{orDash .Overview.Docker}}
+
Enabled stages
{{if .Overview.Stages}}{{join .Overview.Stages ", "}}{{else}}none{{end}}
+
+

Change the configuration with probaci config or by editing these files; the next run reads them again.

+
+
+{{end}}{{end}} diff --git a/src/internal/web/web_test.go b/src/internal/web/web_test.go new file mode 100644 index 0000000..e5b565a --- /dev/null +++ b/src/internal/web/web_test.go @@ -0,0 +1,374 @@ +package web + +import ( + "bufio" + "bytes" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "net/http" + "net/http/httptest" + "net/url" + "os" + "path/filepath" + "regexp" + "strings" + "testing" + "time" + + "github.com/simtabi/probaci/src/internal/result" +) + +// pages is every page a signed-in browser can open, with one run recorded so +// the run page exists. The count is asserted, so a page dropped from this +// list fails rather than going untested. +func pages(t *testing.T, c *client, id string) []string { + t.Helper() + ps := []string{"/", "/runs", "/runs/" + id, "/settings", "/about/licenses"} + names, err := pageNames() + if err != nil { + t.Fatal(err) + } + // Every template but "error" has a route above. + if len(ps) != len(names)-1 { + t.Fatalf("%d pages listed, %d templates (%v): add the new page here", len(ps), len(names), names) + } + return ps +} + +var faviconLink = regexp.MustCompile(``) + +// Every page links the favicon as SVG, and the linked asset answers 200 as +// image/svg+xml: the house rule for every Go web UI. +func TestEveryPageLinksTheFavicon(t *testing.T) { + s, _ := newTestServer(t) + c := signIn(t, s) + id := c.startRun("detect") + waitDone(t, s, id) + + checked := 0 + for _, p := range append(pages(t, c, id), "/no-such-page") { + rec := c.get(p) + m := faviconLink.FindStringSubmatch(rec.Body.String()) + if m == nil { + t.Errorf("%s (%d) has no SVG favicon link", p, rec.Code) + continue + } + icon := c.get(m[1]) + if icon.Code != http.StatusOK || icon.Header().Get("Content-Type") != "image/svg+xml" { + t.Errorf("%s: favicon answered %d %q", p, icon.Code, icon.Header().Get("Content-Type")) + } + checked++ + } + if checked < 6 { + t.Fatalf("checked %d pages, want at least 6", checked) + } + // The sign-in page a browser without a session sees links it too. + if rec := do(s, httptest.NewRequest(http.MethodGet, "/", nil)); !faviconLink.MatchString(rec.Body.String()) { + t.Error("the 401 page has no favicon link") + } +} + +// The favicon is the logo mark: a primary rounded square on a 32x32 box with +// a white glyph, and /favicon.ico serves it without a session. +func TestFaviconIsTheLogoMark(t *testing.T) { + s, _ := newTestServer(t) + svg := string(s.assets.files[faviconAsset]) + for _, want := range []string{`viewBox="0 0 32 32"`, `rx="7"`, `fill="#066fd1"`, `stroke="#fff"`} { + if !strings.Contains(svg, want) { + t.Errorf("favicon.svg lacks %s", want) + } + } + rec := do(s, httptest.NewRequest(http.MethodGet, "/favicon.ico", nil)) + if rec.Code != http.StatusOK || rec.Header().Get("Content-Type") != "image/svg+xml" || rec.Body.String() != svg { + t.Errorf("/favicon.ico answered %d %q", rec.Code, rec.Header().Get("Content-Type")) + } +} + +func TestEveryPageRendersAndCarriesTheSecurityHeaders(t *testing.T) { + s, _ := newTestServer(t) + c := signIn(t, s) + id := c.startRun("detect", "lint") + waitDone(t, s, id) + for _, p := range pages(t, c, id) { + rec := c.get(p) + if rec.Code != http.StatusOK { + t.Errorf("%s: status %d", p, rec.Code) + } + if rec.Header().Get("Content-Security-Policy") != ContentSecurityPolicy { + t.Errorf("%s: no CSP", p) + } + if strings.Contains(rec.Body.String(), "